From af4dc2834c8882d4ccecb3c50a45d42aeb361b04 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Fri, 23 Jun 2017 16:13:20 -0400 Subject: [PATCH] Limit when a ranking reconsidering can alert Otherwise notifications that were silenced by DND that still exist when DND is turned off can re-alert. Test: StatusBarTest, "with zen". No alerts should happen within ~10 seconds of starting the test Change-Id: I9e58118c0a40e0d4f1bafb0913e569b560879ba2 Fixes: 62355996 --- .../NotificationManagerService.java | 5 ++- tests/StatusBar/AndroidManifest.xml | 1 + .../statusbartest/NotificationTestList.java | 36 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 5ee7ac4d16d13..038e47e4dada3 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -4004,16 +4004,19 @@ public class NotificationManagerService extends SystemService { } int indexBefore = findNotificationRecordIndexLocked(record); boolean interceptBefore = record.isIntercepted(); + float contactAffinityBefore = record.getContactAffinity(); int visibilityBefore = record.getPackageVisibilityOverride(); recon.applyChangesLocked(record); applyZenModeLocked(record); mRankingHelper.sort(mNotificationList); int indexAfter = findNotificationRecordIndexLocked(record); boolean interceptAfter = record.isIntercepted(); + float contactAffinityAfter = record.getContactAffinity(); int visibilityAfter = record.getPackageVisibilityOverride(); changed = indexBefore != indexAfter || interceptBefore != interceptAfter || visibilityBefore != visibilityAfter; - if (interceptBefore && !interceptAfter) { + if (interceptBefore && !interceptAfter + && Float.compare(contactAffinityBefore, contactAffinityAfter) != 0) { buzzBeepBlinkLocked(record); } } diff --git a/tests/StatusBar/AndroidManifest.xml b/tests/StatusBar/AndroidManifest.xml index 81442bfc60a4f..6a082e990dab9 100644 --- a/tests/StatusBar/AndroidManifest.xml +++ b/tests/StatusBar/AndroidManifest.xml @@ -6,6 +6,7 @@ + diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java index 5dd42dd21c906..fc68183b5970e 100644 --- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java +++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java @@ -129,6 +129,42 @@ public class NotificationTestList extends TestActivity mNM.notify(7001, n); } }, + new Test("with zen") { + public void run() + { + mNM.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALARMS); + Notification n = new Notification.Builder(NotificationTestList.this, + "default") + .setSmallIcon(R.drawable.icon2) + .setContentTitle("Default priority") + .build(); + mNM.notify("default", 7004, n); + try { + Thread.sleep(8000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + mNM.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL); + } + }, + new Test("repeated") { + public void run() + { + for (int i = 0; i < 50; i++) { + Notification n = new Notification.Builder(NotificationTestList.this, + "default") + .setSmallIcon(R.drawable.icon2) + .setContentTitle("Default priority") + .build(); + mNM.notify("default", 7004, n); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }, new Test("Post a group") { public void run() {