diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index 0292a99f11225..b2d3fca161126 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -103,7 +103,7 @@ public final class NotificationRecord { final int mTargetSdkVersion; final int mOriginalFlags; private final Context mContext; - private final KeyguardManager mKeyguardManager; + private KeyguardManager mKeyguardManager; private final PowerManager mPowerManager; NotificationUsageStats.SingleNotificationStats stats; boolean isCanceled; @@ -1625,10 +1625,21 @@ public final class NotificationRecord { } boolean isLocked() { - return mKeyguardManager.isKeyguardLocked() + return getKeyguardManager().isKeyguardLocked() || !mPowerManager.isInteractive(); // Unlocked AOD } + /** + * For some early {@link NotificationRecord}, {@link KeyguardManager} can be {@code null} in + * the constructor. Retrieve it again if it is null. + */ + private KeyguardManager getKeyguardManager() { + if (mKeyguardManager == null) { + mKeyguardManager = mContext.getSystemService(KeyguardManager.class); + } + return mKeyguardManager; + } + @VisibleForTesting static final class Light { public final int color;