Merge "Update home bounds when entering split on rotation" into rvc-dev am: 0a0df88b47

Change-Id: Iec71fc514d23c179805122e0055a4db1859b14a1
This commit is contained in:
Evan Rosky
2020-05-15 23:47:55 +00:00
committed by Automerger Merge Worker
5 changed files with 33 additions and 18 deletions

View File

@@ -709,7 +709,7 @@ public class PipTaskOrganizer extends TaskOrganizer {
* @return {@code true} if destinationBounds is altered for split screen * @return {@code true} if destinationBounds is altered for split screen
*/ */
private boolean syncWithSplitScreenBounds(Rect destinationBoundsOut) { private boolean syncWithSplitScreenBounds(Rect destinationBoundsOut) {
if (mSplitDivider == null || !mSplitDivider.inSplitMode()) { if (mSplitDivider == null || !mSplitDivider.isDividerVisible()) {
// bail early if system is not in split screen mode // bail early if system is not in split screen mode
return false; return false;
} }

View File

@@ -92,7 +92,7 @@ public class ShortcutKeyDispatcher extends SystemUI
} }
private void handleDockKey(long shortcutCode) { private void handleDockKey(long shortcutCode) {
if (mDivider == null || !mDivider.inSplitMode()) { if (mDivider == null || !mDivider.isDividerVisible()) {
// Split the screen // Split the screen
mRecents.splitPrimaryTask((shortcutCode == SC_DOCK_LEFT) mRecents.splitPrimaryTask((shortcutCode == SC_DOCK_LEFT)
? SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT ? SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT

View File

@@ -16,6 +16,7 @@
package com.android.systemui.stackdivider; package com.android.systemui.stackdivider;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.SCREEN_HEIGHT_DP_UNDEFINED; import static android.content.res.Configuration.SCREEN_HEIGHT_DP_UNDEFINED;
import static android.content.res.Configuration.SCREEN_WIDTH_DP_UNDEFINED; import static android.content.res.Configuration.SCREEN_WIDTH_DP_UNDEFINED;
@@ -123,14 +124,17 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
SplitDisplayLayout sdl = new SplitDisplayLayout(mContext, displayLayout, mSplits); SplitDisplayLayout sdl = new SplitDisplayLayout(mContext, displayLayout, mSplits);
sdl.rotateTo(toRotation); sdl.rotateTo(toRotation);
mRotateSplitLayout = sdl; mRotateSplitLayout = sdl;
int position = mMinimized ? mView.mSnapTargetBeforeMinimized.position final int position = isDividerVisible()
: mView.getCurrentPosition(); ? (mMinimized ? mView.mSnapTargetBeforeMinimized.position
: mView.getCurrentPosition())
// snap resets to middle target when not in split-mode
: sdl.getSnapAlgorithm().getMiddleTarget().position;
DividerSnapAlgorithm snap = sdl.getSnapAlgorithm(); DividerSnapAlgorithm snap = sdl.getSnapAlgorithm();
final DividerSnapAlgorithm.SnapTarget target = final DividerSnapAlgorithm.SnapTarget target =
snap.calculateNonDismissingSnapTarget(position); snap.calculateNonDismissingSnapTarget(position);
sdl.resizeSplits(target.position, t); sdl.resizeSplits(target.position, t);
if (inSplitMode()) { if (isSplitActive()) {
WindowManagerProxy.applyHomeTasksMinimized(sdl, mSplits.mSecondary.token, t); WindowManagerProxy.applyHomeTasksMinimized(sdl, mSplits.mSecondary.token, t);
} }
}; };
@@ -199,7 +203,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
@Override @Override
public void onImeStartPositioning(int displayId, int hiddenTop, int shownTop, public void onImeStartPositioning(int displayId, int hiddenTop, int shownTop,
boolean imeShouldShow, SurfaceControl.Transaction t) { boolean imeShouldShow, SurfaceControl.Transaction t) {
if (!inSplitMode()) { if (!isDividerVisible()) {
return; return;
} }
final boolean splitIsVisible = !mView.isHidden(); final boolean splitIsVisible = !mView.isHidden();
@@ -298,7 +302,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
@Override @Override
public void onImePositionChanged(int displayId, int imeTop, public void onImePositionChanged(int displayId, int imeTop,
SurfaceControl.Transaction t) { SurfaceControl.Transaction t) {
if (mAnimation != null || !inSplitMode() || mPaused) { if (mAnimation != null || !isDividerVisible() || mPaused) {
// Not synchronized with IME anymore, so return. // Not synchronized with IME anymore, so return.
return; return;
} }
@@ -310,7 +314,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
@Override @Override
public void onImeEndPositioning(int displayId, boolean cancelled, public void onImeEndPositioning(int displayId, boolean cancelled,
SurfaceControl.Transaction t) { SurfaceControl.Transaction t) {
if (mAnimation != null || !inSplitMode() || mPaused) { if (mAnimation != null || !isDividerVisible() || mPaused) {
// Not synchronized with IME anymore, so return. // Not synchronized with IME anymore, so return.
return; return;
} }
@@ -479,7 +483,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
@Override @Override
public void onKeyguardShowingChanged() { public void onKeyguardShowingChanged() {
if (!inSplitMode() || mView == null) { if (!isDividerVisible() || mView == null) {
return; return;
} }
mView.setHidden(mKeyguardStateController.isShowing()); mView.setHidden(mKeyguardStateController.isShowing());
@@ -559,10 +563,20 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
} }
/** {@code true} if this is visible */ /** {@code true} if this is visible */
public boolean inSplitMode() { public boolean isDividerVisible() {
return mView != null && mView.getVisibility() == View.VISIBLE; return mView != null && mView.getVisibility() == View.VISIBLE;
} }
/**
* This indicates that at-least one of the splits has content. This differs from
* isDividerVisible because the divider is only visible once *everything* is in split mode
* while this only cares if some things are (eg. while entering/exiting as well).
*/
private boolean isSplitActive() {
return mSplits.mPrimary.topActivityType != ACTIVITY_TYPE_UNDEFINED
|| mSplits.mSecondary.topActivityType != ACTIVITY_TYPE_UNDEFINED;
}
private void addDivider(Configuration configuration) { private void addDivider(Configuration configuration) {
Context dctx = mDisplayController.getDisplayContext(mContext.getDisplayId()); Context dctx = mDisplayController.getDisplayContext(mContext.getDisplayId());
mView = (DividerView) mView = (DividerView)
@@ -635,8 +649,8 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
} }
void onSplitDismissed() { void onSplitDismissed() {
mMinimized = false;
updateVisibility(false /* visible */); updateVisibility(false /* visible */);
mMinimized = false;
removeDivider(); removeDivider();
} }
@@ -655,7 +669,8 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
private void setHomeMinimized(final boolean minimized, boolean homeStackResizable) { private void setHomeMinimized(final boolean minimized, boolean homeStackResizable) {
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, "setHomeMinimized min:" + mMinimized + "->" + minimized + " hrsz:" Slog.d(TAG, "setHomeMinimized min:" + mMinimized + "->" + minimized + " hrsz:"
+ mHomeStackResizable + "->" + homeStackResizable + " split:" + inSplitMode()); + mHomeStackResizable + "->" + homeStackResizable
+ " split:" + isDividerVisible());
} }
WindowContainerTransaction wct = new WindowContainerTransaction(); WindowContainerTransaction wct = new WindowContainerTransaction();
final boolean minimizedChanged = mMinimized != minimized; final boolean minimizedChanged = mMinimized != minimized;
@@ -670,7 +685,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
final boolean homeResizableChanged = mHomeStackResizable != homeStackResizable; final boolean homeResizableChanged = mHomeStackResizable != homeStackResizable;
if (homeResizableChanged) { if (homeResizableChanged) {
mHomeStackResizable = homeStackResizable; mHomeStackResizable = homeStackResizable;
if (inSplitMode()) { if (isDividerVisible()) {
WindowManagerProxy.applyHomeTasksMinimized( WindowManagerProxy.applyHomeTasksMinimized(
mSplitLayout, mSplits.mSecondary.token, wct); mSplitLayout, mSplits.mSecondary.token, wct);
} }
@@ -780,7 +795,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
/** Register a listener that gets called whenever the existence of the divider changes */ /** Register a listener that gets called whenever the existence of the divider changes */
public void registerInSplitScreenListener(Consumer<Boolean> listener) { public void registerInSplitScreenListener(Consumer<Boolean> listener) {
listener.accept(inSplitMode()); listener.accept(isDividerVisible());
synchronized (mDockedStackExistsListeners) { synchronized (mDockedStackExistsListeners) {
mDockedStackExistsListeners.add(new WeakReference<>(listener)); mDockedStackExistsListeners.add(new WeakReference<>(listener));
} }
@@ -795,7 +810,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
void ensureMinimizedSplit() { void ensureMinimizedSplit() {
setHomeMinimized(true /* minimized */, mSplits.mSecondary.isResizable()); setHomeMinimized(true /* minimized */, mSplits.mSecondary.isResizable());
if (!inSplitMode()) { if (!isDividerVisible()) {
// Wasn't in split-mode yet, so enter now. // Wasn't in split-mode yet, so enter now.
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, " entering split mode with minimized=true"); Slog.d(TAG, " entering split mode with minimized=true");
@@ -806,7 +821,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
void ensureNormalSplit() { void ensureNormalSplit() {
setHomeMinimized(false /* minimized */, mHomeStackResizable); setHomeMinimized(false /* minimized */, mHomeStackResizable);
if (!inSplitMode()) { if (!isDividerVisible()) {
// Wasn't in split-mode, so enter now. // Wasn't in split-mode, so enter now.
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, " enter split mode unminimized "); Slog.d(TAG, " enter split mode unminimized ");

View File

@@ -193,7 +193,7 @@ class SplitScreenTaskOrganizer extends TaskOrganizer {
Log.d(TAG, " at-least one split empty " + mPrimary.topActivityType Log.d(TAG, " at-least one split empty " + mPrimary.topActivityType
+ " " + mSecondary.topActivityType); + " " + mSecondary.topActivityType);
} }
if (mDivider.inSplitMode()) { if (mDivider.isDividerVisible()) {
// Was in split-mode, which means we are leaving split, so continue that. // Was in split-mode, which means we are leaving split, so continue that.
// This happens when the stack in the primary-split is dismissed. // This happens when the stack in the primary-split is dismissed.
if (DEBUG) { if (DEBUG) {

View File

@@ -1488,7 +1488,7 @@ public class StatusBar extends SystemUI implements DemoMode,
if (mDividerOptional.isPresent()) { if (mDividerOptional.isPresent()) {
divider = mDividerOptional.get(); divider = mDividerOptional.get();
} }
if (divider == null || !divider.inSplitMode()) { if (divider == null || !divider.isDividerVisible()) {
final int navbarPos = WindowManagerWrapper.getInstance().getNavBarPosition(mDisplayId); final int navbarPos = WindowManagerWrapper.getInstance().getNavBarPosition(mDisplayId);
if (navbarPos == NAV_BAR_POS_INVALID) { if (navbarPos == NAV_BAR_POS_INVALID) {
return false; return false;