summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Göllner <chrisgollner@google.com> 2024-02-07 17:03:08 +0000
committer Chris Göllner <chrisgollner@google.com> 2024-02-07 17:11:31 +0000
commit30486e7ae38a3371b6a50b83e15301d537b72576 (patch)
tree123ba82de6e3ea01258efca096202b0c27da5f2c
parentca4a84d4bfc157d1a41a416ec219564843d9ad2b (diff)
Fix status bar window height not being updated on certain rotations
This was causing status bar icons being truncated. Certain rotation events don't trigger an application wide configuration change event. An example is when going from portrait to upside down, or when going from landscape to seascape. It triggers a configuration change on the PhoneStatusBarView though. The status bar window height was being updated on application level configuration changes. For that reason it was not being updated always. The fix is to update the height based on configuration change events from the PhoneStatusBarView instead of the application. Test: PhoneStatusBarViewTest.kt Test: CentralSurfacesImplTest.java Test: Manually Fixes: 323299264 Flag: ACONFIG com.android.systemui.truncated_status_bar_icons_fix DISABLED Change-Id: I37dd1b6b446b6975a8aa6ba8d597cd95a990f74c
-rw-r--r--packages/SystemUI/aconfig/systemui.aconfig11
-rw-r--r--packages/SystemUI/src/com/android/systemui/Dependency.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java18
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt44
6 files changed, 96 insertions, 3 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index 2ad7192a3248..6a4f92c92d6f 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -227,6 +227,17 @@ flag {
}
flag {
+ name: "truncated_status_bar_icons_fix"
+ namespace: "systemui"
+ description: "Fixes the status bar icons being trunacted due to the status bar window height "
+ "not being updated after certain rotations"
+ bug: "323299264"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "compose_bouncer"
namespace: "systemui"
description: "Use the new compose bouncer in SystemUI"
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 1a34cc4fc3a9..91157d7ebb20 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -59,6 +59,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.FlashlightController;
+import com.android.systemui.statusbar.window.StatusBarWindowController;
import com.android.systemui.tuner.TunablePadding.TunablePaddingService;
import com.android.systemui.tuner.TunerService;
@@ -172,6 +173,7 @@ public class Dependency {
@Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy;
@Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy;
@Inject Lazy<UserTracker> mUserTrackerLazy;
+ @Inject Lazy<StatusBarWindowController> mStatusBarWindowControllerLazy;
@Inject
public Dependency() {
@@ -226,6 +228,7 @@ public class Dependency {
mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get);
mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get);
mProviders.put(UserTracker.class, mUserTrackerLazy::get);
+ mProviders.put(StatusBarWindowController.class, mStatusBarWindowControllerLazy::get);
Dependency.setInstance(this);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 209936108f6b..3eb41f8fb89b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -29,6 +29,7 @@ import static androidx.lifecycle.Lifecycle.State.RESUMED;
import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
import static com.android.systemui.Flags.lightRevealMigration;
import static com.android.systemui.Flags.predictiveBackSysui;
+import static com.android.systemui.Flags.truncatedStatusBarIconsFix;
import static com.android.systemui.charging.WirelessChargingAnimation.UNKNOWN_BATTERY_LEVEL;
import static com.android.systemui.statusbar.NotificationLockscreenUserManager.PERMISSION_SELF;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
@@ -1905,10 +1906,11 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mQSPanelController.updateResources();
}
- if (mStatusBarWindowController != null) {
- mStatusBarWindowController.refreshStatusBarHeight();
+ if (!truncatedStatusBarIconsFix()) {
+ if (mStatusBarWindowController != null) {
+ mStatusBarWindowController.refreshStatusBarHeight();
+ }
}
-
if (mShadeSurface != null) {
mShadeSurface.updateResources();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index cb7bc256504e..45bdae83bbd9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -17,6 +17,8 @@
package com.android.systemui.statusbar.phone;
+import static com.android.systemui.Flags.truncatedStatusBarIconsFix;
+
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Configuration;
@@ -41,6 +43,7 @@ import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
import com.android.systemui.statusbar.policy.Clock;
+import com.android.systemui.statusbar.window.StatusBarWindowController;
import com.android.systemui.user.ui.binder.StatusBarUserChipViewBinder;
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel;
import com.android.systemui.util.leak.RotationUtils;
@@ -50,6 +53,7 @@ import java.util.Objects;
public class PhoneStatusBarView extends FrameLayout {
private static final String TAG = "PhoneStatusBarView";
private final StatusBarContentInsetsProvider mContentInsetsProvider;
+ private final StatusBarWindowController mStatusBarWindowController;
private DarkReceiver mBattery;
private Clock mClock;
@@ -72,6 +76,7 @@ public class PhoneStatusBarView extends FrameLayout {
public PhoneStatusBarView(Context context, AttributeSet attrs) {
super(context, attrs);
mContentInsetsProvider = Dependency.get(StatusBarContentInsetsProvider.class);
+ mStatusBarWindowController = Dependency.get(StatusBarWindowController.class);
}
void setTouchEventHandler(Gefingerpoken handler) {
@@ -101,6 +106,9 @@ public class PhoneStatusBarView extends FrameLayout {
Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mClock);
if (updateDisplayParameters()) {
updateLayoutForCutout();
+ if (truncatedStatusBarIconsFix()) {
+ updateWindowHeight();
+ }
}
}
@@ -124,6 +132,9 @@ public class PhoneStatusBarView extends FrameLayout {
if (updateDisplayParameters()) {
updateLayoutForCutout();
requestLayout();
+ if (truncatedStatusBarIconsFix()) {
+ updateWindowHeight();
+ }
}
}
@@ -279,4 +290,8 @@ public class PhoneStatusBarView extends FrameLayout {
insets.right,
getPaddingBottom());
}
+
+ private void updateWindowHeight() {
+ mStatusBarWindowController.refreshStatusBarHeight();
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index b048949e0e76..fe299179d28f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -1053,6 +1053,24 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
verify(mBubbles).onStatusBarVisibilityChanged(true);
}
+ @Test
+ public void updateResources_flagEnabled_doesNotUpdateStatusBarWindowHeight() {
+ mSetFlagsRule.enableFlags(com.android.systemui.Flags.FLAG_TRUNCATED_STATUS_BAR_ICONS_FIX);
+
+ mCentralSurfaces.updateResources();
+
+ verify(mStatusBarWindowController, never()).refreshStatusBarHeight();
+ }
+
+ @Test
+ public void updateResources_flagDisabled_updatesStatusBarWindowHeight() {
+ mSetFlagsRule.disableFlags(com.android.systemui.Flags.FLAG_TRUNCATED_STATUS_BAR_ICONS_FIX);
+
+ mCentralSurfaces.updateResources();
+
+ verify(mStatusBarWindowController).refreshStatusBarHeight();
+ }
+
/**
* Configures the appropriate mocks and then calls {@link CentralSurfacesImpl#updateIsKeyguard}
* to reconfigure the keyguard to reflect the requested showing/occluded states.
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt
index 65d71f8b4540..6eb1c1a9f12c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt
@@ -29,16 +29,20 @@ import android.view.RoundedCorners
import android.view.WindowInsets
import android.widget.FrameLayout
import androidx.test.filters.SmallTest
+import com.android.systemui.Flags
import com.android.systemui.Gefingerpoken
import com.android.systemui.SysuiTestCase
import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.res.R
+import com.android.systemui.statusbar.window.StatusBarWindowController
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
+import org.mockito.Mockito.never
import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
@SmallTest
@RunWithLooper(setAsMainLooper = true)
@@ -47,6 +51,7 @@ class PhoneStatusBarViewTest : SysuiTestCase() {
private lateinit var view: PhoneStatusBarView
private val contentInsetsProvider = mock<StatusBarContentInsetsProvider>()
+ private val windowController = mock<StatusBarWindowController>()
@Before
fun setUp() {
@@ -55,8 +60,11 @@ class PhoneStatusBarViewTest : SysuiTestCase() {
contentInsetsProvider
)
mDependency.injectTestDependency(DarkIconDispatcher::class.java, mock<DarkIconDispatcher>())
+ mDependency.injectTestDependency(StatusBarWindowController::class.java, windowController)
view = spy(createStatusBarView())
whenever(view.rootWindowInsets).thenReturn(emptyWindowInsets())
+ whenever(contentInsetsProvider.getStatusBarContentInsetsForCurrentRotation())
+ .thenReturn(Insets.NONE)
}
@Test
@@ -110,6 +118,42 @@ class PhoneStatusBarViewTest : SysuiTestCase() {
}
@Test
+ fun onAttachedToWindow_flagEnabled_updatesWindowHeight() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_TRUNCATED_STATUS_BAR_ICONS_FIX)
+
+ view.onAttachedToWindow()
+
+ verify(windowController).refreshStatusBarHeight()
+ }
+
+ @Test
+ fun onAttachedToWindow_flagDisabled_doesNotUpdateWindowHeight() {
+ mSetFlagsRule.disableFlags(Flags.FLAG_TRUNCATED_STATUS_BAR_ICONS_FIX)
+
+ view.onAttachedToWindow()
+
+ verify(windowController, never()).refreshStatusBarHeight()
+ }
+
+ @Test
+ fun onConfigurationChanged_flagEnabled_updatesWindowHeight() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_TRUNCATED_STATUS_BAR_ICONS_FIX)
+
+ view.onConfigurationChanged(Configuration())
+
+ verify(windowController).refreshStatusBarHeight()
+ }
+
+ @Test
+ fun onConfigurationChanged_flagDisabled_doesNotUpdateWindowHeight() {
+ mSetFlagsRule.disableFlags(Flags.FLAG_TRUNCATED_STATUS_BAR_ICONS_FIX)
+
+ view.onConfigurationChanged(Configuration())
+
+ verify(windowController, never()).refreshStatusBarHeight()
+ }
+
+ @Test
fun onAttachedToWindow_updatesLeftTopRightPaddingsBasedOnInsets() {
val insets = Insets.of(/* left = */ 10, /* top = */ 20, /* right = */ 30, /* bottom = */ 40)
whenever(contentInsetsProvider.getStatusBarContentInsetsForCurrentRotation())