Merge "Reduce setBounds if bounds not really change" into sc-v2-dev
This commit is contained in:
@@ -68,6 +68,10 @@ public final class SyncTransactionQueue {
|
||||
* Queues a sync transaction to be sent serially to WM.
|
||||
*/
|
||||
public void queue(WindowContainerTransaction wct) {
|
||||
if (wct.isEmpty()) {
|
||||
if (DEBUG) Slog.d(TAG, "Skip queue due to transaction change is empty");
|
||||
return;
|
||||
}
|
||||
SyncCallback cb = new SyncCallback(wct);
|
||||
synchronized (mQueue) {
|
||||
if (DEBUG) Slog.d(TAG, "Queueing up " + wct);
|
||||
@@ -83,6 +87,10 @@ public final class SyncTransactionQueue {
|
||||
*/
|
||||
public void queue(LegacyTransitions.ILegacyTransition transition,
|
||||
@WindowManager.TransitionType int type, WindowContainerTransaction wct) {
|
||||
if (wct.isEmpty()) {
|
||||
if (DEBUG) Slog.d(TAG, "Skip queue due to transaction change is empty");
|
||||
return;
|
||||
}
|
||||
SyncCallback cb = new SyncCallback(transition, type, wct);
|
||||
synchronized (mQueue) {
|
||||
if (DEBUG) Slog.d(TAG, "Queueing up legacy transition " + wct);
|
||||
@@ -99,6 +107,10 @@ public final class SyncTransactionQueue {
|
||||
* @return {@code true} if queued, {@code false} if not.
|
||||
*/
|
||||
public boolean queueIfWaiting(WindowContainerTransaction wct) {
|
||||
if (wct.isEmpty()) {
|
||||
if (DEBUG) Slog.d(TAG, "Skip queueIfWaiting due to transaction change is empty");
|
||||
return false;
|
||||
}
|
||||
synchronized (mQueue) {
|
||||
if (mQueue.isEmpty()) {
|
||||
if (DEBUG) Slog.d(TAG, "Nothing in queue, so skip queueing up " + wct);
|
||||
|
||||
@@ -94,7 +94,8 @@ public final class SplitLayout {
|
||||
private final Rect mDividerBounds = new Rect();
|
||||
private final Rect mBounds1 = new Rect();
|
||||
private final Rect mBounds2 = new Rect();
|
||||
private final Rect mTmpBounds = new Rect();
|
||||
private final Rect mWinBounds1 = new Rect();
|
||||
private final Rect mWinBounds2 = new Rect();
|
||||
private final SplitLayoutHandler mSplitLayoutHandler;
|
||||
private final SplitWindowManager mSplitWindowManager;
|
||||
private final DisplayImeController mDisplayImeController;
|
||||
@@ -104,6 +105,8 @@ public final class SplitLayout {
|
||||
|
||||
private Context mContext;
|
||||
private DividerSnapAlgorithm mDividerSnapAlgorithm;
|
||||
private WindowContainerToken mWinToken1;
|
||||
private WindowContainerToken mWinToken2;
|
||||
private int mDividePosition;
|
||||
private boolean mInitialized = false;
|
||||
private int mOrientation;
|
||||
@@ -190,10 +193,10 @@ public final class SplitLayout {
|
||||
final int rotation = configuration.windowConfiguration.getRotation();
|
||||
final Rect rootBounds = configuration.windowConfiguration.getBounds();
|
||||
if (rotation != mRotation || !mRootBounds.equals(rootBounds)) {
|
||||
mTmpBounds.set(mRootBounds);
|
||||
mTempRect.set(mRootBounds);
|
||||
mRootBounds.set(rootBounds);
|
||||
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
|
||||
initDividerPosition(mTmpBounds);
|
||||
initDividerPosition(mTempRect);
|
||||
affectsLayout = true;
|
||||
}
|
||||
|
||||
@@ -406,8 +409,16 @@ public final class SplitLayout {
|
||||
return;
|
||||
}
|
||||
|
||||
wct.setBounds(task1.token, mBounds1)
|
||||
.setBounds(task2.token, mBounds2);
|
||||
if (!mBounds1.equals(mWinBounds1) || !task1.token.equals(mWinToken1)) {
|
||||
wct.setBounds(task1.token, mBounds1);
|
||||
mWinBounds1.set(mBounds1);
|
||||
mWinToken1 = task1.token;
|
||||
}
|
||||
if (!mBounds2.equals(mWinBounds2) || !task2.token.equals(mWinToken2)) {
|
||||
wct.setBounds(task2.token, mBounds2);
|
||||
mWinBounds2.set(mBounds2);
|
||||
mWinToken2 = task2.token;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -62,6 +62,7 @@ public class LegacySplitDisplayLayout {
|
||||
Rect mSecondary = null;
|
||||
Rect mAdjustedPrimary = null;
|
||||
Rect mAdjustedSecondary = null;
|
||||
final Rect mTmpBounds = new Rect();
|
||||
|
||||
public LegacySplitDisplayLayout(Context ctx, DisplayLayout dl,
|
||||
LegacySplitScreenTaskListener taskTiles) {
|
||||
@@ -136,31 +137,41 @@ public class LegacySplitDisplayLayout {
|
||||
return mMinimizedSnapAlgorithm;
|
||||
}
|
||||
|
||||
void resizeSplits(int position) {
|
||||
/**
|
||||
* Resize primary bounds and secondary bounds by divider position.
|
||||
*
|
||||
* @param position divider position.
|
||||
* @return true if calculated bounds changed.
|
||||
*/
|
||||
boolean resizeSplits(int position) {
|
||||
mPrimary = mPrimary == null ? new Rect() : mPrimary;
|
||||
mSecondary = mSecondary == null ? new Rect() : mSecondary;
|
||||
calcSplitBounds(position, mPrimary, mSecondary);
|
||||
int dockSide = getPrimarySplitSide();
|
||||
boolean boundsChanged;
|
||||
|
||||
mTmpBounds.set(mPrimary);
|
||||
DockedDividerUtils.calculateBoundsForPosition(position, dockSide, mPrimary,
|
||||
mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
|
||||
boundsChanged = !mPrimary.equals(mTmpBounds);
|
||||
|
||||
mTmpBounds.set(mSecondary);
|
||||
DockedDividerUtils.calculateBoundsForPosition(position,
|
||||
DockedDividerUtils.invertDockSide(dockSide), mSecondary, mDisplayLayout.width(),
|
||||
mDisplayLayout.height(), mDividerSize);
|
||||
boundsChanged |= !mSecondary.equals(mTmpBounds);
|
||||
return boundsChanged;
|
||||
}
|
||||
|
||||
void resizeSplits(int position, WindowContainerTransaction t) {
|
||||
resizeSplits(position);
|
||||
t.setBounds(mTiles.mPrimary.token, mPrimary);
|
||||
t.setBounds(mTiles.mSecondary.token, mSecondary);
|
||||
if (resizeSplits(position)) {
|
||||
t.setBounds(mTiles.mPrimary.token, mPrimary);
|
||||
t.setBounds(mTiles.mSecondary.token, mSecondary);
|
||||
|
||||
t.setSmallestScreenWidthDp(mTiles.mPrimary.token,
|
||||
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary));
|
||||
t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
|
||||
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
|
||||
}
|
||||
|
||||
void calcSplitBounds(int position, @NonNull Rect outPrimary, @NonNull Rect outSecondary) {
|
||||
int dockSide = getPrimarySplitSide();
|
||||
DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outPrimary,
|
||||
mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
|
||||
|
||||
DockedDividerUtils.calculateBoundsForPosition(position,
|
||||
DockedDividerUtils.invertDockSide(dockSide), outSecondary, mDisplayLayout.width(),
|
||||
mDisplayLayout.height(), mDividerSize);
|
||||
t.setSmallestScreenWidthDp(mTiles.mPrimary.token,
|
||||
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary));
|
||||
t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
|
||||
getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
|
||||
}
|
||||
}
|
||||
|
||||
Rect calcResizableMinimizedHomeStackBounds() {
|
||||
|
||||
Reference in New Issue
Block a user