summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Rosky <erosky@google.com> 2020-02-26 21:47:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-02-26 21:47:57 +0000
commit3abea008b19fe6d84aceb90e3f4a9f2575dc2c3f (patch)
tree405a9e389e918b42d22cb4679a35a427debf103c
parent3b117214d5038c3735a51a889e14a2cf153c6f59 (diff)
parente84ef9ea6464b6267eca192e4de0bf7e6e52687b (diff)
Merge "Use hierarchy focusability to pause the minimized tile" into rvc-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java13
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java4
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java6
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java7
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java18
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java7
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());