diff options
7 files changed, 51 insertions, 25 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index df005a8..35ed3e5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -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 */); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java index 23810f9..9dfbb27 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ActivityStarter.java @@ -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); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 1d87ce3..62552b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -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)); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 788d5ce..9fd3d9c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -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 { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index e041de0..b6792f5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 3338f6a..b4e2d57 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -65,6 +65,7 @@ public class StatusBarKeyguardViewManager { private boolean mLastOccluded; private boolean mLastBouncerShowing; private boolean mLastBouncerDismissible; + private OnDismissAction mAfterKeyguardGoneAction; public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback, LockPatternUtils lockPatternUtils) { @@ -118,9 +119,14 @@ public class StatusBarKeyguardViewManager { updateStates(); } - public void dismissWithAction(OnDismissAction r) { + public void dismissWithAction(OnDismissAction r, boolean afterKeyguardGone) { if (mShowing) { - mBouncer.showWithDismissAction(r); + if (!afterKeyguardGone) { + mBouncer.showWithDismissAction(r); + } else { + mBouncer.show(); + mAfterKeyguardGoneAction = r; + } } updateStates(); } @@ -245,6 +251,7 @@ public class StatusBarKeyguardViewManager { mPhoneStatusBar.hideKeyguard(); mStatusBarWindowManager.setKeyguardFadingAway(false); mViewMediatorCallback.keyguardGone(); + executeAfterKeyguardGoneAction(); } }); } else { @@ -266,11 +273,19 @@ public class StatusBarKeyguardViewManager { mStatusBarWindowManager.setKeyguardShowing(false); mBouncer.hide(true /* destroyView */); mViewMediatorCallback.keyguardGone(); + executeAfterKeyguardGoneAction(); updateStates(); } } + private void executeAfterKeyguardGoneAction() { + if (mAfterKeyguardGoneAction != null) { + mAfterKeyguardGoneAction.onDismiss(); + mAfterKeyguardGoneAction = null; + } + } + /** * Dismisses the keyguard by going to the next screen or making it gone. */ diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java index 0586a83..acb4827 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java @@ -140,7 +140,8 @@ public class VolumeUI extends SystemUI { @Override public void run() { getComponent(PhoneStatusBar.class).startActivityDismissingKeyguard( - ZenModePanel.ZEN_SETTINGS, true /* onlyProvisioned */, true /* dismissShade */); + ZenModePanel.ZEN_SETTINGS, true /* onlyProvisioned */, true /* dismissShade */, + false /* afterKeyguardGone */); mPanel.postDismiss(mDismissDelay); } }; |