From fea5c4af0ef08a1c56b7334813a3fcb325208598 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Thu, 12 Dec 2019 12:17:53 -0800 Subject: [PATCH] DO NOT MERGE - Fix StatusBar.updateIsKeyguard() when suspending to RAM. That method was throwing a NPE on automotive because it's called before start() Test: check logcat while running 'adb shell dumpsys car_service suspend' Fixes: 146144370 Change-Id: Id863acac44f75b06c8cd1a0f0bcd6f23f8ab6fd9 (cherry picked from commit 20e362a92b8376b590d5df615265050dd6838c91) --- .../android/systemui/statusbar/phone/StatusBar.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 91cf89ce1b05c..a589ca588fa71 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3055,10 +3055,21 @@ public class StatusBar extends SystemUI implements DemoMode, return mState == StatusBarState.FULLSCREEN_USER_SWITCHER; } + private boolean isAutomotive() { + return mContext != null + && mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE); + } + private boolean updateIsKeyguard() { boolean wakeAndUnlocking = mBiometricUnlockController.getMode() == BiometricUnlockController.MODE_WAKE_AND_UNLOCK; + if (mScreenLifecycle == null && isAutomotive()) { + // TODO(b/146144370): workaround to avoid NPE when device goes into STR (Suspend to RAM) + Log.w(TAG, "updateIsKeyguard(): mScreenLifeCycle not set yet"); + mScreenLifecycle = Dependency.get(ScreenLifecycle.class); + } + // For dozing, keyguard needs to be shown whenever the device is non-interactive. Otherwise // there's no surface we can show to the user. Note that the device goes fully interactive // late in the transition, so we also allow the device to start dozing once the screen has