Reland "Remove Dependency.get from NavigationBar."
This reverts commit be525911ce.
The original CL fixed the SystemUI crash when create dependency for
DumpManager.
Two more modify from the original CL:
- NavigationBar should create for each display, so there cannot use the
injected WindowManager to add/remove view.
- The LightBarController is also create for each display, so the
DumpManager should only register for default display, otherwise the
registerDumpable will throw exception when creating for non-default
display.
Bug: 199481992
Test: atest MultiDisplaySystemDecorationTests
Test: atest SystemUITests
Change-Id: I2be879f85fcc9f5f83cb33a564a3a25d8d9a3254
This commit is contained in:
committed by
Wei Sheng Shih
parent
3aef71348e
commit
6c6a688d15
@@ -372,6 +372,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,121 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||
int getNavigationIconHints() {
|
||||
return mNavigationIconHints;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injectable factory for construction a {@link NavigationBar}.
|
||||
*/
|
||||
public static class Factory {
|
||||
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(
|
||||
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) {
|
||||
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) {
|
||||
final WindowManager wm = context.getSystemService(WindowManager.class);
|
||||
return new NavigationBar(context, wm, 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,53 +32,31 @@ 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.AutoHideController;
|
||||
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
|
||||
@@ -91,36 +69,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
|
||||
@@ -133,75 +87,30 @@ 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,
|
||||
AutoHideController autoHideController) {
|
||||
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.setDependencies(commandQueue, overviewProxyService,
|
||||
navigationBarA11yHelper, navigationModeController, sysUiFlagsContainer,
|
||||
dumpManager, autoHideController);
|
||||
mIsTablet = isTablet(mContext);
|
||||
mUserTracker = userTracker;
|
||||
|
||||
dumpManager.registerDumpable(this);
|
||||
}
|
||||
|
||||
@@ -357,33 +266,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);
|
||||
|
||||
@@ -172,4 +172,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
|
||||
|
||||
@@ -101,7 +102,9 @@ public class LightBarController implements BatteryController.BatteryStateChangeC
|
||||
mNavigationMode = mode;
|
||||
});
|
||||
|
||||
dumpManager.registerDumpable(getClass().getSimpleName(), this);
|
||||
if (ctx.getDisplayId() == DEFAULT_DISPLAY) {
|
||||
dumpManager.registerDumpable(getClass().getSimpleName(), this);
|
||||
}
|
||||
}
|
||||
|
||||
public void setNavigationBar(LightBarTransitionsController navigationBar) {
|
||||
@@ -298,4 +301,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,43 +35,24 @@ 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.AutoHideController;
|
||||
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)
|
||||
@@ -79,46 +60,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),
|
||||
mock(AutoHideController.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,25 +189,21 @@ 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);
|
||||
when(mWindowManager.getMaximumWindowMetrics()).thenReturn(metrics);
|
||||
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.getCurrentWindowMetrics()).thenReturn(currentWindowMetrics);
|
||||
doNothing().when(mWindowManager).addView(any(), any());
|
||||
doNothing().when(mWindowManager).removeViewImmediate(any());
|
||||
mMockSysUiState = mock(SysUiState.class);
|
||||
when(mMockSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mMockSysUiState);
|
||||
|
||||
mContext.addMockSystemService(WindowManager.class, mWindowManager);
|
||||
mSysuiTestableContextExternal.addMockSystemService(WindowManager.class, mWindowManager);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -239,10 +260,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 +269,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 +298,15 @@ 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(
|
||||
() -> 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 +322,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