From a209eafec18d39d560b8e8162e8aee900d69eba1 Mon Sep 17 00:00:00 2001 From: "b0202.jung" Date: Mon, 3 Jun 2024 12:42:11 +0900 Subject: Fix focused error of embedded task fragments If a display has freeform windowing environments such as Desktop or XR device, then resumed activity of task fragment will be set to focused app. However, it can break focused state in embedded task fragments. Thus, allow it only if a focused task is different from a next task. Bug: 343252725 Test: Settings(AE) > Launch SubSettings > Check focused app/window Change-Id: Ib62ecb7c8e0fe453149f51c610c34d97bbde7cb1 --- services/core/java/com/android/server/wm/TaskFragment.java | 11 +++++++---- 1 file 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 { // 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); -- cgit v1.2.3-59-g8ed1b