Merge "Don't use sync transactions if not needed" into rvc-dev am: 27c733c7f7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11922716

Change-Id: I0a41f865546d6b1c170378ac9eb9eb07ae758d72
This commit is contained in:
Evan Rosky
2020-06-23 01:28:27 +00:00
committed by Automerger Merge Worker
2 changed files with 54 additions and 39 deletions

View File

@@ -387,6 +387,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
} }
// Always set this because we could be entering split when mMinimized is already true // Always set this because we could be entering split when mMinimized is already true
wct.setFocusable(mSplits.mPrimary.token, !mMinimized); wct.setFocusable(mSplits.mPrimary.token, !mMinimized);
boolean onlyFocusable = true;
// Update home-stack resizability // Update home-stack resizability
final boolean homeResizableChanged = mHomeStackResizable != homeStackResizable; final boolean homeResizableChanged = mHomeStackResizable != homeStackResizable;
@@ -395,6 +396,7 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
if (isDividerVisible()) { if (isDividerVisible()) {
WindowManagerProxy.applyHomeTasksMinimized( WindowManagerProxy.applyHomeTasksMinimized(
mSplitLayout, mSplits.mSecondary.token, wct); mSplitLayout, mSplits.mSecondary.token, wct);
onlyFocusable = false;
} }
} }
@@ -416,7 +418,15 @@ public class Divider extends SystemUI implements DividerView.DividerCallbacks,
} }
} }
updateTouchable(); updateTouchable();
mWindowManagerProxy.applySyncTransaction(wct); if (onlyFocusable) {
// If we are only setting focusability, a sync transaction isn't necessary (in fact it
// can interrupt other animations), so see if it can be submitted on pending instead.
if (!mSplits.mDivider.getWmProxy().queueSyncTransactionIfWaiting(wct)) {
WindowOrganizer.applyTransaction(wct);
}
} else {
mWindowManagerProxy.applySyncTransaction(wct);
}
} }
void setAdjustedForIme(boolean adjustedForIme) { void setAdjustedForIme(boolean adjustedForIme) {

View File

@@ -29,6 +29,7 @@ import android.view.SurfaceControl;
import android.window.TaskOrganizer; import android.window.TaskOrganizer;
import android.window.WindowContainerToken; import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction; import android.window.WindowContainerTransaction;
import android.window.WindowOrganizer;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -173,47 +174,51 @@ class DividerImeController implements DisplayImeController.ImePositionProcessor
} }
private void updateImeAdjustState() { private void updateImeAdjustState() {
// Reposition the server's secondary split position so that it evaluates if (mAdjusted != mTargetAdjusted) {
// insets properly. // Reposition the server's secondary split position so that it evaluates
WindowContainerTransaction wct = new WindowContainerTransaction(); // insets properly.
final SplitDisplayLayout splitLayout = getLayout(); WindowContainerTransaction wct = new WindowContainerTransaction();
if (mTargetAdjusted) { final SplitDisplayLayout splitLayout = getLayout();
splitLayout.updateAdjustedBounds(mShownTop, mHiddenTop, mShownTop); if (mTargetAdjusted) {
wct.setBounds(mSplits.mSecondary.token, splitLayout.mAdjustedSecondary); splitLayout.updateAdjustedBounds(mShownTop, mHiddenTop, mShownTop);
// "Freeze" the configuration size so that the app doesn't get a config wct.setBounds(mSplits.mSecondary.token, splitLayout.mAdjustedSecondary);
// or relaunch. This is required because normally nav-bar contributes // "Freeze" the configuration size so that the app doesn't get a config
// to configuration bounds (via nondecorframe). // or relaunch. This is required because normally nav-bar contributes
Rect adjustAppBounds = new Rect(mSplits.mSecondary.configuration // to configuration bounds (via nondecorframe).
.windowConfiguration.getAppBounds()); Rect adjustAppBounds = new Rect(mSplits.mSecondary.configuration
adjustAppBounds.offset(0, splitLayout.mAdjustedSecondary.top .windowConfiguration.getAppBounds());
- splitLayout.mSecondary.top); adjustAppBounds.offset(0, splitLayout.mAdjustedSecondary.top
wct.setAppBounds(mSplits.mSecondary.token, adjustAppBounds); - splitLayout.mSecondary.top);
wct.setScreenSizeDp(mSplits.mSecondary.token, wct.setAppBounds(mSplits.mSecondary.token, adjustAppBounds);
mSplits.mSecondary.configuration.screenWidthDp, wct.setScreenSizeDp(mSplits.mSecondary.token,
mSplits.mSecondary.configuration.screenHeightDp); mSplits.mSecondary.configuration.screenWidthDp,
mSplits.mSecondary.configuration.screenHeightDp);
wct.setBounds(mSplits.mPrimary.token, splitLayout.mAdjustedPrimary); wct.setBounds(mSplits.mPrimary.token, splitLayout.mAdjustedPrimary);
adjustAppBounds = new Rect(mSplits.mPrimary.configuration adjustAppBounds = new Rect(mSplits.mPrimary.configuration
.windowConfiguration.getAppBounds()); .windowConfiguration.getAppBounds());
adjustAppBounds.offset(0, splitLayout.mAdjustedPrimary.top adjustAppBounds.offset(0, splitLayout.mAdjustedPrimary.top
- splitLayout.mPrimary.top); - splitLayout.mPrimary.top);
wct.setAppBounds(mSplits.mPrimary.token, adjustAppBounds); wct.setAppBounds(mSplits.mPrimary.token, adjustAppBounds);
wct.setScreenSizeDp(mSplits.mPrimary.token, wct.setScreenSizeDp(mSplits.mPrimary.token,
mSplits.mPrimary.configuration.screenWidthDp, mSplits.mPrimary.configuration.screenWidthDp,
mSplits.mPrimary.configuration.screenHeightDp); mSplits.mPrimary.configuration.screenHeightDp);
} else { } else {
wct.setBounds(mSplits.mSecondary.token, splitLayout.mSecondary); wct.setBounds(mSplits.mSecondary.token, splitLayout.mSecondary);
wct.setAppBounds(mSplits.mSecondary.token, null); wct.setAppBounds(mSplits.mSecondary.token, null);
wct.setScreenSizeDp(mSplits.mSecondary.token, wct.setScreenSizeDp(mSplits.mSecondary.token,
SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED); SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED);
wct.setBounds(mSplits.mPrimary.token, splitLayout.mPrimary); wct.setBounds(mSplits.mPrimary.token, splitLayout.mPrimary);
wct.setAppBounds(mSplits.mPrimary.token, null); wct.setAppBounds(mSplits.mPrimary.token, null);
wct.setScreenSizeDp(mSplits.mPrimary.token, wct.setScreenSizeDp(mSplits.mPrimary.token,
SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED); SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED);
}
if (!mSplits.mDivider.getWmProxy().queueSyncTransactionIfWaiting(wct)) {
WindowOrganizer.applyTransaction(wct);
}
} }
mSplits.mDivider.getWmProxy().applySyncTransaction(wct);
// Update all the adjusted-for-ime states // Update all the adjusted-for-ime states
if (!mPaused) { if (!mPaused) {
final DividerView view = getView(); final DividerView view = getView();