Merge "Scale the leash for PIP User-started resizing." into rvc-dev am: ed8543b731
Change-Id: I1fbcbc530cd6f674d4c6ca6c9aa9c6c1e7ad66a2
This commit is contained in:
@@ -72,6 +72,7 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
||||
private static final int MSG_RESIZE_ANIMATE = 2;
|
||||
private static final int MSG_OFFSET_ANIMATE = 3;
|
||||
private static final int MSG_FINISH_RESIZE = 4;
|
||||
private static final int MSG_RESIZE_USER = 5;
|
||||
|
||||
private final Handler mMainHandler;
|
||||
private final Handler mUpdateHandler;
|
||||
@@ -164,6 +165,12 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MSG_RESIZE_USER: {
|
||||
Rect startBounds = (Rect) args.arg2;
|
||||
Rect toBounds = (Rect) args.arg3;
|
||||
userResizePip(startBounds, toBounds);
|
||||
break;
|
||||
}
|
||||
}
|
||||
args.recycle();
|
||||
return true;
|
||||
@@ -323,6 +330,19 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
||||
mUpdateHandler.sendMessage(mUpdateHandler.obtainMessage(MSG_RESIZE_IMMEDIATE, args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Directly perform a scaled matrix transformation on the leash. This will not perform any
|
||||
* {@link WindowContainerTransaction} until {@link #scheduleFinishResizePip} is called.
|
||||
*/
|
||||
public void scheduleUserResizePip(Rect startBounds, Rect toBounds,
|
||||
Consumer<Rect> updateBoundsCallback) {
|
||||
SomeArgs args = SomeArgs.obtain();
|
||||
args.arg1 = updateBoundsCallback;
|
||||
args.arg2 = startBounds;
|
||||
args.arg3 = toBounds;
|
||||
mUpdateHandler.sendMessage(mUpdateHandler.obtainMessage(MSG_RESIZE_USER, args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish an intermediate resize operation. This is expected to be called after
|
||||
* {@link #scheduleResizePip}.
|
||||
@@ -395,6 +415,21 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
||||
tx.apply();
|
||||
}
|
||||
|
||||
private void userResizePip(Rect startBounds, Rect destinationBounds) {
|
||||
if (Looper.myLooper() != mUpdateHandler.getLooper()) {
|
||||
throw new RuntimeException("Callers should call scheduleUserResizePip() instead of "
|
||||
+ "this directly");
|
||||
}
|
||||
// Could happen when dismissPip
|
||||
if (mToken == null || mLeash == null) {
|
||||
Log.w(TAG, "Abort animation, invalid leash");
|
||||
return;
|
||||
}
|
||||
final SurfaceControl.Transaction tx = mSurfaceControlTransactionFactory.getTransaction();
|
||||
mSurfaceTransactionHelper.scale(tx, mLeash, startBounds, destinationBounds);
|
||||
tx.apply();
|
||||
}
|
||||
|
||||
private void finishResize(SurfaceControl.Transaction tx, Rect destinationBounds,
|
||||
@PipAnimationController.TransitionDirection int direction) {
|
||||
if (Looper.myLooper() != mUpdateHandler.getLooper()) {
|
||||
|
||||
@@ -66,6 +66,7 @@ public class PipResizeGestureHandler {
|
||||
private final Point mMaxSize = new Point();
|
||||
private final Point mMinSize = new Point();
|
||||
private final Rect mLastResizeBounds = new Rect();
|
||||
private final Rect mLastDownBounds = new Rect();
|
||||
private final Rect mTmpBounds = new Rect();
|
||||
private final int mDelta;
|
||||
|
||||
@@ -192,6 +193,7 @@ public class PipResizeGestureHandler {
|
||||
mAllowGesture = isWithinTouchRegion((int) ev.getX(), (int) ev.getY());
|
||||
if (mAllowGesture) {
|
||||
mDownPoint.set(ev.getX(), ev.getY());
|
||||
mLastDownBounds.set(mMotionHelper.getBounds());
|
||||
}
|
||||
|
||||
} else if (mAllowGesture) {
|
||||
@@ -208,7 +210,8 @@ public class PipResizeGestureHandler {
|
||||
mDownPoint.x, mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x,
|
||||
mMinSize.y, mMaxSize, true, true));
|
||||
mPipBoundsHandler.transformBoundsToAspectRatio(mLastResizeBounds);
|
||||
mPipTaskOrganizer.scheduleResizePip(mLastResizeBounds, null);
|
||||
mPipTaskOrganizer.scheduleUserResizePip(mLastDownBounds, mLastResizeBounds,
|
||||
null);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
|
||||
Reference in New Issue
Block a user