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());