Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java +55 −31 Original line number Original line Diff line number Diff line Loading @@ -16,17 +16,8 @@ package com.android.systemui.statusbar.notification.row; package com.android.systemui.statusbar.notification.row; import java.util.ArrayList; import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION; import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.AlphaOptimizedImageView; import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import android.animation.Animator; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.animation.ValueAnimator; Loading @@ -45,6 +36,15 @@ import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import android.widget.FrameLayout.LayoutParams; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.AlphaOptimizedImageView; import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import java.util.ArrayList; import java.util.List; public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnClickListener, public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnClickListener, ExpandableNotificationRow.LayoutListener { ExpandableNotificationRow.LayoutListener { Loading @@ -70,7 +70,8 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl private MenuItem mInfoItem; private MenuItem mInfoItem; private MenuItem mAppOpsItem; private MenuItem mAppOpsItem; private MenuItem mSnoozeItem; private MenuItem mSnoozeItem; private ArrayList<MenuItem> mMenuItems; private ArrayList<MenuItem> mLeftMenuItems; private ArrayList<MenuItem> mRightMenuItems; private OnMenuEventListener mMenuListener; private OnMenuEventListener mMenuListener; private ValueAnimator mFadeAnimator; private ValueAnimator mFadeAnimator; Loading Loading @@ -107,12 +108,13 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl mContext = context; mContext = context; mShouldShowMenu = context.getResources().getBoolean(R.bool.config_showNotificationGear); mShouldShowMenu = context.getResources().getBoolean(R.bool.config_showNotificationGear); mHandler = new Handler(Looper.getMainLooper()); mHandler = new Handler(Looper.getMainLooper()); mMenuItems = new ArrayList<>(); mLeftMenuItems = new ArrayList<>(); mRightMenuItems = new ArrayList<>(); } } @Override @Override public ArrayList<MenuItem> getMenuItems(Context context) { public ArrayList<MenuItem> getMenuItems(Context context) { return mMenuItems; return mOnLeft ? mLeftMenuItems : mRightMenuItems; } } @Override @Override Loading Loading @@ -231,7 +233,8 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl final Resources res = mContext.getResources(); final Resources res = mContext.getResources(); mHorizSpaceForIcon = res.getDimensionPixelSize(R.dimen.notification_menu_icon_size); mHorizSpaceForIcon = res.getDimensionPixelSize(R.dimen.notification_menu_icon_size); mVertSpaceForIcons = res.getDimensionPixelSize(R.dimen.notification_min_height); mVertSpaceForIcons = res.getDimensionPixelSize(R.dimen.notification_min_height); mMenuItems.clear(); mLeftMenuItems.clear(); mRightMenuItems.clear(); // Construct the menu items based on the notification // Construct the menu items based on the notification if (mParent != null && mParent.getStatusBarNotification() != null) { if (mParent != null && mParent.getStatusBarNotification() != null) { int flags = mParent.getStatusBarNotification().getNotification().flags; int flags = mParent.getStatusBarNotification().getNotification().flags; Loading @@ -239,24 +242,19 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl if (!isForeground) { if (!isForeground) { // Only show snooze for non-foreground notifications // Only show snooze for non-foreground notifications mSnoozeItem = createSnoozeItem(mContext); mSnoozeItem = createSnoozeItem(mContext); mMenuItems.add(mSnoozeItem); mLeftMenuItems.add(mSnoozeItem); mRightMenuItems.add(mSnoozeItem); } } } } mInfoItem = createInfoItem(mContext); mInfoItem = createInfoItem(mContext); mMenuItems.add(mInfoItem); mLeftMenuItems.add(mInfoItem); mRightMenuItems.add(mInfoItem); mAppOpsItem = createAppOpsItem(mContext); mAppOpsItem = createAppOpsItem(mContext); mMenuItems.add(mAppOpsItem); mLeftMenuItems.add(mAppOpsItem); mRightMenuItems.add(mAppOpsItem); // Construct the menu views populateMenuViews(); if (mMenuContainer != null) { mMenuContainer.removeAllViews(); } else { mMenuContainer = new FrameLayout(mContext); } for (int i = 0; i < mMenuItems.size(); i++) { addMenuView(mMenuItems.get(i), mMenuContainer); } if (resetState) { if (resetState) { resetState(false /* notify */); resetState(false /* notify */); } else { } else { Loading @@ -268,6 +266,18 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } } } } private void populateMenuViews() { if (mMenuContainer != null) { mMenuContainer.removeAllViews(); } else { mMenuContainer = new FrameLayout(mContext); } List<MenuItem> menuItems = mOnLeft ? mLeftMenuItems : mRightMenuItems; for (int i = 0; i < menuItems.size(); i++) { addMenuView(menuItems.get(i), mMenuContainer); } } private void resetState(boolean notify) { private void resetState(boolean notify) { setMenuAlpha(0f); setMenuAlpha(0f); mIconsPlaced = false; mIconsPlaced = false; Loading Loading @@ -386,10 +396,16 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl if (appName == null) { if (appName == null) { return; return; } } setAppName(appName, mLeftMenuItems); setAppName(appName, mRightMenuItems); } private void setAppName(String appName, ArrayList<MenuItem> menuItems) { Resources res = mContext.getResources(); Resources res = mContext.getResources(); final int count = mMenuItems.size(); final int count = menuItems.size(); for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { MenuItem item = mMenuItems.get(i); MenuItem item = menuItems.get(i); String description = String.format( String description = String.format( res.getString(R.string.notification_menu_accessibility), res.getString(R.string.notification_menu_accessibility), appName, item.getContentDescription()); appName, item.getContentDescription()); Loading @@ -402,7 +418,9 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl @Override @Override public void onParentHeightUpdate() { public void onParentHeightUpdate() { if (mParent == null || mMenuItems.size() == 0 || mMenuContainer == null) { if (mParent == null || (mLeftMenuItems.isEmpty() && mRightMenuItems.isEmpty()) || mMenuContainer == null) { return; return; } } int parentHeight = mParent.getActualHeight(); int parentHeight = mParent.getActualHeight(); Loading Loading @@ -443,13 +461,14 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } } v.getLocationOnScreen(mIconLocation); v.getLocationOnScreen(mIconLocation); mParent.getLocationOnScreen(mParentLocation); mParent.getLocationOnScreen(mParentLocation); final int centerX = (int) (mHorizSpaceForIcon / 2); final int centerX = mHorizSpaceForIcon / 2; final int centerY = v.getHeight() / 2; final int centerY = v.getHeight() / 2; final int x = mIconLocation[0] - mParentLocation[0] + centerX; final int x = mIconLocation[0] - mParentLocation[0] + centerX; final int y = mIconLocation[1] - mParentLocation[1] + centerY; final int y = mIconLocation[1] - mParentLocation[1] + centerY; final int index = mMenuContainer.indexOfChild(v); final int index = mMenuContainer.indexOfChild(v); if (mMenuListener != null) { if (mMenuListener != null) { mMenuListener.onMenuClicked(mParent, x, y, mMenuItems.get(index)); mMenuListener.onMenuClicked(mParent, x, y, (mOnLeft ? mLeftMenuItems : mRightMenuItems).get(index)); } } } } Loading @@ -469,6 +488,11 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl // Do nothing // Do nothing return; return; } } boolean wasOnLeft = mOnLeft; mOnLeft = showOnLeft; if (wasOnLeft != showOnLeft) { populateMenuViews(); } final int count = mMenuContainer.getChildCount(); final int count = mMenuContainer.getChildCount(); for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { final View v = mMenuContainer.getChildAt(i); final View v = mMenuContainer.getChildAt(i); Loading @@ -476,7 +500,6 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl final float right = mParent.getWidth() - (mHorizSpaceForIcon * (i + 1)); final float right = mParent.getWidth() - (mHorizSpaceForIcon * (i + 1)); v.setX(showOnLeft ? left : right); v.setX(showOnLeft ? left : right); } } mOnLeft = showOnLeft; mIconsPlaced = true; mIconsPlaced = true; } } Loading Loading @@ -603,6 +626,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl private void addMenuView(MenuItem item, ViewGroup parent) { private void addMenuView(MenuItem item, ViewGroup parent) { View menuView = item.getMenuView(); View menuView = item.getMenuView(); if (menuView != null) { if (menuView != null) { menuView.setAlpha(mAlpha); parent.addView(menuView); parent.addView(menuView); menuView.setOnClickListener(this); menuView.setOnClickListener(this); FrameLayout.LayoutParams lp = (LayoutParams) menuView.getLayoutParams(); FrameLayout.LayoutParams lp = (LayoutParams) menuView.getLayoutParams(); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationMenuRow.java +55 −31 Original line number Original line Diff line number Diff line Loading @@ -16,17 +16,8 @@ package com.android.systemui.statusbar.notification.row; package com.android.systemui.statusbar.notification.row; import java.util.ArrayList; import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION; import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.AlphaOptimizedImageView; import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import android.animation.Animator; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.animation.ValueAnimator; Loading @@ -45,6 +36,15 @@ import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import android.widget.FrameLayout.LayoutParams; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; import com.android.systemui.statusbar.AlphaOptimizedImageView; import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import java.util.ArrayList; import java.util.List; public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnClickListener, public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnClickListener, ExpandableNotificationRow.LayoutListener { ExpandableNotificationRow.LayoutListener { Loading @@ -70,7 +70,8 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl private MenuItem mInfoItem; private MenuItem mInfoItem; private MenuItem mAppOpsItem; private MenuItem mAppOpsItem; private MenuItem mSnoozeItem; private MenuItem mSnoozeItem; private ArrayList<MenuItem> mMenuItems; private ArrayList<MenuItem> mLeftMenuItems; private ArrayList<MenuItem> mRightMenuItems; private OnMenuEventListener mMenuListener; private OnMenuEventListener mMenuListener; private ValueAnimator mFadeAnimator; private ValueAnimator mFadeAnimator; Loading Loading @@ -107,12 +108,13 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl mContext = context; mContext = context; mShouldShowMenu = context.getResources().getBoolean(R.bool.config_showNotificationGear); mShouldShowMenu = context.getResources().getBoolean(R.bool.config_showNotificationGear); mHandler = new Handler(Looper.getMainLooper()); mHandler = new Handler(Looper.getMainLooper()); mMenuItems = new ArrayList<>(); mLeftMenuItems = new ArrayList<>(); mRightMenuItems = new ArrayList<>(); } } @Override @Override public ArrayList<MenuItem> getMenuItems(Context context) { public ArrayList<MenuItem> getMenuItems(Context context) { return mMenuItems; return mOnLeft ? mLeftMenuItems : mRightMenuItems; } } @Override @Override Loading Loading @@ -231,7 +233,8 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl final Resources res = mContext.getResources(); final Resources res = mContext.getResources(); mHorizSpaceForIcon = res.getDimensionPixelSize(R.dimen.notification_menu_icon_size); mHorizSpaceForIcon = res.getDimensionPixelSize(R.dimen.notification_menu_icon_size); mVertSpaceForIcons = res.getDimensionPixelSize(R.dimen.notification_min_height); mVertSpaceForIcons = res.getDimensionPixelSize(R.dimen.notification_min_height); mMenuItems.clear(); mLeftMenuItems.clear(); mRightMenuItems.clear(); // Construct the menu items based on the notification // Construct the menu items based on the notification if (mParent != null && mParent.getStatusBarNotification() != null) { if (mParent != null && mParent.getStatusBarNotification() != null) { int flags = mParent.getStatusBarNotification().getNotification().flags; int flags = mParent.getStatusBarNotification().getNotification().flags; Loading @@ -239,24 +242,19 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl if (!isForeground) { if (!isForeground) { // Only show snooze for non-foreground notifications // Only show snooze for non-foreground notifications mSnoozeItem = createSnoozeItem(mContext); mSnoozeItem = createSnoozeItem(mContext); mMenuItems.add(mSnoozeItem); mLeftMenuItems.add(mSnoozeItem); mRightMenuItems.add(mSnoozeItem); } } } } mInfoItem = createInfoItem(mContext); mInfoItem = createInfoItem(mContext); mMenuItems.add(mInfoItem); mLeftMenuItems.add(mInfoItem); mRightMenuItems.add(mInfoItem); mAppOpsItem = createAppOpsItem(mContext); mAppOpsItem = createAppOpsItem(mContext); mMenuItems.add(mAppOpsItem); mLeftMenuItems.add(mAppOpsItem); mRightMenuItems.add(mAppOpsItem); // Construct the menu views populateMenuViews(); if (mMenuContainer != null) { mMenuContainer.removeAllViews(); } else { mMenuContainer = new FrameLayout(mContext); } for (int i = 0; i < mMenuItems.size(); i++) { addMenuView(mMenuItems.get(i), mMenuContainer); } if (resetState) { if (resetState) { resetState(false /* notify */); resetState(false /* notify */); } else { } else { Loading @@ -268,6 +266,18 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } } } } private void populateMenuViews() { if (mMenuContainer != null) { mMenuContainer.removeAllViews(); } else { mMenuContainer = new FrameLayout(mContext); } List<MenuItem> menuItems = mOnLeft ? mLeftMenuItems : mRightMenuItems; for (int i = 0; i < menuItems.size(); i++) { addMenuView(menuItems.get(i), mMenuContainer); } } private void resetState(boolean notify) { private void resetState(boolean notify) { setMenuAlpha(0f); setMenuAlpha(0f); mIconsPlaced = false; mIconsPlaced = false; Loading Loading @@ -386,10 +396,16 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl if (appName == null) { if (appName == null) { return; return; } } setAppName(appName, mLeftMenuItems); setAppName(appName, mRightMenuItems); } private void setAppName(String appName, ArrayList<MenuItem> menuItems) { Resources res = mContext.getResources(); Resources res = mContext.getResources(); final int count = mMenuItems.size(); final int count = menuItems.size(); for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { MenuItem item = mMenuItems.get(i); MenuItem item = menuItems.get(i); String description = String.format( String description = String.format( res.getString(R.string.notification_menu_accessibility), res.getString(R.string.notification_menu_accessibility), appName, item.getContentDescription()); appName, item.getContentDescription()); Loading @@ -402,7 +418,9 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl @Override @Override public void onParentHeightUpdate() { public void onParentHeightUpdate() { if (mParent == null || mMenuItems.size() == 0 || mMenuContainer == null) { if (mParent == null || (mLeftMenuItems.isEmpty() && mRightMenuItems.isEmpty()) || mMenuContainer == null) { return; return; } } int parentHeight = mParent.getActualHeight(); int parentHeight = mParent.getActualHeight(); Loading Loading @@ -443,13 +461,14 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl } } v.getLocationOnScreen(mIconLocation); v.getLocationOnScreen(mIconLocation); mParent.getLocationOnScreen(mParentLocation); mParent.getLocationOnScreen(mParentLocation); final int centerX = (int) (mHorizSpaceForIcon / 2); final int centerX = mHorizSpaceForIcon / 2; final int centerY = v.getHeight() / 2; final int centerY = v.getHeight() / 2; final int x = mIconLocation[0] - mParentLocation[0] + centerX; final int x = mIconLocation[0] - mParentLocation[0] + centerX; final int y = mIconLocation[1] - mParentLocation[1] + centerY; final int y = mIconLocation[1] - mParentLocation[1] + centerY; final int index = mMenuContainer.indexOfChild(v); final int index = mMenuContainer.indexOfChild(v); if (mMenuListener != null) { if (mMenuListener != null) { mMenuListener.onMenuClicked(mParent, x, y, mMenuItems.get(index)); mMenuListener.onMenuClicked(mParent, x, y, (mOnLeft ? mLeftMenuItems : mRightMenuItems).get(index)); } } } } Loading @@ -469,6 +488,11 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl // Do nothing // Do nothing return; return; } } boolean wasOnLeft = mOnLeft; mOnLeft = showOnLeft; if (wasOnLeft != showOnLeft) { populateMenuViews(); } final int count = mMenuContainer.getChildCount(); final int count = mMenuContainer.getChildCount(); for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { final View v = mMenuContainer.getChildAt(i); final View v = mMenuContainer.getChildAt(i); Loading @@ -476,7 +500,6 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl final float right = mParent.getWidth() - (mHorizSpaceForIcon * (i + 1)); final float right = mParent.getWidth() - (mHorizSpaceForIcon * (i + 1)); v.setX(showOnLeft ? left : right); v.setX(showOnLeft ? left : right); } } mOnLeft = showOnLeft; mIconsPlaced = true; mIconsPlaced = true; } } Loading Loading @@ -603,6 +626,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl private void addMenuView(MenuItem item, ViewGroup parent) { private void addMenuView(MenuItem item, ViewGroup parent) { View menuView = item.getMenuView(); View menuView = item.getMenuView(); if (menuView != null) { if (menuView != null) { menuView.setAlpha(mAlpha); parent.addView(menuView); parent.addView(menuView); menuView.setOnClickListener(this); menuView.setOnClickListener(this); FrameLayout.LayoutParams lp = (LayoutParams) menuView.getLayoutParams(); FrameLayout.LayoutParams lp = (LayoutParams) menuView.getLayoutParams(); Loading