From a78354743c4862c8faac3e925176f86a78df9d63 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Thu, 2 Jul 2015 18:02:38 -0700 Subject: #332 Start of long multi select --- .../dsub/activity/SubsonicFragmentActivity.java | 4 + .../daneren2005/dsub/adapter/EntryGridAdapter.java | 13 +--- .../daneren2005/dsub/adapter/SectionAdapter.java | 86 +++++++++++++++++++--- .../dsub/fragments/SelectDirectoryFragment.java | 13 ++++ .../github/daneren2005/dsub/view/SongView.java | 16 +--- .../github/daneren2005/dsub/view/UpdateView.java | 4 + 6 files changed, 99 insertions(+), 37 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java b/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java index 43bd15c7..0e9101f8 100644 --- a/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java +++ b/app/src/main/java/github/daneren2005/dsub/activity/SubsonicFragmentActivity.java @@ -838,4 +838,8 @@ public class SubsonicFragmentActivity extends SubsonicActivity { } } } + + public Toolbar getActiveToolbar() { + return slideUpPanel.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED ? nowPlayingToolbar : mainToolbar; + } } 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 48b278ec..0c699b89 100644 --- a/app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java +++ b/app/src/main/java/github/daneren2005/dsub/adapter/EntryGridAdapter.java @@ -41,7 +41,6 @@ public class EntryGridAdapter extends SectionAdapter { private ImageLoader imageLoader; private boolean largeAlbums; private boolean showArtist = false; - private boolean checkable = true; private View header; public EntryGridAdapter(Context context, List entries, ImageLoader imageLoader, boolean largeCell) { @@ -83,14 +82,7 @@ public class EntryGridAdapter extends SectionAdapter { albumView.setObject(entry, imageLoader); } else if(viewType == VIEW_TYPE_SONG) { SongView songView = (SongView) view; - songView.setObject(entry, checkable && !entry.isVideo()); - } - } - - @Override - public void setChecked(UpdateView updateView, boolean checked) { - if(updateView instanceof SongView) { - ((SongView) updateView).setChecked(checked); + songView.setObject(entry, checkable && !entry.isVideo() && currentActionMode != null); } } @@ -122,9 +114,6 @@ public class EntryGridAdapter extends SectionAdapter { public void setShowArtist(boolean showArtist) { this.showArtist = showArtist; } - public void setCheckable(boolean checkable) { - this.checkable = checkable; - } public void removeAt(int index) { sections.get(0).remove(index); 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 extends RecyclerView.Adapter> sections; protected boolean singleSectionHeader; protected OnItemClickedListener onItemClickedListener; - private List selected = new ArrayList<>(); + protected List selected = new ArrayList<>(); + protected ActionMode currentActionMode; + protected boolean checkable = true; protected SectionAdapter() {} public SectionAdapter(Context context, List section) { @@ -80,7 +85,7 @@ public abstract class SectionAdapter extends RecyclerView.Adapter extends RecyclerView.Adapter extends RecyclerView.Adapter extends RecyclerView.Adapter holder) { + final UpdateView 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 { void onItemClicked(T item); diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index 9f66a27e..ed6afd46 100644 --- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -420,6 +420,19 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section } playNow(Arrays.asList(entry)); + } else { + List songs = new ArrayList(); + + if(Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_PLAY_NOW_AFTER, false)) { + Iterator it = entries.listIterator(entries.indexOf(entry)); + while(it.hasNext()) { + songs.add((Entry) it.next()); + } + } else { + songs.add(entry); + } + + playNow(songs); } } diff --git a/app/src/main/java/github/daneren2005/dsub/view/SongView.java b/app/src/main/java/github/daneren2005/dsub/view/SongView.java index fadf100e..e789c5de 100644 --- a/app/src/main/java/github/daneren2005/dsub/view/SongView.java +++ b/app/src/main/java/github/daneren2005/dsub/view/SongView.java @@ -38,7 +38,7 @@ import java.io.File; * * @author Sindre Mehus */ -public class SongView extends UpdateView2 implements Checkable { +public class SongView extends UpdateView2 { private static final String TAG = SongView.class.getSimpleName(); private CheckedTextView checkedTextView; @@ -290,18 +290,8 @@ public class SongView extends UpdateView2 impleme } @Override - public void setChecked(boolean b) { - checkedTextView.setChecked(b); - } - - @Override - public boolean isChecked() { - return checkedTextView.isChecked(); - } - - @Override - public void toggle() { - checkedTextView.toggle(); + public void setChecked(boolean checked) { + checkedTextView.setChecked(checked); } public MusicDirectory.Entry getEntry() { diff --git a/app/src/main/java/github/daneren2005/dsub/view/UpdateView.java b/app/src/main/java/github/daneren2005/dsub/view/UpdateView.java index 8e1029df..5043e7bc 100644 --- a/app/src/main/java/github/daneren2005/dsub/view/UpdateView.java +++ b/app/src/main/java/github/daneren2005/dsub/view/UpdateView.java @@ -27,6 +27,7 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; +import android.widget.Checkable; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -265,6 +266,9 @@ public abstract class UpdateView extends LinearLayout { public boolean isCheckable() { return checkable; } + public void setChecked(boolean checked) { + + } public void onClick() { -- cgit v1.2.3