diff options
author | Scott Jackson <daneren2005@gmail.com> | 2015-07-18 18:19:13 -0700 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2015-07-18 18:19:13 -0700 |
commit | 569281e423b93cf67db2141b49f04103036d4db5 (patch) | |
tree | af0def4c718a3ae42841b45bbae0c24c936befed /app/src/main/java/github/daneren2005/dsub/adapter | |
parent | 32ab835977f1544dd299508f66861881528004be (diff) | |
download | dsub-569281e423b93cf67db2141b49f04103036d4db5.tar.gz dsub-569281e423b93cf67db2141b49f04103036d4db5.tar.bz2 dsub-569281e423b93cf67db2141b49f04103036d4db5.zip |
Update action mode to support albums, color when selected
Diffstat (limited to 'app/src/main/java/github/daneren2005/dsub/adapter')
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java | 3 | ||||
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java | 53 |
2 files changed, 36 insertions, 20 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java index 0c699b89..a0008a73 100644 --- a/app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java +++ b/app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java @@ -59,6 +59,7 @@ public class EntryGridAdapter extends SectionAdapter<Entry> { showArtist = true; } } + checkable = true; } @Override @@ -82,7 +83,7 @@ public class EntryGridAdapter extends SectionAdapter<Entry> { albumView.setObject(entry, imageLoader); } else if(viewType == VIEW_TYPE_SONG) { SongView songView = (SongView) view; - songView.setObject(entry, checkable && !entry.isVideo() && currentActionMode != null); + songView.setObject(entry, checkable && !entry.isVideo()); } } diff --git a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java index 93c55985..9d577409 100644 --- a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java +++ b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java @@ -32,6 +32,7 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -52,8 +53,9 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH protected boolean singleSectionHeader; protected OnItemClickedListener<T> onItemClickedListener; protected List<T> selected = new ArrayList<>(); + protected List<UpdateView> selectedViews = new ArrayList<>(); protected ActionMode currentActionMode; - protected boolean checkable = true; + protected boolean checkable = false; protected SectionAdapter() {} public SectionAdapter(Context context, List<T> section) { @@ -101,19 +103,23 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH public void onClick(View v) { T item = holder.getItem(); updateView.onClick(); - if (updateView.isCheckable() && currentActionMode != null) { - if (selected.contains(item)) { - selected.remove(item); - setChecked(updateView, false); - } else { - selected.add(item); - setChecked(updateView, true); - } - - if(selected.isEmpty()) { - currentActionMode.finish(); - } else { - currentActionMode.setTitle(context.getResources().getString(R.string.select_album_n_selected, selected.size())); + if (currentActionMode != null) { + if(updateView.isCheckable()) { + if (selected.contains(item)) { + selected.remove(item); + selectedViews.remove(updateView); + setChecked(updateView, false); + } else { + selected.add(item); + selectedViews.add(updateView); + setChecked(updateView, true); + } + + if (selected.isEmpty()) { + currentActionMode.finish(); + } else { + currentActionMode.setTitle(context.getResources().getString(R.string.select_album_n_selected, selected.size())); + } } } else if (onItemClickedListener != null) { onItemClickedListener.onItemClicked(item); @@ -149,7 +155,11 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH updateView.getChildAt(0).setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - startActionMode(holder); + if(currentActionMode == null) { + startActionMode(holder); + } else { + updateView.getChildAt(0).performClick(); + } return true; } }); @@ -321,10 +331,12 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH if(singleSectionHeader) { index++; } - - this.notifyItemChanged(index); } selected.clear(); + + for(UpdateView updateView: selectedViews) { + updateView.setChecked(false); + } } public void removeItem(T item) { @@ -369,9 +381,9 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH T item = holder.getItem(); selected.add(item); + selectedViews.add(updateView); setChecked(updateView, true); - notifyDataSetChanged(); mode.setTitle(context.getResources().getString(R.string.select_album_n_selected, selected.size())); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { TypedValue typedValue = new TypedValue(); @@ -406,7 +418,10 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH public void onDestroyActionMode(ActionMode mode) { currentActionMode = null; selected.clear(); - notifyDataSetChanged(); + for(UpdateView<T> updateView: selectedViews) { + updateView.setChecked(false); + } + selectedViews.clear(); Window window = ((SubsonicFragmentActivity) context).getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); |