Merge "Updates to NotificationMenuRowPlugin so that long press may be captured" into oc-dr1-dev

This commit is contained in:
Mady Mellor
2017-06-12 21:48:38 +00:00
committed by Android (Google) Code Review
5 changed files with 31 additions and 16 deletions

View File

@@ -15,6 +15,7 @@
package com.android.systemui.plugins.statusbar;
import android.content.Context;
import android.service.notification.StatusBarNotification;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -37,7 +38,7 @@ import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem
public interface NotificationMenuRowPlugin extends Plugin {
public static final String ACTION = "com.android.systemui.action.PLUGIN_NOTIFICATION_MENU_ROW";
public static final int VERSION = 2;
public static final int VERSION = 3;
@ProvidesInterface(version = OnMenuEventListener.VERSION)
public interface OnMenuEventListener {
@@ -77,7 +78,7 @@ public interface NotificationMenuRowPlugin extends Plugin {
public void setAppName(String appName);
public void createMenu(ViewGroup parent);
public void createMenu(ViewGroup parent, StatusBarNotification sbn);
public View getMenuView();
@@ -89,10 +90,14 @@ public interface NotificationMenuRowPlugin extends Plugin {
public void onHeightUpdate();
public void onNotificationUpdated();
public void onNotificationUpdated(StatusBarNotification sbn);
public boolean onTouchEvent(View view, MotionEvent ev, float velocity);
public default boolean onInterceptTouchEvent(View view, MotionEvent ev) {
return false;
}
public default boolean useDefaultMenuItems() {
return false;
}

View File

@@ -32,6 +32,7 @@ import android.view.View;
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
import com.android.systemui.classifier.FalsingManager;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.FlingAnimationUtils;
@@ -81,6 +82,7 @@ public class SwipeHelper implements Gefingerpoken {
private float mDensityScale;
private float mTranslation = 0;
private boolean mMenuRowIntercepting;
private boolean mLongPressSent;
private LongPressListener mLongPressListener;
private Runnable mWatchLongPress;
@@ -265,6 +267,10 @@ public class SwipeHelper implements Gefingerpoken {
@Override
public boolean onInterceptTouchEvent(final MotionEvent ev) {
if (mCurrView instanceof ExpandableNotificationRow) {
NotificationMenuRowPlugin nmr = ((ExpandableNotificationRow) mCurrView).getProvider();
mMenuRowIntercepting = nmr.onInterceptTouchEvent(mCurrView, ev);
}
final int action = ev.getAction();
switch (action) {
@@ -300,7 +306,10 @@ public class SwipeHelper implements Gefingerpoken {
menuItem = ((ExpandableNotificationRow) mCurrView)
.getProvider().getLongpressMenuItem(mContext);
}
mLongPressListener.onLongPress(mCurrView, x, y, menuItem);
if (menuItem != null) {
mLongPressListener.onLongPress(mCurrView, x, y,
menuItem);
}
}
}
};
@@ -330,15 +339,16 @@ public class SwipeHelper implements Gefingerpoken {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
final boolean captured = (mDragging || mLongPressSent);
final boolean captured = (mDragging || mLongPressSent || mMenuRowIntercepting);
mDragging = false;
mCurrView = null;
mLongPressSent = false;
mMenuRowIntercepting = false;
removeLongPressCallback();
if (captured) return true;
break;
}
return mDragging || mLongPressSent;
return mDragging || mLongPressSent || mMenuRowIntercepting;
}
/**
@@ -557,11 +567,11 @@ public class SwipeHelper implements Gefingerpoken {
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mLongPressSent) {
if (mLongPressSent && !mMenuRowIntercepting) {
return true;
}
if (!mDragging) {
if (!mDragging && !mMenuRowIntercepting) {
if (mCallback.getChildAtPosition(ev) != null) {
// We are dragging directly over a card, make sure that we also catch the gesture

View File

@@ -352,7 +352,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
mShowingPublicInitialized = false;
updateNotificationColor();
if (mMenuRow != null) {
mMenuRow.onNotificationUpdated();
mMenuRow.onNotificationUpdated(mStatusBarNotification);
}
if (mIsSummaryWithChildren) {
mChildrenContainer.recreateNotificationHeader(mExpandClickListener);
@@ -831,7 +831,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
public NotificationMenuRowPlugin createMenu() {
if (mMenuRow.getMenuView() == null) {
mMenuRow.createMenu(this);
mMenuRow.createMenu(this, mStatusBarNotification);
mMenuRow.setAppName(mAppName);
FrameLayout.LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
@@ -866,7 +866,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
if (oldMenu != null) {
int menuIndex = indexOfChild(oldMenu);
removeView(oldMenu);
mMenuRow.createMenu(ExpandableNotificationRow.this);
mMenuRow.createMenu(ExpandableNotificationRow.this, mStatusBarNotification);
mMenuRow.setAppName(mAppName);
addView(mMenuRow.getMenuView(), menuIndex);
}

View File

@@ -129,7 +129,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
}
@Override
public void createMenu(ViewGroup parent) {
public void createMenu(ViewGroup parent, StatusBarNotification sbn) {
mParent = (ExpandableNotificationRow) parent;
createMenuViews(true /* resetState */);
}
@@ -150,7 +150,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
}
@Override
public void onNotificationUpdated() {
public void onNotificationUpdated(StatusBarNotification sbn) {
if (mMenuContainer == null) {
// Menu hasn't been created yet, no need to do anything.
return;

View File

@@ -42,7 +42,7 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testAttachDetach() {
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
row.createMenu(null);
row.createMenu(null, null);
ViewUtils.attachView(row.getMenuView());
TestableLooper.get(this).processAllMessages();
ViewUtils.detachView(row.getMenuView());
@@ -52,9 +52,9 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
@Test
public void testRecreateMenu() {
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
row.createMenu(null);
row.createMenu(null, null);
assertTrue(row.getMenuView() != null);
row.createMenu(null);
row.createMenu(null, null);
assertTrue(row.getMenuView() != null);
}
}