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

Commit 746f7fac authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Start intent chooser after Keyguard is gone

If we have an intent chooser on the camera intent, we need to launch
it after the Keyguard is fully gone because the ResolveActivity would
finish itself if it is launched behind the Keyguard.

Bug: 16570873
Change-Id: I2fdb4975fa0a6510e8853c6042383089570ec1f5
parent d757d6bf
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -276,7 +276,7 @@ public abstract class BaseStatusBar extends SystemUI implements
                        // Wait for activity start.
                        return handled;
                    }
                });
                }, false /* afterKeyguardGone */);
                return true;
            } else {
                return super.onClickHandler(view, pendingIntent, fillInIntent);
@@ -526,8 +526,9 @@ public abstract class BaseStatusBar extends SystemUI implements
    /**
     * 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 afterKeyguardGone Whether the action should be executed after the Keyguard is gone.
     */
    protected void dismissKeyguardThenExecute(OnDismissAction action) {
    protected void dismissKeyguardThenExecute(OnDismissAction action, boolean afterKeyguardGone) {
        action.onDismiss();
    }

@@ -646,7 +647,7 @@ public abstract class BaseStatusBar extends SystemUI implements
                animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */);
                return true;
            }
        });
        }, false /* afterKeyguardGone */);
    }

    protected SwipeHelper.LongPressListener getNotificationLongClicker() {
@@ -1339,7 +1340,7 @@ public abstract class BaseStatusBar extends SystemUI implements

                    return mIntent != null && mIntent.isActivity();
                }
            });
            }, false /* afterKeyguardGone */);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -24,5 +24,5 @@ import android.content.Intent;
 * Keyguard.
 */
public interface ActivityStarter {
    public void startActivity(Intent intent, boolean dismissShade);
    public void startActivity(Intent intent, boolean dismissShade, boolean afterKeyguardGone);
}
+9 −4
Original line number Diff line number Diff line
@@ -315,11 +315,15 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
    public void launchCamera() {
        mFlashlightController.killFlashlight();
        Intent intent = getCameraIntent();
        if (intent == SECURE_CAMERA_INTENT &&
                !mPreviewInflater.wouldLaunchResolverActivity(intent)) {
        boolean wouldLaunchResolverActivity = mPreviewInflater.wouldLaunchResolverActivity(intent);
        if (intent == SECURE_CAMERA_INTENT && !wouldLaunchResolverActivity) {
            mContext.startActivityAsUser(intent, UserHandle.CURRENT);
        } else {
            mActivityStarter.startActivity(intent, false /* dismissShade */);

            // We need to delay starting the activity because ResolverActivity finishes itself if
            // launched behind lockscreen.
            mActivityStarter.startActivity(intent, false /* dismissShade */,
                    wouldLaunchResolverActivity /* afterKeyguardGone */);
        }
    }

@@ -333,7 +337,8 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
                }
            });
        } else {
            mActivityStarter.startActivity(PHONE_INTENT, false /* dismissShade */);
            mActivityStarter.startActivity(PHONE_INTENT, false /* dismissShade */,
                    mPreviewInflater.wouldLaunchResolverActivity(PHONE_INTENT));
        }
    }

+13 −10
Original line number Diff line number Diff line
@@ -2039,8 +2039,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    }

    @Override
    public void startActivity(Intent intent, boolean dismissShade) {
        startActivityDismissingKeyguard(intent, false, dismissShade);
    public void startActivity(Intent intent, boolean dismissShade, boolean afterKeyguardGone) {
        startActivityDismissingKeyguard(intent, false, dismissShade, afterKeyguardGone);
    }

    public ScrimController getScrimController() {
@@ -2929,7 +2929,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    }

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

        final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
@@ -2939,7 +2939,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                AsyncTask.execute(new Runnable() {
                    public void run() {
                        try {
                            if (keyguardShowing) {
                            if (keyguardShowing && !afterKeyguardGone) {
                                ActivityManagerNative.getDefault()
                                        .keyguardWaitingForActivityDrawn();
                            }
@@ -2947,7 +2947,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                                    Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            mContext.startActivityAsUser(
                                    intent, new UserHandle(UserHandle.USER_CURRENT));
                            overrideActivityPendingAppTransition(keyguardShowing);
                            overrideActivityPendingAppTransition(
                                    keyguardShowing && !afterKeyguardGone);
                        } catch (RemoteException e) {
                        }
                    }
@@ -2957,7 +2958,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                }
                return true;
            }
        });
        }, afterKeyguardGone);
    }

    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -3019,10 +3020,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    }

    @Override
    protected void dismissKeyguardThenExecute(final OnDismissAction action) {
    protected void dismissKeyguardThenExecute(final OnDismissAction action,
            boolean afterKeyguardGone) {
        if (mStatusBarKeyguardViewManager.isShowing()) {
            if (UnlockMethodCache.getInstance(mContext).isMethodInsecure()
                    && mNotificationPanel.isLaunchTransitionRunning()) {
                    && mNotificationPanel.isLaunchTransitionRunning() && !afterKeyguardGone) {
                action.onDismiss();
                mNotificationPanel.setLaunchTransitionEndRunnable(new Runnable() {
                    @Override
@@ -3031,7 +3033,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                    }
                });
            } else {
                mStatusBarKeyguardViewManager.dismissWithAction(action);
                mStatusBarKeyguardViewManager.dismissWithAction(action, afterKeyguardGone);
            }
        } else {
            action.onDismiss();
@@ -3270,7 +3272,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    }

    private void handleStartSettingsActivity(Intent intent, boolean onlyProvisioned) {
        startActivityDismissingKeyguard(intent, onlyProvisioned, true /* dismissShade */);
        startActivityDismissingKeyguard(intent, onlyProvisioned, true /* dismissShade */,
                false /* afterKeyguardGone */);
    }

    private static class FastColorDrawable extends Drawable {
+4 −3
Original line number Diff line number Diff line
@@ -524,19 +524,20 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
        } else if (v == mAlarmStatus && mNextAlarm != null) {
            PendingIntent showIntent = mNextAlarm.getShowIntent();
            if (showIntent != null && showIntent.isActivity()) {
                mActivityStarter.startActivity(showIntent.getIntent(), true /* dismissShade */);
                mActivityStarter.startActivity(showIntent.getIntent(), true /* dismissShade */,
                        false /* afterKeyguardGone */);
            }
        }
    }

    private void startSettingsActivity() {
        mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
                true /* dismissShade */);
                true /* dismissShade */, false /* afterKeyguardGone */);
    }

    private void startBatteryActivity() {
        mActivityStarter.startActivity(new Intent(Intent.ACTION_POWER_USAGE_SUMMARY),
                true /* dismissShade */);
                true /* dismissShade */, false /* afterKeyguardGone */);
    }

    public void setQSPanel(QSPanel qsp) {
Loading