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 + app/src/main/res/menu/select_song_context.xml | 31 -------- .../main/res/menu/select_song_context_offline.xml | 21 ------ app/src/main/res/values-de/strings.xml | 3 +- app/src/main/res/values-es/strings.xml | 3 +- app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values-hu/strings.xml | 3 +- app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values/strings.xml | 5 +- app/src/main/res/values/themes.xml | 3 + 15 files changed, 108 insertions(+), 101 deletions(-) (limited to 'app/src') 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() { diff --git a/app/src/main/res/menu/select_song_context.xml b/app/src/main/res/menu/select_song_context.xml index d8fc211c..eae8a8bc 100644 --- a/app/src/main/res/menu/select_song_context.xml +++ b/app/src/main/res/menu/select_song_context.xml @@ -6,37 +6,6 @@ android:id="@+id/song_menu_info" android:title="@string/common.info" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - Alle auswählen %d Lieder ausgewählt. - %d Lieder deselektiert. - Mehr + Mehr Offline Suche... Fehler: Keine SD-Karte verfügbar. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b91bc929..3c2593e2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -130,8 +130,7 @@ Seleccionar todo Seleccionadas %d canciones - %d canciones deseleccionadas - Más + Más Offline Buscando... Error: No hay tarjeta SD disponible diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d547a261..cea3c77d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -129,8 +129,7 @@ Tout sélectionner %d pistes sélectionnées. - %d pistes désélectionnées. - Plus + Plus Déconnecté Recherche en cours... Erreur : Aucune carte SD card disponible. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 6a28c051..816e605a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -139,8 +139,7 @@ Összes jelölése be/ki %d dal kijelölve. - %d dal visszavonva. - Továbbiak + Továbbiak Offline Keresés... Hiba: SD kártya nem áll rendelkezésre! diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a3bb71be..0f904d95 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -89,7 +89,6 @@ Выбрать все %d композиций выбрано. - Выбор снят с %d композиций. Еще Оффлайн Выполняется поиск... diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 877b510f..f7c91da3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -141,9 +141,8 @@ Offline media Select all - %d tracks selected. - %d tracks unselected. - More + %d selected. + More Offline Searching... Error: No SD card available. diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index fb47af81..76f0250c 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -51,6 +51,7 @@ @style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle.Inverse @style/ThemeOverlay.AppCompat.Light @style/DarkSpinnerItem + true -- cgit v1.2.3