Merge "Fix issue #6700897: Activity paused by activating the..." into jb-dev
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 17957d2..c40abb7 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -129,6 +129,7 @@
private boolean inHistory; // are we in the history stack?
void dump(PrintWriter pw, String prefix) {
+ final long now = SystemClock.uptimeMillis();
pw.print(prefix); pw.print("packageName="); pw.print(packageName);
pw.print(" processName="); pw.println(processName);
pw.print(prefix); pw.print("launchedFromUid="); pw.print(launchedFromUid);
@@ -161,8 +162,30 @@
if (results != null) {
pw.print(prefix); pw.print("results="); pw.println(results);
}
- if (pendingResults != null) {
- pw.print(prefix); pw.print("pendingResults="); pw.println(pendingResults);
+ if (pendingResults != null && pendingResults.size() > 0) {
+ pw.print(prefix); pw.println("Pending Results:");
+ for (WeakReference<PendingIntentRecord> wpir : pendingResults) {
+ PendingIntentRecord pir = wpir != null ? wpir.get() : null;
+ pw.print(prefix); pw.print(" - ");
+ if (pir == null) {
+ pw.println("null");
+ } else {
+ pw.println(pir);
+ pir.dump(pw, prefix + " ");
+ }
+ }
+ }
+ if (newIntents != null && newIntents.size() > 0) {
+ pw.print(prefix); pw.println("Pending New Intents:");
+ for (int i=0; i<newIntents.size(); i++) {
+ Intent intent = (Intent)newIntents.get(i);
+ pw.print(prefix); pw.print(" - ");
+ if (intent == null) {
+ pw.println("null");
+ } else {
+ pw.println(intent.toShortString(false, true, false, true));
+ }
+ }
}
if (pendingOptions != null) {
pw.print(prefix); pw.print("pendingOptions="); pw.println(pendingOptions);
@@ -199,14 +222,20 @@
pw.print(prefix); pw.print("thumbHolder="); pw.println(thumbHolder);
if (launchTime != 0 || startTime != 0) {
pw.print(prefix); pw.print("launchTime=");
- TimeUtils.formatDuration(launchTime, pw); pw.print(" startTime=");
- TimeUtils.formatDuration(startTime, pw); pw.println("");
+ if (launchTime == 0) pw.print("0");
+ else TimeUtils.formatDuration(launchTime, now, pw);
+ pw.print(" startTime=");
+ if (startTime == 0) pw.print("0");
+ else TimeUtils.formatDuration(startTime, now, pw);
+ pw.println();
}
if (lastVisibleTime != 0 || waitingVisible || nowVisible) {
pw.print(prefix); pw.print("waitingVisible="); pw.print(waitingVisible);
pw.print(" nowVisible="); pw.print(nowVisible);
pw.print(" lastVisibleTime=");
- TimeUtils.formatDuration(lastVisibleTime, pw); pw.println("");
+ if (lastVisibleTime == 0) pw.print("0");
+ else TimeUtils.formatDuration(lastVisibleTime, now, pw);
+ pw.println();
}
if (configDestroy || configChangeFlags != 0) {
pw.print(prefix); pw.print("configDestroy="); pw.print(configDestroy);
@@ -525,7 +554,13 @@
*/
final void deliverNewIntentLocked(int callingUid, Intent intent) {
boolean sent = false;
- if (state == ActivityState.RESUMED
+ // We want to immediately deliver the intent to the activity if
+ // it is currently the top resumed activity... however, if the
+ // device is sleeping, then all activities are stopped, so in that
+ // case we will deliver it if this is the current top activity on its
+ // stack.
+ if ((state == ActivityState.RESUMED || (service.mSleeping
+ && stack.topRunningActivityLocked(null) == this))
&& app != null && app.thread != null) {
try {
ArrayList<Intent> ar = new ArrayList<Intent>();