From: tobiasKaminsky Date: Wed, 5 Nov 2014 20:45:08 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/develop' into rotateImage X-Git-Tag: oc-android-1.7.0_signed~81^2~5 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/c105861d0fa27912a19a85f39fed7950de5a3d9a?hp=-c Merge remote-tracking branch 'upstream/develop' into rotateImage Conflicts: src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java --- c105861d0fa27912a19a85f39fed7950de5a3d9a diff --combined src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 54727775,1d2cda8c..ce53c444 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@@ -20,21 -20,30 +20,32 @@@ package com.owncloud.android.datamodel import java.io.File; import java.lang.ref.WeakReference; + import org.apache.commons.httpclient.HttpStatus; + import org.apache.commons.httpclient.methods.GetMethod; + + import android.accounts.Account; + import android.accounts.AccountManager; import android.content.res.Resources; import android.graphics.Bitmap; + import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; +import android.graphics.Matrix; - import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.media.ExifInterface; import android.media.ThumbnailUtils; + import android.net.Uri; import android.os.AsyncTask; - import android.util.TypedValue; import android.widget.ImageView; import com.owncloud.android.MainApp; + import com.owncloud.android.R; + import com.owncloud.android.lib.common.OwnCloudAccount; + import com.owncloud.android.lib.common.OwnCloudClient; + import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; + import com.owncloud.android.lib.common.accounts.AccountUtils.Constants; import com.owncloud.android.lib.common.utils.Log_OC; + import com.owncloud.android.lib.resources.status.OwnCloudVersion; import com.owncloud.android.ui.adapter.DiskLruImageCache; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.DisplayUtils; @@@ -49,7 -58,8 +60,8 @@@ public class ThumbnailsCacheManager private static final String TAG = ThumbnailsCacheManager.class.getSimpleName(); - private static final String CACHE_FOLDER = "thumbnailCache"; + private static final String CACHE_FOLDER = "thumbnailCache"; + private static final String MINOR_SERVER_VERSION_FOR_THUMBS = "7.8.0"; private static final Object mThumbnailsDiskCacheLock = new Object(); private static DiskLruImageCache mThumbnailCache = null; @@@ -58,7 -68,9 +70,9 @@@ private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB private static final CompressFormat mCompressFormat = CompressFormat.JPEG; private static final int mCompressQuality = 70; - + private static OwnCloudClient mClient = null; + private static String mServerVersion = null; + public static Bitmap mDefaultImg = BitmapFactory.decodeResource( MainApp.getAppContext().getResources(), @@@ -67,10 -79,12 +81,12 @@@ public static class InitDiskCacheTask extends AsyncTask { + @Override protected Void doInBackground(File... params) { synchronized (mThumbnailsDiskCacheLock) { mThumbnailCacheStarting = true; + if (mThumbnailCache == null) { try { // Check if media is mounted or storage is built-in, if so, @@@ -155,15 -169,17 +171,17 @@@ public static class ThumbnailGenerationTask extends AsyncTask { private final WeakReference mImageViewReference; + private static Account mAccount; private OCFile mFile; private FileDataStorageManager mStorageManager; - public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager) { + public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager, Account account) { // Use a WeakReference to ensure the ImageView can be garbage collected mImageViewReference = new WeakReference(imageView); if (storageManager == null) throw new IllegalArgumentException("storageManager must not be NULL"); mStorageManager = storageManager; + mAccount = account; } // Decode image in background. @@@ -172,6 -188,15 +190,15 @@@ Bitmap thumbnail = null; try { + if (mAccount != null) { + AccountManager accountMgr = AccountManager.get(MainApp.getAppContext()); + + mServerVersion = accountMgr.getUserData(mAccount, Constants.KEY_OC_VERSION); + OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, MainApp.getAppContext()); + mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). + getClientFor(ocAccount, MainApp.getAppContext()); + } + mFile = params[0]; final String imageKey = String.valueOf(mFile.getRemoteId()); @@@ -182,9 -207,8 +209,8 @@@ if (thumbnail == null || mFile.needsUpdateThumbnail()) { // Converts dp to pixel Resources r = MainApp.getAppContext().getResources(); - int px = (int) Math.round(TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics() - )); + + int px = (int) Math.round(r.getDimension(R.dimen.file_icon_size)); if (mFile.isDown()){ Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile( @@@ -192,9 -216,6 +218,9 @@@ if (bitmap != null) { thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px); + + // Rotate image, obeying exif tag + thumbnail = BitmapUtils.rotateImage(thumbnail, mFile.getStoragePath()); // Add thumbnail to cache addBitmapToCache(imageKey, thumbnail); @@@ -203,6 -224,36 +229,36 @@@ mStorageManager.saveFile(mFile); } + } else { + // Download thumbnail from server + if (mClient != null && mServerVersion != null) { + OwnCloudVersion serverOCVersion = new OwnCloudVersion(mServerVersion); + if (serverOCVersion.compareTo(new OwnCloudVersion(MINOR_SERVER_VERSION_FOR_THUMBS)) >= 0) { + try { + int status = -1; + + String uri = mClient.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" + + px + "/" + px + Uri.encode(mFile.getRemotePath(), "/"); + Log_OC.d("Thumbnail", "URI: " + uri); + GetMethod get = new GetMethod(uri); + status = mClient.executeMethod(get); + if (status == HttpStatus.SC_OK) { + byte[] bytes = get.getResponseBody(); + Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); + thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px); + + // Add thumbnail to cache + if (thumbnail != null) { + addBitmapToCache(imageKey, thumbnail); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } else { + Log_OC.d(TAG, "Server too old"); + } + } } } @@@ -266,5 -317,5 +322,5 @@@ mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads } } - + }