OSDN Git Service

If two groups are posted to settings, remove old group and log.
authorAlison Cichowlas <asc@google.com>
Tue, 6 Jun 2017 19:06:14 +0000 (15:06 -0400)
committerAlison Cichowlas <asc@google.com>
Tue, 6 Jun 2017 21:02:23 +0000 (17:02 -0400)
Bug: 62136650
Test: manual: set debugger in asynctask at line 110 to force
race condition, triggered task twice then released both.
also ran existing tests with no new failures.
Change-Id: I8508fe9f191ca6cd0bb6dfbc62d884420d3fd747

src/com/android/settings/notification/AppNotificationSettings.java

index 6c4f27c..fb89402 100644 (file)
@@ -51,7 +51,6 @@ import com.android.settings.widget.MasterSwitchPreference;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.RestrictedSwitchPreference;
 
-import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -147,6 +146,15 @@ public class AppNotificationSettings extends NotificationSettingsBase {
     }
 
     private void populateChannelList() {
+        if (!mChannelGroups.isEmpty()) {
+            // If there's anything in mChannelGroups, we've called populateChannelList twice.
+            // Clear out existing channels and log.
+            Log.w(TAG, "Notification channel group posted twice to settings - old size " +
+                    mChannelGroups.size() + ", new size " + mChannelGroupList.size());
+            for (Preference p : mChannelGroups) {
+                getPreferenceScreen().removePreference(p);
+            }
+        }
         if (mChannelGroupList.isEmpty()) {
             PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
             groupCategory.setTitle(R.string.notification_channels);