Loading src/com/android/launcher3/notification/NotificationFooterLayout.java +41 −34 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class NotificationFooterLayout extends LinearLayout { private LinearLayout mIconRow; private int mBackgroundColor; private int mTextColor; private TextView mOverflowView; public NotificationFooterLayout(Context context) { this(context, null, 0); Loading Loading @@ -120,10 +121,10 @@ public class NotificationFooterLayout extends LinearLayout { } if (!mOverflowNotifications.isEmpty()) { TextView overflowText = new TextView(getContext()); overflowText.setTextColor(mTextColor); updateOverflowText(overflowText); mIconRow.addView(overflowText, mIconLayoutParams); mOverflowView = new TextView(getContext()); mOverflowView.setTextColor(mTextColor); updateOverflowText(); mIconRow.addView(mOverflowView, mIconLayoutParams); } } Loading @@ -142,8 +143,8 @@ public class NotificationFooterLayout extends LinearLayout { mIconRow.addView(icon, addIndex, mIconLayoutParams); } private void updateOverflowText(TextView overflowTextView) { overflowTextView.setText(getResources().getString(R.string.deep_notifications_overflow, private void updateOverflowText() { mOverflowView.setText(getResources().getString(R.string.deep_notifications_overflow, mOverflowNotifications.size())); } Loading @@ -162,6 +163,7 @@ public class NotificationFooterLayout extends LinearLayout { @Override public void onAnimationEnd(Animator animation) { callback.onIconAnimationEnd((NotificationInfo) firstNotification.getTag()); removeViewFromIconRow(firstNotification); } }); animation.play(moveAndScaleIcon); Loading @@ -178,7 +180,6 @@ public class NotificationFooterLayout extends LinearLayout { public void onAnimationEnd(Animator animation) { // We have to set the translation X to 0 when the new main notification // is removed from the footer. // TODO: remove it here instead of expecting trimNotifications to do so. child.setTranslationX(0); } }); Loading @@ -187,39 +188,20 @@ public class NotificationFooterLayout extends LinearLayout { animation.start(); } public void trimNotifications(List<String> notifications) { if (!isAttachedToWindow() || mIconRow.getChildCount() == 0) { return; } Iterator<NotificationInfo> overflowIterator = mOverflowNotifications.iterator(); while (overflowIterator.hasNext()) { if (!notifications.contains(overflowIterator.next().notificationKey)) { overflowIterator.remove(); } } TextView overflowView = null; for (int i = mIconRow.getChildCount() - 1; i >= 0; i--) { View child = mIconRow.getChildAt(i); if (child instanceof TextView) { overflowView = (TextView) child; } else { NotificationInfo childInfo = (NotificationInfo) child.getTag(); if (!notifications.contains(childInfo.notificationKey)) { private void removeViewFromIconRow(View child) { mIconRow.removeView(child); mNotifications.remove(childInfo); mNotifications.remove((NotificationInfo) child.getTag()); if (!mOverflowNotifications.isEmpty()) { NotificationInfo notification = mOverflowNotifications.remove(0); mNotifications.add(notification); addNotificationIconForInfo(notification, true /* fromOverflow */); } } } } if (overflowView != null) { if (mOverflowView != null) { if (mOverflowNotifications.isEmpty()) { mIconRow.removeView(overflowView); mIconRow.removeView(mOverflowView); mOverflowView = null; } else { updateOverflowText(overflowView); updateOverflowText(); } } if (mIconRow.getChildCount() == 0) { Loading @@ -229,11 +211,36 @@ public class NotificationFooterLayout extends LinearLayout { int newHeight = getResources().getDimensionPixelSize( R.dimen.notification_footer_collapsed_height); AnimatorSet collapseSecondary = LauncherAnimUtils.createAnimatorSet(); collapseSecondary.play(popup.animateTranslationYBy(getHeight() - newHeight, getResources().getInteger(R.integer.config_removeNotificationViewDuration))); collapseSecondary.play(popup.animateTranslationYBy(getHeight() - newHeight, 0)); collapseSecondary.play(LauncherAnimUtils.animateViewHeight( this, getHeight(), newHeight)); collapseSecondary.setDuration(getResources().getInteger( R.integer.config_removeNotificationViewDuration)); collapseSecondary.start(); } } public void trimNotifications(List<String> notifications) { if (!isAttachedToWindow() || mIconRow.getChildCount() == 0) { return; } Iterator<NotificationInfo> overflowIterator = mOverflowNotifications.iterator(); while (overflowIterator.hasNext()) { if (!notifications.contains(overflowIterator.next().notificationKey)) { overflowIterator.remove(); } } TextView overflowView = null; for (int i = mIconRow.getChildCount() - 1; i >= 0; i--) { View child = mIconRow.getChildAt(i); if (child instanceof TextView) { overflowView = (TextView) child; } else { NotificationInfo childInfo = (NotificationInfo) child.getTag(); if (!notifications.contains(childInfo.notificationKey)) { removeViewFromIconRow(child); } } } } } src/com/android/launcher3/notification/NotificationItemView.java +0 −7 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider; import com.android.launcher3.popup.PopupItemView; import com.android.launcher3.userevent.nano.LauncherLogProto; import java.util.ArrayList; import java.util.List; import static com.android.launcher3.LauncherAnimUtils.animateViewHeight; Loading Loading @@ -145,12 +144,6 @@ public class NotificationItemView extends PopupItemView implements LogContainerP public void onIconAnimationEnd(NotificationInfo newMainNotification) { if (newMainNotification != null) { mMainView.applyNotificationInfo(newMainNotification, mIconView, true); // Remove the animated notification from the footer by calling trim // TODO: Remove the notification in NotificationFooterLayout directly // instead of relying on this hack. List<String> footerNotificationKeys = new ArrayList<>(notificationKeys); footerNotificationKeys.remove(newMainNotification.notificationKey); mFooter.trimNotifications(footerNotificationKeys); mMainView.setVisibility(VISIBLE); } mAnimatingNextIcon = false; Loading Loading
src/com/android/launcher3/notification/NotificationFooterLayout.java +41 −34 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class NotificationFooterLayout extends LinearLayout { private LinearLayout mIconRow; private int mBackgroundColor; private int mTextColor; private TextView mOverflowView; public NotificationFooterLayout(Context context) { this(context, null, 0); Loading Loading @@ -120,10 +121,10 @@ public class NotificationFooterLayout extends LinearLayout { } if (!mOverflowNotifications.isEmpty()) { TextView overflowText = new TextView(getContext()); overflowText.setTextColor(mTextColor); updateOverflowText(overflowText); mIconRow.addView(overflowText, mIconLayoutParams); mOverflowView = new TextView(getContext()); mOverflowView.setTextColor(mTextColor); updateOverflowText(); mIconRow.addView(mOverflowView, mIconLayoutParams); } } Loading @@ -142,8 +143,8 @@ public class NotificationFooterLayout extends LinearLayout { mIconRow.addView(icon, addIndex, mIconLayoutParams); } private void updateOverflowText(TextView overflowTextView) { overflowTextView.setText(getResources().getString(R.string.deep_notifications_overflow, private void updateOverflowText() { mOverflowView.setText(getResources().getString(R.string.deep_notifications_overflow, mOverflowNotifications.size())); } Loading @@ -162,6 +163,7 @@ public class NotificationFooterLayout extends LinearLayout { @Override public void onAnimationEnd(Animator animation) { callback.onIconAnimationEnd((NotificationInfo) firstNotification.getTag()); removeViewFromIconRow(firstNotification); } }); animation.play(moveAndScaleIcon); Loading @@ -178,7 +180,6 @@ public class NotificationFooterLayout extends LinearLayout { public void onAnimationEnd(Animator animation) { // We have to set the translation X to 0 when the new main notification // is removed from the footer. // TODO: remove it here instead of expecting trimNotifications to do so. child.setTranslationX(0); } }); Loading @@ -187,39 +188,20 @@ public class NotificationFooterLayout extends LinearLayout { animation.start(); } public void trimNotifications(List<String> notifications) { if (!isAttachedToWindow() || mIconRow.getChildCount() == 0) { return; } Iterator<NotificationInfo> overflowIterator = mOverflowNotifications.iterator(); while (overflowIterator.hasNext()) { if (!notifications.contains(overflowIterator.next().notificationKey)) { overflowIterator.remove(); } } TextView overflowView = null; for (int i = mIconRow.getChildCount() - 1; i >= 0; i--) { View child = mIconRow.getChildAt(i); if (child instanceof TextView) { overflowView = (TextView) child; } else { NotificationInfo childInfo = (NotificationInfo) child.getTag(); if (!notifications.contains(childInfo.notificationKey)) { private void removeViewFromIconRow(View child) { mIconRow.removeView(child); mNotifications.remove(childInfo); mNotifications.remove((NotificationInfo) child.getTag()); if (!mOverflowNotifications.isEmpty()) { NotificationInfo notification = mOverflowNotifications.remove(0); mNotifications.add(notification); addNotificationIconForInfo(notification, true /* fromOverflow */); } } } } if (overflowView != null) { if (mOverflowView != null) { if (mOverflowNotifications.isEmpty()) { mIconRow.removeView(overflowView); mIconRow.removeView(mOverflowView); mOverflowView = null; } else { updateOverflowText(overflowView); updateOverflowText(); } } if (mIconRow.getChildCount() == 0) { Loading @@ -229,11 +211,36 @@ public class NotificationFooterLayout extends LinearLayout { int newHeight = getResources().getDimensionPixelSize( R.dimen.notification_footer_collapsed_height); AnimatorSet collapseSecondary = LauncherAnimUtils.createAnimatorSet(); collapseSecondary.play(popup.animateTranslationYBy(getHeight() - newHeight, getResources().getInteger(R.integer.config_removeNotificationViewDuration))); collapseSecondary.play(popup.animateTranslationYBy(getHeight() - newHeight, 0)); collapseSecondary.play(LauncherAnimUtils.animateViewHeight( this, getHeight(), newHeight)); collapseSecondary.setDuration(getResources().getInteger( R.integer.config_removeNotificationViewDuration)); collapseSecondary.start(); } } public void trimNotifications(List<String> notifications) { if (!isAttachedToWindow() || mIconRow.getChildCount() == 0) { return; } Iterator<NotificationInfo> overflowIterator = mOverflowNotifications.iterator(); while (overflowIterator.hasNext()) { if (!notifications.contains(overflowIterator.next().notificationKey)) { overflowIterator.remove(); } } TextView overflowView = null; for (int i = mIconRow.getChildCount() - 1; i >= 0; i--) { View child = mIconRow.getChildAt(i); if (child instanceof TextView) { overflowView = (TextView) child; } else { NotificationInfo childInfo = (NotificationInfo) child.getTag(); if (!notifications.contains(childInfo.notificationKey)) { removeViewFromIconRow(child); } } } } }
src/com/android/launcher3/notification/NotificationItemView.java +0 −7 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import com.android.launcher3.logging.UserEventDispatcher.LogContainerProvider; import com.android.launcher3.popup.PopupItemView; import com.android.launcher3.userevent.nano.LauncherLogProto; import java.util.ArrayList; import java.util.List; import static com.android.launcher3.LauncherAnimUtils.animateViewHeight; Loading Loading @@ -145,12 +144,6 @@ public class NotificationItemView extends PopupItemView implements LogContainerP public void onIconAnimationEnd(NotificationInfo newMainNotification) { if (newMainNotification != null) { mMainView.applyNotificationInfo(newMainNotification, mIconView, true); // Remove the animated notification from the footer by calling trim // TODO: Remove the notification in NotificationFooterLayout directly // instead of relying on this hack. List<String> footerNotificationKeys = new ArrayList<>(notificationKeys); footerNotificationKeys.remove(newMainNotification.notificationKey); mFooter.trimNotifications(footerNotificationKeys); mMainView.setVisibility(VISIBLE); } mAnimatingNextIcon = false; Loading