From a10c44e0fa47c77e24fdbb4eb426bf64ebe8734b Mon Sep 17 00:00:00 2001 From: Alex Stetson Date: Wed, 3 Aug 2022 12:43:30 -0700 Subject: [PATCH] Respect CentralSurfaces being optional in NavBarHelper CentralSurfaces is an optional element in SystemUI so some extensions may not include this. Therefore, it needs to be checked if it is present before use. Bug: 241105832 Test: atest CarActivityServiceTaskMonitorUnitTest --rerun-until-failure 20, atest com.android.systemui.navigationbar Change-Id: I32f66562af699e16a0a5deb3937c002f9fa2ef09 --- .../android/systemui/navigationbar/NavBarHelper.java | 12 ++++++++++-- .../systemui/navigationbar/NavBarHelperTest.java | 3 ++- .../systemui/navigationbar/NavigationBarTest.java | 9 ++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java index 6bc50a6b24063..da9fefab0b665 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java @@ -48,6 +48,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.annotation.NonNull; +import com.android.keyguard.KeyguardViewController; import com.android.systemui.Dumpable; import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; @@ -89,6 +90,7 @@ public final class NavBarHelper implements private final AccessibilityManager mAccessibilityManager; private final Lazy mAssistManagerLazy; private final Lazy> mCentralSurfacesOptionalLazy; + private final KeyguardViewController mKeyguardViewController; private final UserTracker mUserTracker; private final SystemActions mSystemActions; private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver; @@ -123,6 +125,7 @@ public final class NavBarHelper implements OverviewProxyService overviewProxyService, Lazy assistManagerLazy, Lazy> centralSurfacesOptionalLazy, + KeyguardViewController keyguardViewController, NavigationModeController navigationModeController, UserTracker userTracker, DumpManager dumpManager) { @@ -131,6 +134,7 @@ public final class NavBarHelper implements mAccessibilityManager = accessibilityManager; mAssistManagerLazy = assistManagerLazy; mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy; + mKeyguardViewController = keyguardViewController; mUserTracker = userTracker; mSystemActions = systemActions; accessibilityManager.addAccessibilityServicesStateChangeListener(this); @@ -317,8 +321,12 @@ public final class NavBarHelper implements * {@link InputMethodService} and the keyguard states. */ public boolean isImeShown(int vis) { - View shadeWindowView = mCentralSurfacesOptionalLazy.get().get().getNotificationShadeWindowView(); - boolean isKeyguardShowing = mCentralSurfacesOptionalLazy.get().get().isKeyguardShowing(); + View shadeWindowView = null; + if (mCentralSurfacesOptionalLazy.get().isPresent()) { + shadeWindowView = + mCentralSurfacesOptionalLazy.get().get().getNotificationShadeWindowView(); + } + boolean isKeyguardShowing = mKeyguardViewController.isShowing(); boolean imeVisibleOnShade = shadeWindowView != null && shadeWindowView.isAttachedToWindow() && shadeWindowView.getRootWindowInsets().isVisible(WindowInsets.Type.ime()); return imeVisibleOnShade diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java index edcf4791e6b18..80731037481a2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java @@ -39,6 +39,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.keyguard.KeyguardViewController; import com.android.systemui.SysuiTestCase; import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; @@ -112,7 +113,7 @@ public class NavBarHelperTest extends SysuiTestCase { mNavBarHelper = new NavBarHelper(mContext, mAccessibilityManager, mAccessibilityButtonModeObserver, mAccessibilityButtonTargetObserver, mSystemActions, mOverviewProxyService, mAssistManagerLazy, - () -> Optional.of(mock(CentralSurfaces.class)), + () -> Optional.of(mock(CentralSurfaces.class)), mock(KeyguardViewController.class), mNavigationModeController, mUserTracker, mDumpManager); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java index fe5f433ace47c..51f0953771cb2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java @@ -72,6 +72,7 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; +import com.android.keyguard.KeyguardViewController; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestableContext; import com.android.systemui.accessibility.AccessibilityButtonModeObserver; @@ -193,6 +194,8 @@ public class NavigationBarTest extends SysuiTestCase { @Mock private CentralSurfaces mCentralSurfaces; @Mock + private KeyguardViewController mKeyguardViewController; + @Mock private UserContextProvider mUserContextProvider; @Mock private Resources mResources; @@ -237,8 +240,8 @@ public class NavigationBarTest extends SysuiTestCase { mock(AccessibilityButtonTargetsObserver.class), mSystemActions, mOverviewProxyService, () -> mock(AssistManager.class), () -> Optional.of(mCentralSurfaces), - mock(NavigationModeController.class), mock(UserTracker.class), - mock(DumpManager.class))); + mKeyguardViewController, mock(NavigationModeController.class), + mock(UserTracker.class), mock(DumpManager.class))); mNavigationBar = createNavBar(mContext); mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal); }); @@ -377,7 +380,7 @@ public class NavigationBarTest extends SysuiTestCase { // Verify navbar didn't alter and showing back icon when the keyguard is showing without // requesting IME insets visible. - doReturn(true).when(mCentralSurfaces).isKeyguardShowing(); + doReturn(true).when(mKeyguardViewController).isShowing(); mNavigationBar.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE, BACK_DISPOSITION_DEFAULT, true); assertFalse((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_BACK_ALT) != 0);