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

Commit a8439095 authored by Steve Elliott's avatar Steve Elliott Committed by Automerger Merge Worker
Browse files

Merge "Add animation when conversation priority changes" into rvc-dev am:...

Merge "Add animation when conversation priority changes" into rvc-dev am: 511b7fde am: ab913637 am: fd777e9e

Change-Id: I7529e384388608faaa309410fe9173d802f7e835
parents 11957803 fd777e9e
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.app.Notification.MessagingStyle.Message;
import android.app.NotificationChannel;
import android.app.NotificationManager.Policy;
import android.app.Person;
import android.app.RemoteInput;
import android.app.RemoteInputHistoryItem;
import android.content.Context;
import android.content.pm.ShortcutInfo;
@@ -69,6 +70,7 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRowController;
import com.android.systemui.statusbar.notification.row.NotificationGuts;
import com.android.systemui.statusbar.notification.stack.PriorityBucket;
import com.android.systemui.statusbar.phone.NotificationGroupManager;

import java.util.ArrayList;
import java.util.List;
@@ -132,7 +134,7 @@ public final class NotificationEntry extends ListEntry {
    private ShortcutInfo mShortcutInfo;

    /**
     * If {@link android.app.RemoteInput#getEditChoicesBeforeSending} is enabled, and the user is
     * If {@link RemoteInput#getEditChoicesBeforeSending} is enabled, and the user is
     * currently editing a choice (smart reply), then this field contains the information about the
     * suggestion being edited. Otherwise <code>null</code>.
     */
@@ -174,6 +176,8 @@ public final class NotificationEntry extends ListEntry {
    private boolean mPulseSupressed;
    private boolean mAllowFgsDismissal;
    private int mBucket = BUCKET_ALERTING;
    @Nullable private Long mPendingAnimationDuration;
    private boolean mIsMarkedForUserTriggeredMovement;

    /**
     * @param sbn the StatusBarNotification from system server
@@ -193,7 +197,7 @@ public final class NotificationEntry extends ListEntry {
            boolean allowFgsDismissal,
            long creationTime
    ) {
        super(requireNonNull(Objects.requireNonNull(sbn).getKey()));
        super(requireNonNull(requireNonNull(sbn).getKey()));

        requireNonNull(ranking);

@@ -441,7 +445,7 @@ public final class NotificationEntry extends ListEntry {
     * Get the children that are actually attached to this notification's row.
     *
     * TODO: Seems like most callers here should probably be using
     * {@link com.android.systemui.statusbar.phone.NotificationGroupManager#getChildren}
     * {@link NotificationGroupManager#getChildren}
     */
    public @Nullable List<NotificationEntry> getAttachedNotifChildren() {
        if (row == null) {
@@ -809,7 +813,7 @@ public final class NotificationEntry extends ListEntry {
        }

        if ((mSbn.getNotification().flags
                & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
                & FLAG_FOREGROUND_SERVICE) != 0) {
            return true;
        }
        if (mSbn.getNotification().isMediaNotification()) {
@@ -942,6 +946,19 @@ public final class NotificationEntry extends ListEntry {
        mPulseSupressed = suppressed;
    }

    /** Whether or not this entry has been marked for a user-triggered movement. */
    public boolean isMarkedForUserTriggeredMovement() {
        return mIsMarkedForUserTriggeredMovement;
    }

    /**
     * Mark this entry for movement triggered by a user action (ex: changing the priorirty of a
     * conversation). This can then be used for custom animations.
     */
    public void markForUserTriggeredMovement(boolean marked) {
        mIsMarkedForUserTriggeredMovement = marked;
    }

    /** Information about a suggestion that is being edited. */
    public static class EditedSuggestionInfo {

+3 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.view.accessibility.AccessibilityManager;

import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -105,6 +106,7 @@ public interface NotificationsModule {
            VisualStabilityManager visualStabilityManager,
            Lazy<StatusBar> statusBarLazy,
            @Main Handler mainHandler,
            @Background Handler bgHandler,
            AccessibilityManager accessibilityManager,
            HighPriorityProvider highPriorityProvider,
            INotificationManager notificationManager,
@@ -118,6 +120,7 @@ public interface NotificationsModule {
                visualStabilityManager,
                statusBarLazy,
                mainHandler,
                bgHandler,
                accessibilityManager,
                highPriorityProvider,
                notificationManager,
+18 −11
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.statusbar.notification.row;

import static android.app.Notification.EXTRA_IS_GROUP_CONVERSATION;
import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL;
import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED;
@@ -43,9 +42,7 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon;
import android.os.Handler;
import android.os.Parcelable;
import android.os.RemoteException;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;
@@ -65,15 +62,16 @@ import android.widget.TextView;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.notification.ConversationIconFactory;
import com.android.systemui.Dependency;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.notification.NotificationChannelHelper;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;

import java.lang.annotation.Retention;
import java.util.List;

import javax.inject.Provider;

@@ -86,10 +84,12 @@ public class NotificationConversationInfo extends LinearLayout implements


    private INotificationManager mINotificationManager;
    ShortcutManager mShortcutManager;
    private ShortcutManager mShortcutManager;
    private PackageManager mPm;
    private ConversationIconFactory mIconFactory;
    private VisualStabilityManager mVisualStabilityManager;
    private Handler mMainHandler;
    private Handler mBgHandler;

    private String mPackageName;
    private String mAppName;
@@ -97,6 +97,7 @@ public class NotificationConversationInfo extends LinearLayout implements
    private String mDelegatePkg;
    private NotificationChannel mNotificationChannel;
    private ShortcutInfo mShortcutInfo;
    private NotificationEntry mEntry;
    private StatusBarNotification mSbn;
    @Nullable private Notification.BubbleMetadata mBubbleMetadata;
    private Context mUserContext;
@@ -213,11 +214,14 @@ public class NotificationConversationInfo extends LinearLayout implements
            ConversationIconFactory conversationIconFactory,
            Context userContext,
            Provider<PriorityOnboardingDialogController.Builder> builderProvider,
            boolean isDeviceProvisioned) {
            boolean isDeviceProvisioned,
            @Main Handler mainHandler,
            @Background Handler bgHandler) {
        mSelectedAction = -1;
        mINotificationManager = iNotificationManager;
        mVisualStabilityManager = visualStabilityManager;
        mPackageName = pkg;
        mEntry = entry;
        mSbn = entry.getSbn();
        mPm = pm;
        mAppName = mPackageName;
@@ -231,7 +235,8 @@ public class NotificationConversationInfo extends LinearLayout implements
        mUserContext = userContext;
        mBubbleMetadata = bubbleMetadata;
        mBuilderProvider = builderProvider;

        mMainHandler = mainHandler;
        mBgHandler = bgHandler;
        mShortcutManager = shortcutManager;
        mShortcutInfo = entry.getRanking().getShortcutInfo();
        if (mShortcutInfo == null) {
@@ -494,11 +499,13 @@ public class NotificationConversationInfo extends LinearLayout implements
    }

    private void updateChannel() {
        Handler bgHandler = new Handler(Dependency.get(Dependency.BG_LOOPER));
        bgHandler.post(
        mBgHandler.post(
                new UpdateChannelRunnable(mINotificationManager, mPackageName,
                        mAppUid, mSelectedAction, mNotificationChannel));
        mMainHandler.postDelayed(() -> {
            mEntry.markForUserTriggeredMovement(true);
            mVisualStabilityManager.temporarilyAllowReordering();
        }, StackStateAnimator.ANIMATION_DURATION_STANDARD);
    }

    private boolean shouldShowPriorityOnboarding() {
+7 −2
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.settingslib.notification.ConversationIconFactory;
import com.android.systemui.Dependency;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -111,6 +112,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx

    private final Lazy<StatusBar> mStatusBarLazy;
    private final Handler mMainHandler;
    private final Handler mBgHandler;
    private Runnable mOpenRunnable;
    private final INotificationManager mNotificationManager;
    private final LauncherApps mLauncherApps;
@@ -122,7 +124,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
     * Injected constructor. See {@link NotificationsModule}.
     */
    public NotificationGutsManager(Context context, VisualStabilityManager visualStabilityManager,
            Lazy<StatusBar> statusBarLazy, @Main Handler mainHandler,
            Lazy<StatusBar> statusBarLazy, @Main Handler mainHandler, @Background Handler bgHandler,
            AccessibilityManager accessibilityManager,
            HighPriorityProvider highPriorityProvider,
            INotificationManager notificationManager,
@@ -135,6 +137,7 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
        mVisualStabilityManager = visualStabilityManager;
        mStatusBarLazy = statusBarLazy;
        mMainHandler = mainHandler;
        mBgHandler = bgHandler;
        mAccessibilityManager = accessibilityManager;
        mHighPriorityProvider = highPriorityProvider;
        mNotificationManager = notificationManager;
@@ -463,7 +466,9 @@ public class NotificationGutsManager implements Dumpable, NotificationLifetimeEx
                iconFactoryLoader,
                mContextTracker.getCurrentUserContext(),
                mBuilderProvider,
                mDeviceProvisionedController.isDeviceProvisioned());
                mDeviceProvisionedController.isDeviceProvisioned(),
                mMainHandler,
                mBgHandler);
    }

    /**
+13 −2
Original line number Diff line number Diff line
@@ -3655,8 +3655,19 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
    @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
    private void generatePositionChangeEvents() {
        for (ExpandableView child : mChildrenChangingPositions) {
            mAnimationEvents.add(new AnimationEvent(child,
                    AnimationEvent.ANIMATION_TYPE_CHANGE_POSITION));
            Integer duration = null;
            if (child instanceof ExpandableNotificationRow) {
                ExpandableNotificationRow row = (ExpandableNotificationRow) child;
                if (row.getEntry().isMarkedForUserTriggeredMovement()) {
                    duration = StackStateAnimator.ANIMATION_DURATION_PRIORITY_CHANGE;
                    row.getEntry().markForUserTriggeredMovement(false);
                }
            }
            AnimationEvent animEvent = duration == null
                    ? new AnimationEvent(child, AnimationEvent.ANIMATION_TYPE_CHANGE_POSITION)
                    : new AnimationEvent(
                            child, AnimationEvent.ANIMATION_TYPE_CHANGE_POSITION, duration);
            mAnimationEvents.add(animEvent);
        }
        mChildrenChangingPositions.clear();
        if (mGenerateChildOrderChangedEvent) {
Loading