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

Commit d9ae4ce8 authored by Tracy Zhou's avatar Tracy Zhou Committed by Android (Google) Code Review
Browse files

Merge "Show floating rotation button in visual immersive mode" into sc-dev

parents 6ab44a81 1d126d4c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -545,6 +545,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
        }
        mNavigationBarView.setNavigationIconHints(mNavigationIconHints);
        mNavigationBarView.setWindowVisible(isNavBarWindowVisible());
        mNavigationBarView.setBehavior(mBehavior);
        mSplitScreenOptional.ifPresent(mNavigationBarView::registerDockedListener);
        mPipOptional.ifPresent(mNavigationBarView::registerPipExclusionBoundsChangeListener);

@@ -919,6 +920,9 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
        }
        if (mBehavior != behavior) {
            mBehavior = behavior;
            if (mNavigationBarView != null) {
                mNavigationBarView.setBehavior(behavior);
            }
            updateSystemUiStateFlags(-1);
        }
    }
+5 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import android.view.ViewGroup;
import android.view.ViewTreeObserver.InternalInsetsInfo;
import android.view.ViewTreeObserver.OnComputeInternalInsetsListener;
import android.view.WindowInsets;
import android.view.WindowInsetsController.Behavior;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
@@ -626,6 +627,10 @@ public class NavigationBarView extends FrameLayout implements
        mRotationButtonController.onNavigationBarWindowVisibilityChange(visible);
    }

    public void setBehavior(@Behavior int behavior) {
        mRotationButtonController.onBehaviorChanged(behavior);
    }

    @Override
    public void setLayoutDirection(int layoutDirection) {
        reloadNavIcons();
+23 −6
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import android.view.IRotationWatcher.Stub;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.WindowInsetsController;
import android.view.WindowInsetsController.Behavior;
import android.view.WindowManagerGlobal;
import android.view.accessibility.AccessibilityManager;

@@ -78,6 +80,7 @@ public class RotationButtonController {
    private Consumer<Integer> mRotWatcherListener;
    private boolean mListenersRegistered = false;
    private boolean mIsNavigationBarShowing;
    private @Behavior int mBehavior = WindowInsetsController.BEHAVIOR_DEFAULT;
    private boolean mSkipOverrideUserLockPrefsOnce;
    private int mLightIconColor;
    private int mDarkIconColor;
@@ -297,8 +300,8 @@ public class RotationButtonController {
        }
        mRotationButton.updateIcon(mLightIconColor, mDarkIconColor);

        if (mIsNavigationBarShowing) {
            // The navbar is visible so show the icon right away
        if (canShowRotationButton()) {
            // The navbar is visible / it's in visual immersive mode, so show the icon right away
            showAndLogRotationSuggestion();
        } else {
            // If the navbar isn't shown, flag the rotate icon to be shown should the navbar become
@@ -318,12 +321,26 @@ public class RotationButtonController {
    void onNavigationBarWindowVisibilityChange(boolean showing) {
        if (mIsNavigationBarShowing != showing) {
            mIsNavigationBarShowing = showing;
            showPendingRotationButtonIfNeeded();
        }
    }

    void onBehaviorChanged(@Behavior int behavior) {
        if (mBehavior != behavior) {
            mBehavior = behavior;
            showPendingRotationButtonIfNeeded();
        }
    }

            // If the navbar is visible, show the rotate button if there's a pending suggestion
            if (showing && mPendingRotationSuggestion) {
    private void showPendingRotationButtonIfNeeded() {
        if (canShowRotationButton() && mPendingRotationSuggestion) {
            showAndLogRotationSuggestion();
        }
    }

    /** Return true when either the nav bar is visible or it's in visual immersive mode. */
    private boolean canShowRotationButton() {
        return mIsNavigationBarShowing || mBehavior == WindowInsetsController.BEHAVIOR_DEFAULT;
    }

    public Context getContext() {
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.view.View;
import android.view.WindowInsetsController;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
@@ -87,6 +88,8 @@ public class NavigationBarRotationContextTest extends SysuiTestCase {
    @Test
    public void testOnRotationProposalShowButtonShowNav() {
        // No navigation bar should not call to set visibility state
        mRotationButtonController.onBehaviorChanged(
                WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
        mRotationButtonController.onNavigationBarWindowVisibilityChange(false /* showing */);
        verify(mRotationButtonController, times(0)).setRotateSuggestionButtonState(
                false /* visible */);