blob: 932568852308c72a8257313441363586f253ef97 [file] [log] [blame]
/*
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package com.android.browser;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;
import java.util.List;
import java.util.Collections;
import android.util.Log;
import org.chromium.base.ContentUriUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class ShareDialog {
private Activity activity = null;
public String title = null;
public String url = null;
public Bitmap favicon = null;
public Bitmap screenshot = 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 static final String EXTERNAL_IMAGE_FILE_PATH = "browser-images";
public static final String IMAGE_FILE_PATH = "images";
public ShareDialog (Activity activity, String title, String url, Bitmap favicon, Bitmap screenshot) {
this.activity = activity;
this.title = title;
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 = 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.
}
}
});
}
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 = getUriForImageCaptureFile(activity, saveFile);
}
} catch (IOException ie) {
if (fOut != null) {
try {
fOut.close();
} catch (IOException e) {
// Ignore exception.
}
}
}
}
return uri;
}
public static Uri getUriForImageCaptureFile(Context context, File file) {
return ContentUriUtils.getContentUriFromFile(context, file);
}
public static File getDirectoryForImageCapture(Context context) throws IOException {
File path = new File(context.getFilesDir(), IMAGE_FILE_PATH);
if (!path.exists() && !path.mkdir()) {
throw new IOException("Folder cannot be created.");
}
return path;
}
public void sharePage() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT |
Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_TEXT, url);
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(EXTRA_SHARE_FAVICON, favicon);
intent.putExtra(Intent.EXTRA_STREAM, getShareBitmapUri(screenshot));
activity.startActivity(Intent.createChooser(intent,
activity.getString(R.string.choosertitle_sharevia)));
}
}