am 12c54dfa: am c9f7abe3: Merge "DO NOT MERGE Send next alarm\'s show intent via PendingIntent" into lmp-dev

* commit '12c54dfa1219c5bb81482fe4bd4b164637f2e8b2':
  DO NOT MERGE Send next alarm's show intent via PendingIntent
This commit is contained in:
Adrian Roos
2015-09-24 22:59:37 +00:00
committed by Android Git Automerger
4 changed files with 57 additions and 2 deletions

View File

@@ -1528,6 +1528,58 @@ public abstract class BaseStatusBar extends SystemUI implements
return new NotificationClicker(intent, notificationKey, forHun); return new NotificationClicker(intent, notificationKey, forHun);
} }
public void startPendingIntentDismissingKeyguard(final PendingIntent intent) {
if (!isDeviceProvisioned()) return;
final boolean keyguardShowing = mStatusBarKeyguardViewManager.isShowing();
final boolean afterKeyguardGone = intent.isActivity()
&& PreviewInflater.wouldLaunchResolverActivity(mContext, intent.getIntent(),
mCurrentUserId);
dismissKeyguardThenExecute(new OnDismissAction() {
public boolean onDismiss() {
new Thread() {
@Override
public void run() {
try {
if (keyguardShowing && !afterKeyguardGone) {
ActivityManagerNative.getDefault()
.keyguardWaitingForActivityDrawn();
}
// The intent we are sending is for the application, which
// won't have permission to immediately start an activity after
// the user switches to home. We know it is safe to do at this
// point, so make sure new activity switches are now allowed.
ActivityManagerNative.getDefault().resumeAppSwitches();
} catch (RemoteException e) {
}
try {
intent.send();
} catch (PendingIntent.CanceledException e) {
// the stack trace isn't very helpful here.
// Just log the exception message.
Log.w(TAG, "Sending intent failed: " + e);
// TODO: Dismiss Keyguard.
}
if (intent.isActivity()) {
overrideActivityPendingAppTransition(keyguardShowing
&& !afterKeyguardGone);
}
}
}.start();
// close the shade if it was open
animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
true /* force */);
visibilityChanged(false);
return true;
}
}, afterKeyguardGone);
}
protected class NotificationClicker implements View.OnClickListener { protected class NotificationClicker implements View.OnClickListener {
private PendingIntent mIntent; private PendingIntent mIntent;
private final String mNotificationKey; private final String mNotificationKey;

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.phone; package com.android.systemui.statusbar.phone;
import android.app.PendingIntent;
import android.content.Intent; import android.content.Intent;
/** /**
@@ -24,5 +25,6 @@ import android.content.Intent;
* Keyguard. * Keyguard.
*/ */
public interface ActivityStarter { public interface ActivityStarter {
void startPendingIntentDismissingKeyguard(PendingIntent intent);
public void startActivity(Intent intent, boolean dismissShade); public void startActivity(Intent intent, boolean dismissShade);
} }

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.phone; package com.android.systemui.statusbar.phone;
import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;

View File

@@ -498,8 +498,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL
startBatteryActivity(); startBatteryActivity();
} else if (v == mAlarmStatus && mNextAlarm != null) { } else if (v == mAlarmStatus && mNextAlarm != null) {
PendingIntent showIntent = mNextAlarm.getShowIntent(); PendingIntent showIntent = mNextAlarm.getShowIntent();
if (showIntent != null && showIntent.isActivity()) { if (showIntent != null) {
mActivityStarter.startActivity(showIntent.getIntent(), true /* dismissShade */); mActivityStarter.startPendingIntentDismissingKeyguard(showIntent);
} }
} }
} }