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);