From 023da538a2e8e31ad101fdb14bea9a653eb8f5c0 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 20 Apr 2016 22:42:32 -0700 Subject: [PATCH] Fix lifecycle bug in when calling positionTask Sometimes the resumed activity from another stack gets positioned BELOW the top activity of the current stack. We need to carry over the mResumedActivity to make sure onPause is called on the moved activity. Bug: 28235047 Change-Id: I09e6b032cd8d0b00dc5fdd06bec68e53c25aae73 --- .../java/com/android/server/am/ActivityStack.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 61f2af089e087..06d6430041aa7 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -116,6 +116,7 @@ import android.os.UserHandle; import android.service.voice.IVoiceInteractionSession; import android.util.ArraySet; import android.util.EventLog; +import android.util.Log; import android.util.Slog; import android.view.Display; @@ -5025,10 +5026,20 @@ final class ActivityStack { } void positionTask(final TaskRecord task, int position) { + final ActivityRecord topRunningActivity = task.topRunningActivityLocked(); + final boolean wasResumed = topRunningActivity == task.stack.mResumedActivity; final ActivityStack prevStack = preAddTask(task, "positionTask"); task.stack = this; insertTaskAtPosition(task, position); postAddTask(task, prevStack); + if (wasResumed) { + if (mResumedActivity != null) { + Log.wtf(TAG, "mResumedActivity was already set when moving mResumedActivity from" + + " other stack to this stack mResumedActivity=" + mResumedActivity + + " other mResumedActivity=" + topRunningActivity); + } + mResumedActivity = topRunningActivity; + } } private ActivityStack preAddTask(TaskRecord task, String reason) {