From b38e5406b00ad178f3ccf3fcf29881c4fd8960a4 Mon Sep 17 00:00:00 2001 From: Taran Singh Date: Tue, 26 May 2020 13:16:44 -0700 Subject: [PATCH] PIP window cant be ime target. Check both Task and ActivityRecord windowing mode to make sure PIP window can't become IME target. Bug: 156915118 Test: Manually using steps mentioned in bug. Change-Id: Ie6de7f31c36978fe8ec5aef2105b5e7edff5fa32 --- .../java/com/android/server/wm/ActivityRecord.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 597fa949f4bf6..5668454b7bb63 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2198,10 +2198,13 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A @Override boolean isFocusable() { + return super.isFocusable() && (canReceiveKeys() || isAlwaysFocusable()); + } + + boolean canReceiveKeys() { // TODO(156521483): Propagate the state down the hierarchy instead of checking the parent - boolean canReceiveKeys = getWindowConfiguration().canReceiveKeys() - && getTask().getWindowConfiguration().canReceiveKeys(); - return super.isFocusable() && (canReceiveKeys || isAlwaysFocusable()); + return getWindowConfiguration().canReceiveKeys() + && (task == null || task.getWindowConfiguration().canReceiveKeys()); } boolean isResizeable() { @@ -2370,10 +2373,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // For the apps below Q, there can be only one app which has the focused window per // process, because legacy apps may not be ready for a multi-focus system. return false; + } } - return (getWindowConfiguration().canReceiveKeys() || isAlwaysFocusable()) - && getDisplay() != null; + return (canReceiveKeys() || isAlwaysFocusable()) && getDisplay() != null; } /**