Avoid flashing download notifications.
Jeff Sharkey [Thu, 31 Mar 2016 02:31:05 +0000 (20:31 -0600)]
When service starts, use new API to read the current set of
notification tags from the system instead of clearing and starting
from scratch.

Bug: 27634130
Change-Id: I049fe5e445a62a52042d7638c2cb50417977435f

src/com/android/providers/downloads/DownloadNotifier.java
src/com/android/providers/downloads/DownloadService.java

index 2ff8b63..a03f012 100644 (file)
@@ -33,11 +33,14 @@ import android.content.res.Resources;
 import android.net.Uri;
 import android.os.SystemClock;
 import android.provider.Downloads;
+import android.service.notification.StatusBarNotification;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.util.Log;
 import android.util.LongSparseLongArray;
 
+import com.android.internal.util.ArrayUtils;
+
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
@@ -92,8 +95,16 @@ public class DownloadNotifier {
                 Context.NOTIFICATION_SERVICE);
     }
 
-    public void cancelAll() {
-        mNotifManager.cancelAll();
+    public void init() {
+        synchronized (mActiveNotifs) {
+            mActiveNotifs.clear();
+            final StatusBarNotification[] notifs = mNotifManager.getActiveNotifications();
+            if (!ArrayUtils.isEmpty(notifs)) {
+                for (StatusBarNotification notif : notifs) {
+                    mActiveNotifs.put(notif.getTag(), notif.getPostTime());
+                }
+            }
+        }
     }
 
     /**
index 7845ce0..7d4392e 100644 (file)
@@ -211,7 +211,7 @@ public class DownloadService extends Service {
         mScanner = new DownloadScanner(this);
 
         mNotifier = new DownloadNotifier(this);
-        mNotifier.cancelAll();
+        mNotifier.init();
 
         mObserver = new DownloadManagerContentObserver();
         getContentResolver().registerContentObserver(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI,