aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java')
-rw-r--r--app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java86
1 files changed, 74 insertions, 12 deletions
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 6f5def3e..b5592520 100644
--- a/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java
+++ b/app/src/main/java/github/daneren2005/dsub/adapter/SectionAdapter.java
@@ -18,7 +18,9 @@ package github.daneren2005.dsub.adapter;
import android.content.Context;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
import android.util.Log;
+import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -30,6 +32,7 @@ import java.util.Arrays;
import java.util.List;
import github.daneren2005.dsub.R;
+import github.daneren2005.dsub.activity.SubsonicFragmentActivity;
import github.daneren2005.dsub.view.BasicHeaderView;
import github.daneren2005.dsub.view.UpdateView;
import github.daneren2005.dsub.view.UpdateView.UpdateViewHolder;
@@ -43,7 +46,9 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH
protected List<List<T>> sections;
protected boolean singleSectionHeader;
protected OnItemClickedListener<T> onItemClickedListener;
- private List<T> selected = new ArrayList<>();
+ protected List<T> selected = new ArrayList<>();
+ protected ActionMode currentActionMode;
+ protected boolean checkable = true;
protected SectionAdapter() {}
public SectionAdapter(Context context, List<T> section) {
@@ -80,7 +85,7 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH
public void onClick(View v) {
T item = holder.getItem();
updateView.onClick();
- if (updateView.isCheckable()) {
+ if (updateView.isCheckable() && currentActionMode != null) {
if (selected.contains(item)) {
selected.remove(item);
setChecked(updateView, false);
@@ -88,6 +93,12 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH
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()));
+ }
} else if (onItemClickedListener != null) {
onItemClickedListener.onItemClicked(item);
}
@@ -118,15 +129,15 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH
}
});
- /*updateView.getChildAt(0).setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- T item = holder.getItem();
- setContextItem(updateView, item);
- v.showContextMenu();
- return false;
- }
- });*/
+ if(checkable) {
+ updateView.getChildAt(0).setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ startActionMode(holder);
+ return true;
+ }
+ });
+ }
}
}
@@ -321,7 +332,58 @@ public abstract class SectionAdapter<T> extends RecyclerView.Adapter<UpdateViewH
public abstract UpdateView.UpdateViewHolder onCreateSectionViewHolder(ViewGroup parent, int viewType);
public abstract void onBindViewHolder(UpdateViewHolder holder, T item, int viewType);
public abstract int getItemViewType(T item);
- public void setChecked(UpdateView updateView, boolean checked) {}
+ public void setCheckable(boolean checkable) {
+ this.checkable = checkable;
+ }
+ public void setChecked(UpdateView updateView, boolean checked) {
+ updateView.setChecked(checked);
+ }
+
+ private void startActionMode(final UpdateView.UpdateViewHolder<T> holder) {
+ final UpdateView<T> updateView = holder.getUpdateView();
+ if (context instanceof SubsonicFragmentActivity && currentActionMode == null) {
+ final SubsonicFragmentActivity fragmentActivity = (SubsonicFragmentActivity) context;
+ Toolbar toolbar = fragmentActivity.getActiveToolbar();
+
+ toolbar.startActionMode(new ActionMode.Callback() {
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ currentActionMode = mode;
+ fragmentActivity.onCreateOptionsMenu(menu);
+
+ T item = holder.getItem();
+ selected.add(item);
+ setChecked(updateView, true);
+
+ notifyDataSetChanged();
+ mode.setTitle(context.getResources().getString(R.string.select_album_n_selected, selected.size()));
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ if (fragmentActivity.onOptionsItemSelected(item)) {
+ currentActionMode.finish();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ currentActionMode = null;
+ selected.clear();
+ notifyDataSetChanged();
+ }
+ });
+ }
+ }
public interface OnItemClickedListener<T> {
void onItemClicked(T item);