summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Florescu <alexflo@google.com> 2022-08-10 15:32:10 +0100
committer Alex Florescu <alexflo@google.com> 2022-08-19 15:18:00 +0000
commitb49a28e1c828a04677d001c5d9cdd26fb396a806 (patch)
tree992c86cb1c7a703c3f319af59dfc0c3e376c09a5
parenta9fa413a219371b831e41ff7ff9ad84bca4d847c (diff)
Show floating rotation button in sticky immersive mode if taskbar is used
Bug: 241245977 Bug: 216182085 Test: atest SystemUITests:RotationButtonControllerTest Change-Id: I1664241cc8cd156e301466c06c92090c1eb5be8d
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shared/rotation/RotationButtonControllerTest.kt77
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()
+ }
+}