diff options
author | Beverly <beverlyt@google.com> | 2021-12-21 14:17:07 -0500 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-03-08 03:41:34 +0000 |
commit | fa01b15be96280cde80a6c93fdf105fb0f94a5ef (patch) | |
tree | a2045383389b5a2db9e8118486011910a4f6f805 | |
parent | 9aeb773ac3330560bbba7ac724d0adac7abb87f1 (diff) | |
download | base-fa01b15be96280cde80a6c93fdf105fb0f94a5ef.tar.gz |
Remove toast window token after being rate-limited
Test: manual, atest NotificationManagerServiceTest
Fixes: 211005909
Change-Id: I2375b72cb60ee535dcb78aa0d064455c5247b4f6
(cherry picked from commit 2a35959ecdc793a0f522c8afd57cf24f3b73ad8d)
(cherry picked from commit f53f2ad864d022b8a81216e35068c6ce062d33c9)
Merged-In: I2375b72cb60ee535dcb78aa0d064455c5247b4f6
2 files changed, 37 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 211f8d6e3ec7..7590527bbf31 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -7695,7 +7695,9 @@ public class NotificationManagerService extends SystemService { int index = mToastQueue.indexOf(record); if (index >= 0) { - mToastQueue.remove(index); + ToastRecord toast = mToastQueue.remove(index); + mWindowManagerInternal.removeWindowToken( + toast.windowToken, true /* removeWindows */, toast.displayId); } record = (mToastQueue.size() > 0) ? mToastQueue.get(0) : null; } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index e98d077836e0..f7121537c52c 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -60,6 +60,7 @@ import static android.service.notification.NotificationListenerService.FLAG_FILT import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ONGOING; import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEUTRAL; +import static android.view.WindowManager.LayoutParams.TYPE_TOAST; import static com.google.common.truth.Truth.assertThat; @@ -5572,6 +5573,39 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test + public void testRateLimitedToasts_windowsRemoved() throws Exception { + final String testPackage = "testPackageName"; + assertEquals(0, mService.mToastQueue.size()); + mService.isSystemUid = false; + setToastRateIsWithinQuota(false); // rate limit reached + setIfPackageHasPermissionToAvoidToastRateLimiting(testPackage, false); + setAppInForegroundForToasts(mUid, false); + + // package is not suspended + when(mPackageManager.isPackageSuspendedForUser(testPackage, UserHandle.getUserId(mUid))) + .thenReturn(false); + + Binder token = new Binder(); + INotificationManager nmService = (INotificationManager) mService.mService; + + nmService.enqueueTextToast(testPackage, token, "Text", 2000, 0, null); + + // window token was added when enqueued + ArgumentCaptor<Binder> binderCaptor = + ArgumentCaptor.forClass(Binder.class); + verify(mWindowManagerInternal).addWindowToken(binderCaptor.capture(), + eq(TYPE_TOAST), anyInt(), eq(null)); + + // but never shown + verify(mStatusBar, times(0)) + .showToast(anyInt(), any(), any(), any(), any(), anyInt(), any()); + + // and removed when rate limited + verify(mWindowManagerInternal) + .removeWindowToken(eq(binderCaptor.getValue()), eq(true), anyInt()); + } + + @Test public void backgroundSystemCustomToast_callsSetProcessImportantAsForegroundForToast() throws Exception { final String testPackage = "testPackageName"; |