From 6dcc435d50cbf7f123764defed84269cd8253fe6 Mon Sep 17 00:00:00 2001 From: Evan Laird Date: Thu, 6 Feb 2025 14:24:37 -0500 Subject: [sb] fully hide clock when root modernization is on Clock.java decides to manage its own visibility when it starts up, and was conflicting with the different order-of-things during initialization. CollapsedStatusBarFragment handled visibilities on its own and got a chance to modify them after `onViewCreated`. Alas, we have no such place to put that in StatusBarRoot.kt. This change does two things: 1. Turn off the visibility handling in Clock.java when root_modernization is enabled 2. Creates a new hideInitially method in the binder so that we can optimally hide the views without canceling any animations Test: manually restarting systemui; verify there are no clock frames Bug: 394823033 Flag: com.android.systemui.status_bar_root_modernization Change-Id: If075421071160ec42039fb2ddacd08bccc111624 --- .../shared/ui/binder/HomeStatusBarViewBinder.kt | 20 +++++++++--- .../android/systemui/statusbar/policy/Clock.java | 37 ++++++++++++++++------ 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt index 9c9d41e975e3..cd320a12d577 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt @@ -93,10 +93,11 @@ constructor( // CollapsedStatusBarFragment doesn't need this if (StatusBarRootModernization.isEnabled) { - primaryChipView.isVisible = false - systemInfoView.isVisible = false - clockView.isVisible = false - notificationIconsArea.isVisible = false + // GONE because this shouldn't take space in the layout + primaryChipView.hideInitially(state = View.GONE) + systemInfoView.hideInitially() + clockView.hideInitially() + notificationIconsArea.hideInitially() } view.repeatWhenAttached { @@ -365,6 +366,17 @@ constructor( } } + /** + * Hide the view for initialization, but skip if it's already hidden and does not cancel + * animations. + */ + private fun View.hideInitially(state: Int = View.INVISIBLE) { + if (visibility == View.INVISIBLE || visibility == View.GONE) { + return + } + visibility = state + } + // See CollapsedStatusBarFragment#hide. private fun View.hide(state: Int = View.INVISIBLE, shouldAnimateChange: Boolean) { if (visibility == View.INVISIBLE || visibility == View.GONE) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index ccd75602aa13..dd742ff8f1cc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -55,6 +55,7 @@ import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; +import com.android.systemui.statusbar.core.StatusBarRootModernization; import com.android.systemui.statusbar.phone.ui.StatusBarIconController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.tuner.TunerService; @@ -216,7 +217,9 @@ public class Clock extends TextView implements // Make sure we update to the current time updateClock(); - updateClockVisibility(); + if (!StatusBarRootModernization.isEnabled()) { + updateClockVisibility(); + } updateShowSeconds(); } @@ -275,19 +278,25 @@ public class Clock extends TextView implements @Override public void setVisibility(int visibility) { - if (visibility == View.VISIBLE && !shouldBeVisible()) { - return; + if (!StatusBarRootModernization.isEnabled()) { + if (visibility == View.VISIBLE && !shouldBeVisible()) { + return; + } } super.setVisibility(visibility); } - public void setClockVisibleByUser(boolean visible) { + private void setClockVisibleByUser(boolean visible) { + StatusBarRootModernization.assertInLegacyMode(); + mClockVisibleByUser = visible; updateClockVisibility(); } - public void setClockVisibilityByPolicy(boolean visible) { + private void setClockVisibilityByPolicy(boolean visible) { + StatusBarRootModernization.assertInLegacyMode(); + mClockVisibleByPolicy = visible; updateClockVisibility(); } @@ -297,6 +306,8 @@ public class Clock extends TextView implements } private void updateClockVisibility() { + StatusBarRootModernization.assertInLegacyMode(); + boolean visible = shouldBeVisible(); int visibility = visible ? View.VISIBLE : View.GONE; super.setVisibility(visibility); @@ -346,15 +357,23 @@ public class Clock extends TextView implements if (CLOCK_SECONDS.equals(key)) { mShowSeconds = TunerService.parseIntegerSwitch(newValue, false); updateShowSeconds(); - } else if (StatusBarIconController.ICON_HIDE_LIST.equals(key)) { - setClockVisibleByUser(!StatusBarIconController.getIconHideList(getContext(), newValue) - .contains("clock")); - updateClockVisibility(); + } else if (!StatusBarRootModernization.isEnabled()) { + if (StatusBarIconController.ICON_HIDE_LIST.equals(key)) { + setClockVisibleByUser( + !StatusBarIconController + .getIconHideList(getContext(), newValue) + .contains("clock")); + updateClockVisibility(); + } } } @Override public void disable(int displayId, int state1, int state2, boolean animate) { + if (StatusBarRootModernization.isEnabled()) { + return; + } + if (displayId != getDisplay().getDisplayId()) { return; } -- cgit v1.2.3-59-g8ed1b