ViewRootImpl.java
// When the drag operation ends, reset drag-related state
if (what == DragEvent.ACTION_DRAG_ENDED) {
mCurrentDragView = null;
setLocalDragState(null);
mAttachInfo.mDragToken = null;
if (mAttachInfo.mDragSurface != null) {
mAttachInfo.mDragSurface.release();
mAttachInfo.mDragSurface = null;
}
}
//add begin
if (!result && event.mClipData != null) {
int count = event.getClipData().getItemCount();
Intent intent = new Intent();
if (count == 1) {
intent = new Intent(Intent.ACTION_SEND);
intent.setType(getCommonMimeType(event));
intent.putExtra(Intent.EXTRA_STREAM, getUris(event).get(0));
} else if (count > 1) {
intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType(getCommonMimeType(event));
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, getUris(event));
}
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addCategory(Intent.CATEGORY_DEFAULT);
Intent chooserIntent = Intent.createChooser(
intent, "").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(chooserIntent);
}
public static String getCommonMimeType(List<String> mimeTypes) {
if (mimeTypes == null || mimeTypes.size() <= 0) {
return null;
}
boolean sameType = true;
for (int i = 1; i < mimeTypes.size(); ++i) {
if (!mimeTypes.get(0).equals(mimeTypes.get(i))) {
sameType = false;
break;
}
}
if (sameType) {
return mimeTypes.get(0);
}
int index0 = mimeTypes.get(0).indexOf("/");
if (index0 == -1) {
return null;
}
for (int i = 1; i < mimeTypes.size(); ++i) {
int indexNow = mimeTypes.get(i).indexOf("/");
if (indexNow == -1) {
return null;
}
if (indexNow != index0
|| !mimeTypes.get(0).regionMatches(0, mimeTypes.get(i), 0,
indexNow)) {
return "*/*";
}
}
return mimeTypes.get(0).substring(0, index0 + 1) + "*";
}
public static String getCommonMimeType(DragEvent event) {
List<String> mimeTypes = new ArrayList<String>();
for (int i = 0; i < event.getClipDescription().getMimeTypeCount(); ++i) {
mimeTypes.add(event.getClipDescription().getMimeType(i));
}
return getCommonMimeType(mimeTypes);
}
public static ArrayList<Uri> getUris(DragEvent event) {
ArrayList<Uri> uris = new ArrayList<Uri>();
for (int i = 0; i < event.getClipData().getItemCount(); ++i) {
uris.add(event.getClipData().getItemAt(i).getUri());
}
return uris;
}