From: jabarros Date: Mon, 27 Oct 2014 14:12:48 +0000 (+0100) Subject: Merge branch 'develop' into thumbnails_from_server X-Git-Tag: oc-android-1.7.0_signed~121^2~5 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/dcb985481be4b3c4e4e805b4aefebae00f9ad3e9?hp=495c812671a93a77c31779b157ee31920acfce85 Merge branch 'develop' into thumbnails_from_server Conflicts: src/com/owncloud/android/ui/adapter/FileListListAdapter.java --- diff --git a/src/com/owncloud/android/MainApp.java b/src/com/owncloud/android/MainApp.java index e04239df..37a3e6ff 100644 --- a/src/com/owncloud/android/MainApp.java +++ b/src/com/owncloud/android/MainApp.java @@ -19,6 +19,7 @@ package com.owncloud.android; import android.app.Application; import android.content.Context; +import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy; @@ -55,9 +56,10 @@ public class MainApp extends Application { } else { OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT); } - + // initialise thumbnails cache on background thread - new ThumbnailsCacheManager.InitDiskCacheTask().execute(); + new ThumbnailsCacheManager.InitDiskCacheTask(AccountUtils.getCurrentOwnCloudAccount(mContext), + mContext).execute(); if (BuildConfig.DEBUG) { diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index e75404ef..544ad387 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -18,21 +18,37 @@ package com.owncloud.android.datamodel; import java.io.File; +import java.io.IOException; 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.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; +import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; 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.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.AccountNotFoundException; +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; @@ -47,7 +63,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; @@ -56,7 +73,9 @@ public class ThumbnailsCacheManager { 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(), @@ -65,12 +84,43 @@ public class ThumbnailsCacheManager { public static class InitDiskCacheTask extends AsyncTask { + private static Account mAccount; + private static Context mContext; + + public InitDiskCacheTask(Account account, Context context) { + mAccount = account; + mContext = context; + } + @Override protected Void doInBackground(File... params) { synchronized (mThumbnailsDiskCacheLock) { mThumbnailCacheStarting = true; + if (mThumbnailCache == null) { try { + OwnCloudAccount ocAccount; + try { + if (mAccount != null) { + AccountManager accountMgr = AccountManager.get(mContext); + mServerVersion = accountMgr.getUserData(mAccount, Constants.KEY_OC_VERSION); + ocAccount = new OwnCloudAccount(mAccount, mContext); + mClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount, mContext); + } + } catch (AccountNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (AuthenticatorException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OperationCanceledException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // Check if media is mounted or storage is built-in, if so, // try and use external cache dir; otherwise use internal cache dir final String cachePath = @@ -198,6 +248,34 @@ public class ThumbnailsCacheManager { 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(); + } + } + } } } diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 9a2a0d3a..048173a9 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -82,10 +82,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { Context context, ComponentsGetter transferServiceGetter ) { - + mJustFolders = justFolders; mContext = context; mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); + mTransferServiceGetter = transferServiceGetter; mAppPreferences = PreferenceManager @@ -97,7 +98,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { mSortAscending = mAppPreferences.getBoolean("sortAscending", true); // initialise thumbnails cache on background thread - new ThumbnailsCacheManager.InitDiskCacheTask().execute(); + new ThumbnailsCacheManager.InitDiskCacheTask(mAccount, mContext).execute(); + } @Override