Merge "Updates to NotificationMenuRowPlugin so that long press may be captured" into oc-dr1-dev
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
package com.android.systemui.plugins.statusbar;
|
package com.android.systemui.plugins.statusbar;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.service.notification.StatusBarNotification;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@@ -37,7 +38,7 @@ import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.MenuItem
|
|||||||
public interface NotificationMenuRowPlugin extends Plugin {
|
public interface NotificationMenuRowPlugin extends Plugin {
|
||||||
|
|
||||||
public static final String ACTION = "com.android.systemui.action.PLUGIN_NOTIFICATION_MENU_ROW";
|
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)
|
@ProvidesInterface(version = OnMenuEventListener.VERSION)
|
||||||
public interface OnMenuEventListener {
|
public interface OnMenuEventListener {
|
||||||
@@ -77,7 +78,7 @@ public interface NotificationMenuRowPlugin extends Plugin {
|
|||||||
|
|
||||||
public void setAppName(String appName);
|
public void setAppName(String appName);
|
||||||
|
|
||||||
public void createMenu(ViewGroup parent);
|
public void createMenu(ViewGroup parent, StatusBarNotification sbn);
|
||||||
|
|
||||||
public View getMenuView();
|
public View getMenuView();
|
||||||
|
|
||||||
@@ -89,10 +90,14 @@ public interface NotificationMenuRowPlugin extends Plugin {
|
|||||||
|
|
||||||
public void onHeightUpdate();
|
public void onHeightUpdate();
|
||||||
|
|
||||||
public void onNotificationUpdated();
|
public void onNotificationUpdated(StatusBarNotification sbn);
|
||||||
|
|
||||||
public boolean onTouchEvent(View view, MotionEvent ev, float velocity);
|
public boolean onTouchEvent(View view, MotionEvent ev, float velocity);
|
||||||
|
|
||||||
|
public default boolean onInterceptTouchEvent(View view, MotionEvent ev) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public default boolean useDefaultMenuItems() {
|
public default boolean useDefaultMenuItems() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import android.view.View;
|
|||||||
import android.view.ViewConfiguration;
|
import android.view.ViewConfiguration;
|
||||||
import android.view.accessibility.AccessibilityEvent;
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
import com.android.systemui.classifier.FalsingManager;
|
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.plugins.statusbar.NotificationMenuRowPlugin.MenuItem;
|
||||||
import com.android.systemui.statusbar.ExpandableNotificationRow;
|
import com.android.systemui.statusbar.ExpandableNotificationRow;
|
||||||
import com.android.systemui.statusbar.FlingAnimationUtils;
|
import com.android.systemui.statusbar.FlingAnimationUtils;
|
||||||
@@ -81,6 +82,7 @@ public class SwipeHelper implements Gefingerpoken {
|
|||||||
private float mDensityScale;
|
private float mDensityScale;
|
||||||
private float mTranslation = 0;
|
private float mTranslation = 0;
|
||||||
|
|
||||||
|
private boolean mMenuRowIntercepting;
|
||||||
private boolean mLongPressSent;
|
private boolean mLongPressSent;
|
||||||
private LongPressListener mLongPressListener;
|
private LongPressListener mLongPressListener;
|
||||||
private Runnable mWatchLongPress;
|
private Runnable mWatchLongPress;
|
||||||
@@ -265,6 +267,10 @@ public class SwipeHelper implements Gefingerpoken {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onInterceptTouchEvent(final MotionEvent ev) {
|
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();
|
final int action = ev.getAction();
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
@@ -300,7 +306,10 @@ public class SwipeHelper implements Gefingerpoken {
|
|||||||
menuItem = ((ExpandableNotificationRow) mCurrView)
|
menuItem = ((ExpandableNotificationRow) mCurrView)
|
||||||
.getProvider().getLongpressMenuItem(mContext);
|
.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_UP:
|
||||||
case MotionEvent.ACTION_CANCEL:
|
case MotionEvent.ACTION_CANCEL:
|
||||||
final boolean captured = (mDragging || mLongPressSent);
|
final boolean captured = (mDragging || mLongPressSent || mMenuRowIntercepting);
|
||||||
mDragging = false;
|
mDragging = false;
|
||||||
mCurrView = null;
|
mCurrView = null;
|
||||||
mLongPressSent = false;
|
mLongPressSent = false;
|
||||||
|
mMenuRowIntercepting = false;
|
||||||
removeLongPressCallback();
|
removeLongPressCallback();
|
||||||
if (captured) return true;
|
if (captured) return true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return mDragging || mLongPressSent;
|
return mDragging || mLongPressSent || mMenuRowIntercepting;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -557,11 +567,11 @@ public class SwipeHelper implements Gefingerpoken {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouchEvent(MotionEvent ev) {
|
public boolean onTouchEvent(MotionEvent ev) {
|
||||||
if (mLongPressSent) {
|
if (mLongPressSent && !mMenuRowIntercepting) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mDragging) {
|
if (!mDragging && !mMenuRowIntercepting) {
|
||||||
if (mCallback.getChildAtPosition(ev) != null) {
|
if (mCallback.getChildAtPosition(ev) != null) {
|
||||||
|
|
||||||
// We are dragging directly over a card, make sure that we also catch the gesture
|
// We are dragging directly over a card, make sure that we also catch the gesture
|
||||||
|
|||||||
@@ -352,7 +352,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
|||||||
mShowingPublicInitialized = false;
|
mShowingPublicInitialized = false;
|
||||||
updateNotificationColor();
|
updateNotificationColor();
|
||||||
if (mMenuRow != null) {
|
if (mMenuRow != null) {
|
||||||
mMenuRow.onNotificationUpdated();
|
mMenuRow.onNotificationUpdated(mStatusBarNotification);
|
||||||
}
|
}
|
||||||
if (mIsSummaryWithChildren) {
|
if (mIsSummaryWithChildren) {
|
||||||
mChildrenContainer.recreateNotificationHeader(mExpandClickListener);
|
mChildrenContainer.recreateNotificationHeader(mExpandClickListener);
|
||||||
@@ -831,7 +831,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
|||||||
|
|
||||||
public NotificationMenuRowPlugin createMenu() {
|
public NotificationMenuRowPlugin createMenu() {
|
||||||
if (mMenuRow.getMenuView() == null) {
|
if (mMenuRow.getMenuView() == null) {
|
||||||
mMenuRow.createMenu(this);
|
mMenuRow.createMenu(this, mStatusBarNotification);
|
||||||
mMenuRow.setAppName(mAppName);
|
mMenuRow.setAppName(mAppName);
|
||||||
FrameLayout.LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
|
FrameLayout.LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
|
||||||
LayoutParams.MATCH_PARENT);
|
LayoutParams.MATCH_PARENT);
|
||||||
@@ -866,7 +866,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
|
|||||||
if (oldMenu != null) {
|
if (oldMenu != null) {
|
||||||
int menuIndex = indexOfChild(oldMenu);
|
int menuIndex = indexOfChild(oldMenu);
|
||||||
removeView(oldMenu);
|
removeView(oldMenu);
|
||||||
mMenuRow.createMenu(ExpandableNotificationRow.this);
|
mMenuRow.createMenu(ExpandableNotificationRow.this, mStatusBarNotification);
|
||||||
mMenuRow.setAppName(mAppName);
|
mMenuRow.setAppName(mAppName);
|
||||||
addView(mMenuRow.getMenuView(), menuIndex);
|
addView(mMenuRow.getMenuView(), menuIndex);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMenu(ViewGroup parent) {
|
public void createMenu(ViewGroup parent, StatusBarNotification sbn) {
|
||||||
mParent = (ExpandableNotificationRow) parent;
|
mParent = (ExpandableNotificationRow) parent;
|
||||||
createMenuViews(true /* resetState */);
|
createMenuViews(true /* resetState */);
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNotificationUpdated() {
|
public void onNotificationUpdated(StatusBarNotification sbn) {
|
||||||
if (mMenuContainer == null) {
|
if (mMenuContainer == null) {
|
||||||
// Menu hasn't been created yet, no need to do anything.
|
// Menu hasn't been created yet, no need to do anything.
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testAttachDetach() {
|
public void testAttachDetach() {
|
||||||
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
|
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
|
||||||
row.createMenu(null);
|
row.createMenu(null, null);
|
||||||
ViewUtils.attachView(row.getMenuView());
|
ViewUtils.attachView(row.getMenuView());
|
||||||
TestableLooper.get(this).processAllMessages();
|
TestableLooper.get(this).processAllMessages();
|
||||||
ViewUtils.detachView(row.getMenuView());
|
ViewUtils.detachView(row.getMenuView());
|
||||||
@@ -52,9 +52,9 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testRecreateMenu() {
|
public void testRecreateMenu() {
|
||||||
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
|
NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
|
||||||
row.createMenu(null);
|
row.createMenu(null, null);
|
||||||
assertTrue(row.getMenuView() != null);
|
assertTrue(row.getMenuView() != null);
|
||||||
row.createMenu(null);
|
row.createMenu(null, null);
|
||||||
assertTrue(row.getMenuView() != null);
|
assertTrue(row.getMenuView() != null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user