From dac0260f353933c66d88e3c4b9876f8fe1667aa4 Mon Sep 17 00:00:00 2001 From: David Schulte Date: Mon, 10 Aug 2015 17:57:01 +0200 Subject: [PATCH] Add a floating button to export tracks Update AppCompat --- .idea/libraries/appcompat_v7_22_1_1.xml | 6 +-- .idea/libraries/appcompat_v7_22_2_1.xml | 10 +++++ .idea/libraries/design_22_2_1.xml | 10 +++++ .../libraries/support_annotations_22_2_1.xml | 11 +++++ .idea/libraries/support_v4_22_1_1.xml | 6 +-- .idea/libraries/support_v4_22_2_1.xml | 11 +++++ .../arcus/framework/utils/SelectionList.java | 30 ++++++++++++++ playmusicexporter/build.gradle | 5 ++- playmusicexporter/playmusicexporter.iml | 7 ++-- .../actionmode/ActionModeTitle.java | 27 +++---------- .../MusicContainerListActivity.java | 7 +++- .../fragments/MusicTrackListFragment.java | 40 +++++++++++++++++++ .../main/res/layout/fragment_track_detail.xml | 26 ++++++++++-- .../main/res/menu/action_mode_selection.xml | 15 ------- .../src/main/res/values-de/strings.xml | 3 +- .../src/main/res/values/strings.xml | 2 +- 16 files changed, 161 insertions(+), 55 deletions(-) create mode 100644 .idea/libraries/appcompat_v7_22_2_1.xml create mode 100644 .idea/libraries/design_22_2_1.xml create mode 100644 .idea/libraries/support_annotations_22_2_1.xml create mode 100644 .idea/libraries/support_v4_22_2_1.xml diff --git a/.idea/libraries/appcompat_v7_22_1_1.xml b/.idea/libraries/appcompat_v7_22_1_1.xml index 922ba24..1a3326a 100644 --- a/.idea/libraries/appcompat_v7_22_1_1.xml +++ b/.idea/libraries/appcompat_v7_22_1_1.xml @@ -1,11 +1,11 @@ - + - - + + diff --git a/.idea/libraries/appcompat_v7_22_2_1.xml b/.idea/libraries/appcompat_v7_22_2_1.xml new file mode 100644 index 0000000..3154e76 --- /dev/null +++ b/.idea/libraries/appcompat_v7_22_2_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/design_22_2_1.xml b/.idea/libraries/design_22_2_1.xml new file mode 100644 index 0000000..34182a8 --- /dev/null +++ b/.idea/libraries/design_22_2_1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_annotations_22_2_1.xml b/.idea/libraries/support_annotations_22_2_1.xml new file mode 100644 index 0000000..9989cf3 --- /dev/null +++ b/.idea/libraries/support_annotations_22_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_v4_22_1_1.xml b/.idea/libraries/support_v4_22_1_1.xml index dba4a27..c4d8988 100644 --- a/.idea/libraries/support_v4_22_1_1.xml +++ b/.idea/libraries/support_v4_22_1_1.xml @@ -1,9 +1,9 @@ - - - + + + diff --git a/.idea/libraries/support_v4_22_2_1.xml b/.idea/libraries/support_v4_22_2_1.xml new file mode 100644 index 0000000..fa56ad9 --- /dev/null +++ b/.idea/libraries/support_v4_22_2_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/main/java/de/arcus/framework/utils/SelectionList.java b/framework/src/main/java/de/arcus/framework/utils/SelectionList.java index 22f398f..cd566b0 100644 --- a/framework/src/main/java/de/arcus/framework/utils/SelectionList.java +++ b/framework/src/main/java/de/arcus/framework/utils/SelectionList.java @@ -55,6 +55,14 @@ public abstract class SelectionList { */ private ActionMode.Callback mActionModeCallback; + /** + * Flag to not close the activity when action mode is closing + */ + private boolean mDoNotCloseActionMode; + + public boolean getDoNotCloseActionMode() { return mDoNotCloseActionMode; } + public void setDoNotCloseActionMode(boolean doNotCloseActionMode) { mDoNotCloseActionMode = doNotCloseActionMode; } + /** * The colors */ @@ -168,10 +176,23 @@ public abstract class SelectionList { * Clears the selection */ public void clear() { + clear(false); + } + + /** + * Clears the selection + * @param doNotCloseActionMode Close the action mode? + */ + public void clear(boolean doNotCloseActionMode) { + mDoNotCloseActionMode = doNotCloseActionMode; + mItems.clear(); // Updates the action mode updateActionModeMenu(); + + // Reset the flag + mDoNotCloseActionMode = false; } /** @@ -199,6 +220,14 @@ public abstract class SelectionList { * Updates the action mode menu */ private void updateActionModeMenu() { + updateActionModeMenu(false); + } + + /** + * Updates the action mode menu + * @param doNotCloseActivity Prevent the closing of the activity + */ + private void updateActionModeMenu(boolean doNotCloseActivity) { // Null check if (mActionModeCallback != null && mActivity != null && !mActivity.isFinishing()) { @@ -213,6 +242,7 @@ public abstract class SelectionList { ActionMode actionMode = mActionMode; mActionMode = null; + // Close the action mode actionMode.finish(); } diff --git a/playmusicexporter/build.gradle b/playmusicexporter/build.gradle index 6cbb4a1..5acd349 100644 --- a/playmusicexporter/build.gradle +++ b/playmusicexporter/build.gradle @@ -45,8 +45,9 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:22.1.1' - compile 'com.android.support:support-v4:22.1.1' + compile 'com.android.support:appcompat-v7:22.2.1' + compile 'com.android.support:support-v4:22.2.1' + compile 'com.android.support:design:22.2.1' compile project(':framework') compile project(':playmusiclib') } diff --git a/playmusicexporter/playmusicexporter.iml b/playmusicexporter/playmusicexporter.iml index c8fa681..56cf3d4 100644 --- a/playmusicexporter/playmusicexporter.iml +++ b/playmusicexporter/playmusicexporter.iml @@ -88,9 +88,10 @@ - - - + + + + diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java index f49c7e7..c5161e9 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java @@ -28,6 +28,7 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import de.arcus.framework.logger.Logger; import de.arcus.playmusicexporter2.R; import de.arcus.playmusicexporter2.activities.MusicTrackListActivity; import de.arcus.playmusicexporter2.activities.MusicContainerListActivity; @@ -48,10 +49,8 @@ public class ActionModeTitle implements ActionMode.Callback { */ private SelectedTrackList mSelectionList; - /** - * Flag to not close the activity when action mode is closing - */ - private boolean mDoNotCloseActivity; + + public ActionModeTitle(Context context, SelectedTrackList selectionList) { mContext = context; @@ -85,19 +84,6 @@ public class ActionModeTitle implements ActionMode.Callback { @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { - case R.id.action_export: - - // Export all selected tracks - for(SelectedTrack selectedTrack : SelectedTrackList.getInstance().getSelectedItems()) { - selectedTrack.export(mContext); - } - - // Do not close the activity - mDoNotCloseActivity = true; - - // Clear the selection - SelectedTrackList.getInstance().clear(); - return true; case R.id.action_select_all: // We are in the track list if (mSelectionList.getActivity() instanceof MusicTrackListActivity) { @@ -108,11 +94,8 @@ public class ActionModeTitle implements ActionMode.Callback { return true; case R.id.action_deselect_all: - // Do not close the activity - mDoNotCloseActivity = true; - // Clear the selection - SelectedTrackList.getInstance().clear(); + mSelectionList.clear(true); return true; default: @@ -144,7 +127,7 @@ public class ActionModeTitle implements ActionMode.Callback { @Override public void onDestroyActionMode(ActionMode mode) { // We are in the music track list - if (mSelectionList.getActivity() instanceof MusicTrackListActivity && !mDoNotCloseActivity) { + if (mSelectionList.getActivity() instanceof MusicTrackListActivity && !mSelectionList.getDoNotCloseActionMode()) { // Clear the action mode SelectedTrackList.getInstance().clearActionMode(); diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java index 7350174..57fa1fb 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java @@ -34,6 +34,7 @@ import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.widget.EditText; import de.arcus.framework.logger.Logger; import de.arcus.framework.crashhandler.CrashHandler; @@ -268,7 +269,11 @@ public class MusicContainerListActivity extends AppCompatActivity if (mSearchView != null) { // Sets the search listener mSearchView.setOnQueryTextListener(this); - mSearchView.setIconifiedByDefault(false); + mSearchView.setIconifiedByDefault(true); + + // Hack to change the default placeholder + EditText searchEditText = (EditText) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); + searchEditText.setHint(R.string.search); } return true; diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java index cb5beca..bf0ab76 100644 --- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java +++ b/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java @@ -24,6 +24,7 @@ package de.arcus.playmusicexporter2.fragments; import android.os.Bundle; import android.os.Environment; +import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; @@ -35,6 +36,7 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; +import de.arcus.framework.logger.Logger; import de.arcus.playmusicexporter2.R; import de.arcus.playmusicexporter2.activities.MusicContainerListActivity; import de.arcus.playmusicexporter2.activities.MusicTrackListActivity; @@ -72,6 +74,8 @@ public class MusicTrackListFragment extends Fragment { */ private ListView mListView; + private FloatingActionButton mFloatingButtonExport; + private MusicTrackListAdapter mMusicTrackAdapter; /** @@ -87,6 +91,19 @@ public class MusicTrackListFragment extends Fragment { public void updateListView() { if (mListView != null) mListView.invalidateViews(); + + updateFloatingButton(); + } + + /** + * Update the floating button + */ + public void updateFloatingButton() { + if (SelectedTrackList.getInstance().getSelectedItems().size() > 0) { + mFloatingButtonExport.show(); + } else { + mFloatingButtonExport.hide(); + } } /** @@ -177,6 +194,22 @@ public class MusicTrackListFragment extends Fragment { } } }); + + // The floating action button + mFloatingButtonExport = (FloatingActionButton)rootView.findViewById(R.id.floating_button_export); + mFloatingButtonExport.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // Export all selected tracks + for(SelectedTrack selectedTrack : SelectedTrackList.getInstance().getSelectedItems()) { + selectedTrack.export(getActivity()); + } + + // Clear the selection + SelectedTrackList.getInstance().clear(true); + } + }); + updateFloatingButton(); } return rootView; @@ -207,12 +240,19 @@ public class MusicTrackListFragment extends Fragment { // Path to the public music folder path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/" + path; + // Prevent the closing + SelectedTrackList.getInstance().setDoNotCloseActionMode(true); + if (toggle) { // Toggles the music track SelectedTrackList.getInstance().toggle(new SelectedTrack(musicTrack.getId(), path), view); } else { SelectedTrackList.getInstance().setSelected(new SelectedTrack(musicTrack.getId(), path), true, view); } + + SelectedTrackList.getInstance().setDoNotCloseActionMode(false); } + + updateFloatingButton(); } } diff --git a/playmusicexporter/src/main/res/layout/fragment_track_detail.xml b/playmusicexporter/src/main/res/layout/fragment_track_detail.xml index 4488cca..1452838 100644 --- a/playmusicexporter/src/main/res/layout/fragment_track_detail.xml +++ b/playmusicexporter/src/main/res/layout/fragment_track_detail.xml @@ -20,7 +20,25 @@ ~ THE SOFTWARE. --> - + + + + + + + diff --git a/playmusicexporter/src/main/res/menu/action_mode_selection.xml b/playmusicexporter/src/main/res/menu/action_mode_selection.xml index 1cb90e6..de4a19d 100644 --- a/playmusicexporter/src/main/res/menu/action_mode_selection.xml +++ b/playmusicexporter/src/main/res/menu/action_mode_selection.xml @@ -31,19 +31,4 @@ android:title="@string/action_deselect_all" android:icon="@drawable/ic_action_select_none" app:showAsAction="ifRoom" /> - - - - - - \ No newline at end of file diff --git a/playmusicexporter/src/main/res/values-de/strings.xml b/playmusicexporter/src/main/res/values-de/strings.xml index 8d9ee4e..8e8a8ac 100644 --- a/playmusicexporter/src/main/res/values-de/strings.xml +++ b/playmusicexporter/src/main/res/values-de/strings.xml @@ -50,7 +50,7 @@ Titel %1$d von %2$d wird exportiert… %1$d Titel wurden erfolgreich exportiert! Export abgeschlossen! - Suchen + Suchen… Alle Titel exportieren Exportieren Wiedergeben @@ -60,4 +60,5 @@ Maximale Artworkgröße Wenn die Größe des Artworks größer als der eingestellte Wert ist, wird das Artwork auf diesen Wert runter skalliert. %d Titel ausgewählt + Auswahl aufheben \ No newline at end of file diff --git a/playmusicexporter/src/main/res/values/strings.xml b/playmusicexporter/src/main/res/values/strings.xml index 409ac30..eb325c2 100644 --- a/playmusicexporter/src/main/res/values/strings.xml +++ b/playmusicexporter/src/main/res/values/strings.xml @@ -50,7 +50,7 @@ %1$d tracks were exported successfully! %1$s was exported successfully! - Search + Search… Export all tracks Export settings