Loading services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -4664,7 +4664,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // case where this is the top activity in a pinned stack. final boolean isTop = this == stack.getTopNonFinishingActivity(); final boolean isTopNotPinnedStack = stack.isAttached() && stack.getDisplayArea().isTopNotPinnedStack(stack); && stack.getDisplayArea().isTopNotFinishNotPinnedStack(stack); final boolean visibleIgnoringDisplayStatus = stack.checkKeyguardVisibility(this, visibleIgnoringKeyguard, isTop && isTopNotPinnedStack); Loading services/core/java/com/android/server/wm/TaskDisplayArea.java +5 −1 Original line number Diff line number Diff line Loading @@ -1489,9 +1489,13 @@ final class TaskDisplayArea extends DisplayArea<Task> { return stack == getTopStack(); } boolean isTopNotPinnedStack(Task stack) { boolean isTopNotFinishNotPinnedStack(Task stack) { for (int i = getStackCount() - 1; i >= 0; --i) { final Task current = getStackAt(i); final ActivityRecord topAct = current.getTopNonFinishingActivity(); if (topAct == null) { continue; } if (!current.inPinnedWindowingMode()) { return current == stack; } Loading services/core/java/com/android/server/wm/UnknownAppVisibilityController.java +7 −3 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ import android.annotation.NonNull; import android.util.ArrayMap; import android.util.Slog; import com.android.server.wm.WindowManagerService.H; import java.io.PrintWriter; /** Loading Loading @@ -102,7 +100,13 @@ class UnknownAppVisibilityController { if (DEBUG_UNKNOWN_APP_VISIBILITY) { Slog.d(TAG, "App launched activity=" + activity); } // If the activity was started with launchTaskBehind, the lifecycle will goes to paused // directly, and the process will pass onResume, so we don't need to waiting resume for it. if (!activity.mLaunchTaskBehind) { mUnknownApps.put(activity, UNKNOWN_STATE_WAITING_RESUME); } else { mUnknownApps.put(activity, UNKNOWN_STATE_WAITING_RELAYOUT); } } /** Loading services/tests/wmtests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java +12 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,18 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase { assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved()); } @Test public void testSkipResume() { final ActivityRecord activity = createTestActivityRecord(mDisplayContent); activity.mLaunchTaskBehind = true; mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity); mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(activity); // Make sure our handler processed the message. waitHandlerIdle(mWm.mH); assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved()); } @Test public void testMultiple() { final ActivityRecord activity1 = createTestActivityRecord(mDisplayContent); Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -4664,7 +4664,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // case where this is the top activity in a pinned stack. final boolean isTop = this == stack.getTopNonFinishingActivity(); final boolean isTopNotPinnedStack = stack.isAttached() && stack.getDisplayArea().isTopNotPinnedStack(stack); && stack.getDisplayArea().isTopNotFinishNotPinnedStack(stack); final boolean visibleIgnoringDisplayStatus = stack.checkKeyguardVisibility(this, visibleIgnoringKeyguard, isTop && isTopNotPinnedStack); Loading
services/core/java/com/android/server/wm/TaskDisplayArea.java +5 −1 Original line number Diff line number Diff line Loading @@ -1489,9 +1489,13 @@ final class TaskDisplayArea extends DisplayArea<Task> { return stack == getTopStack(); } boolean isTopNotPinnedStack(Task stack) { boolean isTopNotFinishNotPinnedStack(Task stack) { for (int i = getStackCount() - 1; i >= 0; --i) { final Task current = getStackAt(i); final ActivityRecord topAct = current.getTopNonFinishingActivity(); if (topAct == null) { continue; } if (!current.inPinnedWindowingMode()) { return current == stack; } Loading
services/core/java/com/android/server/wm/UnknownAppVisibilityController.java +7 −3 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ import android.annotation.NonNull; import android.util.ArrayMap; import android.util.Slog; import com.android.server.wm.WindowManagerService.H; import java.io.PrintWriter; /** Loading Loading @@ -102,7 +100,13 @@ class UnknownAppVisibilityController { if (DEBUG_UNKNOWN_APP_VISIBILITY) { Slog.d(TAG, "App launched activity=" + activity); } // If the activity was started with launchTaskBehind, the lifecycle will goes to paused // directly, and the process will pass onResume, so we don't need to waiting resume for it. if (!activity.mLaunchTaskBehind) { mUnknownApps.put(activity, UNKNOWN_STATE_WAITING_RESUME); } else { mUnknownApps.put(activity, UNKNOWN_STATE_WAITING_RELAYOUT); } } /** Loading
services/tests/wmtests/src/com/android/server/wm/UnknownAppVisibilityControllerTest.java +12 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,18 @@ public class UnknownAppVisibilityControllerTest extends WindowTestsBase { assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved()); } @Test public void testSkipResume() { final ActivityRecord activity = createTestActivityRecord(mDisplayContent); activity.mLaunchTaskBehind = true; mDisplayContent.mUnknownAppVisibilityController.notifyLaunched(activity); mDisplayContent.mUnknownAppVisibilityController.notifyRelayouted(activity); // Make sure our handler processed the message. waitHandlerIdle(mWm.mH); assertTrue(mDisplayContent.mUnknownAppVisibilityController.allResolved()); } @Test public void testMultiple() { final ActivityRecord activity1 = createTestActivityRecord(mDisplayContent); Loading