Skip to content
Snippets Groups Projects
Commit 32edb614 authored by Geoffrey Métais's avatar Geoffrey Métais
Browse files

Refactor multiselect in video

parent e62f15f4
No related branches found
No related tags found
No related merge requests found
......@@ -47,6 +47,7 @@ import android.view.ViewGroup;
import org.videolan.medialibrary.Medialibrary;
import org.videolan.medialibrary.media.MediaLibraryItem;
import org.videolan.medialibrary.media.MediaWrapper;
import org.videolan.tools.MultiSelectHelper;
import org.videolan.vlc.MediaParsingServiceKt;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
......@@ -74,6 +75,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
private final static String TAG = "VLC/VideoListFragment";
private VideoListAdapter mAdapter;
private MultiSelectHelper<MediaWrapper> multiSelectHelper;
private VideoGridBinding mBinding;
private String mGroup;
......@@ -84,6 +86,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
final SharedPreferences preferences = Settings.INSTANCE.getInstance(requireContext());
final boolean seenMarkVisible = preferences.getBoolean("media_seen", true);
mAdapter = new VideoListAdapter(this, seenMarkVisible);
multiSelectHelper = mAdapter.getMultiSelectHelper();
viewModel = ViewModelProviders.of(requireActivity(), new VideosModel.Factory(requireContext(), mGroup, 0, Medialibrary.SORT_DEFAULT, null)).get(VideosModel.class);
viewModel.getDataset().observe(this, this);
}
......@@ -243,7 +246,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
final int count = mAdapter.getSelectionCount();
final int count = multiSelectHelper.getSelectionCount();
if (count == 0) {
stopActionMode();
return false;
......@@ -255,7 +258,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
final List<MediaWrapper> list = mAdapter.getSelection();
final List<MediaWrapper> list = multiSelectHelper.getSelection();
if (!list.isEmpty()) {
switch (item.getItemId()) {
case R.id.action_video_play:
......@@ -272,11 +275,10 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
// removeVideo(position, rowsAdapter.getItem(position));
// break;
case R.id.action_video_download_subtitles:
MediaUtils.INSTANCE.getSubs(getActivity(), list);
MediaUtils.INSTANCE.getSubs(requireActivity(), list);
break;
case R.id.action_video_play_audio:
for (MediaWrapper media : list)
media.addFlags(MediaWrapper.MEDIA_FORCE_AUDIO);
for (MediaWrapper media : list) media.addFlags(MediaWrapper.MEDIA_FORCE_AUDIO);
MediaUtils.INSTANCE.openList(getActivity(), list, 0);
break;
default:
......@@ -292,15 +294,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
setFabPlayVisibility(true);
final List<MediaWrapper> items = mAdapter.getAll();
for (int i = 0; i < items.size(); ++i) {
final MediaWrapper mw = items.get(i);
if (mw.hasStateFlags(MediaLibraryItem.FLAG_SELECTED)) {
mw.removeStateFlags(MediaLibraryItem.FLAG_SELECTED);
mAdapter.resetSelectionCount();
mAdapter.notifyItemChanged(i, Constants.UPDATE_SELECTION);
}
}
multiSelectHelper.clearSelection();
}
private static final int UPDATE_LIST = 14;
......@@ -331,9 +325,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
public void onClick(View v, int position, MediaLibraryItem item) {
final MediaWrapper media = (MediaWrapper) item;
if (mActionMode != null) {
item.toggleStateFlag(MediaLibraryItem.FLAG_SELECTED);
mAdapter.updateSelectionCount(item.hasStateFlags(MediaLibraryItem.FLAG_SELECTED));
mAdapter.notifyItemChanged(position, Constants.UPDATE_SELECTION);
multiSelectHelper.toggleSelection(position);
invalidateActionMode();
return;
}
......@@ -356,9 +348,7 @@ public class VideoGridFragment extends MediaBrowserFragment<VideosModel> impleme
@Override
public boolean onLongClick(View v, int position, MediaLibraryItem item) {
if (mActionMode != null) return false;
item.toggleStateFlag(MediaLibraryItem.FLAG_SELECTED);
mAdapter.updateSelectionCount(item.hasStateFlags(MediaLibraryItem.FLAG_SELECTED));
mAdapter.notifyItemChanged(position, Constants.UPDATE_SELECTION);
multiSelectHelper.toggleSelection(position);
startActionMode();
return true;
}
......
......@@ -20,11 +20,12 @@
package org.videolan.vlc.gui.video;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.databinding.BindingAdapter;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.os.Build;
import android.support.annotation.MainThread;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager;
......@@ -36,11 +37,11 @@ import android.widget.ImageView;
import org.videolan.libvlc.util.AndroidUtil;
import org.videolan.medialibrary.Tools;
import org.videolan.medialibrary.media.MediaLibraryItem;
import org.videolan.medialibrary.media.MediaWrapper;
import org.videolan.tools.MultiSelectAdapter;
import org.videolan.tools.MultiSelectHelper;
import org.videolan.vlc.BR;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.gui.DiffUtilAdapter;
import org.videolan.vlc.gui.helpers.ImageLoaderKt;
import org.videolan.vlc.gui.helpers.SelectorViewHolder;
......@@ -51,22 +52,23 @@ import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.MediaItemDiffCallback;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAdapter.ViewHolder> {
public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAdapter.ViewHolder> implements MultiSelectAdapter<MediaWrapper> {
public final static String TAG = "VLC/VideoListAdapter";
private boolean mListMode = false;
private IEventsHandler mEventsHandler;
private int mSelectionCount = 0;
private int mGridCardWidth = 0;
private boolean mIsSeenMediaMarkerVisible;
private MultiSelectHelper<MediaWrapper> multiSelectHelper;
VideoListAdapter(IEventsHandler eventsHandler, boolean seenMarkVisible) {
super();
multiSelectHelper = new MultiSelectHelper<>(this, Constants.UPDATE_SELECTION);
mEventsHandler = eventsHandler;
mIsSeenMediaMarkerVisible = seenMarkVisible;
}
......@@ -92,7 +94,7 @@ public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAda
holder.binding.setVariable(BR.scaleType, ImageView.ScaleType.CENTER_CROP);
fillView(holder, media);
holder.binding.setVariable(BR.media, media);
holder.selectView(media.hasStateFlags(MediaLibraryItem.FLAG_SELECTED));
holder.selectView(multiSelectHelper.isSelected(position));
}
@Override
......@@ -110,7 +112,7 @@ public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAda
fillView(holder, media);
break;
case Constants.UPDATE_SELECTION:
holder.selectView(media.hasStateFlags(MediaLibraryItem.FLAG_SELECTED));
holder.selectView(multiSelectHelper.isSelected(position));
break;
}
}
......@@ -139,34 +141,8 @@ public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAda
return getDataset();
}
List<MediaWrapper> getSelection() {
final List<MediaWrapper> selection = new LinkedList<>();
for (int i = 0; i < getDataset().size(); ++i) {
MediaWrapper mw = getDataset().get(i);
if (mw.hasStateFlags(MediaLibraryItem.FLAG_SELECTED)) {
if (mw instanceof MediaGroup)
selection.addAll(((MediaGroup) mw).getAll());
else
selection.add(mw);
}
}
return selection;
}
@MainThread
int getSelectionCount() {
return mSelectionCount;
}
@MainThread
void resetSelectionCount() {
mSelectionCount = 0;
}
@MainThread
void updateSelectionCount(boolean selected) {
mSelectionCount += selected ? 1 : -1;
public MultiSelectHelper<MediaWrapper> getMultiSelectHelper() {
return multiSelectHelper;
}
@MainThread
......@@ -175,8 +151,8 @@ public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAda
}
private void fillView(ViewHolder holder, MediaWrapper media) {
String text = "";
String resolution = "";
String text;
String resolution;
int max = 0;
int progress = 0;
long seen = 0L;
......@@ -250,6 +226,7 @@ public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAda
public class ViewHolder extends SelectorViewHolder<ViewDataBinding> implements View.OnFocusChangeListener {
private ImageView thumbView;
@TargetApi(Build.VERSION_CODES.M)
public ViewHolder(ViewDataBinding binding) {
super(binding);
thumbView = itemView.findViewById(R.id.ml_item_thumbnail);
......@@ -289,7 +266,7 @@ public class VideoListAdapter extends DiffUtilAdapter<MediaWrapper, VideoListAda
@Override
protected boolean isSelected() {
return getDataset().get(getLayoutPosition()).hasStateFlags(MediaLibraryItem.FLAG_SELECTED);
return multiSelectHelper.isSelected(getLayoutPosition());
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment