[Android] Implement the default playback action for video
Nicolas Pomepuy
git at videolan.org
Tue Mar 25 11:55:47 UTC 2025
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Mar 18 09:09:57 2025 +0100| [e6ea5245ea88ef4fac8f01e668b3acd4bf34453b] | committer: Nicolas Pomepuy
Implement the default playback action for video
> https://code.videolan.org/videolan/vlc-android/commit/e6ea5245ea88ef4fac8f01e668b3acd4bf34453b
---
.../resources/src/main/res/values/strings.xml | 1 +
.../vlc/gui/helpers/DefaultPlaybackAction.kt | 2 +-
.../videolan/vlc/gui/video/VideoGridFragment.kt | 28 +++++++++++++++-------
.../vlc/viewmodels/mobile/VideosViewModel.kt | 5 +---
4 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index 7129aa4873..904d203e43 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -763,6 +763,7 @@
<string name="episodes">episodes</string>
<string name="movies">movies</string>
<string name="videos">videos</string>
+ <string name="default_action_videos">Videos</string>
<string name="videos_all">All videos</string>
<string name="clear_playback_history">Clear playback history</string>
<string name="ml_scanning">Scanning for media files</string>
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/helpers/DefaultPlaybackAction.kt b/application/vlc-android/src/org/videolan/vlc/gui/helpers/DefaultPlaybackAction.kt
index 27ae4be540..52ddb253d4 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/helpers/DefaultPlaybackAction.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/helpers/DefaultPlaybackAction.kt
@@ -70,7 +70,7 @@ enum class DefaultPlaybackAction(@StringRes val title: Int, var selected: Boolea
* @constructor Create empty Default playback action media type
*/
enum class DefaultPlaybackActionMediaType(@StringRes val title: Int, val defaultActionKey: String, val allowPlayAll: Boolean = true) {
- VIDEO(R.string.videos, "default_playback_action_video"),
+ VIDEO(R.string.default_action_videos, "default_playback_action_video"),
ARTIST(R.string.artists, "default_playback_action_artist", false),
ALBUM(R.string.albums, "default_playback_action_album", false),
TRACK(R.string.tracks, "default_playback_action_track"),
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.kt
index 77bf425a2d..9a38654da3 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.kt
@@ -69,7 +69,6 @@ import org.videolan.resources.PLAYLIST_TYPE_VIDEO
import org.videolan.resources.UPDATE_SEEN
import org.videolan.resources.util.parcelable
import org.videolan.resources.util.parcelableArray
-import org.videolan.resources.util.parcelableList
import org.videolan.resources.util.waitForML
import org.videolan.tools.MultiSelectHelper
import org.videolan.tools.PLAYBACK_HISTORY
@@ -89,6 +88,7 @@ import org.videolan.vlc.gui.dialogs.CONFIRM_PERMISSION_CHANGED
import org.videolan.vlc.gui.dialogs.CONFIRM_RENAME_DIALOG_RESULT
import org.videolan.vlc.gui.dialogs.CURRENT_SORT
import org.videolan.vlc.gui.dialogs.CtxActionReceiver
+import org.videolan.vlc.gui.dialogs.DEFAULT_ACTIONS
import org.videolan.vlc.gui.dialogs.DISPLAY_IN_CARDS
import org.videolan.vlc.gui.dialogs.DisplaySettingsDialog
import org.videolan.vlc.gui.dialogs.KEY_PERMISSION_CHANGED
@@ -100,6 +100,8 @@ import org.videolan.vlc.gui.dialogs.SavePlaylistDialog
import org.videolan.vlc.gui.dialogs.VIDEO_GROUPING
import org.videolan.vlc.gui.dialogs.showContext
import org.videolan.vlc.gui.helpers.AudioUtil.setRingtone
+import org.videolan.vlc.gui.helpers.DefaultPlaybackAction
+import org.videolan.vlc.gui.helpers.DefaultPlaybackActionMediaType
import org.videolan.vlc.gui.helpers.ItemOffsetDecoration
import org.videolan.vlc.gui.helpers.MedialibraryUtils
import org.videolan.vlc.gui.helpers.UiTools
@@ -274,12 +276,14 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
}
//Open the display settings Bottom sheet
DisplaySettingsDialog.newInstance(
- displayInCards = settings.getBoolean(KEY_VIDEOS_CARDS, true),
- onlyFavs = viewModel.provider.onlyFavorites,
- sorts = sorts,
- currentSort = viewModel.provider.sort,
- currentSortDesc = viewModel.provider.desc,
- videoGroup = settings.getString(KEY_GROUP_VIDEOS, GROUP_VIDEOS_NAME)
+ displayInCards = settings.getBoolean(KEY_VIDEOS_CARDS, true),
+ onlyFavs = viewModel.provider.onlyFavorites,
+ sorts = sorts,
+ currentSort = viewModel.provider.sort,
+ currentSortDesc = viewModel.provider.desc,
+ videoGroup = settings.getString(KEY_GROUP_VIDEOS, GROUP_VIDEOS_NAME),
+ defaultPlaybackActions = DefaultPlaybackActionMediaType.VIDEO.getDefaultPlaybackActions(settings),
+ defaultActionType = getString(DefaultPlaybackActionMediaType.VIDEO.title)
)
.show(requireActivity().supportFragmentManager, "DisplaySettingsDialog")
}
@@ -370,6 +374,9 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
settings.putSingle(KEY_GROUP_VIDEOS, videoGroup.value)
changeGroupingType(videoGroup.type)
}
+ DEFAULT_ACTIONS -> {
+ Settings.getInstance(requireActivity()).putSingle(DefaultPlaybackActionMediaType.VIDEO.defaultActionKey, (value as DefaultPlaybackAction).name)
+ }
}
}
@@ -764,7 +771,12 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
multiSelectHelper.toggleSelection(position)
invalidateActionMode()
} else {
- viewModel.playVideo(activity, item, position)
+ when(DefaultPlaybackActionMediaType.VIDEO.getCurrentPlaybackAction(settings)) {
+ DefaultPlaybackAction.PLAY -> viewModel.playVideo(activity, item, position)
+ DefaultPlaybackAction.ADD_TO_QUEUE -> MediaUtils.appendMedia(activity, item)
+ DefaultPlaybackAction.INSERT_NEXT -> MediaUtils.insertNext(activity, item)
+ else -> viewModel.playVideo(activity, item, position, forceAll = true)
+ }
}
}
is Folder -> {
diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
index 8d59931811..7905e0730a 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/mobile/VideosViewModel.kt
@@ -32,8 +32,6 @@ import org.videolan.medialibrary.interfaces.media.Folder
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.interfaces.media.VideoGroup
import org.videolan.medialibrary.media.MediaLibraryItem
-import org.videolan.tools.PLAYLIST_MODE_VIDEO
-import org.videolan.tools.Settings
import org.videolan.tools.isStarted
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.UiTools.addToPlaylist
@@ -136,8 +134,7 @@ class VideosViewModel(context: Context, type: VideoGroupingType, val folder: Fol
}
mw.removeFlags(MediaWrapper.MEDIA_FORCE_AUDIO)
PlaylistManager.playingAsAudio = false
- val settings = Settings.getInstance(context)
- if (!fromStart && (settings.getBoolean(PLAYLIST_MODE_VIDEO, Settings.tvUI) || forceAll)) {
+ if (forceAll) {
when(val prov = provider) {
is VideosProvider -> MediaUtils.playAll(context, prov, position, false)
is FoldersProvider -> MediaUtils.playAllTracks(context, prov, position, false)
More information about the Android
mailing list