Merge "Revert "Move touch handling out of NavigationBarView."" into tm-dev
This commit is contained in:
@@ -47,7 +47,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A
|
|||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
|
|
||||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
|
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
|
||||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
|
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
|
||||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
||||||
@@ -62,6 +61,7 @@ import android.app.ActivityTaskManager;
|
|||||||
import android.app.IActivityTaskManager;
|
import android.app.IActivityTaskManager;
|
||||||
import android.app.StatusBarManager;
|
import android.app.StatusBarManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
@@ -107,15 +107,13 @@ import com.android.internal.logging.UiEventLogger;
|
|||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||||
import com.android.internal.util.LatencyTracker;
|
import com.android.internal.util.LatencyTracker;
|
||||||
import com.android.internal.view.AppearanceRegion;
|
import com.android.internal.view.AppearanceRegion;
|
||||||
import com.android.systemui.Gefingerpoken;
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
||||||
import com.android.systemui.assist.AssistManager;
|
import com.android.systemui.assist.AssistManager;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.model.SysUiState;
|
import com.android.systemui.model.SysUiState;
|
||||||
import com.android.systemui.navigationbar.NavigationModeController.ModeChangedListener;
|
|
||||||
import com.android.systemui.navigationbar.buttons.ButtonDispatcher;
|
import com.android.systemui.navigationbar.buttons.ButtonDispatcher;
|
||||||
import com.android.systemui.navigationbar.buttons.DeadZone;
|
|
||||||
import com.android.systemui.navigationbar.buttons.KeyButtonView;
|
import com.android.systemui.navigationbar.buttons.KeyButtonView;
|
||||||
import com.android.systemui.navigationbar.buttons.RotationContextButton;
|
import com.android.systemui.navigationbar.buttons.RotationContextButton;
|
||||||
import com.android.systemui.navigationbar.gestural.QuickswitchOrientedNavHandle;
|
import com.android.systemui.navigationbar.gestural.QuickswitchOrientedNavHandle;
|
||||||
@@ -127,7 +125,6 @@ import com.android.systemui.shared.rotation.RotationButton;
|
|||||||
import com.android.systemui.shared.rotation.RotationButtonController;
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
import com.android.systemui.shared.system.SysUiStatsLog;
|
|
||||||
import com.android.systemui.statusbar.AutoHideUiElement;
|
import com.android.systemui.statusbar.AutoHideUiElement;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
import com.android.systemui.statusbar.CommandQueue.Callbacks;
|
||||||
@@ -149,15 +146,15 @@ import java.util.Locale;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
import dagger.assisted.Assisted;
|
|
||||||
import dagger.assisted.AssistedFactory;
|
|
||||||
import dagger.assisted.AssistedInject;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains logic for a navigation bar view.
|
* Contains logic for a navigation bar view.
|
||||||
*/
|
*/
|
||||||
public class NavigationBar implements View.OnAttachStateChangeListener, Callbacks {
|
public class NavigationBar implements View.OnAttachStateChangeListener,
|
||||||
|
Callbacks, NavigationModeController.ModeChangedListener {
|
||||||
|
|
||||||
public static final String TAG = "NavigationBar";
|
public static final String TAG = "NavigationBar";
|
||||||
private static final boolean DEBUG = false;
|
private static final boolean DEBUG = false;
|
||||||
@@ -184,6 +181,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
|
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
|
||||||
private final OverviewProxyService mOverviewProxyService;
|
private final OverviewProxyService mOverviewProxyService;
|
||||||
private final NavigationModeController mNavigationModeController;
|
private final NavigationModeController mNavigationModeController;
|
||||||
|
private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
|
||||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||||
private final CommandQueue mCommandQueue;
|
private final CommandQueue mCommandQueue;
|
||||||
private final Optional<Pip> mPipOptional;
|
private final Optional<Pip> mPipOptional;
|
||||||
@@ -202,7 +200,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
|
private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
|
||||||
|
|
||||||
private int mNavigationIconHints = 0;
|
private int mNavigationIconHints = 0;
|
||||||
private @TransitionMode int mTransitionMode;
|
private @TransitionMode int mNavigationBarMode;
|
||||||
|
private ContentResolver mContentResolver;
|
||||||
private boolean mLongPressHomeEnabled;
|
private boolean mLongPressHomeEnabled;
|
||||||
|
|
||||||
private int mDisabledFlags1;
|
private int mDisabledFlags1;
|
||||||
@@ -256,8 +255,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
private int mCurrentRotation;
|
private int mCurrentRotation;
|
||||||
private ViewTreeObserver.OnGlobalLayoutListener mOrientationHandleGlobalLayoutListener;
|
private ViewTreeObserver.OnGlobalLayoutListener mOrientationHandleGlobalLayoutListener;
|
||||||
private boolean mShowOrientedHandleForImmersiveMode;
|
private boolean mShowOrientedHandleForImmersiveMode;
|
||||||
private DeadZone mDeadZone;
|
|
||||||
private boolean mImeVisible;
|
|
||||||
|
|
||||||
@com.android.internal.annotations.VisibleForTesting
|
@com.android.internal.annotations.VisibleForTesting
|
||||||
public enum NavBarActionEvent implements UiEventLogger.UiEventEnum {
|
public enum NavBarActionEvent implements UiEventLogger.UiEventEnum {
|
||||||
@@ -473,9 +471,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@AssistedInject
|
private NavigationBar(Context context,
|
||||||
NavigationBar(
|
|
||||||
@Assisted Context context,
|
|
||||||
WindowManager windowManager,
|
WindowManager windowManager,
|
||||||
Lazy<AssistManager> assistManagerLazy,
|
Lazy<AssistManager> assistManagerLazy,
|
||||||
AccessibilityManager accessibilityManager,
|
AccessibilityManager accessibilityManager,
|
||||||
@@ -483,6 +479,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
MetricsLogger metricsLogger,
|
MetricsLogger metricsLogger,
|
||||||
OverviewProxyService overviewProxyService,
|
OverviewProxyService overviewProxyService,
|
||||||
NavigationModeController navigationModeController,
|
NavigationModeController navigationModeController,
|
||||||
|
AccessibilityButtonModeObserver accessibilityButtonModeObserver,
|
||||||
StatusBarStateController statusBarStateController,
|
StatusBarStateController statusBarStateController,
|
||||||
SysUiState sysUiFlagsContainer,
|
SysUiState sysUiFlagsContainer,
|
||||||
BroadcastDispatcher broadcastDispatcher,
|
BroadcastDispatcher broadcastDispatcher,
|
||||||
@@ -517,6 +514,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
mNotificationRemoteInputManager = notificationRemoteInputManager;
|
mNotificationRemoteInputManager = notificationRemoteInputManager;
|
||||||
mOverviewProxyService = overviewProxyService;
|
mOverviewProxyService = overviewProxyService;
|
||||||
mNavigationModeController = navigationModeController;
|
mNavigationModeController = navigationModeController;
|
||||||
|
mAccessibilityButtonModeObserver = accessibilityButtonModeObserver;
|
||||||
mBroadcastDispatcher = broadcastDispatcher;
|
mBroadcastDispatcher = broadcastDispatcher;
|
||||||
mCommandQueue = commandQueue;
|
mCommandQueue = commandQueue;
|
||||||
mPipOptional = pipOptional;
|
mPipOptional = pipOptional;
|
||||||
@@ -534,7 +532,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
mTelecomManagerOptional = telecomManagerOptional;
|
mTelecomManagerOptional = telecomManagerOptional;
|
||||||
mInputMethodManager = inputMethodManager;
|
mInputMethodManager = inputMethodManager;
|
||||||
|
|
||||||
mNavBarMode = mNavigationModeController.addListener(mModeChangedListener);
|
mNavBarMode = mNavigationModeController.addListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NavigationBarView getView() {
|
public NavigationBarView getView() {
|
||||||
@@ -548,11 +546,6 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
R.layout.navigation_bar, mFrame);
|
R.layout.navigation_bar, mFrame);
|
||||||
barView.addOnAttachStateChangeListener(this);
|
barView.addOnAttachStateChangeListener(this);
|
||||||
mNavigationBarView = barView.findViewById(R.id.navigation_bar_view);
|
mNavigationBarView = barView.findViewById(R.id.navigation_bar_view);
|
||||||
mDeadZone = new DeadZone(mNavigationBarView);
|
|
||||||
mNavigationBarView.setTouchHandler(mTouchHandler);
|
|
||||||
mNavigationBarView.setNavBarMode(mNavBarMode);
|
|
||||||
|
|
||||||
mNavigationBarView.updateRotationButton();
|
|
||||||
|
|
||||||
mNavigationBarView.setVisibility(initialVisibility ? View.VISIBLE : View.INVISIBLE);
|
mNavigationBarView.setVisibility(initialVisibility ? View.VISIBLE : View.INVISIBLE);
|
||||||
|
|
||||||
@@ -565,6 +558,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
|
|
||||||
mCommandQueue.addCallback(this);
|
mCommandQueue.addCallback(this);
|
||||||
mLongPressHomeEnabled = mNavBarHelper.getLongPressHomeEnabled();
|
mLongPressHomeEnabled = mNavBarHelper.getLongPressHomeEnabled();
|
||||||
|
mContentResolver = mContext.getContentResolver();
|
||||||
mNavBarHelper.init();
|
mNavBarHelper.init();
|
||||||
mAllowForceNavBarHandleOpaque = mContext.getResources().getBoolean(
|
mAllowForceNavBarHandleOpaque = mContext.getResources().getBoolean(
|
||||||
R.bool.allow_force_nav_bar_handle_opaque);
|
R.bool.allow_force_nav_bar_handle_opaque);
|
||||||
@@ -603,7 +597,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
setAutoHideController(/* autoHideController */ null);
|
setAutoHideController(/* autoHideController */ null);
|
||||||
mCommandQueue.removeCallback(this);
|
mCommandQueue.removeCallback(this);
|
||||||
mWindowManager.removeViewImmediate(mNavigationBarView.getRootView());
|
mWindowManager.removeViewImmediate(mNavigationBarView.getRootView());
|
||||||
mNavigationModeController.removeListener(mModeChangedListener);
|
mNavigationModeController.removeListener(this);
|
||||||
|
|
||||||
mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
|
mNavBarHelper.removeNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
|
||||||
mNavBarHelper.destroy();
|
mNavBarHelper.destroy();
|
||||||
@@ -618,16 +612,15 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
final Display display = v.getDisplay();
|
final Display display = v.getDisplay();
|
||||||
mNavigationBarView.setComponents(mRecentsOptional);
|
mNavigationBarView.setComponents(mRecentsOptional);
|
||||||
mNavigationBarView.setComponents(mCentralSurfacesOptionalLazy.get().get().getPanelController());
|
mNavigationBarView.setComponents(mCentralSurfacesOptionalLazy.get().get().getPanelController());
|
||||||
mNavigationBarView.setDisabledFlags(mDisabledFlags1, mSysUiFlagsContainer);
|
mNavigationBarView.setDisabledFlags(mDisabledFlags1);
|
||||||
mNavigationBarView.setOnVerticalChangedListener(this::onVerticalChanged);
|
mNavigationBarView.setOnVerticalChangedListener(this::onVerticalChanged);
|
||||||
mNavigationBarView.setOnTouchListener(this::onNavigationTouch);
|
mNavigationBarView.setOnTouchListener(this::onNavigationTouch);
|
||||||
if (mSavedState != null) {
|
if (mSavedState != null) {
|
||||||
mNavigationBarView.getLightTransitionsController().restoreState(mSavedState);
|
mNavigationBarView.getLightTransitionsController().restoreState(mSavedState);
|
||||||
}
|
}
|
||||||
setNavigationIconHints(mNavigationIconHints);
|
mNavigationBarView.setNavigationIconHints(mNavigationIconHints);
|
||||||
mNavigationBarView.setWindowVisible(isNavBarWindowVisible());
|
mNavigationBarView.setWindowVisible(isNavBarWindowVisible());
|
||||||
mNavigationBarView.setBehavior(mBehavior);
|
mNavigationBarView.setBehavior(mBehavior);
|
||||||
mNavigationBarView.setNavBarMode(mNavBarMode);
|
|
||||||
|
|
||||||
mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
|
mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater);
|
||||||
|
|
||||||
@@ -872,8 +865,8 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
pw.println(" mLongPressHomeEnabled=" + mLongPressHomeEnabled);
|
pw.println(" mLongPressHomeEnabled=" + mLongPressHomeEnabled);
|
||||||
pw.println(" mNavigationBarWindowState="
|
pw.println(" mNavigationBarWindowState="
|
||||||
+ windowStateToString(mNavigationBarWindowState));
|
+ windowStateToString(mNavigationBarWindowState));
|
||||||
pw.println(" mTransitionMode="
|
pw.println(" mNavigationBarMode="
|
||||||
+ BarTransitions.modeToString(mTransitionMode));
|
+ BarTransitions.modeToString(mNavigationBarMode));
|
||||||
pw.println(" mTransientShown=" + mTransientShown);
|
pw.println(" mTransientShown=" + mTransientShown);
|
||||||
pw.println(" mTransientShownFromGestureOnSystemBar="
|
pw.println(" mTransientShownFromGestureOnSystemBar="
|
||||||
+ mTransientShownFromGestureOnSystemBar);
|
+ mTransientShownFromGestureOnSystemBar);
|
||||||
@@ -895,7 +888,11 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
imeShown, showImeSwitcher);
|
imeShown, showImeSwitcher);
|
||||||
if (hints == mNavigationIconHints) return;
|
if (hints == mNavigationIconHints) return;
|
||||||
|
|
||||||
setNavigationIconHints(hints);
|
mNavigationIconHints = hints;
|
||||||
|
if (!isTablet(mContext)) {
|
||||||
|
// All IME functions handled by launcher via Sysui flags for large screen
|
||||||
|
mNavigationBarView.setNavigationIconHints(hints);
|
||||||
|
}
|
||||||
checkBarModes();
|
checkBarModes();
|
||||||
updateSystemUiStateFlags();
|
updateSystemUiStateFlags();
|
||||||
}
|
}
|
||||||
@@ -955,15 +952,15 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
|
|
||||||
/** Restores the appearance and the transient saved state to {@link NavigationBar}. */
|
/** Restores the appearance and the transient saved state to {@link NavigationBar}. */
|
||||||
public void restoreAppearanceAndTransientState() {
|
public void restoreAppearanceAndTransientState() {
|
||||||
final int transitionMode = transitionMode(mTransientShown, mAppearance);
|
final int barMode = barMode(mTransientShown, mAppearance);
|
||||||
mTransitionMode = transitionMode;
|
mNavigationBarMode = barMode;
|
||||||
checkNavBarModes();
|
checkNavBarModes();
|
||||||
if (mAutoHideController != null) {
|
if (mAutoHideController != null) {
|
||||||
mAutoHideController.touchAutoHide();
|
mAutoHideController.touchAutoHide();
|
||||||
}
|
}
|
||||||
if (mLightBarController != null) {
|
if (mLightBarController != null) {
|
||||||
mLightBarController.onNavigationBarAppearanceChanged(mAppearance,
|
mLightBarController.onNavigationBarAppearanceChanged(mAppearance,
|
||||||
true /* nbModeChanged */, transitionMode, false /* navbarColorManagedByIme */);
|
true /* nbModeChanged */, barMode, false /* navbarColorManagedByIme */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -977,11 +974,11 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
boolean nbModeChanged = false;
|
boolean nbModeChanged = false;
|
||||||
if (mAppearance != appearance) {
|
if (mAppearance != appearance) {
|
||||||
mAppearance = appearance;
|
mAppearance = appearance;
|
||||||
nbModeChanged = updateTransitionMode(transitionMode(mTransientShown, appearance));
|
nbModeChanged = updateBarMode(barMode(mTransientShown, appearance));
|
||||||
}
|
}
|
||||||
if (mLightBarController != null) {
|
if (mLightBarController != null) {
|
||||||
mLightBarController.onNavigationBarAppearanceChanged(appearance, nbModeChanged,
|
mLightBarController.onNavigationBarAppearanceChanged(appearance, nbModeChanged,
|
||||||
mTransitionMode, navbarColorManagedByIme);
|
mNavigationBarMode, navbarColorManagedByIme);
|
||||||
}
|
}
|
||||||
if (mBehavior != behavior) {
|
if (mBehavior != behavior) {
|
||||||
mBehavior = behavior;
|
mBehavior = behavior;
|
||||||
@@ -1028,16 +1025,16 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
private void handleTransientChanged() {
|
private void handleTransientChanged() {
|
||||||
mNavigationBarView.onTransientStateChanged(mTransientShown,
|
mNavigationBarView.onTransientStateChanged(mTransientShown,
|
||||||
mTransientShownFromGestureOnSystemBar);
|
mTransientShownFromGestureOnSystemBar);
|
||||||
final int transitionMode = transitionMode(mTransientShown, mAppearance);
|
final int barMode = barMode(mTransientShown, mAppearance);
|
||||||
if (updateTransitionMode(transitionMode) && mLightBarController != null) {
|
if (updateBarMode(barMode) && mLightBarController != null) {
|
||||||
mLightBarController.onNavigationBarModeChanged(transitionMode);
|
mLightBarController.onNavigationBarModeChanged(barMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the bar mode is changed.
|
// Returns true if the bar mode is changed.
|
||||||
private boolean updateTransitionMode(int barMode) {
|
private boolean updateBarMode(int barMode) {
|
||||||
if (mTransitionMode != barMode) {
|
if (mNavigationBarMode != barMode) {
|
||||||
mTransitionMode = barMode;
|
mNavigationBarMode = barMode;
|
||||||
checkNavBarModes();
|
checkNavBarModes();
|
||||||
if (mAutoHideController != null) {
|
if (mAutoHideController != null) {
|
||||||
mAutoHideController.touchAutoHide();
|
mAutoHideController.touchAutoHide();
|
||||||
@@ -1047,7 +1044,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static @TransitionMode int transitionMode(boolean isTransient, int appearance) {
|
private static @TransitionMode int barMode(boolean isTransient, int appearance) {
|
||||||
final int lightsOutOpaque = APPEARANCE_LOW_PROFILE_BARS | APPEARANCE_OPAQUE_NAVIGATION_BARS;
|
final int lightsOutOpaque = APPEARANCE_LOW_PROFILE_BARS | APPEARANCE_OPAQUE_NAVIGATION_BARS;
|
||||||
if (isTransient) {
|
if (isTransient) {
|
||||||
return MODE_SEMI_TRANSPARENT;
|
return MODE_SEMI_TRANSPARENT;
|
||||||
@@ -1076,7 +1073,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
| StatusBarManager.DISABLE_SEARCH);
|
| StatusBarManager.DISABLE_SEARCH);
|
||||||
if (masked != mDisabledFlags1) {
|
if (masked != mDisabledFlags1) {
|
||||||
mDisabledFlags1 = masked;
|
mDisabledFlags1 = masked;
|
||||||
mNavigationBarView.setDisabledFlags(state1, mSysUiFlagsContainer);
|
mNavigationBarView.setDisabledFlags(state1);
|
||||||
updateScreenPinningGestures();
|
updateScreenPinningGestures();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1458,7 +1455,24 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
mCentralSurfacesOptionalLazy.get().map(CentralSurfaces::isDeviceInteractive)
|
mCentralSurfacesOptionalLazy.get().map(CentralSurfaces::isDeviceInteractive)
|
||||||
.orElse(false)
|
.orElse(false)
|
||||||
&& mNavigationBarWindowState != WINDOW_STATE_HIDDEN;
|
&& mNavigationBarWindowState != WINDOW_STATE_HIDDEN;
|
||||||
mNavigationBarView.getBarTransitions().transitionTo(mTransitionMode, anim);
|
mNavigationBarView.getBarTransitions().transitionTo(mNavigationBarMode, anim);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNavigationModeChanged(int mode) {
|
||||||
|
mNavBarMode = mode;
|
||||||
|
|
||||||
|
if (!QuickStepContract.isGesturalMode(mode)) {
|
||||||
|
// Reset the override alpha
|
||||||
|
if (getBarTransitions() != null) {
|
||||||
|
getBarTransitions().setBackgroundOverrideAlpha(1f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateScreenPinningGestures();
|
||||||
|
|
||||||
|
if (!canShowSecondaryHandle()) {
|
||||||
|
resetSecondaryHandle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disableAnimationsDuringHide(long delay) {
|
public void disableAnimationsDuringHide(long delay) {
|
||||||
@@ -1599,102 +1613,114 @@ public class NavigationBar implements View.OnAttachStateChangeListener, Callback
|
|||||||
return mNavigationIconHints;
|
return mNavigationIconHints;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setNavigationIconHints(int hints) {
|
|
||||||
if (hints == mNavigationIconHints) return;
|
|
||||||
if (!isTablet(mContext)) {
|
|
||||||
// All IME functions handled by launcher via Sysui flags for large screen
|
|
||||||
final boolean newBackAlt = (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0;
|
|
||||||
final boolean oldBackAlt =
|
|
||||||
(mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0;
|
|
||||||
if (newBackAlt != oldBackAlt) {
|
|
||||||
mNavigationBarView.onImeVisibilityChanged(newBackAlt);
|
|
||||||
mImeVisible = newBackAlt;
|
|
||||||
}
|
|
||||||
|
|
||||||
mNavigationBarView.setNavigationIconHints(hints);
|
|
||||||
}
|
|
||||||
if (DEBUG) {
|
|
||||||
android.widget.Toast.makeText(mContext,
|
|
||||||
"Navigation icon hints = " + hints,
|
|
||||||
500).show();
|
|
||||||
}
|
|
||||||
mNavigationIconHints = hints;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ModeChangedListener mModeChangedListener = new ModeChangedListener() {
|
|
||||||
@Override
|
|
||||||
public void onNavigationModeChanged(int mode) {
|
|
||||||
mNavBarMode = mode;
|
|
||||||
|
|
||||||
if (!QuickStepContract.isGesturalMode(mode)) {
|
|
||||||
// Reset the override alpha
|
|
||||||
if (getBarTransitions() != null) {
|
|
||||||
getBarTransitions().setBackgroundOverrideAlpha(1f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updateScreenPinningGestures();
|
|
||||||
|
|
||||||
if (!canShowSecondaryHandle()) {
|
|
||||||
resetSecondaryHandle();
|
|
||||||
}
|
|
||||||
if (mNavigationBarView != null) {
|
|
||||||
mNavigationBarView.setNavBarMode(mode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private final Gefingerpoken mTouchHandler = new Gefingerpoken() {
|
|
||||||
private boolean mDeadZoneConsuming;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
|
||||||
if (isGesturalMode(mNavBarMode) && mImeVisible
|
|
||||||
&& ev.getAction() == MotionEvent.ACTION_DOWN) {
|
|
||||||
SysUiStatsLog.write(SysUiStatsLog.IME_TOUCH_REPORTED,
|
|
||||||
(int) ev.getX(), (int) ev.getY());
|
|
||||||
}
|
|
||||||
return shouldDeadZoneConsumeTouchEvents(ev);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onTouchEvent(MotionEvent ev) {
|
|
||||||
shouldDeadZoneConsumeTouchEvents(ev);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean shouldDeadZoneConsumeTouchEvents(MotionEvent event) {
|
|
||||||
int action = event.getActionMasked();
|
|
||||||
if (action == MotionEvent.ACTION_DOWN) {
|
|
||||||
mDeadZoneConsuming = false;
|
|
||||||
}
|
|
||||||
if (mDeadZone.onTouchEvent(event) || mDeadZoneConsuming) {
|
|
||||||
switch (action) {
|
|
||||||
case MotionEvent.ACTION_DOWN:
|
|
||||||
// Allow gestures starting in the deadzone to be slippery
|
|
||||||
mNavigationBarView.setSlippery(true);
|
|
||||||
mDeadZoneConsuming = true;
|
|
||||||
break;
|
|
||||||
case MotionEvent.ACTION_CANCEL:
|
|
||||||
case MotionEvent.ACTION_UP:
|
|
||||||
// When a gesture started in the deadzone is finished, restore
|
|
||||||
// slippery state
|
|
||||||
mNavigationBarView.updateSlippery();
|
|
||||||
mDeadZoneConsuming = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injectable factory for construction a {@link NavigationBar}.
|
* Injectable factory for construction a {@link NavigationBar}.
|
||||||
*/
|
*/
|
||||||
@AssistedFactory
|
public static class Factory {
|
||||||
public interface 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<Recents> mRecentsOptional;
|
||||||
|
private final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
|
||||||
|
private final ShadeController mShadeController;
|
||||||
|
private final NotificationRemoteInputManager mNotificationRemoteInputManager;
|
||||||
|
private final NotificationShadeDepthController mNotificationShadeDepthController;
|
||||||
|
private final Handler mMainHandler;
|
||||||
|
private final NavigationBarOverlayController mNavbarOverlayController;
|
||||||
|
private final UiEventLogger mUiEventLogger;
|
||||||
|
private final NavBarHelper mNavBarHelper;
|
||||||
|
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;
|
||||||
|
private final Optional<BackAnimation> mBackAnimation;
|
||||||
|
|
||||||
|
@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<Recents> recentsOptional,
|
||||||
|
Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
|
||||||
|
ShadeController shadeController,
|
||||||
|
NotificationRemoteInputManager notificationRemoteInputManager,
|
||||||
|
NotificationShadeDepthController notificationShadeDepthController,
|
||||||
|
@Main Handler mainHandler,
|
||||||
|
NavigationBarOverlayController navbarOverlayController,
|
||||||
|
UiEventLogger uiEventLogger,
|
||||||
|
NavBarHelper navBarHelper,
|
||||||
|
LightBarController mainLightBarController,
|
||||||
|
LightBarController.Factory lightBarControllerFactory,
|
||||||
|
AutoHideController mainAutoHideController,
|
||||||
|
AutoHideController.Factory autoHideControllerFactory,
|
||||||
|
Optional<TelecomManager> telecomManagerOptional,
|
||||||
|
InputMethodManager inputMethodManager,
|
||||||
|
Optional<BackAnimation> backAnimation) {
|
||||||
|
mAssistManagerLazy = assistManagerLazy;
|
||||||
|
mAccessibilityManager = accessibilityManager;
|
||||||
|
mDeviceProvisionedController = deviceProvisionedController;
|
||||||
|
mMetricsLogger = metricsLogger;
|
||||||
|
mOverviewProxyService = overviewProxyService;
|
||||||
|
mNavigationModeController = navigationModeController;
|
||||||
|
mAccessibilityButtonModeObserver = accessibilityButtonModeObserver;
|
||||||
|
mStatusBarStateController = statusBarStateController;
|
||||||
|
mSysUiFlagsContainer = sysUiFlagsContainer;
|
||||||
|
mBroadcastDispatcher = broadcastDispatcher;
|
||||||
|
mCommandQueue = commandQueue;
|
||||||
|
mPipOptional = pipOptional;
|
||||||
|
mRecentsOptional = recentsOptional;
|
||||||
|
mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
|
||||||
|
mShadeController = shadeController;
|
||||||
|
mNotificationRemoteInputManager = notificationRemoteInputManager;
|
||||||
|
mNotificationShadeDepthController = notificationShadeDepthController;
|
||||||
|
mMainHandler = mainHandler;
|
||||||
|
mNavbarOverlayController = navbarOverlayController;
|
||||||
|
mUiEventLogger = uiEventLogger;
|
||||||
|
mNavBarHelper = navBarHelper;
|
||||||
|
mMainLightBarController = mainLightBarController;
|
||||||
|
mLightBarControllerFactory = lightBarControllerFactory;
|
||||||
|
mMainAutoHideController = mainAutoHideController;
|
||||||
|
mAutoHideControllerFactory = autoHideControllerFactory;
|
||||||
|
mTelecomManagerOptional = telecomManagerOptional;
|
||||||
|
mInputMethodManager = inputMethodManager;
|
||||||
|
mBackAnimation = backAnimation;
|
||||||
|
}
|
||||||
|
|
||||||
/** Construct a {@link NavigationBar} */
|
/** Construct a {@link NavigationBar} */
|
||||||
NavigationBar create(Context context);
|
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,
|
||||||
|
mRecentsOptional, mCentralSurfacesOptionalLazy,
|
||||||
|
mShadeController, mNotificationRemoteInputManager,
|
||||||
|
mNotificationShadeDepthController, mMainHandler,
|
||||||
|
mNavbarOverlayController, mUiEventLogger, mNavBarHelper,
|
||||||
|
mMainLightBarController, mLightBarControllerFactory,
|
||||||
|
mMainAutoHideController, mAutoHideControllerFactory, mTelecomManagerOptional,
|
||||||
|
mInputMethodManager, mBackAnimation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,6 @@ import android.widget.FrameLayout;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settingslib.Utils;
|
import com.android.settingslib.Utils;
|
||||||
import com.android.systemui.Dependency;
|
import com.android.systemui.Dependency;
|
||||||
import com.android.systemui.Gefingerpoken;
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.animation.Interpolators;
|
import com.android.systemui.animation.Interpolators;
|
||||||
import com.android.systemui.model.SysUiState;
|
import com.android.systemui.model.SysUiState;
|
||||||
@@ -85,12 +84,13 @@ import com.android.systemui.shared.rotation.RotationButton.RotationButtonUpdates
|
|||||||
import com.android.systemui.shared.rotation.RotationButtonController;
|
import com.android.systemui.shared.rotation.RotationButtonController;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
|
import com.android.systemui.shared.system.SysUiStatsLog;
|
||||||
import com.android.systemui.shared.system.WindowManagerWrapper;
|
import com.android.systemui.shared.system.WindowManagerWrapper;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
|
||||||
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
|
import com.android.systemui.statusbar.phone.LightBarTransitionsController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||||
|
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||||
import com.android.wm.shell.back.BackAnimation;
|
import com.android.wm.shell.back.BackAnimation;
|
||||||
import com.android.wm.shell.pip.Pip;
|
import com.android.wm.shell.pip.Pip;
|
||||||
|
|
||||||
@@ -101,14 +101,15 @@ import java.util.Optional;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
/** */
|
public class NavigationBarView extends FrameLayout implements
|
||||||
public class NavigationBarView extends FrameLayout {
|
NavigationModeController.ModeChangedListener {
|
||||||
final static boolean DEBUG = false;
|
final static boolean DEBUG = false;
|
||||||
final static String TAG = "NavBarView";
|
final static String TAG = "NavBarView";
|
||||||
|
|
||||||
final static boolean ALTERNATE_CAR_MODE_UI = false;
|
final static boolean ALTERNATE_CAR_MODE_UI = false;
|
||||||
private final RegionSamplingHelper mRegionSamplingHelper;
|
private final RegionSamplingHelper mRegionSamplingHelper;
|
||||||
private final int mNavColorSampleMargin;
|
private final int mNavColorSampleMargin;
|
||||||
|
private final SysUiState mSysUiFlagContainer;
|
||||||
|
|
||||||
// The current view is one of mHorizontal or mVertical depending on the current configuration
|
// The current view is one of mHorizontal or mVertical depending on the current configuration
|
||||||
View mCurrentView = null;
|
View mCurrentView = null;
|
||||||
@@ -196,7 +197,6 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
* <p>Cache the value here for better performance.</p>
|
* <p>Cache the value here for better performance.</p>
|
||||||
*/
|
*/
|
||||||
private final boolean mImeCanRenderGesturalNavButtons = canImeRenderGesturalNavButtons();
|
private final boolean mImeCanRenderGesturalNavButtons = canImeRenderGesturalNavButtons();
|
||||||
private Gefingerpoken mTouchHandler;
|
|
||||||
|
|
||||||
private class NavTransitionListener implements TransitionListener {
|
private class NavTransitionListener implements TransitionListener {
|
||||||
private boolean mBackTransitioning;
|
private boolean mBackTransitioning;
|
||||||
@@ -333,8 +333,10 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
mDarkIconColor = Utils.getColorAttrDefaultColor(darkContext, R.attr.singleToneColor);
|
mDarkIconColor = Utils.getColorAttrDefaultColor(darkContext, R.attr.singleToneColor);
|
||||||
mIsVertical = false;
|
mIsVertical = false;
|
||||||
mLongClickableAccessibilityButton = false;
|
mLongClickableAccessibilityButton = false;
|
||||||
|
mNavBarMode = Dependency.get(NavigationModeController.class).addListener(this);
|
||||||
mImeDrawsImeNavBar = Dependency.get(NavigationModeController.class).getImeDrawsImeNavBar();
|
mImeDrawsImeNavBar = Dependency.get(NavigationModeController.class).getImeDrawsImeNavBar();
|
||||||
|
|
||||||
|
mSysUiFlagContainer = Dependency.get(SysUiState.class);
|
||||||
// Set up the context group of buttons
|
// Set up the context group of buttons
|
||||||
mContextualButtonGroup = new ContextualButtonGroup(R.id.menu_container);
|
mContextualButtonGroup = new ContextualButtonGroup(R.id.menu_container);
|
||||||
final ContextualButton imeSwitcherButton = new ContextualButton(R.id.ime_switcher,
|
final ContextualButton imeSwitcherButton = new ContextualButton(R.id.ime_switcher,
|
||||||
@@ -363,6 +365,8 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
R.drawable.ic_sysbar_rotate_button_cw_start_90,
|
R.drawable.ic_sysbar_rotate_button_cw_start_90,
|
||||||
() -> getDisplay().getRotation());
|
() -> getDisplay().getRotation());
|
||||||
|
|
||||||
|
updateRotationButton();
|
||||||
|
|
||||||
mOverviewProxyService = Dependency.get(OverviewProxyService.class);
|
mOverviewProxyService = Dependency.get(OverviewProxyService.class);
|
||||||
|
|
||||||
mConfiguration = new Configuration();
|
mConfiguration = new Configuration();
|
||||||
@@ -444,18 +448,19 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
notifyVerticalChangedListener(mIsVertical);
|
notifyVerticalChangedListener(mIsVertical);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTouchHandler(Gefingerpoken touchHandler) {
|
|
||||||
mTouchHandler = touchHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onInterceptTouchEvent(MotionEvent event) {
|
public boolean onInterceptTouchEvent(MotionEvent event) {
|
||||||
return mTouchHandler.onInterceptTouchEvent(event) || super.onInterceptTouchEvent(event);
|
if (isGesturalMode(mNavBarMode) && mImeVisible
|
||||||
|
&& event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
|
SysUiStatsLog.write(SysUiStatsLog.IME_TOUCH_REPORTED,
|
||||||
|
(int) event.getX(), (int) event.getY());
|
||||||
|
}
|
||||||
|
return shouldDeadZoneConsumeTouchEvents(event) || super.onInterceptTouchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouchEvent(MotionEvent event) {
|
public boolean onTouchEvent(MotionEvent event) {
|
||||||
mTouchHandler.onTouchEvent(event);
|
shouldDeadZoneConsumeTouchEvents(event);
|
||||||
return super.onTouchEvent(event);
|
return super.onTouchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,6 +497,30 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean shouldDeadZoneConsumeTouchEvents(MotionEvent event) {
|
||||||
|
int action = event.getActionMasked();
|
||||||
|
if (action == MotionEvent.ACTION_DOWN) {
|
||||||
|
mDeadZoneConsuming = false;
|
||||||
|
}
|
||||||
|
if (mDeadZone.onTouchEvent(event) || mDeadZoneConsuming) {
|
||||||
|
switch (action) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
// Allow gestures starting in the deadzone to be slippery
|
||||||
|
setSlippery(true);
|
||||||
|
mDeadZoneConsuming = true;
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
// When a gesture started in the deadzone is finished, restore slippery state
|
||||||
|
updateSlippery();
|
||||||
|
mDeadZoneConsuming = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void abortCurrentGesture() {
|
public void abortCurrentGesture() {
|
||||||
getHomeButton().abortCurrentGesture();
|
getHomeButton().abortCurrentGesture();
|
||||||
}
|
}
|
||||||
@@ -560,7 +589,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
return (mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) == 0;
|
return (mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isQuickStepSwipeUpEnabled() {
|
public boolean isQuickStepSwipeUpEnabled() {
|
||||||
return mOverviewProxyService.shouldShowSwipeUpUI() && isOverviewEnabled();
|
return mOverviewProxyService.shouldShowSwipeUpUI() && isOverviewEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -589,7 +618,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
/**
|
/**
|
||||||
* Updates the rotation button based on the current navigation mode.
|
* Updates the rotation button based on the current navigation mode.
|
||||||
*/
|
*/
|
||||||
void updateRotationButton() {
|
private void updateRotationButton() {
|
||||||
if (isGesturalMode(mNavBarMode)) {
|
if (isGesturalMode(mNavBarMode)) {
|
||||||
mContextualButtonGroup.removeButton(R.id.rotate_suggestion);
|
mContextualButtonGroup.removeButton(R.id.rotate_suggestion);
|
||||||
mButtonDispatchers.remove(R.id.rotate_suggestion);
|
mButtonDispatchers.remove(R.id.rotate_suggestion);
|
||||||
@@ -693,13 +722,25 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
super.setLayoutDirection(layoutDirection);
|
super.setLayoutDirection(layoutDirection);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setNavigationIconHints(int hints) {
|
public void setNavigationIconHints(int hints) {
|
||||||
if (hints == mNavigationIconHints) return;
|
if (hints == mNavigationIconHints) return;
|
||||||
|
final boolean newBackAlt = (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0;
|
||||||
|
final boolean oldBackAlt =
|
||||||
|
(mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0;
|
||||||
|
if (newBackAlt != oldBackAlt) {
|
||||||
|
onImeVisibilityChanged(newBackAlt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEBUG) {
|
||||||
|
android.widget.Toast.makeText(getContext(),
|
||||||
|
"Navigation icon hints = " + hints,
|
||||||
|
500).show();
|
||||||
|
}
|
||||||
mNavigationIconHints = hints;
|
mNavigationIconHints = hints;
|
||||||
updateNavButtonIcons();
|
updateNavButtonIcons();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onImeVisibilityChanged(boolean visible) {
|
private void onImeVisibilityChanged(boolean visible) {
|
||||||
if (!visible) {
|
if (!visible) {
|
||||||
mTransitionListener.onBackAltCleared();
|
mTransitionListener.onBackAltCleared();
|
||||||
}
|
}
|
||||||
@@ -710,7 +751,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDisabledFlags(int disabledFlags, SysUiState sysUiState) {
|
public void setDisabledFlags(int disabledFlags) {
|
||||||
if (mDisabledFlags == disabledFlags) return;
|
if (mDisabledFlags == disabledFlags) return;
|
||||||
|
|
||||||
final boolean overviewEnabledBefore = isOverviewEnabled();
|
final boolean overviewEnabledBefore = isOverviewEnabled();
|
||||||
@@ -723,7 +764,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
|
|
||||||
updateNavButtonIcons();
|
updateNavButtonIcons();
|
||||||
updateSlippery();
|
updateSlippery();
|
||||||
updateDisabledSystemUiStateFlags(sysUiState);
|
updateDisabledSystemUiStateFlags();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateNavButtonIcons() {
|
public void updateNavButtonIcons() {
|
||||||
@@ -866,11 +907,10 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
updateSlippery();
|
updateSlippery();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
public void updateDisabledSystemUiStateFlags() {
|
||||||
public void updateDisabledSystemUiStateFlags(SysUiState sysUiState) {
|
|
||||||
int displayId = mContext.getDisplayId();
|
int displayId = mContext.getDisplayId();
|
||||||
|
|
||||||
sysUiState.setFlag(SYSUI_STATE_SCREEN_PINNING,
|
mSysUiFlagContainer.setFlag(SYSUI_STATE_SCREEN_PINNING,
|
||||||
ActivityManagerWrapper.getInstance().isScreenPinningActive())
|
ActivityManagerWrapper.getInstance().isScreenPinningActive())
|
||||||
.setFlag(SYSUI_STATE_OVERVIEW_DISABLED,
|
.setFlag(SYSUI_STATE_OVERVIEW_DISABLED,
|
||||||
(mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0)
|
(mDisabledFlags & View.STATUS_BAR_DISABLE_RECENT) != 0)
|
||||||
@@ -912,12 +952,12 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
* slippery is enabled, touch events will leave the nav bar window and enter into the fullscreen
|
* slippery is enabled, touch events will leave the nav bar window and enter into the fullscreen
|
||||||
* app/home window, if not nav bar will receive a cancelled touch event once gesture leaves bar.
|
* app/home window, if not nav bar will receive a cancelled touch event once gesture leaves bar.
|
||||||
*/
|
*/
|
||||||
void updateSlippery() {
|
public void updateSlippery() {
|
||||||
setSlippery(!isQuickStepSwipeUpEnabled() ||
|
setSlippery(!isQuickStepSwipeUpEnabled() ||
|
||||||
(mPanelView != null && mPanelView.isFullyExpanded() && !mPanelView.isCollapsing()));
|
(mPanelView != null && mPanelView.isFullyExpanded() && !mPanelView.isCollapsing()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSlippery(boolean slippery) {
|
private void setSlippery(boolean slippery) {
|
||||||
setWindowFlag(WindowManager.LayoutParams.FLAG_SLIPPERY, slippery);
|
setWindowFlag(WindowManager.LayoutParams.FLAG_SLIPPERY, slippery);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -939,7 +979,8 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
wm.updateViewLayout(navbarView, lp);
|
wm.updateViewLayout(navbarView, lp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setNavBarMode(int mode) {
|
@Override
|
||||||
|
public void onNavigationModeChanged(int mode) {
|
||||||
mNavBarMode = mode;
|
mNavBarMode = mode;
|
||||||
mImeDrawsImeNavBar = Dependency.get(NavigationModeController.class).getImeDrawsImeNavBar();
|
mImeDrawsImeNavBar = Dependency.get(NavigationModeController.class).getImeDrawsImeNavBar();
|
||||||
mBarTransitions.onNavigationModeChanged(mNavBarMode);
|
mBarTransitions.onNavigationModeChanged(mNavBarMode);
|
||||||
@@ -1282,6 +1323,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
mEdgeBackGestureHandler.onNavBarAttached();
|
mEdgeBackGestureHandler.onNavBarAttached();
|
||||||
requestApplyInsets();
|
requestApplyInsets();
|
||||||
reorient();
|
reorient();
|
||||||
|
onNavigationModeChanged(mNavBarMode);
|
||||||
if (mRotationButtonController != null) {
|
if (mRotationButtonController != null) {
|
||||||
mRotationButtonController.registerListeners();
|
mRotationButtonController.registerListeners();
|
||||||
}
|
}
|
||||||
@@ -1296,6 +1338,7 @@ public class NavigationBarView extends FrameLayout {
|
|||||||
@Override
|
@Override
|
||||||
protected void onDetachedFromWindow() {
|
protected void onDetachedFromWindow() {
|
||||||
super.onDetachedFromWindow();
|
super.onDetachedFromWindow();
|
||||||
|
Dependency.get(NavigationModeController.class).removeListener(this);
|
||||||
for (int i = 0; i < mButtonDispatchers.size(); ++i) {
|
for (int i = 0; i < mButtonDispatchers.size(); ++i) {
|
||||||
mButtonDispatchers.valueAt(i).onDestroy();
|
mButtonDispatchers.valueAt(i).onDestroy();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,8 +101,8 @@ import com.android.systemui.shared.system.ActivityManagerWrapper;
|
|||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
import com.android.systemui.statusbar.CommandQueue;
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
|
||||||
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||||
|
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
|
import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
|
||||||
import com.android.systemui.statusbar.policy.CallbackController;
|
import com.android.systemui.statusbar.policy.CallbackController;
|
||||||
import com.android.wm.shell.back.BackAnimation;
|
import com.android.wm.shell.back.BackAnimation;
|
||||||
@@ -675,7 +675,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
|
|||||||
navBarFragment.updateSystemUiStateFlags();
|
navBarFragment.updateSystemUiStateFlags();
|
||||||
}
|
}
|
||||||
if (navBarView != null) {
|
if (navBarView != null) {
|
||||||
navBarView.updateDisabledSystemUiStateFlags(mSysUiState);
|
navBarView.updateDisabledSystemUiStateFlags();
|
||||||
}
|
}
|
||||||
if (panelController != null) {
|
if (panelController != null) {
|
||||||
panelController.updateSystemUiStateFlags();
|
panelController.updateSystemUiStateFlags();
|
||||||
|
|||||||
@@ -91,10 +91,10 @@ import com.android.systemui.statusbar.CommandQueue;
|
|||||||
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
import com.android.systemui.statusbar.NotificationRemoteInputManager;
|
||||||
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
import com.android.systemui.statusbar.NotificationShadeDepthController;
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
|
||||||
import com.android.systemui.statusbar.phone.LightBarController;
|
import com.android.systemui.statusbar.phone.LightBarController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
||||||
import com.android.systemui.statusbar.phone.ShadeController;
|
import com.android.systemui.statusbar.phone.ShadeController;
|
||||||
|
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
||||||
@@ -387,14 +387,14 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
DeviceProvisionedController deviceProvisionedController =
|
DeviceProvisionedController deviceProvisionedController =
|
||||||
mock(DeviceProvisionedController.class);
|
mock(DeviceProvisionedController.class);
|
||||||
when(deviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
|
when(deviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
|
||||||
return spy(new NavigationBar(context,
|
NavigationBar.Factory factory = new NavigationBar.Factory(
|
||||||
mWindowManager,
|
|
||||||
() -> mAssistManager,
|
() -> mAssistManager,
|
||||||
mock(AccessibilityManager.class),
|
mock(AccessibilityManager.class),
|
||||||
deviceProvisionedController,
|
deviceProvisionedController,
|
||||||
new MetricsLogger(),
|
new MetricsLogger(),
|
||||||
mOverviewProxyService,
|
mOverviewProxyService,
|
||||||
mNavigationModeController,
|
mNavigationModeController,
|
||||||
|
mock(AccessibilityButtonModeObserver.class),
|
||||||
mStatusBarStateController,
|
mStatusBarStateController,
|
||||||
mMockSysUiState,
|
mMockSysUiState,
|
||||||
mBroadcastDispatcher,
|
mBroadcastDispatcher,
|
||||||
@@ -415,7 +415,8 @@ public class NavigationBarTest extends SysuiTestCase {
|
|||||||
mAutoHideControllerFactory,
|
mAutoHideControllerFactory,
|
||||||
Optional.of(mTelecomManager),
|
Optional.of(mTelecomManager),
|
||||||
mInputMethodManager,
|
mInputMethodManager,
|
||||||
Optional.of(mock(BackAnimation.class))));
|
Optional.of(mock(BackAnimation.class)));
|
||||||
|
return spy(factory.create(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processAllMessages() {
|
private void processAllMessages() {
|
||||||
|
|||||||
Reference in New Issue
Block a user