diff --git a/res/layout/medialibrary_preferences.xml b/res/layout/medialibrary_preferences.xml index 0cbcdc7a..f6c47df9 100644 --- a/res/layout/medialibrary_preferences.xml +++ b/res/layout/medialibrary_preferences.xml @@ -99,10 +99,16 @@ along with this program. If not, see . android:text="@android:string/cancel"> - + + diff --git a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java index eebb634b..d6c7163c 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java @@ -64,6 +64,19 @@ public class MediaLibrary { int _nativeLibraryCount; int _nativeLastMtime; } + + /** + * The progress of a currently scan, if any + * is running + */ + public static class ScanProgress { + public boolean isRunning; + public String lastFile; + public int seen; + public int changed; + public int total; + } + /** * Cached preferences, may be null */ @@ -170,15 +183,11 @@ public class MediaLibrary { * Whacky function to get the current scan progress * * @param context the context to use - * @return a description of the progress, null if no scan is running + * @return a description of the progress */ - public static String describeScanProgress(Context context) { + public static MediaLibrary.ScanProgress describeScanProgress(Context context) { MediaLibraryBackend backend = getBackend(context); // also initialized sScanner - MediaScanner.MediaScanPlan.Statistics stats = sScanner.getScanStatistics(); - String msg = null; - if (stats.lastFile != null) - msg = stats.lastFile+" ("+stats.changed+" / "+stats.seen+")"; - return msg; + return sScanner.describeScanProgress(); } diff --git a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java index 18014271..e8cc3781 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java @@ -152,10 +152,20 @@ public class MediaScanner implements Handler.Callback { /** * Returns some scan statistics * - * @return a stats object + * @return a MediaLibrary.ScanProgress object */ - MediaScanPlan.Statistics getScanStatistics() { - return mScanPlan.getStatistics(); + public MediaLibrary.ScanProgress describeScanProgress() { + MediaLibrary.ScanProgress progress = new MediaLibrary.ScanProgress(); + MediaLibrary.Preferences prefs = MediaLibrary.getPreferences(mContext); + MediaScanPlan.Statistics stats = mScanPlan.getStatistics(); + + progress.isRunning = (stats.lastFile != null); + progress.lastFile = stats.lastFile; + progress.seen = stats.seen; + progress.changed = stats.changed; + progress.total = prefs._nativeLibraryCount; + + return progress; } private static final int MSG_SCAN_RPC = 0; @@ -242,8 +252,7 @@ public class MediaScanner implements Handler.Callback { * @param visible if true, the notification is visible (and will get updated) */ private void updateNotification(boolean visible) { - MediaScanPlan.Statistics stats = mScanPlan.getStatistics(); - MediaLibrary.Preferences prefs = MediaLibrary.getPreferences(mContext); + MediaLibrary.ScanProgress progress = describeScanProgress(); NotificationManager manager = (NotificationManager) mContext.getSystemService(mContext.NOTIFICATION_SERVICE); if (visible) { @@ -252,10 +261,10 @@ public class MediaScanner implements Handler.Callback { mLastNotification = nowTime; int icon = R.drawable.status_scan_0 + (mLastNotification % 5); String title = mContext.getResources().getString(R.string.media_library_scan_running); - String content = stats.lastFile; + String content = progress.lastFile; Notification notification = new Notification.Builder(mContext) - .setProgress(prefs._nativeLibraryCount, stats.seen, false) + .setProgress(progress.total, progress.seen, false) .setContentTitle(title) .setContentText(content) .setSmallIcon(icon) diff --git a/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java b/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java index 1c28e04e..0b125c10 100644 --- a/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java +++ b/src/ch/blinkenlights/android/vanilla/PreferencesMediaLibrary.java @@ -29,6 +29,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; +import android.widget.ProgressBar; import android.widget.TextView; import java.util.Timer; @@ -51,7 +52,11 @@ public class PreferencesMediaLibrary extends Fragment implements View.OnClickLis /** * The debug / progress text describing the scan status */ - private TextView mProgress; + private TextView mProgressText; + /** + * The progress bar + */ + private ProgressBar mProgressBar; /** * The number of tracks on this device */; @@ -92,7 +97,8 @@ public class PreferencesMediaLibrary extends Fragment implements View.OnClickLis 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); + mProgressText = (TextView)view.findViewById(R.id.media_stats_progress_text); + mProgressBar = (ProgressBar)view.findViewById(R.id.media_stats_progress_bar); mStatsTracks = (TextView)view.findViewById(R.id.media_stats_tracks); mStatsPlaytime = (TextView)view.findViewById(R.id.media_stats_playtime); mFullScanCheck = (CheckBox)view.findViewById(R.id.media_scan_full); @@ -213,16 +219,22 @@ public class PreferencesMediaLibrary extends Fragment implements View.OnClickLis */ private void updateProgress() { Context context = getActivity(); - String scanText = MediaLibrary.describeScanProgress(getActivity()); - boolean scanIdle = scanText == null; + MediaLibrary.ScanProgress progress = MediaLibrary.describeScanProgress(getActivity()); - mProgress.setText(scanText); - mStartButton.setEnabled(scanIdle); - mDropDbCheck.setEnabled(scanIdle); - mFullScanCheck.setEnabled(scanIdle); - mForceBastpCheck.setEnabled(scanIdle); - mGroupAlbumsCheck.setEnabled(scanIdle); - mCancelButton.setVisibility(scanIdle ? View.GONE : View.VISIBLE); + boolean idle = !progress.isRunning; + mProgressText.setText(progress.lastFile); + mProgressBar.setMax(progress.total); + mProgressBar.setProgress(progress.seen); + + mStartButton.setEnabled(idle); + mDropDbCheck.setEnabled(idle); + mFullScanCheck.setEnabled(idle); + mForceBastpCheck.setEnabled(idle); + mGroupAlbumsCheck.setEnabled(idle); + + mCancelButton.setVisibility(idle ? View.GONE : View.VISIBLE); + mProgressText.setVisibility(idle ? View.GONE : View.VISIBLE); + mProgressBar.setVisibility(idle ? View.GONE : View.VISIBLE); Integer songCount = MediaLibrary.getLibrarySize(context); mStatsTracks.setText(songCount.toString());