Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7fc5ab55 authored by Mady Mellor's avatar Mady Mellor Committed by android-build-merger
Browse files

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

am: f3f6ddf7

Change-Id: I0147acff32fb79096617dff8080fab677d6c805e
parents 3e735ea9 f3f6ddf7
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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;
    }
+15 −5
Original line number Diff line number Diff line
@@ -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
+3 −3
Original line number Diff line number Diff line
@@ -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);
        }
+2 −2
Original line number Diff line number Diff line
@@ -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;
+3 −3
Original line number Diff line number Diff line
@@ -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);
    }
}