Remove Dependency.get from NavigationBar.
Fixes flaky tests as it relates to historical interaction between Dependency.get and DumpManager. Removes the reliance on CommandQueue in NavigationBarTest and adds to the CommandQueue test in its place. Fixes: 199774897, 195135693 Test: atest SystemUITests Change-Id: I2db7b423bd05a247e021a119a2f9e66aa2b98008
This commit is contained in:
@@ -365,6 +365,12 @@ public class FrameworkServicesModule {
|
||||
return context.getSystemService(TelecomManager.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static Optional<TelecomManager> provideOptionalTelecomManager(Context context) {
|
||||
return Optional.ofNullable(context.getSystemService(TelecomManager.class));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static TelephonyManager provideTelephonyManager(Context context) {
|
||||
|
||||
@@ -93,7 +93,6 @@ import android.util.Log;
|
||||
import android.view.Display;
|
||||
import android.view.Gravity;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.InsetsState.InternalInsetsType;
|
||||
import android.view.InsetsVisibilities;
|
||||
import android.view.KeyEvent;
|
||||
@@ -118,20 +117,17 @@ import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
import com.android.internal.util.LatencyTracker;
|
||||
import com.android.internal.view.AppearanceRegion;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
||||
import com.android.systemui.accessibility.SystemActions;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.navigationbar.buttons.ButtonDispatcher;
|
||||
import com.android.systemui.navigationbar.buttons.KeyButtonView;
|
||||
import com.android.systemui.navigationbar.buttons.RotationContextButton;
|
||||
import com.android.systemui.navigationbar.gestural.QuickswitchOrientedNavHandle;
|
||||
import com.android.systemui.plugins.DarkIconDispatcher;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.recents.Recents;
|
||||
@@ -151,8 +147,6 @@ import com.android.systemui.statusbar.phone.BarTransitions;
|
||||
import com.android.systemui.statusbar.phone.LightBarController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
@@ -162,6 +156,8 @@ import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
@@ -243,7 +239,13 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
private boolean mTransientShown;
|
||||
private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
|
||||
private LightBarController mLightBarController;
|
||||
private final LightBarController mMainLightBarController;
|
||||
private final LightBarController.Factory mLightBarControllerFactory;
|
||||
private AutoHideController mAutoHideController;
|
||||
private final AutoHideController mMainAutoHideController;
|
||||
private final AutoHideController.Factory mAutoHideControllerFactory;
|
||||
private final Optional<TelecomManager> mTelecomManagerOptional;
|
||||
private final InputMethodManager mInputMethodManager;
|
||||
|
||||
@VisibleForTesting
|
||||
public int mDisplayId;
|
||||
@@ -267,6 +269,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
private ViewTreeObserver.OnGlobalLayoutListener mOrientationHandleGlobalLayoutListener;
|
||||
private boolean mShowOrientedHandleForImmersiveMode;
|
||||
|
||||
|
||||
@com.android.internal.annotations.VisibleForTesting
|
||||
public enum NavBarActionEvent implements UiEventLogger.UiEventEnum {
|
||||
|
||||
@@ -478,11 +481,10 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
}
|
||||
};
|
||||
|
||||
public NavigationBar(Context context,
|
||||
private NavigationBar(Context context,
|
||||
WindowManager windowManager,
|
||||
Lazy<AssistManager> assistManagerLazy,
|
||||
AccessibilityManager accessibilityManager,
|
||||
AccessibilityManagerWrapper accessibilityManagerWrapper,
|
||||
DeviceProvisionedController deviceProvisionedController,
|
||||
MetricsLogger metricsLogger,
|
||||
OverviewProxyService overviewProxyService,
|
||||
@@ -504,7 +506,13 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
NavigationBarOverlayController navbarOverlayController,
|
||||
UiEventLogger uiEventLogger,
|
||||
NavigationBarA11yHelper navigationBarA11yHelper,
|
||||
UserTracker userTracker) {
|
||||
UserTracker userTracker,
|
||||
LightBarController mainLightBarController,
|
||||
LightBarController.Factory lightBarControllerFactory,
|
||||
AutoHideController mainAutoHideController,
|
||||
AutoHideController.Factory autoHideControllerFactory,
|
||||
Optional<TelecomManager> telecomManagerOptional,
|
||||
InputMethodManager inputMethodManager) {
|
||||
mContext = context;
|
||||
mWindowManager = windowManager;
|
||||
mAccessibilityManager = accessibilityManager;
|
||||
@@ -531,6 +539,12 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
mNavigationBarA11yHelper = navigationBarA11yHelper;
|
||||
mUserTracker = userTracker;
|
||||
mNotificationShadeDepthController = notificationShadeDepthController;
|
||||
mMainLightBarController = mainLightBarController;
|
||||
mLightBarControllerFactory = lightBarControllerFactory;
|
||||
mMainAutoHideController = mainAutoHideController;
|
||||
mAutoHideControllerFactory = autoHideControllerFactory;
|
||||
mTelecomManagerOptional = telecomManagerOptional;
|
||||
mInputMethodManager = inputMethodManager;
|
||||
|
||||
mNavBarMode = mNavigationModeController.addListener(this);
|
||||
}
|
||||
@@ -548,7 +562,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
mNavigationBarView = barView.findViewById(R.id.navigation_bar_view);
|
||||
|
||||
if (DEBUG) Log.v(TAG, "addNavigationBar: about to add " + barView);
|
||||
mContext.getSystemService(WindowManager.class).addView(mFrame,
|
||||
mWindowManager.addView(mFrame,
|
||||
getBarLayoutParams(mContext.getResources().getConfiguration().windowConfiguration
|
||||
.getRotation()));
|
||||
mDisplayId = mContext.getDisplayId();
|
||||
@@ -606,8 +620,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
public void destroyView() {
|
||||
setAutoHideController(/* autoHideController */ null);
|
||||
mCommandQueue.removeCallback(this);
|
||||
mContext.getSystemService(WindowManager.class).removeViewImmediate(
|
||||
mNavigationBarView.getRootView());
|
||||
mWindowManager.removeViewImmediate(mNavigationBarView.getRootView());
|
||||
mNavigationModeController.removeListener(this);
|
||||
|
||||
mNavigationBarA11yHelper.removeA11yEventListener(mAccessibilityListener);
|
||||
@@ -673,22 +686,16 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
// before notifications creation. We cannot directly use getLightBarController()
|
||||
// from NavigationBarFragment directly.
|
||||
LightBarController lightBarController = mIsOnDefaultDisplay
|
||||
? Dependency.get(LightBarController.class)
|
||||
: new LightBarController(mContext,
|
||||
Dependency.get(DarkIconDispatcher.class),
|
||||
Dependency.get(BatteryController.class),
|
||||
Dependency.get(NavigationModeController.class),
|
||||
Dependency.get(DumpManager.class));
|
||||
? mMainLightBarController : mLightBarControllerFactory.create(mContext);
|
||||
setLightBarController(lightBarController);
|
||||
|
||||
// TODO(b/118592525): to support multi-display, we start to add something which is
|
||||
// per-display, while others may be global. I think it's time to
|
||||
// add a new class maybe named DisplayDependency to solve
|
||||
// per-display Dependency problem.
|
||||
// Alternative: this is a good case for a Dagger subcomponent. Same with LightBarController.
|
||||
AutoHideController autoHideController = mIsOnDefaultDisplay
|
||||
? Dependency.get(AutoHideController.class)
|
||||
: new AutoHideController(mContext, mHandler,
|
||||
Dependency.get(IWindowManager.class));
|
||||
? mMainAutoHideController : mAutoHideControllerFactory.create(mContext);
|
||||
setAutoHideController(autoHideController);
|
||||
restoreAppearanceAndTransientState();
|
||||
}
|
||||
@@ -1183,9 +1190,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
switch (event.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
mHomeBlockedThisTouch = false;
|
||||
TelecomManager telecomManager =
|
||||
mContext.getSystemService(TelecomManager.class);
|
||||
if (telecomManager != null && telecomManager.isRinging()) {
|
||||
if (mTelecomManagerOptional.isPresent()
|
||||
&& mTelecomManagerOptional.get().isRinging()) {
|
||||
if (statusBarOptional.map(StatusBar::isKeyguardShowing).orElse(false)) {
|
||||
Log.i(TAG, "Ignoring HOME; there's a ringing incoming call. " +
|
||||
"No heads up");
|
||||
@@ -1267,7 +1273,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
}
|
||||
|
||||
private void onImeSwitcherClick(View v) {
|
||||
mContext.getSystemService(InputMethodManager.class).showInputMethodPickerFromSystem(
|
||||
mInputMethodManager.showInputMethodPickerFromSystem(
|
||||
true /* showAuxiliarySubtypes */, mDisplayId);
|
||||
};
|
||||
|
||||
@@ -1702,4 +1708,123 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
int getNavigationIconHints() {
|
||||
return mNavigationIconHints;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injectable factory for construction a {@link NavigationBar}.
|
||||
*/
|
||||
public static class Factory {
|
||||
private final WindowManager mWindowManager;
|
||||
private final Lazy<AssistManager> mAssistManagerLazy;
|
||||
private final AccessibilityManager mAccessibilityManager;
|
||||
private final DeviceProvisionedController mDeviceProvisionedController;
|
||||
private final MetricsLogger mMetricsLogger;
|
||||
private final OverviewProxyService mOverviewProxyService;
|
||||
private final NavigationModeController mNavigationModeController;
|
||||
private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
private final SysUiState mSysUiFlagsContainer;
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
private final CommandQueue mCommandQueue;
|
||||
private final Optional<Pip> mPipOptional;
|
||||
private final Optional<LegacySplitScreen> mSplitScreenOptional;
|
||||
private final Optional<Recents> mRecentsOptional;
|
||||
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
|
||||
private final ShadeController mShadeController;
|
||||
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
|
||||
private final NotificationShadeDepthController mNotificationShadeDepthController;
|
||||
private final SystemActions mSystemActions;
|
||||
private final Handler mMainHandler;
|
||||
private final NavigationBarOverlayController mNavbarOverlayController;
|
||||
private final UiEventLogger mUiEventLogger;
|
||||
private final NavigationBarA11yHelper mNavigationBarA11yHelper;
|
||||
private final UserTracker mUserTracker;
|
||||
private final LightBarController mMainLightBarController;
|
||||
private final LightBarController.Factory mLightBarControllerFactory;
|
||||
private final AutoHideController mMainAutoHideController;
|
||||
private final AutoHideController.Factory mAutoHideControllerFactory;
|
||||
private final Optional<TelecomManager> mTelecomManagerOptional;
|
||||
private final InputMethodManager mInputMethodManager;
|
||||
|
||||
@Inject
|
||||
public Factory(
|
||||
WindowManager windowManager,
|
||||
Lazy<AssistManager> assistManagerLazy,
|
||||
AccessibilityManager accessibilityManager,
|
||||
DeviceProvisionedController deviceProvisionedController,
|
||||
MetricsLogger metricsLogger,
|
||||
OverviewProxyService overviewProxyService,
|
||||
NavigationModeController navigationModeController,
|
||||
AccessibilityButtonModeObserver accessibilityButtonModeObserver,
|
||||
StatusBarStateController statusBarStateController,
|
||||
SysUiState sysUiFlagsContainer,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
CommandQueue commandQueue,
|
||||
Optional<Pip> pipOptional,
|
||||
Optional<LegacySplitScreen> splitScreenOptional,
|
||||
Optional<Recents> recentsOptional,
|
||||
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
|
||||
ShadeController shadeController,
|
||||
NotificationRemoteInputManager notificationRemoteInputManager,
|
||||
NotificationShadeDepthController notificationShadeDepthController,
|
||||
SystemActions systemActions,
|
||||
@Main Handler mainHandler,
|
||||
NavigationBarOverlayController navbarOverlayController,
|
||||
UiEventLogger uiEventLogger,
|
||||
NavigationBarA11yHelper navigationBarA11yHelper,
|
||||
UserTracker userTracker,
|
||||
LightBarController mainLightBarController,
|
||||
LightBarController.Factory lightBarControllerFactory,
|
||||
AutoHideController mainAutoHideController,
|
||||
AutoHideController.Factory autoHideControllerFactory,
|
||||
Optional<TelecomManager> telecomManagerOptional,
|
||||
InputMethodManager inputMethodManager) {
|
||||
mWindowManager = windowManager;
|
||||
mAssistManagerLazy = assistManagerLazy;
|
||||
mAccessibilityManager = accessibilityManager;
|
||||
mDeviceProvisionedController = deviceProvisionedController;
|
||||
mMetricsLogger = metricsLogger;
|
||||
mOverviewProxyService = overviewProxyService;
|
||||
mNavigationModeController = navigationModeController;
|
||||
mAccessibilityButtonModeObserver = accessibilityButtonModeObserver;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mSysUiFlagsContainer = sysUiFlagsContainer;
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
mCommandQueue = commandQueue;
|
||||
mPipOptional = pipOptional;
|
||||
mSplitScreenOptional = splitScreenOptional;
|
||||
mRecentsOptional = recentsOptional;
|
||||
mStatusBarOptionalLazy = statusBarOptionalLazy;
|
||||
mShadeController = shadeController;
|
||||
mNotificationRemoteInputManager = notificationRemoteInputManager;
|
||||
mNotificationShadeDepthController = notificationShadeDepthController;
|
||||
mSystemActions = systemActions;
|
||||
mMainHandler = mainHandler;
|
||||
mNavbarOverlayController = navbarOverlayController;
|
||||
mUiEventLogger = uiEventLogger;
|
||||
mNavigationBarA11yHelper = navigationBarA11yHelper;
|
||||
mUserTracker = userTracker;
|
||||
mMainLightBarController = mainLightBarController;
|
||||
mLightBarControllerFactory = lightBarControllerFactory;
|
||||
mMainAutoHideController = mainAutoHideController;
|
||||
mAutoHideControllerFactory = autoHideControllerFactory;
|
||||
mTelecomManagerOptional = telecomManagerOptional;
|
||||
mInputMethodManager = inputMethodManager;
|
||||
}
|
||||
|
||||
/** Construct a {@link NavigationBar} */
|
||||
public NavigationBar create(Context context) {
|
||||
return new NavigationBar(context, mWindowManager, mAssistManagerLazy,
|
||||
mAccessibilityManager, mDeviceProvisionedController, mMetricsLogger,
|
||||
mOverviewProxyService, mNavigationModeController,
|
||||
mAccessibilityButtonModeObserver, mStatusBarStateController,
|
||||
mSysUiFlagsContainer, mBroadcastDispatcher, mCommandQueue, mPipOptional,
|
||||
mSplitScreenOptional, mRecentsOptional, mStatusBarOptionalLazy,
|
||||
mShadeController, mNotificationRemoteInputManager,
|
||||
mNotificationShadeDepthController, mSystemActions, mMainHandler,
|
||||
mNavbarOverlayController, mUiEventLogger, mNavigationBarA11yHelper,
|
||||
mUserTracker, mMainLightBarController, mLightBarControllerFactory,
|
||||
mMainAutoHideController, mAutoHideControllerFactory, mTelecomManagerOptional,
|
||||
mInputMethodManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,52 +32,30 @@ import android.util.SparseArray;
|
||||
import android.view.Display;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowManagerGlobal;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.internal.statusbar.RegisterStatusBarResult;
|
||||
import com.android.settingslib.applications.InterestingConfigChanges;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
||||
import com.android.systemui.accessibility.SystemActions;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
|
||||
/** A controller to handle navigation bars. */
|
||||
@SysUISingleton
|
||||
@@ -90,36 +68,12 @@ public class NavigationBarController implements
|
||||
private static final String TAG = NavigationBarController.class.getSimpleName();
|
||||
|
||||
private final Context mContext;
|
||||
private final WindowManager mWindowManager;
|
||||
private final Lazy<AssistManager> mAssistManagerLazy;
|
||||
private final AccessibilityManager mAccessibilityManager;
|
||||
private final AccessibilityManagerWrapper mAccessibilityManagerWrapper;
|
||||
private final DeviceProvisionedController mDeviceProvisionedController;
|
||||
private final MetricsLogger mMetricsLogger;
|
||||
private final OverviewProxyService mOverviewProxyService;
|
||||
private final NavigationModeController mNavigationModeController;
|
||||
private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
|
||||
private final StatusBarStateController mStatusBarStateController;
|
||||
private final SysUiState mSysUiFlagsContainer;
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
private final CommandQueue mCommandQueue;
|
||||
private final Optional<Pip> mPipOptional;
|
||||
private final Optional<LegacySplitScreen> mSplitScreenOptional;
|
||||
private final Optional<Recents> mRecentsOptional;
|
||||
private final Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
|
||||
private final ShadeController mShadeController;
|
||||
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
|
||||
private final SystemActions mSystemActions;
|
||||
private final UiEventLogger mUiEventLogger;
|
||||
private final Handler mHandler;
|
||||
private final NavigationBarA11yHelper mNavigationBarA11yHelper;
|
||||
private final NavigationBar.Factory mNavigationBarFactory;
|
||||
private final DisplayManager mDisplayManager;
|
||||
private final NavigationBarOverlayController mNavBarOverlayController;
|
||||
private final TaskbarDelegate mTaskbarDelegate;
|
||||
private final NotificationShadeDepthController mNotificationShadeDepthController;
|
||||
private int mNavMode;
|
||||
@VisibleForTesting boolean mIsTablet;
|
||||
private final UserTracker mUserTracker;
|
||||
|
||||
/** A displayId - nav bar maps. */
|
||||
@VisibleForTesting
|
||||
@@ -132,72 +86,28 @@ public class NavigationBarController implements
|
||||
|
||||
@Inject
|
||||
public NavigationBarController(Context context,
|
||||
WindowManager windowManager,
|
||||
Lazy<AssistManager> assistManagerLazy,
|
||||
AccessibilityManager accessibilityManager,
|
||||
AccessibilityManagerWrapper accessibilityManagerWrapper,
|
||||
DeviceProvisionedController deviceProvisionedController,
|
||||
MetricsLogger metricsLogger,
|
||||
OverviewProxyService overviewProxyService,
|
||||
NavigationModeController navigationModeController,
|
||||
AccessibilityButtonModeObserver accessibilityButtonModeObserver,
|
||||
StatusBarStateController statusBarStateController,
|
||||
SysUiState sysUiFlagsContainer,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
CommandQueue commandQueue,
|
||||
Optional<Pip> pipOptional,
|
||||
Optional<LegacySplitScreen> splitScreenOptional,
|
||||
Optional<Recents> recentsOptional,
|
||||
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
|
||||
ShadeController shadeController,
|
||||
NotificationRemoteInputManager notificationRemoteInputManager,
|
||||
NotificationShadeDepthController notificationShadeDepthController,
|
||||
SystemActions systemActions,
|
||||
@Main Handler mainHandler,
|
||||
UiEventLogger uiEventLogger,
|
||||
NavigationBarOverlayController navBarOverlayController,
|
||||
ConfigurationController configurationController,
|
||||
NavigationBarA11yHelper navigationBarA11yHelper,
|
||||
TaskbarDelegate taskbarDelegate,
|
||||
UserTracker userTracker,
|
||||
NavigationBar.Factory navigationBarFactory,
|
||||
DumpManager dumpManager) {
|
||||
mContext = context;
|
||||
mWindowManager = windowManager;
|
||||
mAssistManagerLazy = assistManagerLazy;
|
||||
mAccessibilityManager = accessibilityManager;
|
||||
mAccessibilityManagerWrapper = accessibilityManagerWrapper;
|
||||
mDeviceProvisionedController = deviceProvisionedController;
|
||||
mMetricsLogger = metricsLogger;
|
||||
mOverviewProxyService = overviewProxyService;
|
||||
mNavigationModeController = navigationModeController;
|
||||
mAccessibilityButtonModeObserver = accessibilityButtonModeObserver;
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mSysUiFlagsContainer = sysUiFlagsContainer;
|
||||
mBroadcastDispatcher = broadcastDispatcher;
|
||||
mCommandQueue = commandQueue;
|
||||
mPipOptional = pipOptional;
|
||||
mSplitScreenOptional = splitScreenOptional;
|
||||
mRecentsOptional = recentsOptional;
|
||||
mStatusBarOptionalLazy = statusBarOptionalLazy;
|
||||
mShadeController = shadeController;
|
||||
mNotificationRemoteInputManager = notificationRemoteInputManager;
|
||||
mNotificationShadeDepthController = notificationShadeDepthController;
|
||||
mSystemActions = systemActions;
|
||||
mUiEventLogger = uiEventLogger;
|
||||
mHandler = mainHandler;
|
||||
mNavigationBarA11yHelper = navigationBarA11yHelper;
|
||||
mNavigationBarFactory = navigationBarFactory;
|
||||
mDisplayManager = mContext.getSystemService(DisplayManager.class);
|
||||
commandQueue.addCallback(this);
|
||||
configurationController.addCallback(this);
|
||||
mConfigChanges.applyNewConfig(mContext.getResources());
|
||||
mNavBarOverlayController = navBarOverlayController;
|
||||
mNavMode = mNavigationModeController.addListener(this);
|
||||
mNavigationModeController.addListener(this);
|
||||
mNavMode = navigationModeController.addListener(this);
|
||||
mTaskbarDelegate = taskbarDelegate;
|
||||
mTaskbarDelegate.setOverviewProxyService(commandQueue, overviewProxyService,
|
||||
navigationBarA11yHelper, navigationModeController, sysUiFlagsContainer);
|
||||
mIsTablet = isTablet(mContext);
|
||||
mUserTracker = userTracker;
|
||||
|
||||
dumpManager.registerDumpable(this);
|
||||
}
|
||||
@@ -354,33 +264,8 @@ public class NavigationBarController implements
|
||||
final Context context = isOnDefaultDisplay
|
||||
? mContext
|
||||
: mContext.createDisplayContext(display);
|
||||
NavigationBar navBar = new NavigationBar(context,
|
||||
mWindowManager,
|
||||
mAssistManagerLazy,
|
||||
mAccessibilityManager,
|
||||
mAccessibilityManagerWrapper,
|
||||
mDeviceProvisionedController,
|
||||
mMetricsLogger,
|
||||
mOverviewProxyService,
|
||||
mNavigationModeController,
|
||||
mAccessibilityButtonModeObserver,
|
||||
mStatusBarStateController,
|
||||
mSysUiFlagsContainer,
|
||||
mBroadcastDispatcher,
|
||||
mCommandQueue,
|
||||
mPipOptional,
|
||||
mSplitScreenOptional,
|
||||
mRecentsOptional,
|
||||
mStatusBarOptionalLazy,
|
||||
mShadeController,
|
||||
mNotificationRemoteInputManager,
|
||||
mNotificationShadeDepthController,
|
||||
mSystemActions,
|
||||
mHandler,
|
||||
mNavBarOverlayController,
|
||||
mUiEventLogger,
|
||||
mNavigationBarA11yHelper,
|
||||
mUserTracker);
|
||||
NavigationBar navBar = mNavigationBarFactory.create(context);
|
||||
|
||||
mNavigationBars.put(displayId, navBar);
|
||||
|
||||
View navigationBarView = navBar.createView(savedState);
|
||||
|
||||
@@ -171,4 +171,23 @@ public class AutoHideController {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injectable factory for creating a {@link AutoHideController}.
|
||||
*/
|
||||
public static class Factory {
|
||||
private final Handler mHandler;
|
||||
private final IWindowManager mIWindowManager;
|
||||
|
||||
@Inject
|
||||
public Factory(@Main Handler handler, IWindowManager iWindowManager) {
|
||||
mHandler = handler;
|
||||
mIWindowManager = iWindowManager;
|
||||
}
|
||||
|
||||
/** Create an {@link AutoHideController} */
|
||||
public AutoHideController create(Context context) {
|
||||
return new AutoHideController(context, mHandler, mIWindowManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -298,4 +298,33 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
||||
pw.println();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injectable factory for creating a {@link LightBarController}.
|
||||
*/
|
||||
public static class Factory {
|
||||
private final DarkIconDispatcher mDarkIconDispatcher;
|
||||
private final BatteryController mBatteryController;
|
||||
private final NavigationModeController mNavModeController;
|
||||
private final DumpManager mDumpManager;
|
||||
|
||||
@Inject
|
||||
public Factory(
|
||||
DarkIconDispatcher darkIconDispatcher,
|
||||
BatteryController batteryController,
|
||||
NavigationModeController navModeController,
|
||||
DumpManager dumpManager) {
|
||||
|
||||
mDarkIconDispatcher = darkIconDispatcher;
|
||||
mBatteryController = batteryController;
|
||||
mNavModeController = navModeController;
|
||||
mDumpManager = dumpManager;
|
||||
}
|
||||
|
||||
/** Create an {@link LightBarController} */
|
||||
public LightBarController create(Context context) {
|
||||
return new LightBarController(context, mDarkIconDispatcher, mBatteryController,
|
||||
mNavModeController, mDumpManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
|
||||
package com.android.systemui.statusbar.policy;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener;
|
||||
@@ -35,8 +34,8 @@ public class AccessibilityManagerWrapper implements
|
||||
private final AccessibilityManager mAccessibilityManager;
|
||||
|
||||
@Inject
|
||||
public AccessibilityManagerWrapper(Context context) {
|
||||
mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
|
||||
public AccessibilityManagerWrapper(AccessibilityManager accessibilityManager) {
|
||||
mAccessibilityManager = accessibilityManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -35,42 +35,23 @@ import static org.mockito.Mockito.verify;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
import android.util.SparseArray;
|
||||
import android.view.WindowManager;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
||||
import com.android.systemui.accessibility.SystemActions;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.recents.Recents;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.util.Optional;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
/** atest NavigationBarControllerTest */
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@@ -78,46 +59,31 @@ import java.util.Optional;
|
||||
@SmallTest
|
||||
public class NavigationBarControllerTest extends SysuiTestCase {
|
||||
|
||||
private static final int SECONDARY_DISPLAY = 1;
|
||||
|
||||
private NavigationBarController mNavigationBarController;
|
||||
private NavigationBar mDefaultNavBar;
|
||||
private NavigationBar mSecondaryNavBar;
|
||||
|
||||
private CommandQueue mCommandQueue = mock(CommandQueue.class);
|
||||
|
||||
private static final int SECONDARY_DISPLAY = 1;
|
||||
@Mock
|
||||
private CommandQueue mCommandQueue;
|
||||
@Mock
|
||||
private NavigationBar.Factory mNavigationBarFactory;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mNavigationBarController = spy(
|
||||
new NavigationBarController(mContext,
|
||||
mock(WindowManager.class),
|
||||
() -> mock(AssistManager.class),
|
||||
mock(AccessibilityManager.class),
|
||||
mock(AccessibilityManagerWrapper.class),
|
||||
mock(DeviceProvisionedController.class),
|
||||
mock(MetricsLogger.class),
|
||||
mock(OverviewProxyService.class),
|
||||
mock(NavigationModeController.class),
|
||||
mock(AccessibilityButtonModeObserver.class),
|
||||
mock(StatusBarStateController.class),
|
||||
mock(SysUiState.class),
|
||||
mock(BroadcastDispatcher.class),
|
||||
mCommandQueue,
|
||||
Optional.of(mock(Pip.class)),
|
||||
Optional.of(mock(LegacySplitScreen.class)),
|
||||
Optional.of(mock(Recents.class)),
|
||||
() -> Optional.of(mock(StatusBar.class)),
|
||||
mock(ShadeController.class),
|
||||
mock(NotificationRemoteInputManager.class),
|
||||
mock(NotificationShadeDepthController.class),
|
||||
mock(SystemActions.class),
|
||||
Dependency.get(Dependency.MAIN_HANDLER),
|
||||
mock(UiEventLogger.class),
|
||||
mock(NavigationBarOverlayController.class),
|
||||
mock(ConfigurationController.class),
|
||||
mock(NavigationBarA11yHelper.class),
|
||||
mock(TaskbarDelegate.class),
|
||||
mock(UserTracker.class),
|
||||
mNavigationBarFactory,
|
||||
mock(DumpManager.class)));
|
||||
initializeNavigationBars();
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.systemui.navigationbar;
|
||||
import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
|
||||
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;
|
||||
import static android.inputmethodservice.InputMethodService.BACK_DISPOSITION_DEFAULT;
|
||||
import static android.inputmethodservice.InputMethodService.IME_INVISIBLE;
|
||||
import static android.inputmethodservice.InputMethodService.IME_VISIBLE;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS;
|
||||
@@ -28,7 +29,6 @@ import static com.android.systemui.navigationbar.NavigationBar.NavBarActionEvent
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
@@ -45,11 +45,11 @@ import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.display.DisplayManagerGlobal;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.provider.Settings;
|
||||
import android.telecom.TelecomManager;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
@@ -60,12 +60,12 @@ import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowMetrics;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.SysuiTestableContext;
|
||||
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
||||
@@ -81,9 +81,10 @@ import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.statusbar.CommandQueue;
|
||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||
import com.android.systemui.statusbar.phone.LightBarController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
||||
@@ -110,7 +111,13 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
private NavigationBar mExternalDisplayNavigationBar;
|
||||
|
||||
private SysuiTestableContext mSysuiTestableContextExternal;
|
||||
@Mock
|
||||
private OverviewProxyService mOverviewProxyService;
|
||||
@Mock
|
||||
private StatusBarStateController mStatusBarStateController;
|
||||
@Mock
|
||||
private NavigationModeController mNavigationModeController;
|
||||
@Mock
|
||||
private CommandQueue mCommandQueue;
|
||||
private SysUiState mMockSysUiState;
|
||||
@Mock
|
||||
@@ -125,11 +132,25 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
EdgeBackGestureHandler mEdgeBackGestureHandler;
|
||||
@Mock
|
||||
NavigationBarA11yHelper mNavigationBarA11yHelper;
|
||||
@Mock
|
||||
private LightBarController mLightBarController;
|
||||
@Mock
|
||||
private LightBarController.Factory mLightBarcontrollerFactory;
|
||||
@Mock
|
||||
private AutoHideController mAutoHideController;
|
||||
@Mock
|
||||
private AutoHideController.Factory mAutoHideControllerFactory;
|
||||
@Mock
|
||||
private WindowManager mWindowManager;
|
||||
@Mock
|
||||
private TelecomManager mTelecomManager;
|
||||
@Mock
|
||||
private InputMethodManager mInputMethodManager;
|
||||
@Mock
|
||||
private AssistManager mAssistManager;
|
||||
|
||||
@Rule
|
||||
public final LeakCheckedTest.SysuiLeakCheck mLeakCheck = new LeakCheckedTest.SysuiLeakCheck();
|
||||
private AccessibilityManagerWrapper mAccessibilityWrapper =
|
||||
new AccessibilityManagerWrapper(mContext);
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
@@ -137,15 +158,19 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
|
||||
when(mEdgeBackGestureHandlerFactory.create(any(Context.class)))
|
||||
.thenReturn(mEdgeBackGestureHandler);
|
||||
mCommandQueue = new CommandQueue(mContext);
|
||||
when(mLightBarcontrollerFactory.create(any(Context.class))).thenReturn(mLightBarController);
|
||||
when(mAutoHideControllerFactory.create(any(Context.class))).thenReturn(mAutoHideController);
|
||||
setupSysuiDependency();
|
||||
mDependency.injectMockDependency(AssistManager.class);
|
||||
// This class inflates views that call Dependency.get, thus these injections are still
|
||||
// necessary.
|
||||
mDependency.injectTestDependency(AssistManager.class, mAssistManager);
|
||||
mDependency.injectMockDependency(KeyguardStateController.class);
|
||||
mDependency.injectMockDependency(StatusBarStateController.class);
|
||||
mDependency.injectTestDependency(StatusBarStateController.class, mStatusBarStateController);
|
||||
mDependency.injectMockDependency(NavigationBarController.class);
|
||||
mOverviewProxyService = mDependency.injectMockDependency(OverviewProxyService.class);
|
||||
mDependency.injectTestDependency(EdgeBackGestureHandler.Factory.class,
|
||||
mEdgeBackGestureHandlerFactory);
|
||||
mDependency.injectTestDependency(OverviewProxyService.class, mOverviewProxyService);
|
||||
mDependency.injectTestDependency(NavigationModeController.class, mNavigationModeController);
|
||||
TestableLooper.get(this).runWithLooper(() -> {
|
||||
mNavigationBar = createNavBar(mContext);
|
||||
mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal);
|
||||
@@ -164,23 +189,13 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
mSysuiTestableContextExternal = (SysuiTestableContext) getContext().createDisplayContext(
|
||||
display);
|
||||
|
||||
WindowManager windowManager = mock(WindowManager.class);
|
||||
Display defaultDisplay = mContext.getSystemService(WindowManager.class).getDefaultDisplay();
|
||||
when(windowManager.getDefaultDisplay()).thenReturn(
|
||||
defaultDisplay);
|
||||
WindowMetrics maximumWindowMetrics = mContext.getSystemService(WindowManager.class)
|
||||
Display defaultDisplay = mContext.getDisplay();
|
||||
when(mWindowManager.getDefaultDisplay()).thenReturn(defaultDisplay);
|
||||
WindowMetrics metrics = mContext.getSystemService(WindowManager.class)
|
||||
.getMaximumWindowMetrics();
|
||||
when(windowManager.getMaximumWindowMetrics()).thenReturn(maximumWindowMetrics);
|
||||
WindowMetrics currentWindowMetrics = mContext.getSystemService(WindowManager.class)
|
||||
.getCurrentWindowMetrics();
|
||||
when(windowManager.getCurrentWindowMetrics()).thenReturn(currentWindowMetrics);
|
||||
doNothing().when(windowManager).addView(any(), any());
|
||||
mContext.addMockSystemService(Context.WINDOW_SERVICE, windowManager);
|
||||
mSysuiTestableContextExternal.addMockSystemService(Context.WINDOW_SERVICE, windowManager);
|
||||
|
||||
mDependency.injectTestDependency(Dependency.BG_LOOPER, Looper.getMainLooper());
|
||||
mDependency.injectTestDependency(AccessibilityManagerWrapper.class, mAccessibilityWrapper);
|
||||
|
||||
when(mWindowManager.getMaximumWindowMetrics()).thenReturn(metrics);
|
||||
doNothing().when(mWindowManager).addView(any(), any());
|
||||
doNothing().when(mWindowManager).removeViewImmediate(any());
|
||||
mMockSysUiState = mock(SysUiState.class);
|
||||
when(mMockSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mMockSysUiState);
|
||||
}
|
||||
@@ -239,10 +254,8 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
defaultNavBar.createView(null);
|
||||
externalNavBar.createView(null);
|
||||
|
||||
// Set IME window status for default NavBar.
|
||||
mCommandQueue.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE,
|
||||
BACK_DISPOSITION_DEFAULT, true, false);
|
||||
processAllMessages();
|
||||
defaultNavBar.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE,
|
||||
BACK_DISPOSITION_DEFAULT, true);
|
||||
|
||||
// Verify IME window state will be updated in default NavBar & external NavBar state reset.
|
||||
assertEquals(NAVIGATION_HINT_BACK_ALT | NAVIGATION_HINT_IME_SHOWN,
|
||||
@@ -250,11 +263,10 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
assertFalse((externalNavBar.getNavigationIconHints() & NAVIGATION_HINT_BACK_ALT) != 0);
|
||||
assertFalse((externalNavBar.getNavigationIconHints() & NAVIGATION_HINT_IME_SHOWN) != 0);
|
||||
|
||||
// Set IME window status for external NavBar.
|
||||
mCommandQueue.setImeWindowStatus(EXTERNAL_DISPLAY_ID, null,
|
||||
IME_VISIBLE, BACK_DISPOSITION_DEFAULT, true, false);
|
||||
processAllMessages();
|
||||
|
||||
externalNavBar.setImeWindowStatus(EXTERNAL_DISPLAY_ID, null, IME_VISIBLE,
|
||||
BACK_DISPOSITION_DEFAULT, true);
|
||||
defaultNavBar.setImeWindowStatus(
|
||||
DEFAULT_DISPLAY, null, IME_INVISIBLE, BACK_DISPOSITION_DEFAULT, false);
|
||||
// Verify IME window state will be updated in external NavBar & default NavBar state reset.
|
||||
assertEquals(NAVIGATION_HINT_BACK_ALT | NAVIGATION_HINT_IME_SHOWN,
|
||||
externalNavBar.getNavigationIconHints());
|
||||
@@ -280,19 +292,16 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
DeviceProvisionedController deviceProvisionedController =
|
||||
mock(DeviceProvisionedController.class);
|
||||
when(deviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
|
||||
assertNotNull(mAccessibilityWrapper);
|
||||
return spy(new NavigationBar(context,
|
||||
mock(WindowManager.class),
|
||||
() -> mock(AssistManager.class),
|
||||
NavigationBar.Factory factory = new NavigationBar.Factory(
|
||||
mWindowManager,
|
||||
() -> mAssistManager,
|
||||
mock(AccessibilityManager.class),
|
||||
context.getDisplayId() == DEFAULT_DISPLAY ? mAccessibilityWrapper
|
||||
: mock(AccessibilityManagerWrapper.class),
|
||||
deviceProvisionedController,
|
||||
new MetricsLogger(),
|
||||
mOverviewProxyService,
|
||||
mock(NavigationModeController.class),
|
||||
mNavigationModeController,
|
||||
mock(AccessibilityButtonModeObserver.class),
|
||||
mock(StatusBarStateController.class),
|
||||
mStatusBarStateController,
|
||||
mMockSysUiState,
|
||||
mBroadcastDispatcher,
|
||||
mCommandQueue,
|
||||
@@ -308,7 +317,14 @@ public class NavigationBarTest extends SysuiTestCase {
|
||||
mock(NavigationBarOverlayController.class),
|
||||
mUiEventLogger,
|
||||
mNavigationBarA11yHelper,
|
||||
mock(UserTracker.class)));
|
||||
mock(UserTracker.class),
|
||||
mLightBarController,
|
||||
mLightBarcontrollerFactory,
|
||||
mAutoHideController,
|
||||
mAutoHideControllerFactory,
|
||||
Optional.of(mTelecomManager),
|
||||
mInputMethodManager);
|
||||
return spy(factory.create(context));
|
||||
}
|
||||
|
||||
private void processAllMessages() {
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
package com.android.systemui.statusbar;
|
||||
|
||||
import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
|
||||
import static android.inputmethodservice.InputMethodService.BACK_DISPOSITION_DEFAULT;
|
||||
import static android.inputmethodservice.InputMethodService.IME_INVISIBLE;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
|
||||
import static android.view.InsetsState.ITYPE_STATUS_BAR;
|
||||
@@ -188,8 +190,13 @@ public class CommandQueueTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void testShowImeButtonForSecondaryDisplay() {
|
||||
// First show in default display to update the "last updated ime display"
|
||||
testShowImeButton();
|
||||
|
||||
mCommandQueue.setImeWindowStatus(SECONDARY_DISPLAY, null, 1, 2, true, false);
|
||||
waitForIdleSync();
|
||||
verify(mCallbacks).setImeWindowStatus(eq(DEFAULT_DISPLAY), eq(null), eq(IME_INVISIBLE),
|
||||
eq(BACK_DISPOSITION_DEFAULT), eq(false));
|
||||
verify(mCallbacks).setImeWindowStatus(
|
||||
eq(SECONDARY_DISPLAY), eq(null), eq(1), eq(2), eq(true));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user