diff options
author | 2024-06-03 06:48:40 +0000 | |
---|---|---|
committer | 2024-06-03 06:48:40 +0000 | |
commit | a810b2ef950ea7aa231b374741d8740e98ca6c69 (patch) | |
tree | 93fc0ee6c467e4123e98e700526c43dec70fbed3 | |
parent | 284075a51f5cf87f77fcba2441eb0fc9a9de34db (diff) | |
parent | a209eafec18d39d560b8e8162e8aee900d69eba1 (diff) |
Merge "Fix focused error of embedded task fragments" into main
-rw-r--r-- | services/core/java/com/android/server/wm/TaskFragment.java | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 5d019122d52e..76be8aebb54e 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -1257,10 +1257,13 @@ class TaskFragment extends WindowContainer<WindowContainer> { // In a multi-resumed environment, like in a freeform device, the top // activity can be resumed, but it might not be the focused app. - // Set focused app when top activity is resumed - if (taskDisplayArea.inMultiWindowMode() && taskDisplayArea.mDisplayContent != null - && taskDisplayArea.mDisplayContent.mFocusedApp != next) { - taskDisplayArea.mDisplayContent.setFocusedApp(next); + // Set focused app when top activity is resumed. However, we shouldn't do it for a + // same task because it can break focused state. (e.g. activity embedding) + if (taskDisplayArea.inMultiWindowMode() && taskDisplayArea.mDisplayContent != null) { + final ActivityRecord focusedApp = taskDisplayArea.mDisplayContent.mFocusedApp; + if (focusedApp == null || focusedApp.getTask() != next.getTask()) { + taskDisplayArea.mDisplayContent.setFocusedApp(next); + } } ProtoLog.d(WM_DEBUG_STATES, "resumeTopActivity: Top activity " + "resumed %s", next); |