Loading packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +20 −29 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.systemui.statusbar; import static com.android.systemui.statusbar.phone.NotificationIconContainer.MAX_ICONS_ON_LOCKSCREEN; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; Loading @@ -41,6 +39,7 @@ import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; import com.android.systemui.statusbar.notification.row.NotificationBackgroundView; import com.android.systemui.statusbar.notification.stack.AmbientState; import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; Loading @@ -48,7 +47,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.statusbar.phone.NotificationIconContainer; import com.android.systemui.util.Utils; /** * A notification shelf view that is placed inside the notification scroller. It manages the Loading Loading @@ -85,7 +83,7 @@ public class NotificationShelf extends ActivatableNotificationView implements private int mIndexOfFirstViewInShelf = -1; private float mCornerAnimationDistance; private NotificationShelfController mController; private int mActualWidth = -1; private float mActualWidth = -1; /** Fraction of lockscreen to shade animation (on lockscreen swipe down). */ private float mFractionToShade; Loading Loading @@ -211,10 +209,6 @@ public class NotificationShelf extends ActivatableNotificationView implements final float stackEnd = ambientState.getStackY() + ambientState.getStackHeight(); viewState.yTranslation = stackEnd - viewState.height; final int shortestWidth = mShelfIcons.calculateWidthFor(MAX_ICONS_ON_LOCKSCREEN); final float fraction = Interpolators.STANDARD.getInterpolation(mFractionToShade); updateStateWidth(viewState, fraction, shortestWidth); } else { viewState.hidden = true; viewState.location = ExpandableViewState.LOCATION_GONE; Loading @@ -223,15 +217,23 @@ public class NotificationShelf extends ActivatableNotificationView implements } /** * @param shelfState View state for NotificationShelf * @param fraction Fraction of lockscreen to shade transition * @param fractionToShade Fraction of lockscreen to shade transition * @param shortestWidth Shortest width to use for lockscreen shelf */ @VisibleForTesting public void updateStateWidth(ShelfState shelfState, float fraction, int shortestWidth) { shelfState.actualWidth = mAmbientState.isOnKeyguard() ? (int) MathUtils.lerp(shortestWidth, getWidth(), fraction) public void updateActualWidth(float fractionToShade, float shortestWidth) { final float actualWidth = mAmbientState.isOnKeyguard() ? MathUtils.lerp(shortestWidth, getWidth(), fractionToShade) : getWidth(); ActivatableNotificationView anv = (ActivatableNotificationView) this; NotificationBackgroundView bg = anv.getBackgroundNormal(); if (bg != null) { anv.getBackgroundNormal().setActualWidth((int) actualWidth); } if (mShelfIcons != null) { mShelfIcons.setActualLayoutWidth((int) actualWidth); } mActualWidth = actualWidth; } /** Loading @@ -245,7 +247,7 @@ public class NotificationShelf extends ActivatableNotificationView implements * @return Actual width of shelf, accounting for possible ongoing width animation */ public int getActualWidth() { return mActualWidth > -1 ? mActualWidth : getWidth(); return mActualWidth > -1 ? (int) mActualWidth : getWidth(); } /** Loading Loading @@ -412,6 +414,10 @@ public class NotificationShelf extends ActivatableNotificationView implements || !mShowNotificationShelf || numViewsInShelf < 1f; final float fractionToShade = Interpolators.STANDARD.getInterpolation(mFractionToShade); final float shortestWidth = mShelfIcons.calculateWidthFor(numViewsInShelf); updateActualWidth(fractionToShade, shortestWidth); // TODO(b/172289889) transition last icon in shelf to notification icon and vice versa. setVisibility(isHidden ? View.INVISIBLE : View.VISIBLE); setBackgroundTop(backgroundTop); Loading Loading @@ -921,30 +927,17 @@ public class NotificationShelf extends ActivatableNotificationView implements public class ShelfState extends ExpandableViewState { private boolean hasItemsInStableShelf; private ExpandableView firstViewInShelf; public int actualWidth = -1; private void updateShelfWidth(View view) { if (actualWidth < 0) { return; } mActualWidth = actualWidth; ActivatableNotificationView anv = (ActivatableNotificationView) view; anv.getBackgroundNormal().setActualWidth(actualWidth); mShelfIcons.setActualLayoutWidth(actualWidth); } @Override public void applyToView(View view) { if (!mShowNotificationShelf) { return; } super.applyToView(view); setIndexOfFirstViewInShelf(firstViewInShelf); updateAppearance(); setHasItemsInStableShelf(hasItemsInStableShelf); mShelfIcons.setAnimationsEnabled(mAnimationsEnabled); updateShelfWidth(view); } @Override Loading @@ -952,13 +945,11 @@ public class NotificationShelf extends ActivatableNotificationView implements if (!mShowNotificationShelf) { return; } super.animateTo(view, properties); setIndexOfFirstViewInShelf(firstViewInShelf); updateAppearance(); setHasItemsInStableShelf(hasItemsInStableShelf); mShelfIcons.setAnimationsEnabled(mAnimationsEnabled); updateShelfWidth(view); } } } packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +10 −8 Original line number Diff line number Diff line Loading @@ -387,16 +387,18 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { } /** * @return Width of shelf for the given number of icons and overflow dot * @return Width of shelf for the given number of icons */ public int calculateWidthFor(int numMaxIcons) { public float calculateWidthFor(float numIcons) { if (getChildCount() == 0) { return 0; } return (int) (getActualPaddingStart() + numMaxIcons * mIconSize + mOverflowWidth + getActualPaddingEnd()); return 0f; } final float contentWidth = numIcons <= MAX_ICONS_ON_LOCKSCREEN + 1 ? numIcons * mIconSize : MAX_ICONS_ON_LOCKSCREEN * mIconSize + (float) mOverflowWidth; return getActualPaddingStart() + contentWidth + getActualPaddingEnd(); } /** Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationShelfTest.kt +8 −8 Original line number Diff line number Diff line Loading @@ -36,14 +36,14 @@ class NotificationShelfTest : SysuiTestCase() { setFractionToShade(0f) setOnLockscreen(true) shelf.updateStateWidth(shelfState, /* fraction */ 0f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 10) shelf.updateActualWidth(/* fractionToShade */ 0f, /* shortestWidth */ 10f); assertTrue(shelf.actualWidth == 10) shelf.updateStateWidth(shelfState, /* fraction */ 0.5f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 20) shelf.updateActualWidth(/* fractionToShade */ 0.5f, /* shortestWidth */ 10f) assertTrue(shelf.actualWidth == 20) shelf.updateStateWidth(shelfState, /* fraction */ 1f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 30) shelf.updateActualWidth(/* fractionToShade */ 1f, /* shortestWidth */ 10f) assertTrue(shelf.actualWidth == 30) } @Test Loading @@ -51,8 +51,8 @@ class NotificationShelfTest : SysuiTestCase() { setFractionToShade(0f) setOnLockscreen(false) shelf.updateStateWidth(shelfState, /* fraction */ 0f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 30) shelf.updateActualWidth(/* fraction */ 0f, /* shortestWidth */ 10f) assertTrue(shelf.actualWidth == 30) } @Test Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +20 −29 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.systemui.statusbar; import static com.android.systemui.statusbar.phone.NotificationIconContainer.MAX_ICONS_ON_LOCKSCREEN; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; Loading @@ -41,6 +39,7 @@ import com.android.systemui.statusbar.notification.NotificationUtils; import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; import com.android.systemui.statusbar.notification.row.NotificationBackgroundView; import com.android.systemui.statusbar.notification.stack.AmbientState; import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.ExpandableViewState; Loading @@ -48,7 +47,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm; import com.android.systemui.statusbar.notification.stack.ViewState; import com.android.systemui.statusbar.phone.NotificationIconContainer; import com.android.systemui.util.Utils; /** * A notification shelf view that is placed inside the notification scroller. It manages the Loading Loading @@ -85,7 +83,7 @@ public class NotificationShelf extends ActivatableNotificationView implements private int mIndexOfFirstViewInShelf = -1; private float mCornerAnimationDistance; private NotificationShelfController mController; private int mActualWidth = -1; private float mActualWidth = -1; /** Fraction of lockscreen to shade animation (on lockscreen swipe down). */ private float mFractionToShade; Loading Loading @@ -211,10 +209,6 @@ public class NotificationShelf extends ActivatableNotificationView implements final float stackEnd = ambientState.getStackY() + ambientState.getStackHeight(); viewState.yTranslation = stackEnd - viewState.height; final int shortestWidth = mShelfIcons.calculateWidthFor(MAX_ICONS_ON_LOCKSCREEN); final float fraction = Interpolators.STANDARD.getInterpolation(mFractionToShade); updateStateWidth(viewState, fraction, shortestWidth); } else { viewState.hidden = true; viewState.location = ExpandableViewState.LOCATION_GONE; Loading @@ -223,15 +217,23 @@ public class NotificationShelf extends ActivatableNotificationView implements } /** * @param shelfState View state for NotificationShelf * @param fraction Fraction of lockscreen to shade transition * @param fractionToShade Fraction of lockscreen to shade transition * @param shortestWidth Shortest width to use for lockscreen shelf */ @VisibleForTesting public void updateStateWidth(ShelfState shelfState, float fraction, int shortestWidth) { shelfState.actualWidth = mAmbientState.isOnKeyguard() ? (int) MathUtils.lerp(shortestWidth, getWidth(), fraction) public void updateActualWidth(float fractionToShade, float shortestWidth) { final float actualWidth = mAmbientState.isOnKeyguard() ? MathUtils.lerp(shortestWidth, getWidth(), fractionToShade) : getWidth(); ActivatableNotificationView anv = (ActivatableNotificationView) this; NotificationBackgroundView bg = anv.getBackgroundNormal(); if (bg != null) { anv.getBackgroundNormal().setActualWidth((int) actualWidth); } if (mShelfIcons != null) { mShelfIcons.setActualLayoutWidth((int) actualWidth); } mActualWidth = actualWidth; } /** Loading @@ -245,7 +247,7 @@ public class NotificationShelf extends ActivatableNotificationView implements * @return Actual width of shelf, accounting for possible ongoing width animation */ public int getActualWidth() { return mActualWidth > -1 ? mActualWidth : getWidth(); return mActualWidth > -1 ? (int) mActualWidth : getWidth(); } /** Loading Loading @@ -412,6 +414,10 @@ public class NotificationShelf extends ActivatableNotificationView implements || !mShowNotificationShelf || numViewsInShelf < 1f; final float fractionToShade = Interpolators.STANDARD.getInterpolation(mFractionToShade); final float shortestWidth = mShelfIcons.calculateWidthFor(numViewsInShelf); updateActualWidth(fractionToShade, shortestWidth); // TODO(b/172289889) transition last icon in shelf to notification icon and vice versa. setVisibility(isHidden ? View.INVISIBLE : View.VISIBLE); setBackgroundTop(backgroundTop); Loading Loading @@ -921,30 +927,17 @@ public class NotificationShelf extends ActivatableNotificationView implements public class ShelfState extends ExpandableViewState { private boolean hasItemsInStableShelf; private ExpandableView firstViewInShelf; public int actualWidth = -1; private void updateShelfWidth(View view) { if (actualWidth < 0) { return; } mActualWidth = actualWidth; ActivatableNotificationView anv = (ActivatableNotificationView) view; anv.getBackgroundNormal().setActualWidth(actualWidth); mShelfIcons.setActualLayoutWidth(actualWidth); } @Override public void applyToView(View view) { if (!mShowNotificationShelf) { return; } super.applyToView(view); setIndexOfFirstViewInShelf(firstViewInShelf); updateAppearance(); setHasItemsInStableShelf(hasItemsInStableShelf); mShelfIcons.setAnimationsEnabled(mAnimationsEnabled); updateShelfWidth(view); } @Override Loading @@ -952,13 +945,11 @@ public class NotificationShelf extends ActivatableNotificationView implements if (!mShowNotificationShelf) { return; } super.animateTo(view, properties); setIndexOfFirstViewInShelf(firstViewInShelf); updateAppearance(); setHasItemsInStableShelf(hasItemsInStableShelf); mShelfIcons.setAnimationsEnabled(mAnimationsEnabled); updateShelfWidth(view); } } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +10 −8 Original line number Diff line number Diff line Loading @@ -387,16 +387,18 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { } /** * @return Width of shelf for the given number of icons and overflow dot * @return Width of shelf for the given number of icons */ public int calculateWidthFor(int numMaxIcons) { public float calculateWidthFor(float numIcons) { if (getChildCount() == 0) { return 0; } return (int) (getActualPaddingStart() + numMaxIcons * mIconSize + mOverflowWidth + getActualPaddingEnd()); return 0f; } final float contentWidth = numIcons <= MAX_ICONS_ON_LOCKSCREEN + 1 ? numIcons * mIconSize : MAX_ICONS_ON_LOCKSCREEN * mIconSize + (float) mOverflowWidth; return getActualPaddingStart() + contentWidth + getActualPaddingEnd(); } /** Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationShelfTest.kt +8 −8 Original line number Diff line number Diff line Loading @@ -36,14 +36,14 @@ class NotificationShelfTest : SysuiTestCase() { setFractionToShade(0f) setOnLockscreen(true) shelf.updateStateWidth(shelfState, /* fraction */ 0f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 10) shelf.updateActualWidth(/* fractionToShade */ 0f, /* shortestWidth */ 10f); assertTrue(shelf.actualWidth == 10) shelf.updateStateWidth(shelfState, /* fraction */ 0.5f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 20) shelf.updateActualWidth(/* fractionToShade */ 0.5f, /* shortestWidth */ 10f) assertTrue(shelf.actualWidth == 20) shelf.updateStateWidth(shelfState, /* fraction */ 1f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 30) shelf.updateActualWidth(/* fractionToShade */ 1f, /* shortestWidth */ 10f) assertTrue(shelf.actualWidth == 30) } @Test Loading @@ -51,8 +51,8 @@ class NotificationShelfTest : SysuiTestCase() { setFractionToShade(0f) setOnLockscreen(false) shelf.updateStateWidth(shelfState, /* fraction */ 0f, /* shortestWidth */ 10) assertTrue(shelfState.actualWidth == 30) shelf.updateActualWidth(/* fraction */ 0f, /* shortestWidth */ 10f) assertTrue(shelf.actualWidth == 30) } @Test Loading