import java.io.File;
import java.io.InputStream;
import java.lang.ref.WeakReference;
+ import java.net.FileNameMap;
+ import java.net.URLConnection;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
+ import android.graphics.Canvas;
+ import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.ThumbnailUtils;
import com.owncloud.android.ui.adapter.DiskLruImageCache;
import com.owncloud.android.utils.BitmapUtils;
import com.owncloud.android.utils.DisplayUtils;
++import com.owncloud.android.utils.FileStorageUtils;
/**
* Manager for concurrent access to thumbnails cache.
if (mFile instanceof OCFile) {
thumbnail = doOCFileInBackground();
+
+ if (((OCFile) mFile).isVideo()){
+ thumbnail = addVideoOverlay(thumbnail);
+ }
} else if (mFile instanceof File) {
thumbnail = doFileInBackground();
- FileNameMap fileNameMap = URLConnection.getFileNameMap();
- String mMimeType = fileNameMap.getContentTypeFor("file://" + url);
+
+ String url = ((File) mFile).getAbsolutePath();
++ String mMimeType = FileStorageUtils.getMimeTypeFromName(url);
+
+ if (mMimeType != null && mMimeType.startsWith("video/")){
+ thumbnail = addVideoOverlay(thumbnail);
+ }
//} else { do nothing
}
return null;
}
+ public static Bitmap addVideoOverlay(Bitmap thumbnail){
+ Bitmap playButton = BitmapFactory.decodeResource(MainApp.getAppContext().getResources(),
+ R.drawable.view_play);
+
+ Bitmap resizedPlayButton = Bitmap.createScaledBitmap(playButton,
+ (int) (thumbnail.getWidth() * 0.3),
+ (int) (thumbnail.getHeight() * 0.3), true);
+
+ Bitmap resultBitmap = Bitmap.createBitmap(thumbnail.getWidth(),
+ thumbnail.getHeight(),
+ Bitmap.Config.ARGB_8888);
+
+ Canvas c = new Canvas(resultBitmap);
+
+ // compute visual center of play button, according to resized image
+ int x1 = resizedPlayButton.getWidth();
+ int y1 = resizedPlayButton.getHeight() / 2;
+ int x2 = 0;
+ int y2 = resizedPlayButton.getWidth();
+ int x3 = 0;
+ int y3 = 0;
+
+ double ym = ( ((Math.pow(x3,2) - Math.pow(x1,2) + Math.pow(y3,2) - Math.pow(y1,2)) *
+ (x2 - x1)) - (Math.pow(x2,2) - Math.pow(x1,2) + Math.pow(y2,2) -
+ Math.pow(y1,2)) * (x3 - x1) ) / (2 * ( ((y3 - y1) * (x2 - x1)) -
+ ((y2 - y1) * (x3 - x1)) ));
+ double xm = ( (Math.pow(x2,2) - Math.pow(x1,2)) + (Math.pow(y2,2) - Math.pow(y1,2)) -
+ (2*ym*(y2 - y1)) ) / (2*(x2 - x1));
+
+ // offset to top left
+ double ox = - xm;
+ double oy = thumbnail.getHeight() - ym;
+
+
+ c.drawBitmap(thumbnail, 0, 0, null);
+
+ Paint p = new Paint();
+ p.setAlpha(230);
+
+ c.drawBitmap(resizedPlayButton, (float) ((thumbnail.getWidth() / 2) + ox),
+ (float) ((thumbnail.getHeight() / 2) - ym), p);
+
+ return resultBitmap;
+ }
+
public static class AsyncDrawable extends BitmapDrawable {
private final WeakReference<ThumbnailGenerationTask> bitmapWorkerTaskReference;
import android.content.Context;\r
import android.content.SharedPreferences;\r
import android.graphics.Bitmap;\r
+ import android.graphics.BitmapFactory;\r
+ import android.graphics.Canvas;\r
+ import android.graphics.Paint;\r
import android.os.Build;\r
import android.preference.PreferenceManager;\r
import android.text.format.DateUtils;\r
}\r
\r
// share with me icon\r
- if (!file.isFolder()) {\r
- ImageView sharedWithMeIconV = (ImageView)\r
- view.findViewById(R.id.sharedWithMeIcon);\r
- sharedWithMeIconV.bringToFront();\r
- if (checkIfFileIsSharedWithMe(file)) {\r
- sharedWithMeIconV.setVisibility(View.VISIBLE);\r
- } else {\r
- sharedWithMeIconV.setVisibility(View.GONE);\r
- }\r
+ ImageView sharedWithMeIconV = (ImageView)\r
+ view.findViewById(R.id.sharedWithMeIcon);\r
+ sharedWithMeIconV.bringToFront();\r
+ if (checkIfFileIsSharedWithMe(file) &&\r
+ (!file.isFolder() || !mGridMode)) {\r
+ sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+ } else {\r
+ sharedWithMeIconV.setVisibility(View.GONE);\r
}\r
\r
break;\r
\r
// this if-else is needed even though favorite icon is visible by default\r
// because android reuses views in listview\r
- if (!file.keepInSync()) {\r
+ if (!file.isFavorite()) {\r
view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);\r
} else {\r
view.findViewById(R.id.favoriteIcon).setVisibility(View.VISIBLE);\r
String.valueOf(file.getRemoteId())\r
);\r
if (thumbnail != null && !file.needsUpdateThumbnail()){\r
- fileIcon.setImageBitmap(thumbnail);\r
+ \r
+ if (file.isVideo()) {\r
+ Bitmap withOverlay = ThumbnailsCacheManager.addVideoOverlay(thumbnail);\r
+ fileIcon.setImageBitmap(withOverlay);\r
+ } else {\r
+ fileIcon.setImageBitmap(thumbnail);\r
+ }\r
} else {\r
// generate new Thumbnail\r
if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {\r
new ThumbnailsCacheManager.ThumbnailGenerationTask(\r
fileIcon, mStorageManager, mAccount\r
);\r
- if (thumbnail != null) {\r
- final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =\r
- new ThumbnailsCacheManager.AsyncDrawable(\r
- mContext.getResources(),\r
- thumbnail,\r
- task\r
- );\r
- fileIcon.setImageDrawable(asyncDrawable);\r
- task.execute(file);\r
- } else {\r
- fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(\r
- file.getMimetype(), file.getFileName()));\r
+ if (thumbnail == null) {\r
-// thumbnail = ThumbnailsCacheManager.mDefaultImg;\r
- Integer id = DisplayUtils.getFileTypeIconId(file.getMimetype(),\r
- file.getFileName());\r
- thumbnail = BitmapFactory.decodeResource(mContext.getResources(), id);\r
++ thumbnail = ThumbnailsCacheManager.mDefaultImg;\r
}\r
- mContext.getResources(),\r
- thumbnail,\r
+ final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =\r
+ new ThumbnailsCacheManager.AsyncDrawable(\r
++ mContext.getResources(), \r
++ thumbnail, \r
+ task\r
+ );\r
+ fileIcon.setImageDrawable(asyncDrawable);\r
+ task.execute(file);\r
}\r
}\r
} else {\r