diff options
| author | 2020-02-26 21:47:57 +0000 | |
|---|---|---|
| committer | 2020-02-26 21:47:57 +0000 | |
| commit | 3abea008b19fe6d84aceb90e3f4a9f2575dc2c3f (patch) | |
| tree | 405a9e389e918b42d22cb4679a35a427debf103c | |
| parent | 3b117214d5038c3735a51a889e14a2cf153c6f59 (diff) | |
| parent | e84ef9ea6464b6267eca192e4de0bf7e6e52687b (diff) | |
Merge "Use hierarchy focusability to pause the minimized tile" into rvc-dev
8 files changed, 24 insertions, 38 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java index 56cdff43e255..27b799bc02a3 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java @@ -401,6 +401,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, return; } mMinimized = minimized; + WindowManagerProxy.applyPrimaryFocusable(mSplits, !mMinimized); mView.setMinimizedDockStack(minimized, getAnimDuration(), mHomeStackResizable); updateTouchable(); }); @@ -504,6 +505,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, final boolean wasMinimized = mMinimized; mMinimized = true; setHomeStackResizable(mSplits.mSecondary.isResizable()); + WindowManagerProxy.applyPrimaryFocusable(mSplits, false /* focusable */); if (!inSplitMode()) { // Wasn't in split-mode yet, so enter now. if (DEBUG) { @@ -521,6 +523,9 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks, } void ensureNormalSplit() { + if (mMinimized) { + WindowManagerProxy.applyPrimaryFocusable(mSplits, true /* focusable */); + } if (!inSplitMode()) { // Wasn't in split-mode, so enter now. if (DEBUG) { diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java index 76857337f73e..167c33abac6e 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java @@ -292,10 +292,23 @@ public class WindowManagerProxy { for (int i = freeHomeAndRecents.size() - 1; i >= 0; --i) { wct.setBounds(freeHomeAndRecents.get(i).token, null); } + // Reset focusable to true + wct.setFocusable(tiles.mPrimary.token, true /* focusable */); ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct, null /* organizer */); } catch (RemoteException e) { Log.w(TAG, "Failed to remove stack: " + e); } } + + static void applyPrimaryFocusable(SplitScreenTaskOrganizer splits, boolean focusable) { + try { + WindowContainerTransaction wct = new WindowContainerTransaction(); + wct.setFocusable(splits.mPrimary.token, focusable); + ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct, + null /* organizer */); + } catch (RemoteException e) { + Log.w(TAG, "Error setting focusability: " + e); + } + } } diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index ff890ff13ee3..eb316f979c52 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -1202,8 +1202,8 @@ class ActivityStack extends Task { @Override boolean isFocusable() { - return super.isFocusable() && !(inSplitScreenPrimaryWindowingMode() - && mRootWindowContainer.mIsDockMinimized); + // Special check for tile which isn't really in the hierarchy + return mTile != null ? mTile.isFocusable() : super.isFocusable(); } boolean isTopActivityFocusable() { diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index 510072d3831b..ca856ca7c1e6 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -169,12 +169,6 @@ public abstract class ActivityTaskManagerInternal { public abstract List<IBinder> getTopVisibleActivities(); /** - * Callback for window manager to let activity manager know that docked stack changes its - * minimized state. - */ - public abstract void notifyDockedStackMinimizedChanged(boolean minimized); - - /** * Notify listeners that contents are drawn for the first time on a single task display. * * @param displayId An ID of the display on which contents are drawn. diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index d2d7ad304fc2..f5a396b15591 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -6136,13 +6136,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } @Override - public void notifyDockedStackMinimizedChanged(boolean minimized) { - synchronized (mGlobalLock) { - mRootWindowContainer.setDockedStackMinimized(minimized); - } - } - - @Override public int startActivitiesAsPackage(String packageName, @Nullable String featureId, int userId, Intent[] intents, Bundle bOptions) { Objects.requireNonNull(intents, "intents"); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 64d7db26cd7e..8916b107b43f 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -258,9 +258,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> */ final ArrayList<ActivityTaskManagerInternal.SleepToken> mSleepTokens = new ArrayList<>(); - /** Is dock currently minimized. */ - boolean mIsDockMinimized; - /** Set when a power hint has started, but not ended. */ private boolean mPowerHintSent; @@ -2167,21 +2164,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> } } - void setDockedStackMinimized(boolean minimized) { - // Get currently focused stack before setting mIsDockMinimized. We do this because if - // split-screen is active, primary stack will not be focusable (see #isFocusable) while - // still occluding other stacks. This will cause getTopDisplayFocusedStack() to return null. - final ActivityStack current = getTopDisplayFocusedStack(); - mIsDockMinimized = minimized; - if (mIsDockMinimized) { - if (current.inSplitScreenPrimaryWindowingMode()) { - // The primary split-screen stack can't be focused while it is minimize, so move - // focus to something else. - current.adjustFocusToNextFocusableStack("setDockedStackMinimized"); - } - } - } - ActivityRecord findTask(ActivityRecord r, int preferredDisplayId) { if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Looking for task of " + r); mTmpFindTaskResult.clear(); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index bc8c2c951e6a..d86a708d8fa3 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2250,7 +2250,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } final ActivityStack stack = getRootTask(); - if (stack != null && stack.shouldIgnoreInput()) { + if (stack != null && !stack.isFocusable()) { // Ignore when the stack shouldn't receive input event. // (i.e. the minimized stack in split screen mode.) return false; diff --git a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java index 71d3194ab0d3..d7c1d7425b3c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java @@ -250,13 +250,12 @@ public class RootActivityContainerTests extends ActivityTestsBase { final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true) .setStack(stack).build(); - // Under split screen primary we should be focusable when not minimized - mRootWindowContainer.setDockedStackMinimized(false); + // Created stacks are focusable by default. assertTrue(stack.isTopActivityFocusable()); assertTrue(activity.isFocusable()); - // Under split screen primary we should not be focusable when minimized - mRootWindowContainer.setDockedStackMinimized(true); + // If the stack is made unfocusable, its activities should inherit that. + stack.setFocusable(false); assertFalse(stack.isTopActivityFocusable()); assertFalse(activity.isFocusable()); |