From 77a200b8b18ca514af810dba977594233159a2ea Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Tue, 24 May 2022 13:02:26 -0400 Subject: [PATCH] Catch when telecom isn't ready yet The service can be non-null even when it's not ready. Test: NotificationManagerServiceTest Fixes: 232895613 Change-Id: I06210142b614aecfc5c70eb764e39a6c7d249014 --- .../NotificationManagerService.java | 11 ++++++++--- .../NotificationManagerServiceTest.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 6dc1f372b602e..ea4b7cadfab8b 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -6936,9 +6936,14 @@ public class NotificationManagerService extends SystemService { try { if (mPackageManagerClient.hasSystemFeature(FEATURE_TELECOM) && mTelecomManager != null) { - return mTelecomManager.isInManagedCall() - || mTelecomManager.isInSelfManagedCall( - pkg, UserHandle.getUserHandleForUid(uid)); + try { + return mTelecomManager.isInManagedCall() + || mTelecomManager.isInSelfManagedCall( + pkg, UserHandle.getUserHandleForUid(uid)); + } catch (IllegalStateException ise) { + // Telecom is not ready (this is likely early boot), so there are no calls. + return false; + } } return false; } finally { 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 a7dc8518daea1..9d347e3b53b44 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -9332,6 +9332,13 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertThat(mService.checkDisqualifyingFeatures(r.getUserId(), r.getUid(), r.getSbn().getId(), r.getSbn().getTag(), r, false)) .isFalse(); + + // telecom manager is not ready - blocked + mService.setTelecomManager(mTelecomManager); + when(mTelecomManager.isInCall()).thenThrow(new IllegalStateException("not ready")); + assertThat(mService.checkDisqualifyingFeatures(r.getUserId(), r.getUid(), + r.getSbn().getId(), r.getSbn().getTag(), r, false)) + .isFalse(); } @Test @@ -9431,6 +9438,18 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { verify(mUsageStats).registerBlocked(any()); verify(mUsageStats, never()).registerPostedByApp(any()); + + // telecom is not ready - notifications should be blocked but no crashes + mService.setTelecomManager(mTelecomManager); + when(mTelecomManager.isInCall()).thenThrow(new IllegalStateException("not ready")); + reset(mUsageStats); + + mService.addEnqueuedNotification(r); + runnable.run(); + waitForIdle(); + + verify(mUsageStats).registerBlocked(any()); + verify(mUsageStats, never()).registerPostedByApp(any()); } @Test