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
This commit is contained in:
@@ -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<AssistManager> mAssistManagerLazy;
|
||||
private final Lazy<Optional<CentralSurfaces>> 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<AssistManager> assistManagerLazy,
|
||||
Lazy<Optional<CentralSurfaces>> 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user