Bug 942270 - Support quickshare in context menus. r=bnicholson
This commit is contained in:
@@ -1048,81 +1048,6 @@ public class GeckoAppShell
|
||||
} catch (IOException e) {}
|
||||
}
|
||||
|
||||
static void shareImage(String aSrc, String aType) {
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
boolean isDataURI = aSrc.startsWith("data:");
|
||||
OutputStream os = null;
|
||||
File dir = GeckoApp.getTempDirectory();
|
||||
|
||||
if (dir == null) {
|
||||
showImageShareFailureToast();
|
||||
return;
|
||||
}
|
||||
|
||||
GeckoApp.deleteTempFiles();
|
||||
|
||||
try {
|
||||
// Create a temporary file for the image
|
||||
File imageFile = File.createTempFile("image",
|
||||
"." + aType.replace("image/",""),
|
||||
dir);
|
||||
os = new FileOutputStream(imageFile);
|
||||
|
||||
if (isDataURI) {
|
||||
// We are dealing with a Data URI
|
||||
int dataStart = aSrc.indexOf(',');
|
||||
byte[] buf = Base64.decode(aSrc.substring(dataStart+1), Base64.DEFAULT);
|
||||
os.write(buf);
|
||||
} else {
|
||||
// We are dealing with a URL
|
||||
InputStream is = null;
|
||||
try {
|
||||
URL url = new URL(aSrc);
|
||||
is = url.openStream();
|
||||
byte[] buf = new byte[2048];
|
||||
int length;
|
||||
|
||||
while ((length = is.read(buf)) != -1) {
|
||||
os.write(buf, 0, length);
|
||||
}
|
||||
} finally {
|
||||
safeStreamClose(is);
|
||||
}
|
||||
}
|
||||
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imageFile));
|
||||
|
||||
// If we were able to determine the image type, send that in the intent. Otherwise,
|
||||
// use a generic type.
|
||||
if (aType.startsWith("image/")) {
|
||||
intent.setType(aType);
|
||||
} else {
|
||||
intent.setType("image/*");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (!isDataURI) {
|
||||
// If we failed, at least send through the URL link
|
||||
intent.putExtra(Intent.EXTRA_TEXT, aSrc);
|
||||
intent.setType("text/plain");
|
||||
} else {
|
||||
showImageShareFailureToast();
|
||||
return;
|
||||
}
|
||||
} finally {
|
||||
safeStreamClose(os);
|
||||
}
|
||||
getContext().startActivity(Intent.createChooser(intent,
|
||||
getContext().getResources().getString(R.string.share_title)));
|
||||
}
|
||||
|
||||
// Don't fail silently, tell the user that we weren't able to share the image
|
||||
private static final void showImageShareFailureToast() {
|
||||
Toast toast = Toast.makeText(getContext(),
|
||||
getContext().getResources().getString(R.string.share_image_failed),
|
||||
Toast.LENGTH_SHORT);
|
||||
toast.show();
|
||||
}
|
||||
|
||||
static boolean isUriSafeForScheme(Uri aUri) {
|
||||
// Bug 794034 - We don't want to pass MWI or USSD codes to the
|
||||
// dialer, and ensure the Uri class doesn't parse a URI
|
||||
|
||||
Reference in New Issue
Block a user