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

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

Merge "Don't offer snooze for foreground service notifications" into oc-dev am: 8f395a16

am: cb5b58d9

Change-Id: If20d6cef28c3b79fe4577b0ea82fb6479a8dc163
parents 066b8d8b cb5b58d9
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -37,7 +37,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 = 1;
    public static final int VERSION = 2;


    @ProvidesInterface(version = OnMenuEventListener.VERSION)
    @ProvidesInterface(version = OnMenuEventListener.VERSION)
    public interface OnMenuEventListener {
    public interface OnMenuEventListener {
@@ -89,6 +89,8 @@ public interface NotificationMenuRowPlugin extends Plugin {


    public void onHeightUpdate();
    public void onHeightUpdate();


    public void onNotificationUpdated();

    public boolean onTouchEvent(View view, MotionEvent ev, float velocity);
    public boolean onTouchEvent(View view, MotionEvent ev, float velocity);


    public default boolean useDefaultMenuItems() {
    public default boolean useDefaultMenuItems() {
+7 −2
Original line number Original line Diff line number Diff line
@@ -328,6 +328,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        mIsColorized = mStatusBarNotification.getNotification().isColorized();
        mIsColorized = mStatusBarNotification.getNotification().isColorized();
        mShowingPublicInitialized = false;
        mShowingPublicInitialized = false;
        updateNotificationColor();
        updateNotificationColor();
        if (mMenuRow != null) {
            mMenuRow.onNotificationUpdated();
        }
        if (mIsSummaryWithChildren) {
        if (mIsSummaryWithChildren) {
            mChildrenContainer.recreateNotificationHeader(mExpandClickListener);
            mChildrenContainer.recreateNotificationHeader(mExpandClickListener);
            mChildrenContainer.onNotificationUpdated();
            mChildrenContainer.onNotificationUpdated();
@@ -760,7 +763,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        }
        }
        mMenuRow = plugin;
        mMenuRow = plugin;
        if (mMenuRow.useDefaultMenuItems()) {
        if (mMenuRow.useDefaultMenuItems()) {
            mMenuRow.setMenuItems(NotificationMenuRow.getDefaultMenuItems(mContext));
            ArrayList<MenuItem> items = new ArrayList<>();
            items.add(NotificationMenuRow.createInfoItem(mContext));
            items.add(NotificationMenuRow.createSnoozeItem(mContext));
            mMenuRow.setMenuItems(items);
        }
        }
        if (existed) {
        if (existed) {
            createMenu();
            createMenu();
@@ -787,7 +793,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        return mMenuRow;
        return mMenuRow;
    }
    }



    public NotificationMenuRowPlugin getProvider() {
    public NotificationMenuRowPlugin getProvider() {
        return mMenuRow;
        return mMenuRow;
    }
    }
+54 −21
Original line number Original line Diff line number Diff line
@@ -30,11 +30,13 @@ import com.android.systemui.statusbar.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;
import android.app.Notification;
import android.content.Context;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Handler;
import android.util.Log;
import android.util.Log;
import android.service.notification.StatusBarNotification;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View;
@@ -48,12 +50,12 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
    private static final long SHOW_MENU_DELAY = 60;
    private static final long SHOW_MENU_DELAY = 60;
    private static final long SWIPE_MENU_TIMING = 200;
    private static final long SWIPE_MENU_TIMING = 200;


    private static final int NOTIFICATION_INFO_INDEX = 1;

    private ExpandableNotificationRow mParent;
    private ExpandableNotificationRow mParent;


    private Context mContext;
    private Context mContext;
    private FrameLayout mMenuContainer;
    private FrameLayout mMenuContainer;
    private MenuItem mSnoozeItem;
    private MenuItem mInfoItem;
    private ArrayList<MenuItem> mMenuItems;
    private ArrayList<MenuItem> mMenuItems;
    private OnMenuEventListener mMenuListener;
    private OnMenuEventListener mMenuListener;


@@ -94,7 +96,11 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        mVertSpaceForIcons = res.getDimensionPixelSize(R.dimen.notification_min_height);
        mVertSpaceForIcons = res.getDimensionPixelSize(R.dimen.notification_min_height);
        mIconPadding = res.getDimensionPixelSize(R.dimen.notification_menu_icon_padding);
        mIconPadding = res.getDimensionPixelSize(R.dimen.notification_menu_icon_padding);
        mHandler = new Handler();
        mHandler = new Handler();
        mMenuItems = getDefaultMenuItems(context);
        mMenuItems = new ArrayList<>();
        mSnoozeItem = createSnoozeItem(context);
        mInfoItem = createInfoItem(context);
        mMenuItems.add(mSnoozeItem);
        mMenuItems.add(mInfoItem);
    }
    }


    @Override
    @Override
@@ -104,7 +110,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl


    @Override
    @Override
    public MenuItem getLongpressMenuItem(Context context) {
    public MenuItem getLongpressMenuItem(Context context) {
        return mMenuItems.get(NOTIFICATION_INFO_INDEX);
        return mInfoItem;
    }
    }


    @Override
    @Override
@@ -120,14 +126,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
    @Override
    @Override
    public void createMenu(ViewGroup parent) {
    public void createMenu(ViewGroup parent) {
        mParent = (ExpandableNotificationRow) parent;
        mParent = (ExpandableNotificationRow) parent;
        if (mMenuContainer != null) {
        createMenuViews();
            mMenuContainer.removeAllViews();
        }
        mMenuContainer = new FrameLayout(mContext);
        for (int i = 0; i < mMenuItems.size(); i++) {
            addMenuView(mMenuItems.get(i), mMenuContainer);
        }
        resetState(false);
    }
    }


    @Override
    @Override
@@ -145,6 +144,40 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        resetState(true);
        resetState(true);
    }
    }


    @Override
    public void onNotificationUpdated() {
        if (mMenuContainer == null) {
            // Menu hasn't been created yet, no need to do anything.
            return;
        }
        createMenuViews();
    }

    private void createMenuViews() {
        // Filter the menu items based on the notification
        if (mParent != null && mParent.getStatusBarNotification() != null) {
            int flags = mParent.getStatusBarNotification().getNotification().flags;
            boolean isForeground = (flags & Notification.FLAG_FOREGROUND_SERVICE) != 0;
            if (isForeground) {
                // Don't show snooze for foreground services
                mMenuItems.remove(mSnoozeItem);
            } else if (!mMenuItems.contains(mSnoozeItem)) {
                // Was a foreground service but is no longer, add snooze back
                mMenuItems.add(mSnoozeItem);
            }
        }
        // Recreate the menu
        if (mMenuContainer != null) {
            mMenuContainer.removeAllViews();
        } else {
            mMenuContainer = new FrameLayout(mContext);
        }
        for (int i = 0; i < mMenuItems.size(); i++) {
            addMenuView(mMenuItems.get(i), mMenuContainer);
        }
        resetState(false /* notify */);
    }

    private void resetState(boolean notify) {
    private void resetState(boolean notify) {
        setMenuAlpha(0f);
        setMenuAlpha(0f);
        mIconsPlaced = false;
        mIconsPlaced = false;
@@ -495,24 +528,24 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        // TODO -- handle / allow custom menu items!
        // TODO -- handle / allow custom menu items!
    }
    }


    public static ArrayList<MenuItem> getDefaultMenuItems(Context context) {
    public static MenuItem createSnoozeItem(Context context) {
        ArrayList<MenuItem> items = new ArrayList<MenuItem>();
        Resources res = context.getResources();
        Resources res = context.getResources();

        NotificationSnooze content = (NotificationSnooze) LayoutInflater.from(context)
        NotificationSnooze content = (NotificationSnooze) LayoutInflater.from(context)
                .inflate(R.layout.notification_snooze, null, false);
                .inflate(R.layout.notification_snooze, null, false);
        String snoozeDescription = res.getString(R.string.notification_menu_snooze_description);
        String snoozeDescription = res.getString(R.string.notification_menu_snooze_description);
        MenuItem snooze = new NotificationMenuItem(context, snoozeDescription, content,
        MenuItem snooze = new NotificationMenuItem(context, snoozeDescription, content,
                R.drawable.ic_snooze);
                R.drawable.ic_snooze);
        items.add(snooze);
        return snooze;
    }


        String settingsDescription = res.getString(R.string.notification_menu_gear_description);
    public static MenuItem createInfoItem(Context context) {
        NotificationInfo settingsContent = (NotificationInfo) LayoutInflater.from(context).inflate(
        Resources res = context.getResources();
        String infoDescription = res.getString(R.string.notification_menu_gear_description);
        NotificationInfo infoContent = (NotificationInfo) LayoutInflater.from(context).inflate(
                R.layout.notification_info, null, false);
                R.layout.notification_info, null, false);
        MenuItem settings = new NotificationMenuItem(context, settingsDescription, settingsContent,
        MenuItem info = new NotificationMenuItem(context, infoDescription, infoContent,
                R.drawable.ic_settings);
                R.drawable.ic_settings);
        items.add(settings);
        return info;
        return items;
    }
    }


    private void addMenuView(MenuItem item, ViewGroup parent) {
    private void addMenuView(MenuItem item, ViewGroup parent) {
+4 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,8 @@


package com.android.systemui.statusbar;
package com.android.systemui.statusbar;


import static junit.framework.Assert.assertTrue;

import android.testing.AndroidTestingRunner;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -49,6 +51,8 @@ public class NotificationMenuRowTest extends LeakCheckedTest {
    public void testRecreateMenu() {
    public void testRecreateMenu() {
        NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
        NotificationMenuRowPlugin row = new NotificationMenuRow(mContext);
        row.createMenu(null);
        row.createMenu(null);
        assertTrue(row.getMenuView() != null);
        row.createMenu(null);
        row.createMenu(null);
        assertTrue(row.getMenuView() != null);
    }
    }
}
}