- Using Uri.encode...
authortobiasKaminsky <tobias@kaminsky.me>
Fri, 17 Oct 2014 19:54:01 +0000 (21:54 +0200)
committertobiasKaminsky <tobias@kaminsky.me>
Fri, 17 Oct 2014 19:54:01 +0000 (21:54 +0200)
- Thumbnail size is set to 32dp

src/com/owncloud/android/ui/adapter/FileListListAdapter.java

index fbec5d1..64a2b57 100644 (file)
  */\r
 package com.owncloud.android.ui.adapter;\r
 \r
-import java.io.ByteArrayInputStream;\r
 import java.io.File;\r
 import java.io.IOException;\r
-import java.io.InputStream;\r
 import java.lang.ref.WeakReference;\r
-import java.net.URLEncoder;\r
-//import java.net.URLEncoder;\r
 import java.util.Vector;\r
 \r
 import org.apache.commons.httpclient.methods.GetMethod;\r
@@ -40,6 +36,7 @@ import android.graphics.BitmapFactory;
 import android.graphics.drawable.BitmapDrawable;\r
 import android.graphics.drawable.Drawable;\r
 import android.media.ThumbnailUtils;\r
+import android.net.Uri;\r
 import android.os.AsyncTask;\r
 import android.util.TypedValue;\r
 import android.view.LayoutInflater;\r
@@ -61,22 +58,10 @@ import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.OwnCloudClient;\r
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;\r
 import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;\r
-import com.owncloud.android.lib.resources.shares.ShareUtils;\r
 import com.owncloud.android.ui.activity.ComponentsGetter;\r
 import com.owncloud.android.utils.DisplayUtils;\r
 import com.owncloud.android.utils.Log_OC;\r
 \r
-/*\r
-import org.apache.http.HttpEntity;\r
-import org.apache.http.HttpResponse;\r
-import org.apache.http.auth.AuthScope;\r
-import org.apache.http.auth.UsernamePasswordCredentials;\r
-import org.apache.http.client.methods.HttpGet;\r
-import org.apache.http.impl.client.DefaultHttpClient;\r
-import org.apache.http.util.EntityUtils;\r
-*/\r
-\r
-\r
 /**\r
  * This Adapter populates a ListView with all files and folders in an ownCloud\r
  * instance.\r
@@ -88,44 +73,38 @@ import org.apache.http.util.EntityUtils;
 public class FileListListAdapter extends BaseAdapter implements ListAdapter {\r
     private final static String PERMISSION_SHARED_WITH_ME = "S";\r
 \r
-    private Context mContext;\r
+    private final Context mContext;\r
     private OCFile mFile = null;\r
     private Vector<OCFile> mFiles = null;\r
-    private boolean mJustFolders;\r
+    private final boolean mJustFolders;\r
+\r
+    private FileDataStorageManager mStorageManager;\r
+    private Account mAccount;\r
+    private final ComponentsGetter mTransferServiceGetter;\r
 \r
-    private FileDataStorageManager mStorageManager;
-    private Account mAccount;
-    private ComponentsGetter mTransferServiceGetter;\r
-    \r
     private final Object thumbnailDiskCacheLock = new Object();\r
     private DiskLruImageCache mThumbnailCache;\r
     private boolean mThumbnailCacheStarting = true;\r
     private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB\r
     private static final CompressFormat mCompressFormat = CompressFormat.JPEG;\r
     private static final int mCompressQuality = 70;\r
-    private Bitmap defaultImg;\r
+    private final Bitmap defaultImg;\r
     private OwnCloudClient client;\r
-        \r
-    public FileListListAdapter(\r
-            boolean justFolders, \r
-            Context context, \r
-            ComponentsGetter transferServiceGetter\r
-            ) {\r
-        \r
+\r
+    public FileListListAdapter(boolean justFolders, Context context, ComponentsGetter transferServiceGetter) {\r
+\r
         mJustFolders = justFolders;\r
         mContext = context;\r
         mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
         mTransferServiceGetter = transferServiceGetter;\r
-        defaultImg = BitmapFactory.decodeResource(mContext.getResources(), \r
-                    DisplayUtils.getResourceId("image/png", "default.png"));\r
-        \r
+        defaultImg = BitmapFactory.decodeResource(mContext.getResources(),\r
+                DisplayUtils.getResourceId("image/png", "default.png"));\r
+\r
         // Initialise disk cache on background thread\r
         new InitDiskCacheTask().execute();\r
-        \r
-      \r
-        \r
+\r
     }\r
-    \r
+\r
     class InitDiskCacheTask extends AsyncTask<File, Void, Void> {\r
         @Override\r
         protected Void doInBackground(File... params) {\r
@@ -133,8 +112,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 OwnCloudAccount ocAccount;\r
                 try {\r
                     ocAccount = new OwnCloudAccount(mAccount, mContext);\r
-                    client = OwnCloudClientManagerFactory.getDefaultSingleton().\r
-                            getClientFor(ocAccount, mContext);\r
+                    client = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount, mContext);\r
                 } catch (AccountNotFoundException e) {\r
                     // TODO Auto-generated catch block\r
                     e.printStackTrace();\r
@@ -148,10 +126,9 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     // TODO Auto-generated catch block\r
                     e.printStackTrace();\r
                 }\r
-                \r
-                \r
-                mThumbnailCache = new DiskLruImageCache(mContext, "thumbnailCache", \r
-                                    DISK_CACHE_SIZE, mCompressFormat, mCompressQuality);\r
+\r
+                mThumbnailCache = new DiskLruImageCache(mContext, "thumbnailCache", DISK_CACHE_SIZE, mCompressFormat,\r
+                        mCompressQuality);\r
 \r
                 mThumbnailCacheStarting = false; // Finished initialization\r
                 thumbnailDiskCacheLock.notifyAll(); // Wake any waiting threads\r
@@ -159,15 +136,13 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             return null;\r
         }\r
     }\r
-    \r
+\r
     static class AsyncDrawable extends BitmapDrawable {\r
         private final WeakReference<ThumbnailGenerationTask> bitmapWorkerTaskReference;\r
 \r
-        public AsyncDrawable(Resources res, Bitmap bitmap,\r
-                ThumbnailGenerationTask bitmapWorkerTask) {\r
+        public AsyncDrawable(Resources res, Bitmap bitmap, ThumbnailGenerationTask bitmapWorkerTask) {\r
             super(res, bitmap);\r
-            bitmapWorkerTaskReference =\r
-                new WeakReference<ThumbnailGenerationTask>(bitmapWorkerTask);\r
+            bitmapWorkerTaskReference = new WeakReference<ThumbnailGenerationTask>(bitmapWorkerTask);\r
         }\r
 \r
         public ThumbnailGenerationTask getBitmapWorkerTask() {\r
@@ -179,9 +154,9 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         private final WeakReference<ImageView> imageViewReference;\r
         private OCFile file;\r
 \r
-        \r
         public ThumbnailGenerationTask(ImageView imageView) {\r
-         // Use a WeakReference to ensure the ImageView can be garbage collected\r
+            // Use a WeakReference to ensure the ImageView can be garbage\r
+            // collected\r
             imageViewReference = new WeakReference<ImageView>(imageView);\r
         }\r
 \r
@@ -196,16 +171,14 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             Bitmap thumbnail = getBitmapFromDiskCache(imageKey);\r
 \r
             // Not found in disk cache\r
-            if (thumbnail == null) { \r
+            if (thumbnail == null) {\r
                 // Converts dp to pixel\r
                 Resources r = mContext.getResources();\r
-                int px = (int) Math.round(TypedValue.applyDimension(\r
-                        TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics()\r
-                ));\r
-                \r
-                if (file.isDown()){\r
+                int px = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, r.getDisplayMetrics()));\r
+\r
+                if (file.isDown()) {\r
                     Bitmap bitmap = BitmapFactory.decodeFile(file.getStoragePath());\r
-                    \r
+\r
                     if (bitmap != null) {\r
                         thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);\r
 \r
@@ -217,45 +190,46 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     // Download thumbnail from server\r
                     try {\r
                         int status = -1;\r
-                        \r
-                        String uri = client.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/100/100/"+URLEncoder.encode(file.getRemotePath(), "UTF-8").replaceAll("%2F", "/");\r
+\r
+                        String uri = client.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" + px + "/" + px\r
+                                + "/" + Uri.encode(file.getRemotePath(), "/");\r
                         Log_OC.d("Thumbnail", "URI: " + uri);\r
                         GetMethod get = new GetMethod(uri);\r
                         status = client.executeMethod(get);\r
-                        if(status == HttpStatus.SC_OK) {\r
+                        if (status == HttpStatus.SC_OK) {\r
                             byte[] bytes = get.getResponseBody();\r
                             Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);\r
                             thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);\r
 \r
                             // Add thumbnail to cache\r
-                            if (thumbnail != null){\r
+                            if (thumbnail != null) {\r
                                 addBitmapToCache(imageKey, thumbnail);\r
                             }\r
                         }\r
-                    } catch(Exception e){\r
-                      e.printStackTrace();\r
-                  }\r
-                } \r
+                    } catch (Exception e) {\r
+                        e.printStackTrace();\r
+                    }\r
+                }\r
             }\r
             return thumbnail;\r
         }\r
-                    \r
-        protected void onPostExecute(Bitmap bitmap){\r
+\r
+        @Override\r
+        protected void onPostExecute(Bitmap bitmap) {\r
             if (isCancelled()) {\r
                 bitmap = null;\r
             }\r
 \r
             if (imageViewReference != null && bitmap != null) {\r
                 final ImageView imageView = imageViewReference.get();\r
-                final ThumbnailGenerationTask bitmapWorkerTask =\r
-                        getBitmapWorkerTask(imageView);\r
+                final ThumbnailGenerationTask bitmapWorkerTask = getBitmapWorkerTask(imageView);\r
                 if (this == bitmapWorkerTask && imageView != null) {\r
                     imageView.setImageBitmap(bitmap);\r
                 }\r
             }\r
         }\r
     }\r
-  \r
+\r
     public void addBitmapToCache(String key, Bitmap bitmap) {\r
         synchronized (thumbnailDiskCacheLock) {\r
             if (mThumbnailCache != null && mThumbnailCache.getBitmap(key) == null) {\r
@@ -270,14 +244,15 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             while (mThumbnailCacheStarting) {\r
                 try {\r
                     thumbnailDiskCacheLock.wait();\r
-                } catch (InterruptedException e) {}\r
+                } catch (InterruptedException e) {\r
+                }\r
             }\r
             if (mThumbnailCache != null) {\r
-                return (Bitmap) mThumbnailCache.getBitmap(key);\r
+                return mThumbnailCache.getBitmap(key);\r
             }\r
         }\r
         return null;\r
-    }
+    }\r
 \r
     @Override\r
     public boolean areAllItemsEnabled() {\r
@@ -317,14 +292,13 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
     public View getView(int position, View convertView, ViewGroup parent) {\r
         View view = convertView;\r
         if (view == null) {\r
-            LayoutInflater inflator = (LayoutInflater) mContext\r
-                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+            LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
             view = inflator.inflate(R.layout.list_item, null);\r
         }\r
-         \r
+\r
         if (mFiles != null && mFiles.size() > position) {\r
             OCFile file = mFiles.get(position);\r
-            TextView fileName = (TextView) view.findViewById(R.id.Filename);           \r
+            TextView fileName = (TextView) view.findViewById(R.id.Filename);\r
             String name = file.getFileName();\r
 \r
             fileName.setText(name);\r
@@ -335,8 +309,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
             ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
             localStateView.bringToFront();\r
-            FileDownloaderBinder downloaderBinder = \r
-                    mTransferServiceGetter.getFileDownloaderBinder();\r
+            FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
             FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
             if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
                 localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
@@ -350,28 +323,27 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             } else {\r
                 localStateView.setVisibility(View.INVISIBLE);\r
             }\r
-            \r
+\r
             TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
             TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
             ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
-            \r
+\r
             if (!file.isFolder()) {\r
                 fileSizeV.setVisibility(View.VISIBLE);\r
                 fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
                 lastModV.setVisibility(View.VISIBLE);\r
-                lastModV.setText(\r
-                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())\r
-                );\r
-                // this if-else is needed even thoe fav icon is visible by default\r
+                lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
+                // this if-else is needed even thoe fav icon is visible by\r
+                // default\r
                 // because android reuses views in listview\r
                 if (!file.keepInSync()) {\r
                     view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
                 } else {\r
                     view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
                 }\r
-                \r
-                ListView parentList = (ListView)parent;\r
-                if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { \r
+\r
+                ListView parentList = (ListView) parent;\r
+                if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) {\r
                     checkBoxV.setVisibility(View.GONE);\r
                 } else {\r
                     if (parentList.isItemChecked(position)) {\r
@@ -380,42 +352,36 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                         checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
                     }\r
                     checkBoxV.setVisibility(View.VISIBLE);\r
-                }               \r
-                \r
+                }\r
+\r
                 // get Thumbnail if file is image\r
-                if (file.isImage()){\r
-                     // Thumbnail in Cache?\r
+                if (file.isImage()) {\r
+                    // Thumbnail in Cache?\r
                     Bitmap thumbnail = getBitmapFromDiskCache(String.valueOf(file.getRemoteId().hashCode()));\r
-                    if (thumbnail != null){\r
+                    if (thumbnail != null) {\r
                         fileIcon.setImageBitmap(thumbnail);\r
                     } else {\r
                         // generate new Thumbnail\r
                         if (cancelPotentialWork(file, fileIcon)) {\r
-                            final ThumbnailGenerationTask task = \r
-                                    new ThumbnailGenerationTask(fileIcon);\r
-                            final AsyncDrawable asyncDrawable =\r
-                                    new AsyncDrawable(mContext.getResources(), defaultImg, task);\r
+                            final ThumbnailGenerationTask task = new ThumbnailGenerationTask(fileIcon);\r
+                            final AsyncDrawable asyncDrawable = new AsyncDrawable(mContext.getResources(), defaultImg,\r
+                                    task);\r
                             fileIcon.setImageDrawable(asyncDrawable);\r
                             task.execute(file);\r
                         }\r
                     }\r
                 } else {\r
-                    fileIcon.setImageResource(\r
-                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
-                    );\r
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
                 }\r
-
+\r
                 if (checkIfFileIsSharedWithMe(file)) {\r
                     sharedWithMeIconV.setVisibility(View.VISIBLE);\r
                 }\r
-            } \r
-            else {\r
+            } else {\r
                 fileSizeV.setVisibility(View.INVISIBLE);\r
-                //fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
+                // fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
                 lastModV.setVisibility(View.VISIBLE);\r
-                lastModV.setText(\r
-                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())\r
-                );\r
+                lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
                 checkBoxV.setVisibility(View.GONE);\r
                 view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
 \r
@@ -423,9 +389,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
                     sharedWithMeIconV.setVisibility(View.VISIBLE);\r
                 } else {\r
-                    fileIcon.setImageResource(\r
-                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
-                    );\r
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
                 }\r
 \r
                 // If folder is sharedByLink, icon folder must be changed to\r
@@ -444,7 +408,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
         return view;\r
     }\r
-    \r
+\r
     public static boolean cancelPotentialWork(OCFile file, ImageView imageView) {\r
         final ThumbnailGenerationTask bitmapWorkerTask = getBitmapWorkerTask(imageView);\r
 \r
@@ -459,10 +423,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 return false;\r
             }\r
         }\r
-        // No task associated with the ImageView, or an existing task was cancelled\r
+        // No task associated with the ImageView, or an existing task was\r
+        // cancelled\r
         return true;\r
     }\r
-    \r
+\r
     private static ThumbnailGenerationTask getBitmapWorkerTask(ImageView imageView) {\r
         if (imageView != null) {\r
             final Drawable drawable = imageView.getDrawable();\r
@@ -470,9 +435,9 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable;\r
                 return asyncDrawable.getBitmapWorkerTask();\r
             }\r
-         }\r
-         return null;\r
-     }\r
+        }\r
+        return null;\r
+    }\r
 \r
     @Override\r
     public int getViewTypeCount() {\r
@@ -491,10 +456,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
     /**\r
      * Change the adapted directory for a new one\r
-     * @param directory                 New file to adapt. Can be NULL, meaning \r
-     *                                  "no content to adapt".\r
-     * @param updatedStorageManager     Optional updated storage manager; used to replace \r
-     *                                  mStorageManager if is different (and not NULL)\r
+     * \r
+     * @param directory New file to adapt. Can be NULL, meaning\r
+     *            "no content to adapt".\r
+     * @param updatedStorageManager Optional updated storage manager; used to\r
+     *            replace mStorageManager if is different (and not NULL)\r
      */\r
     public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager) {\r
         mFile = directory;\r
@@ -512,17 +478,17 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         }\r
         notifyDataSetChanged();\r
     }\r
-    \r
-    \r
+\r
     /**\r
      * Filter for getting only the folders\r
+     * \r
      * @param files\r
      * @return Vector<OCFile>\r
      */\r
     public Vector<OCFile> getFolders(Vector<OCFile> files) {\r
-        Vector<OCFile> ret = new Vector<OCFile>(); \r
-        OCFile current = null; \r
-        for (int i=0; i<files.size(); i++) {\r
+        Vector<OCFile> ret = new Vector<OCFile>();\r
+        OCFile current = null;\r
+        for (int i = 0; i < files.size(); i++) {\r
             current = files.get(i);\r
             if (current.isFolder()) {\r
                 ret.add(current);\r
@@ -530,8 +496,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         }\r
         return ret;\r
     }\r
-    \r
-    \r
+\r
     /**\r
      * Check if parent folder does not include 'S' permission and if file/folder\r
      * is shared with me\r
@@ -540,9 +505,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
      * @return boolean: True if it is shared with me and false if it is not\r
      */\r
     private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
-        return (mFile.getPermissions() != null \r
-                && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
-                && file.getPermissions() != null \r
-                && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
+        return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
+                && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
     }\r
 }\r