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

Commit 4314f6d5 authored by Adrian Roos's avatar Adrian Roos Committed by Jorim Jaggi
Browse files

Eagerly dismiss Keyguard when launching notifications and phone

Uses the new code path when launching phone that delays the launch
until the Keyguard is actually dismissed, which fixes another way
for 14622312 to pop up. Also adds a flag to prevent the Keyguard
from waiting for the launch animation to finish.

Bug: 15280103
Bug: 14622312

Change-Id: Id24e40785c9f760648140e5572b1d39889d3666b
parent 5c0727ff
Loading
Loading
Loading
Loading
+11 −6
Original line number Original line Diff line number Diff line
@@ -83,6 +83,7 @@ import com.android.systemui.statusbar.phone.KeyguardTouchDelegate;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
import java.util.Locale;
import java.util.Locale;


@@ -117,6 +118,9 @@ public abstract class BaseStatusBar extends SystemUI implements
    public static final int EXPANDED_LEAVE_ALONE = -10000;
    public static final int EXPANDED_LEAVE_ALONE = -10000;
    public static final int EXPANDED_FULL_OPEN = -10001;
    public static final int EXPANDED_FULL_OPEN = -10001;


    /** If true, delays dismissing the Keyguard until the ActivityManager calls back. */
    protected static final boolean DELAY_DISMISS_TO_ACTIVITY_LAUNCH = false;

    protected CommandQueue mCommandQueue;
    protected CommandQueue mCommandQueue;
    protected IStatusBarService mBarService;
    protected IStatusBarService mBarService;
    protected H mHandler = createHandler();
    protected H mHandler = createHandler();
@@ -228,7 +232,7 @@ public abstract class BaseStatusBar extends SystemUI implements
            }
            }
            final boolean isActivity = pendingIntent.isActivity();
            final boolean isActivity = pendingIntent.isActivity();
            if (isActivity) {
            if (isActivity) {
                startNotificationActivity(new OnDismissAction() {
                dismissKeyguardThenExecute(new OnDismissAction() {
                    @Override
                    @Override
                    public boolean onDismiss() {
                    public boolean onDismiss() {
                        try {
                        try {
@@ -250,7 +254,8 @@ public abstract class BaseStatusBar extends SystemUI implements
                            animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
                            animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
                            visibilityChanged(false);
                            visibilityChanged(false);
                        }
                        }
                        return handled; // Wait for activity start.
                        // Wait for activity start.
                        return handled && DELAY_DISMISS_TO_ACTIVITY_LAUNCH;
                    }
                    }
                });
                });
                return true;
                return true;
@@ -479,7 +484,7 @@ public abstract class BaseStatusBar extends SystemUI implements
     * Takes the necessary steps to prepare the status bar for starting an activity, then starts it.
     * Takes the necessary steps to prepare the status bar for starting an activity, then starts it.
     * @param action A dismiss action that is called if it's safe to start the activity.
     * @param action A dismiss action that is called if it's safe to start the activity.
     */
     */
    protected void startNotificationActivity(OnDismissAction action) {
    protected void dismissKeyguardThenExecute(OnDismissAction action) {
        action.onDismiss();
        action.onDismiss();
    }
    }


@@ -1049,7 +1054,7 @@ public abstract class BaseStatusBar extends SystemUI implements
        }
        }


        public void onClick(final View v) {
        public void onClick(final View v) {
            startNotificationActivity(new OnDismissAction() {
            dismissKeyguardThenExecute(new OnDismissAction() {
                public boolean onDismiss() {
                public boolean onDismiss() {
                    try {
                    try {
                        // The intent we are sending is for the application, which
                        // The intent we are sending is for the application, which
@@ -1094,7 +1099,7 @@ public abstract class BaseStatusBar extends SystemUI implements
                    visibilityChanged(false);
                    visibilityChanged(false);


                    boolean waitForActivityLaunch = sent && mIntent.isActivity();
                    boolean waitForActivityLaunch = sent && mIntent.isActivity();
                    return waitForActivityLaunch;
                    return waitForActivityLaunch && DELAY_DISMISS_TO_ACTIVITY_LAUNCH;
                }
                }
            });
            });
        }
        }
+18 −10
Original line number Original line Diff line number Diff line
@@ -2348,8 +2348,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        }
        }
    };
    };


    public void startActivityDismissingKeyguard(Intent intent, boolean onlyProvisioned) {
    public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned) {
        if (onlyProvisioned && !isDeviceProvisioned()) return;
        if (onlyProvisioned && !isDeviceProvisioned()) return;

        dismissKeyguardThenExecute(new OnDismissAction() {
            @Override
            public boolean onDismiss() {
                try {
                try {
                    // Dismiss the lock screen when Settings starts.
                    // Dismiss the lock screen when Settings starts.
                    ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
                    ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
@@ -2358,6 +2362,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
                mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
                animateCollapsePanels();
                animateCollapsePanels();

                return DELAY_DISMISS_TO_ACTIVITY_LAUNCH;
            }
        });
    }
    }


    private View.OnClickListener mClockClickListener = new View.OnClickListener() {
    private View.OnClickListener mClockClickListener = new View.OnClickListener() {
@@ -2418,7 +2426,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    };
    };


    @Override
    @Override
    protected void startNotificationActivity(OnDismissAction action) {
    protected void dismissKeyguardThenExecute(OnDismissAction action) {
        if (mStatusBarKeyguardViewManager.isShowing()) {
        if (mStatusBarKeyguardViewManager.isShowing()) {
            mStatusBarKeyguardViewManager.dismissWithAction(action);
            mStatusBarKeyguardViewManager.dismissWithAction(action);
        } else {
        } else {