Merge "Adding tuner params for paging and full screen thumbnails."
diff --git a/api/current.txt b/api/current.txt
index 3ed2bb5..0263927 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -36777,6 +36777,7 @@
method public void stopNestedScroll();
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
method public void unscheduleDrawable(android.graphics.drawable.Drawable);
+ method public final void updateDragShadow(android.view.View.DragShadowBuilder);
method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
method public boolean willNotCacheDrawing();
method public boolean willNotDraw();
diff --git a/api/system-current.txt b/api/system-current.txt
index 08009c8..621a282 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -39100,6 +39100,7 @@
method public void stopNestedScroll();
method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
method public void unscheduleDrawable(android.graphics.drawable.Drawable);
+ method public final void updateDragShadow(android.view.View.DragShadowBuilder);
method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
method public boolean willNotCacheDrawing();
method public boolean willNotDraw();
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 179a928..ab1943c 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -19992,19 +19992,22 @@
Log.d(VIEW_LOG_TAG, "drag shadow: width=" + shadowSize.x + " height=" + shadowSize.y
+ " shadowX=" + shadowTouchPoint.x + " shadowY=" + shadowTouchPoint.y);
}
- Surface surface = new Surface();
+ if (mAttachInfo.mDragSurface != null) {
+ mAttachInfo.mDragSurface.release();
+ }
+ mAttachInfo.mDragSurface = new Surface();
try {
mAttachInfo.mDragToken = mAttachInfo.mSession.prepareDrag(mAttachInfo.mWindow,
- flags, shadowSize.x, shadowSize.y, surface);
+ flags, shadowSize.x, shadowSize.y, mAttachInfo.mDragSurface);
if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "prepareDrag returned token="
- + mAttachInfo.mDragToken + " surface=" + surface);
+ + mAttachInfo.mDragToken + " surface=" + mAttachInfo.mDragSurface);
if (mAttachInfo.mDragToken != null) {
- Canvas canvas = surface.lockCanvas(null);
+ Canvas canvas = mAttachInfo.mDragSurface.lockCanvas(null);
try {
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
shadowBuilder.onDrawShadow(canvas);
} finally {
- surface.unlockCanvasAndPost(canvas);
+ mAttachInfo.mDragSurface.unlockCanvasAndPost(canvas);
}
final ViewRootImpl root = getViewRootImpl();
@@ -20019,14 +20022,11 @@
shadowSize.x, shadowSize.y,
shadowTouchPoint.x, shadowTouchPoint.y, data);
if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "performDrag returned " + okay);
-
- // Off and running! Release our local surface instance; the drag
- // shadow surface is now managed by the system process.
- surface.release();
}
} catch (Exception e) {
Log.e(VIEW_LOG_TAG, "Unable to initiate drag", e);
- surface.destroy();
+ mAttachInfo.mDragSurface.destroy();
+ mAttachInfo.mDragSurface = null;
}
return okay;
@@ -20065,6 +20065,27 @@
}
}
+ public final void updateDragShadow(DragShadowBuilder shadowBuilder) {
+ if (ViewDebug.DEBUG_DRAG) {
+ Log.d(VIEW_LOG_TAG, "updateDragShadow");
+ }
+ if (mAttachInfo.mDragToken != null) {
+ try {
+ Canvas canvas = mAttachInfo.mDragSurface.lockCanvas(null);
+ try {
+ canvas.drawColor(0, PorterDuff.Mode.CLEAR);
+ shadowBuilder.onDrawShadow(canvas);
+ } finally {
+ mAttachInfo.mDragSurface.unlockCanvasAndPost(canvas);
+ }
+ } catch (Exception e) {
+ Log.e(VIEW_LOG_TAG, "Unable to update drag shadow", e);
+ }
+ } else {
+ Log.e(VIEW_LOG_TAG, "No active drag");
+ }
+ }
+
/**
* Starts a move from {startX, startY}, the amount of the movement will be the offset
* between {startX, startY} and the new cursor positon.
@@ -22356,6 +22377,11 @@
IBinder mDragToken;
/**
+ * The drag shadow surface for the current drag operation.
+ */
+ public Surface mDragSurface;
+
+ /**
* Creates a new set of attachment information with the specified
* events handler and thread.
*
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 2c0cd7a..b503e12 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -5376,6 +5376,10 @@
if (what == DragEvent.ACTION_DRAG_ENDED) {
setLocalDragState(null);
mAttachInfo.mDragToken = null;
+ if (mAttachInfo.mDragSurface != null) {
+ mAttachInfo.mDragSurface.release();
+ mAttachInfo.mDragSurface = null;
+ }
}
}
}
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index 74750a9..fdccc3f 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -281,7 +281,7 @@
}
}
- void broadcastDragEndedLw() {
+ private void broadcastDragEndedLw() {
final int myPid = Process.myPid();
if (WindowManagerService.DEBUG_DRAG) {
@@ -313,6 +313,9 @@
}
void endDragLw() {
+ if (mAnimation != null) {
+ return;
+ }
if (!mDragResult) {
mAnimation = createReturnAnimationLocked();
mService.scheduleAnimationLocked();
@@ -322,7 +325,7 @@
}
- void cleanUpDragLw() {
+ private void cleanUpDragLw() {
broadcastDragEndedLw();
// stop intercepting input
@@ -336,6 +339,9 @@
}
void notifyMoveLw(float x, float y) {
+ if (mAnimation != null) {
+ return;
+ }
mCurrentX = x;
mCurrentY = y;
@@ -410,6 +416,9 @@
// result from the recipient.
boolean notifyDropLw(WindowState touchedWin, DropPermissionHolder dropPermissionHolder,
float x, float y) {
+ if (mAnimation != null) {
+ return false;
+ }
mCurrentX = x;
mCurrentY = y;