From cda00d8c8e2387f9716cbe28912a6751c2ea47b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6llner?= Date: Wed, 20 Jul 2022 15:33:15 +0000 Subject: [PATCH] Revert "Revert "Status Bar - Wrap visible content in containers"" This reverts commit ee5fa80d88ca7bd25e541a5425a83593509e09fd. Reason for revert: The original failure has been fixed in ag/19338307 Change-Id: I06cc4634e520100684aeb61a31afb73c231b121b --- .../res/layout/keyguard_status_bar.xml | 3 +- .../res/layout/notification_icon_area.xml | 17 +- packages/SystemUI/res/layout/status_bar.xml | 150 ++++++++++-------- .../phone/NotificationIconContainer.java | 38 ++++- .../phone/PhoneStatusBarTransitions.java | 10 +- .../phone/PhoneStatusBarViewController.kt | 11 +- .../fragment/CollapsedStatusBarFragment.java | 20 +-- .../CollapsedStatusBarFragmentTest.java | 14 +- 8 files changed, 152 insertions(+), 111 deletions(-) diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml index e47eed9ea04a6..d27fa192e7411 100644 --- a/packages/SystemUI/res/layout/keyguard_status_bar.xml +++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml @@ -60,9 +60,8 @@ diff --git a/packages/SystemUI/res/layout/notification_icon_area.xml b/packages/SystemUI/res/layout/notification_icon_area.xml index fa696cc1f54c4..aadfae8c5aed0 100644 --- a/packages/SystemUI/res/layout/notification_icon_area.xml +++ b/packages/SystemUI/res/layout/notification_icon_area.xml @@ -14,18 +14,9 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> - - - \ No newline at end of file + android:clipChildren="false"/> \ No newline at end of file diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml index f560e6107fb7a..80e65a3b32953 100644 --- a/packages/SystemUI/res/layout/status_bar.xml +++ b/packages/SystemUI/res/layout/status_bar.xml @@ -47,52 +47,63 @@ android:paddingStart="@dimen/status_bar_padding_start" android:paddingEnd="@dimen/status_bar_padding_end" android:paddingTop="@dimen/status_bar_padding_top" - android:orientation="horizontal" - > + android:orientation="horizontal"> + + - + + - - - + - + + + - + - + - + + + + @@ -103,42 +114,57 @@ android:gravity="center_horizontal|center_vertical" /> - + + android:clipChildren="false"> - + - + android:gravity="center_vertical|end" + android:clipChildren="false"> - - + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="4dp" + android:paddingBottom="4dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" + android:layout_marginEnd="16dp" + android:background="@drawable/status_bar_user_chip_bg" + android:visibility="visible" > + - - + + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 2dc3261eb8861..a2140c6ab6b78 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License */ - package com.android.systemui.statusbar.phone; import static com.android.systemui.statusbar.phone.HeadsUpAppearanceController.CONTENT_FADE_DELAY; @@ -31,6 +30,7 @@ import android.util.MathUtils; import android.util.Property; import android.view.ContextThemeWrapper; import android.view.View; +import android.view.ViewGroup; import android.view.animation.Interpolator; import androidx.annotation.VisibleForTesting; @@ -40,7 +40,6 @@ import com.android.internal.statusbar.StatusBarIcon; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; -import com.android.systemui.statusbar.AlphaOptimizedFrameLayout; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.notification.stack.AnimationFilter; import com.android.systemui.statusbar.notification.stack.AnimationProperties; @@ -54,7 +53,7 @@ import java.util.function.Consumer; * A container for notification icons. It handles overflowing icons properly and positions them * correctly on the screen. */ -public class NotificationIconContainer extends AlphaOptimizedFrameLayout { +public class NotificationIconContainer extends ViewGroup { /** * A float value indicating how much before the overflow start the icons should transform into * a dot. A value of 0 means that they are exactly at the end and a value of 1 means it starts @@ -231,6 +230,31 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { initDimens(); } + @Override + public boolean hasOverlappingRendering() { + // Does the same as "AlphaOptimizedFrameLayout". + return false; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + final int childCount = getChildCount(); + final int maxVisibleIcons = getMaxVisibleIcons(childCount); + final int width = MeasureSpec.getSize(widthMeasureSpec); + final int childWidthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.UNSPECIFIED); + int totalWidth = (int) (getActualPaddingStart() + getActualPaddingEnd()); + for (int i = 0; i < childCount; i++) { + View child = getChildAt(i); + measureChild(child, childWidthSpec, heightMeasureSpec); + if (i <= maxVisibleIcons) { + totalWidth += child.getMeasuredWidth(); + } + } + final int measuredWidth = resolveSize(totalWidth, widthMeasureSpec); + final int measuredHeight = MeasureSpec.getSize(heightMeasureSpec); + setMeasuredDimension(measuredWidth, measuredHeight); + } + @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { float centerY = getHeight() / 2.0f; @@ -408,8 +432,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { float translationX = getActualPaddingStart(); int firstOverflowIndex = -1; int childCount = getChildCount(); - int maxVisibleIcons = mOnLockScreen ? MAX_ICONS_ON_AOD : - mIsStaticLayout ? MAX_STATIC_ICONS : childCount; + int maxVisibleIcons = getMaxVisibleIcons(childCount); float layoutEnd = getLayoutEnd(); mVisualOverflowStart = 0; mFirstVisibleIconState = null; @@ -493,6 +516,11 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { } } + private int getMaxVisibleIcons(int childCount) { + return mOnLockScreen ? MAX_ICONS_ON_AOD : + mIsStaticLayout ? MAX_STATIC_ICONS : childCount; + } + private float getLayoutEnd() { return getActualWidth() - getActualPaddingEnd(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java index 2052ee6cdac5f..15c6dcfd7889b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java @@ -31,7 +31,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions { private final float mIconAlphaWhenOpaque; - private View mLeftSide, mStatusIcons, mBattery; + private View mStartSide, mStatusIcons, mBattery; private Animator mCurrentAnimation; /** @@ -41,7 +41,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions { super(backgroundView, R.drawable.status_background); final Resources res = statusBarView.getContext().getResources(); mIconAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1); - mLeftSide = statusBarView.findViewById(R.id.status_bar_left_side); + mStartSide = statusBarView.findViewById(R.id.status_bar_start_side_except_heads_up); mStatusIcons = statusBarView.findViewById(R.id.statusIcons); mBattery = statusBarView.findViewById(R.id.battery); applyModeBackground(-1, getMode(), false /*animate*/); @@ -75,7 +75,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions { } private void applyMode(int mode, boolean animate) { - if (mLeftSide == null) return; // pre-init + if (mStartSide == null) return; // pre-init float newAlpha = getNonBatteryClockAlphaFor(mode); float newAlphaBC = getBatteryClockAlpha(mode); if (mCurrentAnimation != null) { @@ -84,7 +84,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions { if (animate) { AnimatorSet anims = new AnimatorSet(); anims.playTogether( - animateTransitionTo(mLeftSide, newAlpha), + animateTransitionTo(mStartSide, newAlpha), animateTransitionTo(mStatusIcons, newAlpha), animateTransitionTo(mBattery, newAlphaBC) ); @@ -94,7 +94,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions { anims.start(); mCurrentAnimation = anims; } else { - mLeftSide.setAlpha(newAlpha); + mStartSide.setAlpha(newAlpha); mStatusIcons.setAlpha(newAlpha); mBattery.setAlpha(newAlphaBC); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt index 9da2ef734be87..f9c4c8f3b4fee 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt @@ -21,7 +21,6 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver - import com.android.systemui.R import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController @@ -32,9 +31,7 @@ import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider import com.android.systemui.util.ViewController import com.android.systemui.util.kotlin.getOrNull import com.android.systemui.util.view.ViewUtil - import java.util.Optional - import javax.inject.Inject import javax.inject.Named @@ -58,8 +55,8 @@ class PhoneStatusBarViewController private constructor( override fun onViewAttached() { if (moveFromCenterAnimationController == null) return - val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_left_side) - val systemIconArea: ViewGroup = mView.findViewById(R.id.system_icon_area) + val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_start_side_except_heads_up) + val systemIconArea: ViewGroup = mView.findViewById(R.id.status_bar_end_side_content) val viewsToAnimate = arrayOf( statusBarLeftSide, @@ -126,11 +123,11 @@ class PhoneStatusBarViewController private constructor( class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider { override fun getViewCenter(view: View, outPoint: Point) = when (view.id) { - R.id.status_bar_left_side -> { + R.id.status_bar_start_side_except_heads_up -> { // items aligned to the start, return start center point getViewEdgeCenter(view, outPoint, isStart = true) } - R.id.system_icon_area -> { + R.id.status_bar_end_side_content -> { // items aligned to the end, return end center point getViewEdgeCenter(view, outPoint, isStart = false) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 25892d9db0800..a7ede87b3f219 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -96,7 +96,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private final StatusBarStateController mStatusBarStateController; private final KeyguardStateController mKeyguardStateController; private final NotificationPanelViewController mNotificationPanelViewController; - private LinearLayout mSystemIconArea; + private LinearLayout mEndSideContent; private View mClockView; private View mOngoingCallChip; private View mNotificationIconAreaInner; @@ -217,15 +217,15 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mDarkIconManager.setShouldLog(true); updateBlockedIcons(); mStatusBarIconController.addIconGroup(mDarkIconManager); - mSystemIconArea = mStatusBar.findViewById(R.id.system_icon_area); + mEndSideContent = mStatusBar.findViewById(R.id.status_bar_end_side_content); mClockView = mStatusBar.findViewById(R.id.clock); mOngoingCallChip = mStatusBar.findViewById(R.id.ongoing_call_chip); - showSystemIconArea(false); + showEndSideContent(false); showClock(false); initOperatorName(); initNotificationIconArea(); mSystemEventAnimator = - new StatusBarSystemEventAnimator(mSystemIconArea, getResources()); + new StatusBarSystemEventAnimator(mEndSideContent, getResources()); mCarrierConfigTracker.addCallback(mCarrierConfigCallback); mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener); } @@ -351,10 +351,10 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mDisabled2 = state2; if ((diff1 & DISABLE_SYSTEM_INFO) != 0 || ((diff2 & DISABLE2_SYSTEM_ICONS) != 0)) { if ((state1 & DISABLE_SYSTEM_INFO) != 0 || ((state2 & DISABLE2_SYSTEM_ICONS) != 0)) { - hideSystemIconArea(animate); + hideEndSideContent(animate); hideOperatorName(animate); } else { - showSystemIconArea(animate); + showEndSideContent(animate); showOperatorName(animate); } } @@ -438,15 +438,15 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue return mStatusBarHideIconsForBouncerManager.getShouldHideStatusBarIconsForBouncer(); } - private void hideSystemIconArea(boolean animate) { - animateHide(mSystemIconArea, animate); + private void hideEndSideContent(boolean animate) { + animateHide(mEndSideContent, animate); } - private void showSystemIconArea(boolean animate) { + private void showEndSideContent(boolean animate) { // Only show the system icon area if we are not currently animating int state = mAnimationScheduler.getAnimationState(); if (state == IDLE || state == SHOWING_PERSISTENT_DOT) { - animateShow(mSystemIconArea, animate); + animateShow(mEndSideContent, animate); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java index 6f9e60fc5d69a..81dc6205bf031 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java @@ -122,7 +122,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { fragment.disable(DEFAULT_DISPLAY, 0, 0, false); - assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(View.VISIBLE, getEndSideContentView().getVisibility()); assertEquals(View.VISIBLE, getClockView().getVisibility()); } @@ -132,11 +132,11 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false); - assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility()); fragment.disable(DEFAULT_DISPLAY, 0, 0, false); - assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(View.VISIBLE, getEndSideContentView().getVisibility()); } @Test @@ -231,7 +231,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { fragment.disable(DEFAULT_DISPLAY, 0, 0, false); - assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(View.VISIBLE, getEndSideContentView().getVisibility()); assertEquals(View.VISIBLE, getClockView().getVisibility()); } @@ -242,7 +242,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { fragment.disable(DEFAULT_DISPLAY, 0, 0, false); - assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility()); + assertEquals(View.VISIBLE, getEndSideContentView().getVisibility()); assertEquals(View.VISIBLE, getClockView().getVisibility()); } @@ -379,7 +379,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest { return mFragment.getView().findViewById(R.id.clock); } - private View getSystemIconAreaView() { - return mFragment.getView().findViewById(R.id.system_icon_area); + private View getEndSideContentView() { + return mFragment.getView().findViewById(R.id.status_bar_end_side_content); } }