import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+ import android.graphics.Point;
import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.media.ThumbnailUtils;
import android.net.Uri;
// Not found in disk cache
if (thumbnail == null || file.needsUpdateThumbnail()) {
-
- int px = getThumbnailDimension();
+ int pxW = 0;
+ int pxH = 0;
+ if (mIsThumbnail) {
+ pxW = pxH = getThumbnailDimension();
+ } else {
+ Point p = getScreenDimension();
+ pxW = p.x;
+ pxH = p.y;
+ }
if (file.isDown()) {
- Bitmap temp = BitmapUtils.decodeSampledBitmapFromFile(
- file.getStoragePath(), px, px);
- Bitmap bitmap = ThumbnailUtils.extractThumbnail(temp, px, px);
- Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(
++ Bitmap tempBitmap = BitmapUtils.decodeSampledBitmapFromFile(
+ file.getStoragePath(), pxW, pxH);
++ Bitmap bitmap = ThumbnailUtils.extractThumbnail(tempBitmap, pxW, pxH);
if (bitmap != null) {
- thumbnail = addThumbnailToCache(imageKey, bitmap, file.getStoragePath(), pxW, pxH);
+ // Handle PNG
+ if (file.getMimetype().equalsIgnoreCase("image/png")) {
- bitmap = handlePNG(bitmap, px);
++ bitmap = handlePNG(bitmap, pxW);
+ }
+
- thumbnail = addThumbnailToCache(imageKey, bitmap, file.getStoragePath(), px);
++ thumbnail = addThumbnailToCache(imageKey, bitmap,
++ file.getStoragePath(), pxW, pxH);
file.setNeedsUpdateThumbnail(false);
mStorageManager.saveFile(file);
if (mClient != null && serverOCVersion != null) {
if (serverOCVersion.supportsRemoteThumbnails()) {
try {
-- String uri = mClient.getBaseUri() + "" +
-- "/index.php/apps/files/api/v1/thumbnail/" +
- px + "/" + px + Uri.encode(file.getRemotePath(), "/");
- pxW + "/" + pxH + Uri.encode(file.getRemotePath(), "/");
-- Log_OC.d("Thumbnail", "URI: " + uri);
-- GetMethod get = new GetMethod(uri);
-- int status = mClient.executeMethod(get);
-- if (status == HttpStatus.SC_OK) {
-// byte[] bytes = get.getResponseBody();
-// Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
-// bytes.length);
-- InputStream inputStream = get.getResponseBodyAsStream();
-- Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
- thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
- thumbnail = ThumbnailUtils.extractThumbnail(bitmap, pxW, pxH);
- byte[] bytes = get.getResponseBody();
--
- // Handle PNG
- if (file.getMimetype().equalsIgnoreCase("image/png")) {
- thumbnail = handlePNG(thumbnail, px);
- String type = "";
- if (mIsThumbnail){
- type = "Thumbnail";
++ if (mIsThumbnail) {
++ String uri = mClient.getBaseUri() + "" +
++ "/index.php/apps/files/api/v1/thumbnail/" +
++ pxW + "/" + pxH + Uri.encode(file.getRemotePath(), "/");
++ Log_OC.d("Thumbnail", "Download URI: " + uri);
++ GetMethod get = new GetMethod(uri);
++ int status = mClient.executeMethod(get);
++ if (status == HttpStatus.SC_OK) {
++ InputStream inputStream = get.getResponseBodyAsStream();
++ Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
++ thumbnail = ThumbnailUtils.extractThumbnail(bitmap, pxW, pxH);
+ } else {
- type = "Resized image";
++ Log_OC.d(TAG, "Status: " + status);
+ }
- Log_OC.d("Thumbnail",
- type + " size of " + file.getRemotePath()
- + ": " + bytes.length);
-
- // bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
-
- if (mIsThumbnail) {
- thumbnail = ThumbnailUtils.extractThumbnail(bitmap, pxW, pxH);
++ } else {
++ String gallery = "";
++ if (serverOCVersion.supportsNativeGallery()){
++ gallery = "gallery";
+ } else {
- thumbnail = bitmap;
++ gallery = "galleryplus";
}
-- // Add thumbnail to cache
-- if (thumbnail != null) {
-- addBitmapToCache(imageKey, thumbnail);
++ String uri = mClient.getBaseUri() +
++ "/index.php/apps/" + gallery + "/api/preview/" + Integer.parseInt(file.getRemoteId().substring(0,8)) +
++ "/" + pxW + "/" + pxH;
++ Log_OC.d("Thumbnail", "FileName: " + file.getFileName() + " Download URI: " + uri);
++ GetMethod get = new GetMethod(uri);
++ int status = mClient.executeMethod(get);
++ if (status == HttpStatus.SC_OK) {
++ InputStream inputStream = get.getResponseBodyAsStream();
++ Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
++ // Download via gallery app
++ thumbnail = bitmap;
}
}
++
++ // Handle PNG
++ if (thumbnail != null && file.getMimetype().equalsIgnoreCase("image/png")) {
++ thumbnail = handlePNG(thumbnail, pxW);
++ }
++
++ // Add thumbnail to cache
++ if (thumbnail != null) {
++ addBitmapToCache(imageKey, thumbnail);
++ }
} catch (Exception e) {
e.printStackTrace();
}
}
- private Bitmap doFileInBackground() {
+ private Bitmap handlePNG(Bitmap bitmap, int px){
+ Bitmap resultBitmap = Bitmap.createBitmap(px,
+ px,
+ Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(resultBitmap);
+
+ c.drawColor(MainApp.getAppContext().getResources().
+ getColor(R.color.background_color));
+ c.drawBitmap(bitmap, 0, 0, null);
+
+ return resultBitmap;
+ }
+
+ private Bitmap doFileInBackground(Boolean mIsThumbnail) {
+ Bitmap thumbnail = null;
File file = (File)mFile;
final String imageKey = String.valueOf(file.hashCode());
package com.owncloud.android.files;
-import org.apache.http.protocol.HTTP;
-
import android.accounts.Account;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+ import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v4.app.DialogFragment;
import android.webkit.MimeTypeMap;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.OCFile;
+ import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
-
import com.owncloud.android.lib.common.network.WebdavUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.services.observer.FileObserverService;
import com.owncloud.android.ui.activity.FileActivity;
+ import com.owncloud.android.ui.adapter.DiskLruImageCacheFileProvider;
import com.owncloud.android.ui.dialog.ShareLinkToDialog;
+import org.apache.http.protocol.HTTP;
+
+import java.util.List;
+
+ import java.io.ByteArrayOutputStream;
+ import java.io.File;
+ import java.io.FileNotFoundException;
+ import java.io.FileOutputStream;
+ import java.io.IOException;
+
/**
*
*/
}
}
-
-
+ public void sendCachedImage(OCFile file) {
+ if (file != null) {
+ Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
+ // set MimeType
+ sendIntent.setType(file.getMimetype());
+ // sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + "/#" + file.getRemoteId() + "#" + file.getFileName()));
+ sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + DiskLruImageCacheFileProvider.AUTHORITY + file.getRemotePath()));
+ sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action
+
+ // Show dialog, without the own app
+ String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
+ chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+ } else {
+ Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
+ }
+ }
++
+
public void syncFile(OCFile file) {
-
+
if (!file.isFolder()){
Intent intent = new Intent(mFileActivity, OperationsService.class);
intent.setAction(OperationsService.ACTION_SYNC_FILE);
private TextView mMessageView;
private ProgressBar mProgressWheel;
+ private Boolean mShowResizedImage = false;
+
public Bitmap mBitmap = null;
-
+
private static final String TAG = PreviewImageFragment.class.getSimpleName();
private boolean mIgnoreFirstSavedState;
if (getFile() == null) {
throw new IllegalStateException("Instanced with a NULL OCFile");
}
- if (!getFile().isDown()) {
- throw new IllegalStateException("There is no local file to preview");
- }
}
-
+
/**
* {@inheritDoc}
public void onStart() {
super.onStart();
if (getFile() != null) {
- mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
- //mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()});
- // mLoadBitmapTask.execute(getFile().getStoragePath());
- mLoadBitmapTask.execute(getFile());
+ mImageView.setTag(getFile().getFileId());
+
+ if (mShowResizedImage){
+ Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(
+ String.valueOf("r" + getFile().getRemoteId())
+ );
+
+ if (thumbnail != null && !getFile().needsUpdateThumbnail()){
+ mProgressWheel.setVisibility(View.GONE);
+ mImageView.setImageBitmap(thumbnail);
+ mImageView.setVisibility(View.VISIBLE);
+ mBitmap = thumbnail;
+ } else {
+ // generate new Thumbnail
+ if (ThumbnailsCacheManager.cancelPotentialWork(getFile(), mImageView)) {
+ final ThumbnailsCacheManager.ThumbnailGenerationTask task =
+ new ThumbnailsCacheManager.ThumbnailGenerationTask(
+ mImageView, mContainerActivity.getStorageManager(),
+ mContainerActivity.getStorageManager().getAccount(),
+ mProgressWheel);
+ if (thumbnail == null) {
+ thumbnail = ThumbnailsCacheManager.mDefaultImg;
+ }
+ final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =
+ new ThumbnailsCacheManager.AsyncDrawable(
+ MainApp.getAppContext().getResources(),
+ thumbnail,
+ task
+ );
+ mImageView.setImageDrawable(asyncDrawable);
+ task.execute(getFile(), false);
+ }
+ }
+ } else {
+ mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel);
- mLoadBitmapTask.execute(getFile().getStoragePath());
++ mLoadBitmapTask.execute(getFile());
+ }
}
}
-
-
+
+
@Override
public void onStop() {
Log_OC.d(TAG, "onStop starts");