From: tobiasKaminsky Date: Sun, 1 Nov 2015 08:14:09 +0000 (+0100) Subject: Merge remote-tracking branch 'remotes/upstream/video_thumbnail' into beta X-Git-Tag: beta-20151122~54 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/ec83a9f100897cf93df8aba990ab348ddfaaf05e?hp=465ff1b7b8b04132f58fdea80cdf12ce9a2e01fd Merge remote-tracking branch 'remotes/upstream/video_thumbnail' into beta --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 607bdf05..5e8ca43f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 2015-11-01 +- PR [#1236](https://github.com/owncloud/android/pull/1236) "Streaming video/audio" merged +- PR [#1035](https://github.com/owncloud/android/pull/1035) "Enable video thumbnail" merged + # 2015-10-31 - updated all PR - bugfix: #1234, #1230 diff --git a/res/drawable-hdpi/view_play.png b/res/drawable-hdpi/view_play.png new file mode 100644 index 00000000..53717245 Binary files /dev/null and b/res/drawable-hdpi/view_play.png differ diff --git a/res/drawable-mdpi/view_play.png b/res/drawable-mdpi/view_play.png new file mode 100644 index 00000000..77b20272 Binary files /dev/null and b/res/drawable-mdpi/view_play.png differ diff --git a/res/drawable-xhdpi/view_play.png b/res/drawable-xhdpi/view_play.png new file mode 100644 index 00000000..8482788e Binary files /dev/null and b/res/drawable-xhdpi/view_play.png differ diff --git a/res/drawable-xxhdpi/view_play.png b/res/drawable-xxhdpi/view_play.png new file mode 100644 index 00000000..fea738b9 Binary files /dev/null and b/res/drawable-xxhdpi/view_play.png differ diff --git a/res/drawable-xxxhdpi/view_play.png b/res/drawable-xxxhdpi/view_play.png new file mode 100644 index 00000000..3786b4d0 Binary files /dev/null and b/res/drawable-xxxhdpi/view_play.png differ diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 56c9063d..10dfbd71 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -24,6 +24,8 @@ package com.owncloud.android.datamodel; 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; @@ -37,6 +39,8 @@ import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Point; +import android.graphics.Canvas; +import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -60,6 +64,7 @@ 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; +import com.owncloud.android.utils.FileStorageUtils; /** * Manager for concurrent access to thumbnails cache. @@ -216,10 +221,20 @@ public class ThumbnailsCacheManager { if (mFile instanceof OCFile) { thumbnail = doOCFileInBackground(mIsThumbnail); + + if (((OCFile) mFile).isVideo()){ + thumbnail = addVideoOverlay(thumbnail); + } } else if (mFile instanceof File) { thumbnail = doFileInBackground(mIsThumbnail); - } else { - // do nothing + + String url = ((File) mFile).getAbsolutePath(); + String mMimeType = FileStorageUtils.getMimeTypeFromName(url); + + if (mMimeType != null && mMimeType.startsWith("video/")){ + thumbnail = addVideoOverlay(thumbnail); + } + //} else { do nothing } }catch(Throwable t){ @@ -493,6 +508,51 @@ public class ThumbnailsCacheManager { 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 bitmapWorkerTaskReference; diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 956c7d1f..40372e38 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -35,6 +35,9 @@ import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Color; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; import android.os.Build; import android.preference.PreferenceManager; import android.text.format.DateUtils; @@ -345,12 +348,18 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { // No Folder if (!file.isFolder()) { - if (file.isImage() && file.getRemoteId() != null){ + if ((file.isImage() || file.isVideo()) && file.getRemoteId() != null){ // Thumbnail in Cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( "t" + String.valueOf(file.getRemoteId())); if (thumbnail != null && !file.needsUpdateThumbnail()){ - fileIcon.setImageBitmap(thumbnail); + + if (file.isVideo()) { + Bitmap withOverlay = ThumbnailsCacheManager.addVideoOverlay(thumbnail); + fileIcon.setImageBitmap(withOverlay); + } else { + fileIcon.setImageBitmap(thumbnail); + } } else { // generate new Thumbnail if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) { diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 380396a9..92177f4a 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -763,7 +763,7 @@ public class OCFileListFragment extends ExtendedListFragment { if (!file.isHidden()) { filesCount++; - if (file.isImage()) { + if (file.isImage() || file.isVideo()) { imagesCount++; } } @@ -781,6 +781,7 @@ public class OCFileListFragment extends ExtendedListFragment { registerLongClickListener(); } else { switchToListView(); +// switchToGridView(); } } }