From bb2e707844b5ff1b2ac822a16f3954d2c6c86537 Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sun, 15 Jan 2017 16:00:06 +0100 Subject: [PATCH] add option to abort a scan --- res/layout/medialibrary_preferences.xml | 9 +++++++ .../android/medialibrary/MediaLibrary.java | 12 ++++++++- .../android/medialibrary/MediaScanner.java | 17 +++++++++++++ .../vanilla/PreferencesMediaLibrary.java | 25 ++++++++++++++++++- 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/res/layout/medialibrary_preferences.xml b/res/layout/medialibrary_preferences.xml index 6299b3f7..29e332d4 100644 --- a/res/layout/medialibrary_preferences.xml +++ b/res/layout/medialibrary_preferences.xml @@ -85,5 +85,14 @@ along with this program. If not, see . android:layout_height="wrap_content" android:text="@string/empty" /> + + diff --git a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java index 3f6f4760..084966ff 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java @@ -83,7 +83,7 @@ public class MediaLibrary { * @param forceFull starts a full / slow scan if true * @param drop drop the existing library if true */ - public static void scanLibrary(Context context, boolean forceFull, boolean drop) { + public static void startLibraryScan(Context context, boolean forceFull, boolean drop) { MediaLibraryBackend backend = getBackend(context); // also initialized sScanner if (drop) { sScanner.flushDatabase(); @@ -97,6 +97,16 @@ public class MediaLibrary { } } + /** + * Stops any running scan + * + * @param context the context to use + */ + public static void abortLibraryScan(Context context) { + MediaLibraryBackend backend = getBackend(context); // also initialized sScanner + sScanner.abortScan(); + } + /** * Whacky function to get the current scan progress * diff --git a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java index 8d02fd5c..cd95a6e4 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java @@ -124,6 +124,15 @@ public class MediaScanner implements Handler.Callback { } } + /** + * Stops a running scan + */ + public void abortScan() { + mHandler.removeMessages(MSG_SCAN_RPC); + mScanPlan.clear(); + mHandler.sendMessage(mHandler.obtainMessage(MSG_SCAN_RPC, RPC_KICKSTART, 0)); + } + /** * Drops the media library */ @@ -547,6 +556,14 @@ public class MediaScanner implements Handler.Callback { } } + /** + * Flushes all progress, turning the object into a fresh state + */ + void clear() { + mSteps.clear(); + mStats.reset(); + } + /** * Adds the next step in our plan * diff --git a/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java b/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java index 5877a525..cfa1a92c 100644 --- a/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java +++ b/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java @@ -41,6 +41,10 @@ public class PreferencesMediaLibrary extends Fragment * Our start button */ private View mStartButton; + /** + * The cancel button + */ + private View mCancelButton; /** * The debug / progress text describing the scan status */ @@ -72,6 +76,7 @@ public class PreferencesMediaLibrary extends Fragment super.onViewCreated(view, savedInstanceState); mStartButton = (View)view.findViewById(R.id.start_button); + mCancelButton = (View)view.findViewById(R.id.cancel_button); mProgress = (TextView)view.findViewById(R.id.media_stats_progress); mStatsTracks = (TextView)view.findViewById(R.id.media_stats_tracks); mStatsPlaytime = (TextView)view.findViewById(R.id.media_stats_playtime); @@ -84,6 +89,13 @@ public class PreferencesMediaLibrary extends Fragment startButtonPressed(v); } }); + + mCancelButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + cancelButtonPressed(v); + } + }); } @Override @@ -120,6 +132,7 @@ public class PreferencesMediaLibrary extends Fragment String scanText = MediaLibrary.describeScanProgress(getActivity()); mProgress.setText(scanText); mStartButton.setEnabled(scanText == null); + mCancelButton.setVisibility(scanText == null ? View.GONE : View.VISIBLE); Integer songCount = MediaLibrary.getLibrarySize(context); mStatsTracks.setText(songCount.toString()); @@ -152,7 +165,17 @@ public class PreferencesMediaLibrary extends Fragment * @param view the view which was pressed */ public void startButtonPressed(View view) { - MediaLibrary.scanLibrary(getActivity(), mFullScanCheck.isChecked(), mDropDbCheck.isChecked()); + MediaLibrary.startLibraryScan(getActivity(), mFullScanCheck.isChecked(), mDropDbCheck.isChecked()); + updateProgress(); + } + + /** + * Called when the user hits the cancel button + * + * @param view the view which was pressed + */ + public void cancelButtonPressed(View view) { + MediaLibrary.abortLibraryScan(getActivity()); updateProgress(); }