Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f77ad008 authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "Revert "Move touch handling out of NavigationBarView."" into tm-dev am: c20d3878

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17185605

Change-Id: Ib850e824f7e74974df722b5d9f00dc85dddf545f
parents dac7ca07 c20d3878
Loading
Loading
Loading
Loading
+161 −135
Original line number Original line Diff line number Diff line
@@ -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);
        }
    }
    }
}
}
+66 −23

File changed.

Preview size limit exceeded, changes collapsed.

+2 −2
Original line number Original line Diff line number Diff line
@@ -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();
+5 −4
Original line number Original line Diff line number Diff line
@@ -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() {