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

Commit 188e9140 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Updates buttons in notification menu row."

parents 5ded9e4f 5a70a4e0
Loading
Loading
Loading
Loading
+4 −17
Original line number Diff line number Diff line
@@ -18,10 +18,7 @@ package com.android.systemui.statusbar.notification.row;
import static android.app.AppOpsManager.OP_CAMERA;
import static android.app.AppOpsManager.OP_RECORD_AUDIO;
import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
import static android.service.notification.NotificationListenerService.Ranking
        .USER_SENTIMENT_NEGATIVE;

import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_NONE;
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE;

import android.app.INotificationManager;
import android.app.NotificationChannel;
@@ -43,7 +40,6 @@ import android.view.accessibility.AccessibilityManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.statusbar.IStatusBarService;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.plugins.ActivityStarter;
@@ -188,13 +184,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
            } else if (gutsView instanceof AppOpsInfo) {
                initializeAppOpsInfo(row, (AppOpsInfo) gutsView);
            } else if (gutsView instanceof NotificationInfo) {
                int action;
                if (item instanceof NotificationMenuRow.NotificationInfoMenuItem) {
                    action = ((NotificationMenuRow.NotificationInfoMenuItem) item).mAction;
                } else {
                    action = ACTION_NONE;
                }
                initializeNotificationInfo(row, (NotificationInfo) gutsView, action);
                initializeNotificationInfo(row, (NotificationInfo) gutsView);
            }
            return true;
        } catch (Exception e) {
@@ -253,13 +243,11 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
     * Sets up the {@link NotificationInfo} inside the notification row's guts.
     * @param row view to set up the guts for
     * @param notificationInfoView view to set up/bind within {@code row}
     * @param action The action to take immediately upon binding, if any.
     */
    @VisibleForTesting
    void initializeNotificationInfo(
            final ExpandableNotificationRow row,
            NotificationInfo notificationInfoView,
            @NotificationInfo.NotificationInfoAction int action) throws Exception {
            NotificationInfo notificationInfoView) throws Exception {
        NotificationGuts guts = row.getGuts();
        StatusBarNotification sbn = row.getStatusBarNotification();
        String packageName = sbn.getPackageName();
@@ -303,8 +291,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
                isForBlockingHelper,
                row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE,
                row.getEntry().noisy,
                row.getEntry().importance,
                action);
                row.getEntry().importance);

    }

+3 −9
Original line number Diff line number Diff line
@@ -187,14 +187,13 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
            boolean isDeviceProvisioned,
            boolean isNonblockable,
            boolean isNoisy,
            int importance,
            @NotificationInfoAction int action)
            int importance)
            throws RemoteException {
        bindNotification(pm, iNotificationManager, pkg, notificationChannel,
                numUniqueChannelsInRow, sbn, checkSaveListener, onSettingsClick,
                onAppSettingsClick, isDeviceProvisioned, isNonblockable,
                false /* isBlockingHelper */, false /* isUserSentimentNegative */, isNoisy,
                importance, action);
                importance);
    }

    public void bindNotification(
@@ -212,8 +211,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
            boolean isForBlockingHelper,
            boolean isUserSentimentNegative,
            boolean isNoisy,
            int importance,
            @NotificationInfoAction int action)
            int importance)
            throws RemoteException {
        mINotificationManager = iNotificationManager;
        mMetricsLogger = Dependency.get(MetricsLogger.class);
@@ -255,10 +253,6 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G
        bindHeader();
        bindPrompt();
        bindButtons();

        if (action != ACTION_NONE) {
            swapContent(action, false /* don't animate */);
        }
    }

    private void bindHeader() throws RemoteException {
+34 −75
Original line number Diff line number Diff line
@@ -17,9 +17,6 @@
package com.android.systemui.statusbar.notification.row;

import static com.android.systemui.SwipeHelper.SWIPED_FAR_ENOUGH_SIZE_FRACTION;
import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_BLOCK;
import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_NONE;
import static com.android.systemui.statusbar.notification.row.NotificationInfo.ACTION_TOGGLE_SILENT;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -46,7 +43,6 @@ import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.statusbar.AlphaOptimizedImageView;
import com.android.systemui.statusbar.notification.NotificationUtils;
import com.android.systemui.statusbar.notification.row.NotificationGuts.GutsContent;
import com.android.systemui.statusbar.notification.row.NotificationInfo.NotificationInfoAction;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;

import java.util.ArrayList;
@@ -73,7 +69,7 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl

    private Context mContext;
    private FrameLayout mMenuContainer;
    private NotificationInfoMenuItem mInfoItem;
    private NotificationMenuItem mInfoItem;
    private MenuItem mAppOpsItem;
    private MenuItem mSnoozeItem;
    private ArrayList<MenuItem> mLeftMenuItems;
@@ -248,36 +244,30 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        if (!isForeground) {
            // Only show snooze for non-foreground notifications
            mSnoozeItem = createSnoozeItem(mContext);
            mLeftMenuItems.add(mSnoozeItem);
        }
        mInfoItem = createInfoItem(mContext);
        if (!NotificationUtils.useNewInterruptionModel(mContext)) {
            mLeftMenuItems.add(mInfoItem);
        }

        mAppOpsItem = createAppOpsItem(mContext);
        mLeftMenuItems.add(mAppOpsItem);

        if (NotificationUtils.useNewInterruptionModel(mContext)) {
            if (!mParent.getIsNonblockable()) {
                mRightMenuItems.add(createBlockItem(mContext, mInfoItem.getGutsView()));
            }
            // TODO(kprevas): this is duplicated logic
            // but it's currently spread across NotificationGutsManager and NotificationInfo.
            // Try to consolidate and reuse here.
            boolean canToggleSilent = !mParent.getIsNonblockable()
                    && !isForeground
                    && mParent.getEntry().noisy;
            if (canToggleSilent) {
            int channelImportance = mParent.getEntry().channel.getImportance();
            int effectiveImportance =
                    channelImportance == NotificationManager.IMPORTANCE_UNSPECIFIED
                            ? mParent.getEntry().importance : channelImportance;
                mRightMenuItems.add(createToggleSilentItem(mContext, mInfoItem.getGutsView(),
                        effectiveImportance < NotificationManager.IMPORTANCE_DEFAULT));
            mInfoItem = createInfoItem(mContext,
                    effectiveImportance < NotificationManager.IMPORTANCE_DEFAULT);
        } else {
            mInfoItem = createInfoItem(mContext);
        }

        if (!NotificationUtils.useNewInterruptionModel(mContext)) {
            if (!isForeground) {
                mRightMenuItems.add(mSnoozeItem);
            }
            mRightMenuItems.add(mInfoItem);
            mRightMenuItems.add(mAppOpsItem);
            mLeftMenuItems.addAll(mRightMenuItems);
        } else {
            mRightMenuItems.addAll(mLeftMenuItems);
            mRightMenuItems.add(mInfoItem);
            mRightMenuItems.add(mAppOpsItem);
            mRightMenuItems.add(mSnoozeItem);
        }

        populateMenuViews();
@@ -634,13 +624,24 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        return snooze;
    }

    static NotificationInfoMenuItem createInfoItem(Context context) {
    static NotificationMenuItem createInfoItem(Context context) {
        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);
        return new NotificationInfoMenuItem(context, infoDescription, infoContent,
                R.drawable.ic_settings, ACTION_NONE);
        return new NotificationMenuItem(context, infoDescription, infoContent,
                R.drawable.ic_settings);
    }

    static NotificationMenuItem createInfoItem(Context context, boolean isCurrentlySilent) {
        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);
        int iconResId = isCurrentlySilent
                ? R.drawable.ic_notifications_alert
                : R.drawable.ic_notifications_silence;
        return new NotificationMenuItem(context, infoDescription, infoContent, iconResId);
    }

    static MenuItem createAppOpsItem(Context context) {
@@ -651,29 +652,6 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
        return info;
    }

    private static MenuItem createBlockItem(Context context, NotificationInfo gutsView) {
        return new NotificationInfoMenuItem(
                context,
                context.getResources().getString(R.string.inline_stop_button),
                gutsView,
                R.drawable.ic_notification_block,
                ACTION_BLOCK);
    }

    private static MenuItem createToggleSilentItem(Context context, NotificationInfo gutsView,
            boolean isCurrentlySilent) {
        return new NotificationInfoMenuItem(
                context,
                isCurrentlySilent
                        ? context.getResources().getString(R.string.inline_silent_button_alert)
                        : context.getResources().getString(R.string.inline_silent_button_silent),
                gutsView,
                isCurrentlySilent
                        ? R.drawable.ic_notifications_alert
                        : R.drawable.ic_notifications_silence,
                ACTION_TOGGLE_SILENT);
    }

    private void addMenuView(MenuItem item, ViewGroup parent) {
        View menuView = item.getMenuView();
        if (menuView != null) {
@@ -789,23 +767,4 @@ public class NotificationMenuRow implements NotificationMenuRowPlugin, View.OnCl
            return mContentDescription;
        }
    }

    /** A {@link NotificationMenuItem} with an associated {@link NotificationInfoAction}. */
    public static class NotificationInfoMenuItem extends NotificationMenuItem {

        @NotificationInfoAction
        int mAction;

        public NotificationInfoMenuItem(Context context, String contentDescription,
                NotificationInfo content, int iconResId,
                @NotificationInfoAction int action) {
            super(context, contentDescription, content, iconResId);
            this.mAction = action;
        }

        @Override
        public NotificationInfo getGutsView() {
            return (NotificationInfo) super.getGutsView();
        }
    }
}
+14 −29
Original line number Diff line number Diff line
@@ -20,8 +20,7 @@ import static android.app.AppOpsManager.OP_CAMERA;
import static android.app.AppOpsManager.OP_RECORD_AUDIO;
import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.service.notification.NotificationListenerService.Ranking
        .USER_SENTIMENT_NEGATIVE;
import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE;

import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
@@ -54,7 +53,6 @@ import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.ArraySet;
import android.util.Log;
import android.view.View;

import com.android.systemui.SysuiTestCase;
@@ -63,8 +61,7 @@ import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationTestHelper;
import com.android.systemui.statusbar.notification.NotificationData;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager
        .OnSettingsClickListener;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager.OnSettingsClickListener;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;

@@ -298,8 +295,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
        when(row.getIsNonblockable()).thenReturn(false);
        StatusBarNotification statusBarNotification = row.getStatusBarNotification();

        mGutsManager.initializeNotificationInfo(row, notificationInfoView,
                NotificationInfo.ACTION_NONE);
        mGutsManager.initializeNotificationInfo(row, notificationInfoView);

        verify(notificationInfoView).bindNotification(
                any(PackageManager.class),
@@ -316,8 +312,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
                eq(true) /* isForBlockingHelper */,
                eq(true) /* isUserSentimentNegative */,
                eq(false) /*isNoisy */,
                eq(0),
                eq(NotificationInfo.ACTION_NONE));
                eq(0));
    }

    @Test
@@ -329,8 +324,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
        when(row.getIsNonblockable()).thenReturn(false);
        StatusBarNotification statusBarNotification = row.getStatusBarNotification();

        mGutsManager.initializeNotificationInfo(row, notificationInfoView,
                NotificationInfo.ACTION_NONE);
        mGutsManager.initializeNotificationInfo(row, notificationInfoView);

        verify(notificationInfoView).bindNotification(
                any(PackageManager.class),
@@ -347,8 +341,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
                eq(false) /* isForBlockingHelper */,
                eq(true) /* isUserSentimentNegative */,
                eq(false) /*isNoisy */,
                eq(0),
                eq(NotificationInfo.ACTION_NONE));
                eq(0));
    }

    @Test
@@ -361,8 +354,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
        when(row.getIsNonblockable()).thenReturn(false);
        StatusBarNotification statusBarNotification = row.getStatusBarNotification();

        mGutsManager.initializeNotificationInfo(row, notificationInfoView,
                NotificationInfo.ACTION_NONE);
        mGutsManager.initializeNotificationInfo(row, notificationInfoView);

        verify(notificationInfoView).bindNotification(
                any(PackageManager.class),
@@ -379,8 +371,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
                eq(true) /* isForBlockingHelper */,
                eq(true) /* isUserSentimentNegative */,
                eq(true) /*isNoisy */,
                eq(0),
                eq(NotificationInfo.ACTION_NONE));
                eq(0));
    }

    @Test
@@ -393,8 +384,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
        when(row.getIsNonblockable()).thenReturn(false);
        StatusBarNotification statusBarNotification = row.getStatusBarNotification();

        mGutsManager.initializeNotificationInfo(row, notificationInfoView,
                NotificationInfo.ACTION_NONE);
        mGutsManager.initializeNotificationInfo(row, notificationInfoView);

        verify(notificationInfoView).bindNotification(
                any(PackageManager.class),
@@ -411,8 +401,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
                eq(true) /* isForBlockingHelper */,
                eq(true) /* isUserSentimentNegative */,
                eq(false) /*isNoisy */,
                eq(IMPORTANCE_DEFAULT),
                eq(NotificationInfo.ACTION_NONE));
                eq(IMPORTANCE_DEFAULT));
    }

    @Test
@@ -425,8 +414,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
        StatusBarNotification statusBarNotification = row.getStatusBarNotification();
        when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(true);

        mGutsManager.initializeNotificationInfo(row, notificationInfoView,
                NotificationInfo.ACTION_NONE);
        mGutsManager.initializeNotificationInfo(row, notificationInfoView);

        verify(notificationInfoView).bindNotification(
                any(PackageManager.class),
@@ -443,8 +431,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
                eq(false) /* isForBlockingHelper */,
                eq(true) /* isUserSentimentNegative */,
                eq(false) /*isNoisy */,
                eq(0),
                eq(NotificationInfo.ACTION_NONE));
                eq(0));
    }

    @Test
@@ -456,8 +443,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
        when(row.getIsNonblockable()).thenReturn(false);
        StatusBarNotification statusBarNotification = row.getStatusBarNotification();

        mGutsManager.initializeNotificationInfo(row, notificationInfoView,
                NotificationInfo.ACTION_BLOCK);
        mGutsManager.initializeNotificationInfo(row, notificationInfoView);

        verify(notificationInfoView).bindNotification(
                any(PackageManager.class),
@@ -474,8 +460,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
                eq(true) /* isForBlockingHelper */,
                eq(true) /* isUserSentimentNegative */,
                eq(false) /*isNoisy */,
                eq(0),
                eq(NotificationInfo.ACTION_BLOCK));
                eq(0));
    }

    @Test
+72 −131

File changed.

Preview size limit exceeded, changes collapsed.