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

Commit 1d126d4c authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Show floating rotation button in visual immersive mode

Fixes: 179037227
Test: manual
Change-Id: If3dde40eef0e854d6e2ca7c321d541900a51b1e1
parent 1ee02141
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -544,6 +544,7 @@ public class NavigationBar implements View.OnAttachStateChangeListener,
        }
        mNavigationBarView.setNavigationIconHints(mNavigationIconHints);
        mNavigationBarView.setWindowVisible(isNavBarWindowVisible());
        mNavigationBarView.setBehavior(mBehavior);
        mSplitScreenOptional.ifPresent(mNavigationBarView::registerDockedListener);
        mPipOptional.ifPresent(mNavigationBarView::registerPipExclusionBoundsChangeListener);

@@ -918,6 +919,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 */);