From 1a54c61a506c3876833bd802ab2035fdd13b558d Mon Sep 17 00:00:00 2001
From: Ruben Roy <rubenroy2005@gmail.com>
Date: Fri, 27 Nov 2015 14:58:29 +0530
Subject: [PATCH] Make progressbar in notification determinate

---
 .../src/org/fdroid/fdroid/RepoPersister.java   |  4 ++--
 .../src/org/fdroid/fdroid/UpdateService.java   | 18 ++++++++++++++----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/F-Droid/src/org/fdroid/fdroid/RepoPersister.java b/F-Droid/src/org/fdroid/fdroid/RepoPersister.java
index c816e81a9..2c98929f9 100644
--- a/F-Droid/src/org/fdroid/fdroid/RepoPersister.java
+++ b/F-Droid/src/org/fdroid/fdroid/RepoPersister.java
@@ -179,10 +179,10 @@ public class RepoPersister {
         int i = 0;
         while (i < operations.size()) {
             int count = Math.min(operations.size() - i, 100);
+            int progress = (int) ((double) (currentCount + i) / totalUpdateCount * 100);
             ArrayList<ContentProviderOperation> o = new ArrayList<>(operations.subList(i, i + count));
             UpdateService.sendStatus(context, UpdateService.STATUS_INFO, context.getString(
-                R.string.status_inserting,
-                (int) ((double) (currentCount + i) / totalUpdateCount * 100)));
+                R.string.status_inserting, progress), progress);
             context.getContentResolver().applyBatch(providerAuthority, o);
             i += 100;
         }
diff --git a/F-Droid/src/org/fdroid/fdroid/UpdateService.java b/F-Droid/src/org/fdroid/fdroid/UpdateService.java
index 9556523cd..0e19d7e7d 100644
--- a/F-Droid/src/org/fdroid/fdroid/UpdateService.java
+++ b/F-Droid/src/org/fdroid/fdroid/UpdateService.java
@@ -61,6 +61,7 @@ public class UpdateService extends IntentService implements ProgressListener {
     public static final String EXTRA_STATUS_CODE = "status";
     public static final String EXTRA_ADDRESS = "address";
     public static final String EXTRA_MANUAL_UPDATE = "manualUpdate";
+    public static final String EXTRA_PROGRESS = "progress";
 
     public static final int STATUS_COMPLETE_WITH_CHANGES = 0;
     public static final int STATUS_COMPLETE_AND_SAME = 1;
@@ -157,14 +158,19 @@ public class UpdateService extends IntentService implements ProgressListener {
     }
 
     protected static void sendStatus(Context context, int statusCode) {
-        sendStatus(context, statusCode, null);
+        sendStatus(context, statusCode, null, -1);
     }
 
     protected static void sendStatus(Context context, int statusCode, String message) {
+        sendStatus(context, statusCode, message, -1);
+    }
+
+    protected static void sendStatus(Context context, int statusCode, String message, int progress) {
         Intent intent = new Intent(LOCAL_ACTION_STATUS);
         intent.putExtra(EXTRA_STATUS_CODE, statusCode);
         if (!TextUtils.isEmpty(message))
             intent.putExtra(EXTRA_MESSAGE, message);
+        intent.putExtra(EXTRA_PROGRESS, progress);
         LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
     }
 
@@ -193,11 +199,12 @@ public class UpdateService extends IntentService implements ProgressListener {
             String message;
             if (totalSize == -1) {
                 message = getString(R.string.status_download_unknown_size, repoAddress, downloadedSizeFriendly);
+                percent = -1;
             } else {
                 String totalSizeFriendly = Utils.getFriendlySize(totalSize);
                 message = getString(R.string.status_download, repoAddress, downloadedSizeFriendly, totalSizeFriendly, percent);
             }
-            sendStatus(context, STATUS_INFO, message);
+            sendStatus(context, STATUS_INFO, message, percent);
         }
     };
 
@@ -216,13 +223,16 @@ public class UpdateService extends IntentService implements ProgressListener {
 
             final String message = intent.getStringExtra(EXTRA_MESSAGE);
             int resultCode = intent.getIntExtra(EXTRA_STATUS_CODE, -1);
+            int progress = intent.getIntExtra(EXTRA_PROGRESS, -1);
 
             String text;
             switch (resultCode) {
                 case STATUS_INFO:
                     notificationBuilder.setContentText(message)
-                            .setProgress(0, 0, true)
                             .setCategory(NotificationCompat.CATEGORY_SERVICE);
+                    if (progress != -1) {
+                        notificationBuilder.setProgress(100, progress, false);
+                    }
                     notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
                     break;
                 case STATUS_ERROR_GLOBAL:
@@ -510,6 +520,6 @@ public class UpdateService extends IntentService implements ProgressListener {
                 message = getString(R.string.status_processing_xml_percent, repoAddress, downloadedSize, totalSize, percent);
                 break;
         }
-        sendStatus(this, STATUS_INFO, message);
+        sendStatus(this, STATUS_INFO, message, percent);
     }
 }