[Android] Allow moving videos from a group to another
Nicolas Pomepuy
git at videolan.org
Tue Nov 3 15:47:09 CET 2020
vlc-android | branch: 3.3.x | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Oct 22 10:28:37 2020 +0200| [369dede275845ced5768dc7c7c1f18382afad93a] | committer: Nicolas Pomepuy
Allow moving videos from a group to another
(cherry picked from commit 8c991851b9195ff1ae996a7017a3519f0af8d1ba)
> https://code.videolan.org/videolan/vlc-android/commit/369dede275845ced5768dc7c7c1f18382afad93a
---
.../vlc-android/res/menu/action_mode_video.xml | 6 ++++++
.../videolan/vlc/gui/dialogs/AddToGroupDialog.kt | 8 ++++++--
.../videolan/vlc/gui/video/VideoGridFragment.kt | 22 +++++++++++++++-------
3 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/application/vlc-android/res/menu/action_mode_video.xml b/application/vlc-android/res/menu/action_mode_video.xml
index 5c4594d0a..535cec616 100644
--- a/application/vlc-android/res/menu/action_mode_video.xml
+++ b/application/vlc-android/res/menu/action_mode_video.xml
@@ -48,4 +48,10 @@
android:title="@string/remove_from_group"
android:icon="@drawable/ic_remove_from_group"
app:showAsAction="ifRoom" />
+
+ <item
+ android:id="@+id/action_add_to_group"
+ android:title="@string/add_to_group"
+ android:icon="@drawable/ic_add_to_group"
+ app:showAsAction="always" />
</menu>
\ No newline at end of file
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/AddToGroupDialog.kt b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/AddToGroupDialog.kt
index 9d416374f..b798e6145 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/dialogs/AddToGroupDialog.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/dialogs/AddToGroupDialog.kt
@@ -28,9 +28,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.ObsoleteCoroutinesApi
import kotlinx.coroutines.launch
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
@@ -48,6 +49,8 @@ import org.videolan.vlc.viewmodels.mobile.VideoGroupingType
import org.videolan.vlc.viewmodels.mobile.VideosViewModel
import java.util.*
+ at ExperimentalCoroutinesApi
+ at ObsoleteCoroutinesApi
class AddToGroupDialog : VLCBottomSheetDialogFragment(), SimpleAdapter.ClickHandler {
override fun getDefaultState(): Int = STATE_EXPANDED
@@ -98,7 +101,8 @@ class AddToGroupDialog : VLCBottomSheetDialogFragment(), SimpleAdapter.ClickHand
binding.list.layoutManager = LinearLayoutManager(view.context)
binding.list.adapter = adapter
- val viewModel = ViewModelProvider(requireActivity(), VideosViewModel.Factory(requireContext(), VideoGroupingType.NAME, null, null)).get(VideosViewModel::class.java)
+ //we have to create the viewmodel that way to avoid the cache from ViewModelProvider which will send the model from the calling activity that may have a different groupingType
+ val viewModel = VideosViewModel.Factory(requireContext(), VideoGroupingType.NAME, null, null).create(VideosViewModel::class.java)
viewModel.provider.pagedList.observe(viewLifecycleOwner, {
adapter.submitList(it.filter { group -> group is VideoGroup && group.mediaCount() > 1 }.apply {
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 32867e746..59a2805e4 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
@@ -322,6 +322,7 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
menu.findItem(R.id.action_video_append).isVisible = PlaylistManager.hasMedia()
menu.findItem(R.id.action_video_info).isVisible = count == 1
menu.findItem(R.id.action_remove_from_group).isVisible = viewModel.group != null
+ menu.findItem(R.id.action_add_to_group).isVisible = viewModel.group != null && count > 1
}
VideoGroupingType.NAME -> {
menu.findItem(R.id.action_ungroup).isVisible = !multiSelectHelper.getSelection().any { it !is VideoGroup }
@@ -358,6 +359,7 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
R.id.action_video_delete -> removeItems(list)
R.id.action_remove_from_group -> viewModel.removeFromGroup(list)
R.id.action_ungroup -> viewModel.ungroup(list)
+ R.id.action_add_to_group -> addToGroup(list)
else -> {
stopActionMode()
return false
@@ -386,13 +388,7 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
R.id.action_group_similar -> lifecycleScope.launch { viewModel.groupSimilar(selection.getAll().first()) }
R.id.action_ungroup -> viewModel.ungroup(selection.first() as VideoGroup)
R.id.action_rename -> renameGroup(selection.first() as VideoGroup)
- R.id.action_add_to_group -> requireActivity().addToGroup(selection.getAll()) {
- lifecycleScope.launch {
- viewModel.createGroup(selection.getAll())?.let {
- activity?.open(it)
- }
- }
- }
+ R.id.action_add_to_group -> addToGroup(selection)
else -> return false
}
}
@@ -401,6 +397,18 @@ class VideoGridFragment : MediaBrowserFragment<VideosViewModel>(), SwipeRefreshL
return true
}
+ private fun addToGroup(selection: List<MediaLibraryItem>) {
+ requireActivity().addToGroup(selection.getAll()) {
+ lifecycleScope.launch {
+ viewModel.createGroup(selection.getAll())?.let {
+ // we already are in a group. Finishing to avoid stacking multiple group activities
+ if (viewModel.groupingType == VideoGroupingType.NONE) requireActivity().finish()
+ activity?.open(it)
+ }
+ }
+ }
+ }
+
override fun onDestroyActionMode(mode: ActionMode) {
actionMode = null
setFabPlayVisibility(true)
More information about the Android
mailing list