X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/ec19a11a385ff21d3e85a94e618d48d8be9ef20d..3a82db451cfb855b7307d696214e51a02663f97b:/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index 7d6489b2..b197a855 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -1,5 +1,8 @@ -/* ownCloud Android client application - * Copyright (C) 2012-2013 ownCloud Inc. +/** + * ownCloud Android client application + * + * @author David A. Velasco + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -18,13 +21,17 @@ package com.owncloud.android.ui.preview; import android.accounts.Account; import android.app.Activity; -import android.app.AlertDialog; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.MediaMetadataRetriever; +import android.support.v7.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.content.res.Configuration; +import android.content.res.Resources; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; @@ -34,17 +41,18 @@ import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.Toast; import android.widget.VideoView; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuInflater; -import com.actionbarsherlock.view.MenuItem; import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.FileMenuFilter; @@ -61,11 +69,11 @@ import com.owncloud.android.ui.fragment.FileFragment; /** * This fragment shows a preview of a downloaded media file (audio or video). * - * Trying to get an instance with NULL {@link OCFile} or ownCloud {@link Account} values will produce an {@link IllegalStateException}. - * - * By now, if the {@link OCFile} passed is not downloaded, an {@link IllegalStateException} is generated on instantiation too. + * Trying to get an instance with NULL {@link OCFile} or ownCloud {@link Account} values will + * produce an {@link IllegalStateException}. * - * @author David A. Velasco + * By now, if the {@link OCFile} passed is not downloaded, an {@link IllegalStateException} is + * generated on instantiation too. */ public class PreviewMediaFragment extends FileFragment implements OnTouchListener { @@ -199,11 +207,35 @@ public class PreviewMediaFragment extends FileFragment implements } else { mVideoPreview.setVisibility(View.GONE); mImagePreview.setVisibility(View.VISIBLE); + extractAndSetCoverArt(file); } } } - + + /** + * tries to read the cover art from the audio file and sets it as cover art. + * + * @param file audio file with potential cover art + */ + private void extractAndSetCoverArt(OCFile file) { + if (file.isAudio()) { + try { + MediaMetadataRetriever mmr = new MediaMetadataRetriever(); + mmr.setDataSource(file.getStoragePath()); + byte[] data = mmr.getEmbeddedPicture(); + if (data != null) { + Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); + mImagePreview.setImageBitmap(bitmap); //associated cover art in bitmap + } else { + mImagePreview.setImageResource(R.drawable.logo); + } + } catch (Throwable t) { + mImagePreview.setImageResource(R.drawable.logo); + } + } + } + /** * {@inheritDoc} @@ -250,9 +282,9 @@ public class PreviewMediaFragment extends FileFragment implements private void stopAudio() { - Intent i = new Intent(getSherlockActivity(), MediaService.class); + Intent i = new Intent(getActivity(), MediaService.class); i.setAction(MediaService.ACTION_STOP_ALL); - getSherlockActivity().startService(i); + getActivity().startService(i); } @@ -278,7 +310,7 @@ public class PreviewMediaFragment extends FileFragment implements getFile(), mContainerActivity.getStorageManager().getAccount(), mContainerActivity, - getSherlockActivity() + getActivity() ); mf.filter(menu); } @@ -337,7 +369,14 @@ public class PreviewMediaFragment extends FileFragment implements mContainerActivity.getFileOperationsHelper().syncFile(getFile()); return true; } - + case R.id.action_favorite_file:{ + mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), true); + return true; + } + case R.id.action_unfavorite_file:{ + mContainerActivity.getFileOperationsHelper().toggleFavorite(getFile(), false); + return true; + } default: return false; } @@ -392,7 +431,7 @@ public class PreviewMediaFragment extends FileFragment implements * * Just starts the playback. * - * @param mp {@link MediaPlayer} instance performing the playback. + * @param vp {@link MediaPlayer} instance performing the playback. */ @Override public void onPrepared(MediaPlayer vp) { @@ -448,8 +487,8 @@ public class PreviewMediaFragment extends FileFragment implements public boolean onError(MediaPlayer mp, int what, int extra) { if (mVideoPreview.getWindowToken() != null) { String message = MediaService.getMessageForMediaError( - getSherlockActivity(), what, extra); - new AlertDialog.Builder(getSherlockActivity()) + getActivity(), what, extra); + new AlertDialog.Builder(getActivity()) .setMessage(message) .setPositiveButton(android.R.string.VideoView_error_button, new DialogInterface.OnClickListener() { @@ -495,7 +534,7 @@ public class PreviewMediaFragment extends FileFragment implements if (mMediaServiceBinder != null && mMediaController != null) { mMediaServiceBinder.unregisterMediaController(mMediaController); } - getSherlockActivity().unbindService(mMediaServiceConnection); + getActivity().unbindService(mMediaServiceConnection); mMediaServiceConnection = null; mMediaServiceBinder = null; } @@ -506,7 +545,10 @@ public class PreviewMediaFragment extends FileFragment implements @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && v == mVideoPreview) { - startFullScreenVideo(); + // added a margin on the left to avoid interfering with gesture to open navigation drawer + if (event.getX() / Resources.getSystem().getDisplayMetrics().density > 24.0) { + startFullScreenVideo(); + } return true; } return false; @@ -514,7 +556,7 @@ public class PreviewMediaFragment extends FileFragment implements private void startFullScreenVideo() { - Intent i = new Intent(getSherlockActivity(), PreviewVideoActivity.class); + Intent i = new Intent(getActivity(), PreviewVideoActivity.class); i.putExtra(FileActivity.EXTRA_ACCOUNT, mAccount); i.putExtra(FileActivity.EXTRA_FILE, getFile()); i.putExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, mVideoPreview.isPlaying()); @@ -560,7 +602,7 @@ public class PreviewMediaFragment extends FileFragment implements if (mMediaServiceConnection == null) { mMediaServiceConnection = new MediaServiceConnection(); } - getSherlockActivity().bindService( new Intent(getSherlockActivity(), + getActivity().bindService( new Intent(getActivity(), MediaService.class), mMediaServiceConnection, Context.BIND_AUTO_CREATE); @@ -572,9 +614,9 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onServiceConnected(ComponentName component, IBinder service) { - if (getSherlockActivity() != null) { + if (getActivity() != null) { if (component.equals( - new ComponentName(getSherlockActivity(), MediaService.class))) { + new ComponentName(getActivity(), MediaService.class))) { Log_OC.d(TAG, "Media service connected"); mMediaServiceBinder = (MediaServiceBinder) service; if (mMediaServiceBinder != null) { @@ -601,13 +643,13 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onServiceDisconnected(ComponentName component) { - if (component.equals(new ComponentName(getSherlockActivity(), MediaService.class))) { + if (component.equals(new ComponentName(getActivity(), MediaService.class))) { Log_OC.e(TAG, "Media service suddenly disconnected"); if (mMediaController != null) { mMediaController.setMediaPlayer(null); } else { Toast.makeText( - getSherlockActivity(), + getActivity(), "No media controller to release when disconnected from media service", Toast.LENGTH_SHORT).show(); } @@ -656,7 +698,7 @@ public class PreviewMediaFragment extends FileFragment implements * Finishes the preview */ private void finish() { - getSherlockActivity().onBackPressed(); + getActivity().onBackPressed(); }