*/\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
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
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
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
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
// 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
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
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
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
// 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
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
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
\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
} 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
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
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
\r
return view;\r
}\r
- \r
+\r
public static boolean cancelPotentialWork(OCFile file, ImageView imageView) {\r
final ThumbnailGenerationTask bitmapWorkerTask = getBitmapWorkerTask(imageView);\r
\r
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
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
\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
}\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
}\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
* @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