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

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

Merge "Fixed the launch animation with flag auto cancel"

parents 9dfd28e4 7e222c3c
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -1472,7 +1472,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
        return mPrivateLayout.getActiveRemoteInputText();
    }


    public void animateTranslateNotification(final float leftTarget) {
        if (mTranslateAnim != null) {
            mTranslateAnim.cancel();
+28 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar.notification;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.graphics.Matrix;
import android.graphics.Rect;
@@ -35,10 +36,11 @@ import android.view.ViewRootImpl;
import com.android.systemui.Interpolators;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.NotificationListContainer;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
import com.android.systemui.statusbar.phone.NotificationPanelView;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;

import java.util.function.Consumer;

@@ -57,16 +59,17 @@ public class ActivityLaunchAnimator {
    private final NotificationPanelView mNotificationPanel;
    private final NotificationListContainer mNotificationContainer;
    private final StatusBarWindowView mStatusBarWindow;
    private final Consumer<Boolean> mPanelCollapser;
    private final StatusBar mStatusBar;
    private boolean mAnimationPending;

    public ActivityLaunchAnimator(StatusBarWindowView statusBarWindow,
            Consumer<Boolean> panelCollapser,
            StatusBar statusBar,
            NotificationPanelView notificationPanel,
            NotificationListContainer container) {
        mNotificationPanel = notificationPanel;
        mNotificationContainer = container;
        mStatusBarWindow = statusBarWindow;
        mPanelCollapser = panelCollapser;
        mStatusBar = statusBar;
    }

    public ActivityOptions getLaunchAnimation(
@@ -76,6 +79,21 @@ public class ActivityLaunchAnimator {
                new RemoteAnimationAdapter(animationRunner, 1000 /* Duration */, 0 /* delay */));
    }

    public boolean isAnimationPending() {
        return mAnimationPending;
    }

    public void setLaunchResult(int launchResult) {
        setAnimationPending((launchResult == ActivityManager.START_TASK_TO_FRONT
                || launchResult == ActivityManager.START_SUCCESS)
                        && mStatusBar.getBarState() == StatusBarState.SHADE);
    }

    private void setAnimationPending(boolean pending) {
        mAnimationPending = pending;
        mStatusBarWindow.setExpandAnimationPending(pending);
    }

    class AnimationRunner extends IRemoteAnimationRunner.Stub {

        private final ExpandableNotificationRow mSourceNotification;
@@ -94,7 +112,6 @@ public class ActivityLaunchAnimator {
                IRemoteAnimationFinishedCallback iRemoteAnimationFinishedCallback)
                    throws RemoteException {
            mSourceNotification.post(() -> {
                boolean first = true;
                for (RemoteAnimationTarget app : remoteAnimationTargets) {
                    if (app.mode == RemoteAnimationTarget.MODE_OPENING) {
                        setExpandAnimationRunning(true);
@@ -139,7 +156,7 @@ public class ActivityLaunchAnimator {
                            public void onAnimationEnd(Animator animation) {
                                setExpandAnimationRunning(false);
                                if (mInstantCollapsePanel) {
                                    mPanelCollapser.accept(false /* animate */);
                                    mStatusBar.collapsePanel(false /* animate */);
                                }
                                try {
                                    iRemoteAnimationFinishedCallback.onAnimationFinished();
@@ -152,6 +169,7 @@ public class ActivityLaunchAnimator {
                        break;
                    }
                }
                setAnimationPending(false);
            });
        }

@@ -198,6 +216,10 @@ public class ActivityLaunchAnimator {

        @Override
        public void onAnimationCancelled() throws RemoteException {
            mSourceNotification.post(() -> {
                setAnimationPending(false);
                mStatusBar.onLaunchAnimationCancelled();
            });
        }
    };

+1 −1
Original line number Diff line number Diff line
@@ -950,7 +950,7 @@ public abstract class PanelView extends FrameLayout {
    }

    public boolean isCollapsing() {
        return mClosing;
        return mClosing || mLaunchingNotification;
    }

    public boolean isTracking() {
+15 −17
Original line number Diff line number Diff line
@@ -100,7 +100,6 @@ import android.provider.Settings;
import android.service.notification.StatusBarNotification;
import android.service.vr.IVrManager;
import android.service.vr.IVrStateCallbacks;
import android.text.SpannedString;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.EventLog;
@@ -589,7 +588,7 @@ public class StatusBar extends SystemUI implements DemoMode,

    private NavigationBarFragment mNavigationBar;
    private View mNavigationBarView;
    private ActivityLaunchAnimator mActivityLaunchAnimator;
    protected ActivityLaunchAnimator mActivityLaunchAnimator;

    @Override
    public void start() {
@@ -760,7 +759,7 @@ public class StatusBar extends SystemUI implements DemoMode,
        mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel);
        mStackScroller = mStatusBarWindow.findViewById(R.id.notification_stack_scroller);
        mActivityLaunchAnimator = new ActivityLaunchAnimator(mStatusBarWindow,
                this::collapsePanel,
                this,
                mNotificationPanel,
                mStackScroller);
        mGutsManager.setUpWithPresenter(this, mEntryManager, mStackScroller, mCheckSaveListener,
@@ -2054,6 +2053,12 @@ public class StatusBar extends SystemUI implements DemoMode,
        }
    }

    public void onLaunchAnimationCancelled() {
        if (!isCollapsing()) {
            onClosingFinished();
        }
    }

    /**
     * All changes to the status bar and notifications funnel through here and are batched.
     */
@@ -3418,7 +3423,7 @@ public class StatusBar extends SystemUI implements DemoMode,
    }

    public boolean isCollapsing() {
        return mNotificationPanel.isCollapsing();
        return mNotificationPanel.isCollapsing() || mActivityLaunchAnimator.isAnimationPending();
    }

    public void addPostCollapseAction(Runnable r) {
@@ -4959,6 +4964,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                    try {
                        launchResult = intent.sendAndReturnResult(mContext, 0, fillInIntent, null,
                                null, null, getActivityOptions(row));
                        mActivityLaunchAnimator.setLaunchResult(launchResult);
                    } catch (PendingIntent.CanceledException e) {
                        // the stack trace isn't very helpful here.
                        // Just log the exception message.
@@ -4970,7 +4976,7 @@ public class StatusBar extends SystemUI implements DemoMode,
                        mAssistManager.hideAssist();
                    }
                }
                if (shouldCollapse(launchResult)) {
                if (shouldCollapse()) {
                    if (Looper.getMainLooper().isCurrentThread()) {
                        collapsePanel();
                    } else {
@@ -5003,17 +5009,8 @@ public class StatusBar extends SystemUI implements DemoMode,
        }, afterKeyguardGone);
    }

    private boolean shouldCollapse(int launchResult) {
        return mState != StatusBarState.SHADE
                || (launchResult != ActivityManager.START_TASK_TO_FRONT
                        && launchResult != ActivityManager.START_SUCCESS);
    }

    public void onExpandAnimationFinished() {
        if (!isPresenterFullyCollapsed()) {
            instantCollapseNotificationPanel();
            visibilityChanged(false);
        }
    private boolean shouldCollapse() {
        return mState != StatusBarState.SHADE || !mActivityLaunchAnimator.isAnimationPending();
    }

    public void collapsePanel(boolean animate) {
@@ -5128,7 +5125,8 @@ public class StatusBar extends SystemUI implements DemoMode,
                        .addNextIntentWithParentStack(intent)
                        .startActivities(getActivityOptions(row),
                                new UserHandle(UserHandle.getUserId(appUid)));
                if (shouldCollapse(launchResult)) {
                mActivityLaunchAnimator.setLaunchResult(launchResult);
                if (shouldCollapse()) {
                    // Putting it back on the main thread, since we're touching views
                    mStatusBarWindow.post(() -> animateCollapsePanels(
                            CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */));
+6 −1
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ public class StatusBarWindowView extends FrameLayout {
    private boolean mTouchCancelled;
    private boolean mTouchActive;
    private boolean mExpandAnimationRunning;
    private boolean mExpandAnimationPending;

    public StatusBarWindowView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -268,7 +269,7 @@ public class StatusBarWindowView extends FrameLayout {
                || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
            setTouchActive(false);
        }
        if (mTouchCancelled || mExpandAnimationRunning) {
        if (mTouchCancelled || mExpandAnimationRunning || mExpandAnimationPending) {
            return false;
        }
        mFalsingManager.onTouchEvent(ev, getWidth(), getHeight());
@@ -393,6 +394,10 @@ public class StatusBarWindowView extends FrameLayout {
        mExpandAnimationRunning = expandAnimationRunning;
    }

    public void setExpandAnimationPending(boolean pending) {
        mExpandAnimationPending = pending;
    }

    public class LayoutParams extends FrameLayout.LayoutParams {

        public boolean ignoreRightInset;
Loading