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

Commit 325cf0c3 authored by Tracy Zhou's avatar Tracy Zhou Committed by Automerger Merge Worker
Browse files

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

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

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


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


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

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


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


        if (mIsNavigationBarShowing) {
        if (canShowRotationButton()) {
            // The navbar is visible so show the icon right away
            // The navbar is visible / it's in visual immersive mode, so show the icon right away
            showAndLogRotationSuggestion();
            showAndLogRotationSuggestion();
        } else {
        } else {
            // If the navbar isn't shown, flag the rotate icon to be shown should the navbar become
            // 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) {
    void onNavigationBarWindowVisibilityChange(boolean showing) {
        if (mIsNavigationBarShowing != showing) {
        if (mIsNavigationBarShowing != showing) {
            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
    private void showPendingRotationButtonIfNeeded() {
            if (showing && mPendingRotationSuggestion) {
        if (canShowRotationButton() && mPendingRotationSuggestion) {
            showAndLogRotationSuggestion();
            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() {
    public Context getContext() {
+3 −0
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;


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


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