From: David A. Velasco Date: Thu, 7 Feb 2013 10:09:28 +0000 (+0100) Subject: Basic video preview in a separate actitivy X-Git-Tag: oc-android-1.4.3~39^2~66 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/586793a261e7444ba60df46051b572b5f2ad84c5?ds=inline Basic video preview in a separate actitivy --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9f7b126a..e1f02506 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -85,6 +85,12 @@ + + + + + + + + \ No newline at end of file diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index 0b581ebc..fb89f574 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -455,7 +455,11 @@ public class OCFile implements Parcelable, Comparable { } public boolean isAudio() { - return (mMimeType.startsWith("audio/")); + return (mMimeType != null && mMimeType.startsWith("audio/")); + } + + public boolean isVideo() { + return (mMimeType != null && mMimeType.startsWith("video/")); } } diff --git a/src/com/owncloud/android/ui/activity/VideoActivity.java b/src/com/owncloud/android/ui/activity/VideoActivity.java new file mode 100644 index 00000000..1370d484 --- /dev/null +++ b/src/com/owncloud/android/ui/activity/VideoActivity.java @@ -0,0 +1,61 @@ +package com.owncloud.android.ui.activity; + +import android.app.Activity; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnCompletionListener; +import android.media.MediaPlayer.OnPreparedListener; +import android.os.Bundle; +import android.view.MotionEvent; +import android.widget.VideoView; + +import com.owncloud.android.R; + +public class VideoActivity extends Activity implements OnCompletionListener, OnPreparedListener { + + public static final String EXTRA_PATH = "PATH"; + + private VideoView mVideoPlayer; + private String mPathToFile; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.video_layout); + + mPathToFile = getIntent().getExtras().getString(EXTRA_PATH); + + mVideoPlayer = (VideoView) findViewById(R.id.videoPlayer); + mVideoPlayer.setOnPreparedListener(this); + mVideoPlayer.setOnCompletionListener(this); + mVideoPlayer.setKeepScreenOn(true); + mVideoPlayer.setVideoPath(mPathToFile); + } + + /** This callback will be invoked when the file is ready to play */ + @Override + public void onPrepared(MediaPlayer vp) { + mVideoPlayer.start(); + } + + /** This callback will be invoked when the file is finished playing */ + @Override + public void onCompletion(MediaPlayer mp) { + this.finish(); + } + + /** Use screen touches to toggle the video between playing and paused. */ + @Override + public boolean onTouchEvent (MotionEvent ev){ + if(ev.getAction() == MotionEvent.ACTION_DOWN){ + if(mVideoPlayer.isPlaying()){ + mVideoPlayer.pause(); + } else { + mVideoPlayer.start(); + } + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index 0d07c448..5c8604cc 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -71,6 +71,7 @@ import android.widget.ImageView; import android.widget.MediaController; import android.widget.TextView; import android.widget.Toast; +import android.widget.VideoView; import com.actionbarsherlock.app.SherlockFragment; import com.owncloud.android.AccountUtils; @@ -97,6 +98,7 @@ import com.owncloud.android.ui.activity.ConflictsResolveActivity; import com.owncloud.android.ui.activity.FileDetailActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.TransferServiceGetter; +import com.owncloud.android.ui.activity.VideoActivity; import com.owncloud.android.ui.dialog.EditNameDialog; import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener; import com.owncloud.android.utils.OwnCloudVersion; @@ -133,6 +135,7 @@ public class FileDetailFragment extends SherlockFragment implements private Handler mHandler; private RemoteOperation mLastRemoteOperation; private DialogFragment mCurrentDialog; + private MediaServiceBinder mMediaServiceBinder = null; private MediaController mMediaController = null; private MediaServiceConnection mMediaServiceConnection = null; @@ -418,25 +421,56 @@ public class FileDetailFragment extends SherlockFragment implements @Override public boolean onTouch(View v, MotionEvent event) { - if (v == mPreview && event.getAction() == MotionEvent.ACTION_DOWN && mFile != null && mFile.isDown() && mFile.isAudio()) { - if (!mMediaServiceBinder.isPlaying(mFile)) { - Log.d(TAG, "starting playback of " + mFile.getStoragePath()); - mMediaServiceBinder.start(mAccount, mFile); - // this is a patch; need to synchronize this with the onPrepared() coming from MediaPlayer in the MediaService - mMediaController.postDelayed(new Runnable() { - @Override - public void run() { - mMediaController.show(0); - } - } , 300); - } else { - mMediaController.show(0); + if (v == mPreview && event.getAction() == MotionEvent.ACTION_DOWN && mFile != null && mFile.isDown()) { + if (mFile.isAudio()) { + if (!mMediaServiceBinder.isPlaying(mFile)) { + Log.d(TAG, "starting playback of " + mFile.getStoragePath()); + mMediaServiceBinder.start(mAccount, mFile); + // this is a patch; need to synchronize this with the onPrepared() coming from MediaPlayer in the MediaService + mMediaController.postDelayed(new Runnable() { + @Override + public void run() { + mMediaController.show(0); + } + } , 300); + } else { + mMediaController.show(0); + } + + } else if (mFile.isVideo()) { + startVideoActivity(); } } return false; } + private void startVideoActivity() { + Intent i = new Intent(getActivity(), VideoActivity.class); + i.putExtra(VideoActivity.EXTRA_PATH, mFile.getStoragePath()); + startActivity(i); + + // TODO THROW AN ACTIVTIY JUST FOR PREVIEW VIDEO + /* + if (mMediaController == null) { + mMediaController = new MediaController(getActivity()); + mMediaController.setAnchorView(mVideoPreview); + //mMediaController.setEnabled(true); + } + //mMediaController.setMediaPlayer(mMediaServiceBinder); + if (!mVideoPreviewIsLoaded) { + mVideoPreviewIsLoaded = true; + mMediaController.setMediaPlayer(mVideoPreview); + mVideoPreview.setMediaController(mMediaController); + mVideoPreview.setVideoPath(mFile.getStoragePath()); + mVideoPreview.start(); + //mMediaController.show(0); + } else { + mMediaController.show(0); + }*/ + } + + private void bindMediaService() { Log.d(TAG, "Binding to MediaService..."); if (mMediaServiceConnection == null) {