From caae14e478e115d01f9b32890cb31231575e65dd Mon Sep 17 00:00:00 2001 From: Filip Gruszczynski Date: Wed, 16 Dec 2015 14:40:04 -0800 Subject: If pinned stack is focused, look for the one below for logging. Bug: 26230638 Change-Id: Ibe0b993286c4669e0f565bd2d4af6077553a29e2 --- .../android/server/am/ActivityMetricsLogger.java | 31 ++++++++++++---------- .../android/server/am/ActivityStackSupervisor.java | 15 +++++++++++ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java index 64f423c32f05..9680382e922d 100644 --- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java @@ -4,6 +4,7 @@ import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.HOME_STACK_ID; +import static android.app.ActivityManager.StackId.PINNED_STACK_ID; import android.app.ActivityManager.StackId; import android.content.Context; @@ -49,24 +50,26 @@ class ActivityMetricsLogger { } mLastLogTimeSecs = now; - mWindowState = WINDOW_STATE_INVALID; ActivityStack stack = mSupervisor.getStack(DOCKED_STACK_ID); if (stack != null && stack.isStackVisibleLocked()) { mWindowState = WINDOW_STATE_SIDE_BY_SIDE; + return; + } + mWindowState = WINDOW_STATE_INVALID; + stack = mSupervisor.getFocusedStack(); + if (stack.mStackId == PINNED_STACK_ID) { + stack = mSupervisor.findStackBehind(stack); } - if (mWindowState == WINDOW_STATE_INVALID) { - stack = mSupervisor.getFocusedStack(); - if (stack.mStackId == HOME_STACK_ID - || stack.mStackId == FULLSCREEN_WORKSPACE_STACK_ID) { - mWindowState = WINDOW_STATE_STANDARD; - } else if (stack.mStackId == DOCKED_STACK_ID) { - throw new IllegalStateException("Docked stack shouldn't be the focused stack, " - + "because it reported not being visible."); - } else if (stack.mStackId == FREEFORM_WORKSPACE_STACK_ID) { - mWindowState = WINDOW_STATE_FREEFORM; - } else if (StackId.isStaticStack(stack.mStackId)) { - throw new IllegalStateException("Unknown stack=" + stack); - } + if (stack.mStackId == HOME_STACK_ID + || stack.mStackId == FULLSCREEN_WORKSPACE_STACK_ID) { + mWindowState = WINDOW_STATE_STANDARD; + } else if (stack.mStackId == DOCKED_STACK_ID) { + throw new IllegalStateException("Docked stack shouldn't be the focused stack, " + + "because it reported not being visible."); + } else if (stack.mStackId == FREEFORM_WORKSPACE_STACK_ID) { + mWindowState = WINDOW_STATE_FREEFORM; + } else if (StackId.isStaticStack(stack.mStackId)) { + throw new IllegalStateException("Unknown stack=" + stack); } } } diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 9117806257f0..b8f2391d4edf 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -5293,4 +5293,19 @@ public final class ActivityStackSupervisor implements DisplayListener { } } + ActivityStack findStackBehind(ActivityStack stack) { + // TODO(multi-display): We are only looking for stacks on the default display. + final ActivityDisplay display = mActivityDisplays.get(Display.DEFAULT_DISPLAY); + if (display == null) { + return null; + } + final ArrayList stacks = display.mStacks; + for (int i = stacks.size() - 1; i >= 0; i--) { + if (stacks.get(i) == stack && i > 0) { + return stacks.get(i - 1); + } + } + throw new IllegalStateException("Failed to find a stack behind stack=" + stack + + " in=" + stacks); + } } -- cgit v1.2.3-59-g8ed1b