Check for valid surface when starting to drag

Also protect creating SurfaceSession with root surface.

Change-Id: I3649f160e85367169710b36faf26c96bef0f71fe
Fix: 110922266
Test: atest CtsViewTestCases:android.view.cts.DragDropTest
This commit is contained in:
Riddle Hsu
2018-06-28 21:44:50 +08:00
parent dd7b69d3c5
commit 0328b9c025
2 changed files with 10 additions and 1 deletions

View File

@@ -37,7 +37,12 @@ public final class SurfaceSession {
}
public SurfaceSession(Surface root) {
mNativeClient = nativeCreateScoped(root.mNativeObject);
synchronized (root.mLock) {
if (root.mNativeObject == 0) {
throw new IllegalStateException("Surface is not initialized or has been released");
}
mNativeClient = nativeCreateScoped(root.mNativeObject);
}
}
/* no user serviceable parts here ... */

View File

@@ -23993,6 +23993,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
Log.w(VIEW_LOG_TAG, "startDragAndDrop called on a detached view.");
return false;
}
if (!mAttachInfo.mViewRootImpl.mSurface.isValid()) {
Log.w(VIEW_LOG_TAG, "startDragAndDrop called with an invalid surface.");
return false;
}
if (data != null) {
data.prepareToLeaveProcess((flags & View.DRAG_FLAG_GLOBAL) != 0);