summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanesh M <daneshm90@gmail.com>2015-10-07 13:08:21 -0700
committerjrizzoli <joey@cyanogenmoditalia.it>2016-04-26 20:25:35 +0200
commit22398a7d009567d9959d85de6f9c735044508c1b (patch)
tree9b755f273c80e50e53ebd3d097bb4cbc4806deff
parent71560d7f475855136f084332d20bfa7ff592e662 (diff)
downloadandroid_packages_apps_Gello-22398a7d009567d9959d85de6f9c735044508c1b.tar.gz
android_packages_apps_Gello-22398a7d009567d9959d85de6f9c735044508c1b.tar.bz2
android_packages_apps_Gello-22398a7d009567d9959d85de6f9c735044508c1b.zip
Gello: Share bitmap via stream vs bitmap
High res devices run into issues when trying to share a preview of the page as a bitmap. Use a file uri instead. Cherry-picked from: https://github.com/CyanogenMod/android_packages_apps_Browser/commit/5eb5e2c3d36ad92e41eef66c2dadcd106f1e0e13 Change-Id: I3016a3a9844cfa581f2535935fffc530c2b34ed9
-rw-r--r--src/com/android/browser/FileProviderHelper.java27
-rw-r--r--src/com/android/browser/ShareDialog.java86
2 files changed, 111 insertions, 2 deletions
diff --git a/src/com/android/browser/FileProviderHelper.java b/src/com/android/browser/FileProviderHelper.java
new file mode 100644
index 00000000..3c40796c
--- /dev/null
+++ b/src/com/android/browser/FileProviderHelper.java
@@ -0,0 +1,27 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package com.android.browser;
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.v4.content.FileProvider;
+
+import org.chromium.base.ContentUriUtils;
+
+import java.io.File;
+
+/**
+ * Utilities for translating a file into content URI.
+ */
+public class FileProviderHelper implements ContentUriUtils.FileProviderUtil {
+ // Keep this variable in sync with the value defined in file_paths.xml.
+ private static final String API_AUTHORITY_SUFFIX = ".FileProvider";
+
+ @Override
+ public Uri getContentUriFromFile(Context context, File file) {
+ return FileProvider.getUriForFile(context,
+ context.getPackageName() + API_AUTHORITY_SUFFIX, file);
+ }
+}
diff --git a/src/com/android/browser/ShareDialog.java b/src/com/android/browser/ShareDialog.java
index 0f44e5cb..63f6183f 100644
--- a/src/com/android/browser/ShareDialog.java
+++ b/src/com/android/browser/ShareDialog.java
@@ -40,6 +40,8 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Build;
import java.util.List;
@@ -47,6 +49,12 @@ import java.util.Collections;
import android.util.Log;
+import org.chromium.base.ContentUriUtils;
+import org.chromium.ui.UiUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
public class ShareDialog extends AppItem {
private Activity activity = null;
@@ -57,7 +65,8 @@ public class ShareDialog extends AppItem {
private List<ResolveInfo>apps = null;
public final static String EXTRA_SHARE_SCREENSHOT = "share_screenshot";
public final static String EXTRA_SHARE_FAVICON = "share_favicon";
-
+ private static final String SCREENSHOT_DIRECTORY_NAME = "screenshot_share";
+ private static final int MAX_SCREENSHOT_COUNT = 10;
public ShareDialog (Activity activity, String title, String url, Bitmap favicon, Bitmap screenshot) {
super(null);
@@ -67,6 +76,50 @@ public class ShareDialog extends AppItem {
this.url = url;
this.favicon = favicon;
this.screenshot = screenshot;
+
+ ContentUriUtils.setFileProviderUtil(new FileProviderHelper());
+ trimScreenshots();
+ }
+
+ private void trimScreenshots() {
+ try {
+ File directory = getScreenshotDir();
+ if (directory.list() != null && directory.list().length >= MAX_SCREENSHOT_COUNT) {
+ clearSharedScreenshots();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ clearSharedScreenshots();
+ }
+ }
+
+ private File getScreenshotDir() throws IOException {
+ File baseDir = UiUtils.getDirectoryForImageCapture(activity);
+ return new File(baseDir, SCREENSHOT_DIRECTORY_NAME);
+ }
+
+ private void deleteScreenshotFiles(File file) {
+ if (!file.exists()) return;
+ if (file.isDirectory()) {
+ for (File f : file.listFiles()) deleteScreenshotFiles(f);
+ }
+ }
+
+ /**
+ * Clears all shared screenshot files.
+ */
+ private void clearSharedScreenshots() {
+ AsyncTask.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ File dir = getScreenshotDir();
+ deleteScreenshotFiles(dir);
+ } catch (IOException ie) {
+ // Ignore exception.
+ }
+ }
+ });
}
private List<ResolveInfo> getShareableApps() {
@@ -114,7 +167,8 @@ public class ShareDialog extends AppItem {
i.putExtra(Intent.EXTRA_TEXT, url);
i.putExtra(Intent.EXTRA_SUBJECT, title);
i.putExtra(EXTRA_SHARE_FAVICON, favicon);
- i.putExtra(EXTRA_SHARE_SCREENSHOT, screenshot);
+ i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ i.putExtra(Intent.EXTRA_STREAM, getShareBitmapUri(screenshot));
i.setComponent(name);
activity.startActivity(i);
}
@@ -122,4 +176,32 @@ public class ShareDialog extends AppItem {
builderSingle.show();
}
+
+ public Uri getShareBitmapUri(Bitmap screenshot) {
+ Uri uri = null;
+ if (screenshot != null) {
+ FileOutputStream fOut = null;
+ try {
+ File path = getScreenshotDir();
+ if (path.exists() || path.mkdir()) {
+ File saveFile = File.createTempFile(
+ String.valueOf(System.currentTimeMillis()), ".jpg", path);
+ fOut = new FileOutputStream(saveFile);
+ screenshot.compress(Bitmap.CompressFormat.JPEG, 90, fOut);
+ fOut.flush();
+ fOut.close();
+ uri = UiUtils.getUriForImageCaptureFile(activity, saveFile);
+ }
+ } catch (IOException ie) {
+ if (fOut != null) {
+ try {
+ fOut.close();
+ } catch (IOException e) {
+ // Ignore exception.
+ }
+ }
+ }
+ }
+ return uri;
+ }
}