From f6c4a9868cf92c292ddac05b4237ec12a78410e9 Mon Sep 17 00:00:00 2001 From: lumark Date: Fri, 15 Jun 2018 15:43:12 +0800 Subject: [PATCH] Prevent NPEs when no focusable stack. Fallback to home stack when no focusable stack (e.g. launcher force stopped & enter PIP mode with no other app task), Fix NPEs for logWindowState & getTopRunningActivity from null stack. Change-Id: I0a0134661dfc20ff844a0bc19ce6833242f4a865 Fixes: 110078217 Test: Manual Test: atest ActivityStackSupervisorTests ActivityStackTests ActivityStarterTests --- services/core/java/com/android/server/am/ActivityMetricsLogger.java | 4 ++++ .../core/java/com/android/server/am/ActivityStackSupervisor.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java index 47d0423550c4..6d7b4fd8998a 100644 --- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java @@ -185,6 +185,10 @@ class ActivityMetricsLogger { mWindowState = WINDOW_STATE_INVALID; ActivityStack stack = mSupervisor.getFocusedStack(); + if (stack == null) { + return; + } + if (stack.isActivityTypeAssistant()) { mWindowState = WINDOW_STATE_ASSISTANT; return; diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index e034b824dc50..bf8ebf32da50 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -708,6 +708,11 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D if (!focusCandidate.isFocusable()) { // The focus candidate isn't focusable. Move focus to the top stack that is focusable. focusCandidate = getNextFocusableStackLocked(focusCandidate, false /* ignoreCurrent */); + if (focusCandidate == null) { + Slog.w(TAG, + "setFocusStackUnchecked: No focusable stack found, focus home as default"); + focusCandidate = mHomeStack; + } } if (focusCandidate != mFocusedStack) { -- 2.11.0