diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 3856633df28f3..d1e0b0474b61e 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -6948,9 +6948,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 779673e98c6f4..0d56975f51d0f 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -9331,6 +9331,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 @@ -9430,6 +9437,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