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_RESIZE_ANIMATE = 2;
|
||||||
private static final int MSG_OFFSET_ANIMATE = 3;
|
private static final int MSG_OFFSET_ANIMATE = 3;
|
||||||
private static final int MSG_FINISH_RESIZE = 4;
|
private static final int MSG_FINISH_RESIZE = 4;
|
||||||
|
private static final int MSG_RESIZE_USER = 5;
|
||||||
|
|
||||||
private final Handler mMainHandler;
|
private final Handler mMainHandler;
|
||||||
private final Handler mUpdateHandler;
|
private final Handler mUpdateHandler;
|
||||||
@@ -164,6 +165,12 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MSG_RESIZE_USER: {
|
||||||
|
Rect startBounds = (Rect) args.arg2;
|
||||||
|
Rect toBounds = (Rect) args.arg3;
|
||||||
|
userResizePip(startBounds, toBounds);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
args.recycle();
|
args.recycle();
|
||||||
return true;
|
return true;
|
||||||
@@ -323,6 +330,19 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
|||||||
mUpdateHandler.sendMessage(mUpdateHandler.obtainMessage(MSG_RESIZE_IMMEDIATE, args));
|
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
|
* Finish an intermediate resize operation. This is expected to be called after
|
||||||
* {@link #scheduleResizePip}.
|
* {@link #scheduleResizePip}.
|
||||||
@@ -395,6 +415,21 @@ public class PipTaskOrganizer extends ITaskOrganizer.Stub {
|
|||||||
tx.apply();
|
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,
|
private void finishResize(SurfaceControl.Transaction tx, Rect destinationBounds,
|
||||||
@PipAnimationController.TransitionDirection int direction) {
|
@PipAnimationController.TransitionDirection int direction) {
|
||||||
if (Looper.myLooper() != mUpdateHandler.getLooper()) {
|
if (Looper.myLooper() != mUpdateHandler.getLooper()) {
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ public class PipResizeGestureHandler {
|
|||||||
private final Point mMaxSize = new Point();
|
private final Point mMaxSize = new Point();
|
||||||
private final Point mMinSize = new Point();
|
private final Point mMinSize = new Point();
|
||||||
private final Rect mLastResizeBounds = new Rect();
|
private final Rect mLastResizeBounds = new Rect();
|
||||||
|
private final Rect mLastDownBounds = new Rect();
|
||||||
private final Rect mTmpBounds = new Rect();
|
private final Rect mTmpBounds = new Rect();
|
||||||
private final int mDelta;
|
private final int mDelta;
|
||||||
|
|
||||||
@@ -192,6 +193,7 @@ public class PipResizeGestureHandler {
|
|||||||
mAllowGesture = isWithinTouchRegion((int) ev.getX(), (int) ev.getY());
|
mAllowGesture = isWithinTouchRegion((int) ev.getX(), (int) ev.getY());
|
||||||
if (mAllowGesture) {
|
if (mAllowGesture) {
|
||||||
mDownPoint.set(ev.getX(), ev.getY());
|
mDownPoint.set(ev.getX(), ev.getY());
|
||||||
|
mLastDownBounds.set(mMotionHelper.getBounds());
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (mAllowGesture) {
|
} else if (mAllowGesture) {
|
||||||
@@ -208,7 +210,8 @@ public class PipResizeGestureHandler {
|
|||||||
mDownPoint.x, mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x,
|
mDownPoint.x, mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x,
|
||||||
mMinSize.y, mMaxSize, true, true));
|
mMinSize.y, mMaxSize, true, true));
|
||||||
mPipBoundsHandler.transformBoundsToAspectRatio(mLastResizeBounds);
|
mPipBoundsHandler.transformBoundsToAspectRatio(mLastResizeBounds);
|
||||||
mPipTaskOrganizer.scheduleResizePip(mLastResizeBounds, null);
|
mPipTaskOrganizer.scheduleUserResizePip(mLastDownBounds, mLastResizeBounds,
|
||||||
|
null);
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_UP:
|
case MotionEvent.ACTION_UP:
|
||||||
case MotionEvent.ACTION_CANCEL:
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
|||||||
Reference in New Issue
Block a user