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

Commit ce223d88 authored by Winson Chung's avatar Winson Chung Committed by Automerger Merge Worker
Browse files

Merge "Also factor the floating rotation button into the active touch region"...

Merge "Also factor the floating rotation button into the active touch region" into rvc-qpr-dev am: 8c13a901

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

Change-Id: I81114027a37b66c888c8a70d929ae7094db39006
parents 0eeaa6b6 8c13a901
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import com.android.systemui.R;
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
import com.android.systemui.statusbar.policy.KeyButtonView;

import java.util.function.Consumer;

/** Containing logic for the rotation button on the physical left bottom corner of the screen. */
public class FloatingRotationButton implements RotationButton {

@@ -48,6 +50,7 @@ public class FloatingRotationButton implements RotationButton {
    private boolean mCanShow = true;

    private RotationButtonController mRotationButtonController;
    private Consumer<Boolean> mVisibilityChangedCallback;

    FloatingRotationButton(Context context) {
        mContext = context;
@@ -67,6 +70,11 @@ public class FloatingRotationButton implements RotationButton {
        mRotationButtonController = rotationButtonController;
    }

    @Override
    public void setVisibilityChangedCallback(Consumer<Boolean> visibilityChangedCallback) {
        mVisibilityChangedCallback = visibilityChangedCallback;
    }

    @Override
    public View getCurrentView() {
        return mKeyButtonView;
@@ -107,6 +115,16 @@ public class FloatingRotationButton implements RotationButton {
            mKeyButtonDrawable.resetAnimation();
            mKeyButtonDrawable.startAnimation();
        }
        mKeyButtonView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5,
                    int i6, int i7) {
                if (mIsShowing && mVisibilityChangedCallback != null) {
                    mVisibilityChangedCallback.accept(true);
                }
                mKeyButtonView.removeOnLayoutChangeListener(this);
            }
        });
        return true;
    }

@@ -117,6 +135,9 @@ public class FloatingRotationButton implements RotationButton {
        }
        mWindowManager.removeViewImmediate(mKeyButtonView);
        mIsShowing = false;
        if (mVisibilityChangedCallback != null) {
            mVisibilityChangedCallback.accept(false);
        }
        return true;
    }

+1 −11
Original line number Diff line number Diff line
@@ -354,15 +354,6 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
                }
            };

    private final ContextButtonListener mRotationButtonListener = (button, visible) -> {
        if (visible) {
            // If the button will actually become visible and the navbar is about to hide,
            // tell the statusbar to keep it around for longer
            mAutoHideController.touchAutoHide();
            mNavigationBarView.notifyActiveTouchRegions();
        }
    };

    private final Runnable mAutoDim = () -> getBarTransitions().setAutoDim(true);

    private final ContentObserver mAssistContentObserver = new ContentObserver(
@@ -522,8 +513,6 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback

        // Currently there is no accelerometer sensor on non-default display.
        if (mIsOnDefaultDisplay) {
            mNavigationBarView.getRotateSuggestionButton().setListener(mRotationButtonListener);

            final RotationButtonController rotationButtonController =
                    mNavigationBarView.getRotationButtonController();
            rotationButtonController.addRotationCallback(mRotationWatcher);
@@ -1316,6 +1305,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
        if (mAutoHideController != null) {
            mAutoHideController.setNavigationBar(mAutoHideUiElement);
        }
        mNavigationBarView.setAutoHideController(autoHideController);
    }

    private boolean isTransientShown() {
+26 −2
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ public class NavigationBarView extends FrameLayout implements
    private boolean mDeadZoneConsuming = false;
    private final NavigationBarTransitions mBarTransitions;
    private final OverviewProxyService mOverviewProxyService;
    private AutoHideController mAutoHideController;

    // performs manual animation in sync with layout transitions
    private final NavTransitionListener mTransitionListener = new NavTransitionListener();
@@ -271,6 +272,15 @@ public class NavigationBarView extends FrameLayout implements
        info.touchableRegion.setEmpty();
    };

    private final Consumer<Boolean> mRotationButtonListener = (visible) -> {
        if (visible) {
            // If the button will actually become visible and the navbar is about to hide,
            // tell the statusbar to keep it around for longer
            mAutoHideController.touchAutoHide();
        }
        notifyActiveTouchRegions();
    };

    public NavigationBarView(Context context, AttributeSet attrs) {
        super(context, attrs);

@@ -301,7 +311,8 @@ public class NavigationBarView extends FrameLayout implements
        mFloatingRotationButton = new FloatingRotationButton(context);
        mRotationButtonController = new RotationButtonController(context,
                R.style.RotateButtonCCWStart90,
                isGesturalMode ? mFloatingRotationButton : rotateSuggestionButton);
                isGesturalMode ? mFloatingRotationButton : rotateSuggestionButton,
                mRotationButtonListener);

        mConfiguration = new Configuration();
        mTmpLastConfiguration = new Configuration();
@@ -349,6 +360,10 @@ public class NavigationBarView extends FrameLayout implements
                });
    }

    public void setAutoHideController(AutoHideController autoHideController) {
        mAutoHideController = autoHideController;
    }

    public NavigationBarTransitions getBarTransitions() {
        return mBarTransitions;
    }
@@ -936,7 +951,15 @@ public class NavigationBarView extends FrameLayout implements
        updateButtonLocation(getBackButton());
        updateButtonLocation(getHomeButton());
        updateButtonLocation(getRecentsButton());
        updateButtonLocation(getImeSwitchButton());
        updateButtonLocation(getAccessibilityButton());
        if (mFloatingRotationButton.isVisible()) {
            View floatingRotationView = mFloatingRotationButton.getCurrentView();
            floatingRotationView.getBoundsOnScreen(mTmpBounds);
            mActiveRegion.op(mTmpBounds, Op.UNION);
        } else {
            updateButtonLocation(getRotateSuggestionButton());
        }
        mOverviewProxyService.onActiveNavBarRegionChanges(mActiveRegion);
    }

@@ -1208,6 +1231,7 @@ public class NavigationBarView extends FrameLayout implements
        dumpButton(pw, "rcnt", getRecentsButton());
        dumpButton(pw, "rota", getRotateSuggestionButton());
        dumpButton(pw, "a11y", getAccessibilityButton());
        dumpButton(pw, "ime", getImeSwitchButton());

        pw.println("    }");
        pw.println("    mScreenOn: " + mScreenOn);
+3 −0
Original line number Diff line number Diff line
@@ -20,9 +20,12 @@ import android.view.View;

import com.android.systemui.statusbar.policy.KeyButtonDrawable;

import java.util.function.Consumer;

/** Interface of a rotation button that interacts {@link RotationButtonController}. */
interface RotationButton {
    void setRotationButtonController(RotationButtonController rotationButtonController);
    void setVisibilityChangedCallback(Consumer<Boolean> visibilityChangedCallback);
    View getCurrentView();
    boolean show();
    boolean hide();
+3 −1
Original line number Diff line number Diff line
@@ -117,7 +117,8 @@ public class RotationButtonController {
        return (disable2Flags & StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS) != 0;
    }

    RotationButtonController(Context context, @StyleRes int style, RotationButton rotationButton) {
    RotationButtonController(Context context, @StyleRes int style, RotationButton rotationButton,
            Consumer<Boolean> visibilityChangedCallback) {
        mContext = context;
        mRotationButton = rotationButton;
        mRotationButton.setRotationButtonController(this);
@@ -131,6 +132,7 @@ public class RotationButtonController {
        mTaskStackListener = new TaskStackListenerImpl();
        mRotationButton.setOnClickListener(this::onRotateSuggestionClick);
        mRotationButton.setOnHoverListener(this::onRotateSuggestionHover);
        mRotationButton.setVisibilityChangedCallback(visibilityChangedCallback);
    }

    void registerListeners() {
Loading