diff options
| author | 2022-08-10 15:32:10 +0100 | |
|---|---|---|
| committer | 2022-08-19 15:18:00 +0000 | |
| commit | b49a28e1c828a04677d001c5d9cdd26fb396a806 (patch) | |
| tree | 992c86cb1c7a703c3f319af59dfc0c3e376c09a5 | |
| parent | a9fa413a219371b831e41ff7ff9ad84bca4d847c (diff) | |
Show floating rotation button in sticky immersive mode if taskbar is used
Bug: 241245977
Bug: 216182085
Test: atest SystemUITests:RotationButtonControllerTest
Change-Id: I1664241cc8cd156e301466c06c92090c1eb5be8d
2 files changed, 86 insertions, 4 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java b/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java index b29dc835a6f4..22bffda33918 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java @@ -49,6 +49,7 @@ import android.view.accessibility.AccessibilityManager; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; @@ -99,6 +100,7 @@ public class RotationButtonController { private @WindowInsetsController.Behavior int mBehavior = WindowInsetsController.BEHAVIOR_DEFAULT; private int mNavBarMode; + private boolean mTaskBarVisible = false; private boolean mSkipOverrideUserLockPrefsOnce; private final int mLightIconColor; private final int mDarkIconColor; @@ -422,6 +424,7 @@ public class RotationButtonController { } public void onTaskbarStateChange(boolean visible, boolean stashed) { + mTaskBarVisible = visible; if (getRotationButton() == null) { return; } @@ -438,9 +441,12 @@ public class RotationButtonController { * Return true when either the task bar is visible or it's in visual immersive mode. */ @SuppressLint("InlinedApi") - private boolean canShowRotationButton() { - return mIsNavigationBarShowing || mBehavior == WindowInsetsController.BEHAVIOR_DEFAULT - || isGesturalMode(mNavBarMode); + @VisibleForTesting + boolean canShowRotationButton() { + return mIsNavigationBarShowing + || mBehavior == WindowInsetsController.BEHAVIOR_DEFAULT + || isGesturalMode(mNavBarMode) + || mTaskBarVisible; } @DrawableRes @@ -624,4 +630,3 @@ public class RotationButtonController { } } } - diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/rotation/RotationButtonControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/rotation/RotationButtonControllerTest.kt new file mode 100644 index 000000000000..9393a4f4eead --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/shared/rotation/RotationButtonControllerTest.kt @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.systemui.shared.rotation + +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper.RunWithLooper +import android.view.Display +import android.view.WindowInsetsController +import android.view.WindowManagerPolicyConstants +import androidx.test.filters.SmallTest +import com.android.systemui.SysuiTestCase +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidTestingRunner::class) +@SmallTest +@RunWithLooper +class RotationButtonControllerTest : SysuiTestCase() { + + private lateinit var mController: RotationButtonController + + @Before + fun setUp() { + mController = RotationButtonController( + mContext, + /* lightIconColor = */ 0, + /* darkIconColor = */ 0, + /* iconCcwStart0ResId = */ 0, + /* iconCcwStart90ResId = */ 0, + /* iconCwStart0ResId = */ 0, + /* iconCwStart90ResId = */ 0 + ) { 0 } + } + + @Test + fun ifGestural_showRotationSuggestion() { + mController.onNavigationBarWindowVisibilityChange( /* showing = */ false) + mController.onBehaviorChanged(Display.DEFAULT_DISPLAY, + WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE) + mController.onNavigationModeChanged(WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON) + mController.onTaskbarStateChange( /* visible = */ false, /* stashed = */ false) + assertThat(mController.canShowRotationButton()).isFalse() + + mController.onNavigationModeChanged(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL) + + assertThat(mController.canShowRotationButton()).isTrue() + } + + @Test + fun ifTaskbarVisible_showRotationSuggestion() { + mController.onNavigationBarWindowVisibilityChange( /* showing = */ false) + mController.onBehaviorChanged(Display.DEFAULT_DISPLAY, + WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE) + mController.onNavigationModeChanged(WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON) + mController.onTaskbarStateChange( /* visible = */ false, /* stashed = */ false) + assertThat(mController.canShowRotationButton()).isFalse() + + mController.onTaskbarStateChange( /* visible = */ true, /* stashed = */ false) + + assertThat(mController.canShowRotationButton()).isTrue() + } +} |