Basic video preview in a separate actitivy
authorDavid A. Velasco <dvelasco@solidgear.es>
Thu, 7 Feb 2013 10:09:28 +0000 (11:09 +0100)
committerDavid A. Velasco <dvelasco@solidgear.es>
Thu, 7 Feb 2013 10:09:28 +0000 (11:09 +0100)
AndroidManifest.xml
res/layout/video_layout.xml [new file with mode: 0644]
src/com/owncloud/android/datamodel/OCFile.java
src/com/owncloud/android/ui/activity/VideoActivity.java [new file with mode: 0644]
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

index 9f7b126..e1f0250 100644 (file)
         </activity>\r
         <activity android:name=".ui.activity.PreferencesNewSessionewSession" >\r
         </activity>\r
         </activity>\r
         <activity android:name=".ui.activity.PreferencesNewSessionewSession" >\r
         </activity>\r
+        \r
+               <activity       android:name=".ui.activity.VideoActivity"\r
+                                       android:label="@string/app_name"\r
+                                       android:screenOrientation="landscape"\r
+                                       android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >\r
+               </activity>        \r
 \r
         <service\r
             android:name=".authenticator.AccountAuthenticatorService"\r
 \r
         <service\r
             android:name=".authenticator.AccountAuthenticatorService"\r
diff --git a/res/layout/video_layout.xml b/res/layout/video_layout.xml
new file mode 100644 (file)
index 0000000..8781ad8
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout   xmlns:android="http://schemas.android.com/apk/res/android"
+                               android:layout_width="fill_parent"
+                               android:layout_height="fill_parent" >
+
+       <VideoView  android:id="@+id/videoPlayer"
+                               android:layout_width="wrap_content"
+                               android:layout_height="wrap_content"  
+                               android:layout_gravity="center" />
+       
+</FrameLayout>
\ No newline at end of file
index 0b581eb..fb89f57 100644 (file)
@@ -455,7 +455,11 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
     }
 
     public boolean isAudio() {
     }
 
     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 (file)
index 0000000..1370d48
--- /dev/null
@@ -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
index 0d07c44..5c8604c 100644 (file)
@@ -71,6 +71,7 @@ import android.widget.ImageView;
 import android.widget.MediaController;\r
 import android.widget.TextView;\r
 import android.widget.Toast;\r
 import android.widget.MediaController;\r
 import android.widget.TextView;\r
 import android.widget.Toast;\r
+import android.widget.VideoView;\r
 \r
 import com.actionbarsherlock.app.SherlockFragment;\r
 import com.owncloud.android.AccountUtils;\r
 \r
 import com.actionbarsherlock.app.SherlockFragment;\r
 import com.owncloud.android.AccountUtils;\r
@@ -97,6 +98,7 @@ import com.owncloud.android.ui.activity.ConflictsResolveActivity;
 import com.owncloud.android.ui.activity.FileDetailActivity;\r
 import com.owncloud.android.ui.activity.FileDisplayActivity;\r
 import com.owncloud.android.ui.activity.TransferServiceGetter;\r
 import com.owncloud.android.ui.activity.FileDetailActivity;\r
 import com.owncloud.android.ui.activity.FileDisplayActivity;\r
 import com.owncloud.android.ui.activity.TransferServiceGetter;\r
+import com.owncloud.android.ui.activity.VideoActivity;\r
 import com.owncloud.android.ui.dialog.EditNameDialog;\r
 import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;\r
 import com.owncloud.android.utils.OwnCloudVersion;\r
 import com.owncloud.android.ui.dialog.EditNameDialog;\r
 import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;\r
 import com.owncloud.android.utils.OwnCloudVersion;\r
@@ -133,6 +135,7 @@ public class FileDetailFragment extends SherlockFragment implements
     private Handler mHandler;\r
     private RemoteOperation mLastRemoteOperation;\r
     private DialogFragment mCurrentDialog;\r
     private Handler mHandler;\r
     private RemoteOperation mLastRemoteOperation;\r
     private DialogFragment mCurrentDialog;\r
+    \r
     private MediaServiceBinder mMediaServiceBinder = null;\r
     private MediaController mMediaController = null;\r
     private MediaServiceConnection mMediaServiceConnection = null;\r
     private MediaServiceBinder mMediaServiceBinder = null;\r
     private MediaController mMediaController = null;\r
     private MediaServiceConnection mMediaServiceConnection = null;\r
@@ -418,25 +421,56 @@ public class FileDetailFragment extends SherlockFragment implements
     \r
     @Override\r
     public boolean onTouch(View v, MotionEvent event) {\r
     \r
     @Override\r
     public boolean onTouch(View v, MotionEvent event) {\r
-        if (v == mPreview && event.getAction() == MotionEvent.ACTION_DOWN && mFile != null && mFile.isDown() && mFile.isAudio()) {\r
-            if (!mMediaServiceBinder.isPlaying(mFile)) {\r
-                Log.d(TAG, "starting playback of " + mFile.getStoragePath());\r
-                mMediaServiceBinder.start(mAccount, mFile);\r
-                // this is a patch; need to synchronize this with the onPrepared() coming from MediaPlayer in the MediaService\r
-                mMediaController.postDelayed(new Runnable() {\r
-                    @Override\r
-                    public void run() {\r
-                        mMediaController.show(0);\r
-                    }\r
-                } , 300);\r
-            } else {\r
-                mMediaController.show(0);\r
+        if (v == mPreview && event.getAction() == MotionEvent.ACTION_DOWN && mFile != null && mFile.isDown()) {\r
+            if (mFile.isAudio()) {\r
+                if (!mMediaServiceBinder.isPlaying(mFile)) {\r
+                    Log.d(TAG, "starting playback of " + mFile.getStoragePath());\r
+                    mMediaServiceBinder.start(mAccount, mFile);\r
+                    // this is a patch; need to synchronize this with the onPrepared() coming from MediaPlayer in the MediaService\r
+                    mMediaController.postDelayed(new Runnable() {\r
+                        @Override\r
+                        public void run() {\r
+                            mMediaController.show(0);\r
+                        }\r
+                    } , 300);\r
+                } else {\r
+                    mMediaController.show(0);\r
+                }\r
+                \r
+            } else if (mFile.isVideo()) {\r
+                startVideoActivity();\r
             }\r
         }\r
         return false;\r
     }\r
 \r
     \r
             }\r
         }\r
         return false;\r
     }\r
 \r
     \r
+    private void startVideoActivity() {\r
+        Intent i = new Intent(getActivity(), VideoActivity.class);\r
+        i.putExtra(VideoActivity.EXTRA_PATH, mFile.getStoragePath());\r
+        startActivity(i);\r
+        \r
+        // TODO THROW AN ACTIVTIY JUST FOR PREVIEW VIDEO\r
+        /*\r
+        if (mMediaController == null) {\r
+            mMediaController = new MediaController(getActivity());\r
+            mMediaController.setAnchorView(mVideoPreview);\r
+            //mMediaController.setEnabled(true);\r
+        }\r
+        //mMediaController.setMediaPlayer(mMediaServiceBinder);\r
+        if (!mVideoPreviewIsLoaded) {\r
+            mVideoPreviewIsLoaded = true;\r
+            mMediaController.setMediaPlayer(mVideoPreview);\r
+            mVideoPreview.setMediaController(mMediaController);\r
+            mVideoPreview.setVideoPath(mFile.getStoragePath());\r
+            mVideoPreview.start();\r
+            //mMediaController.show(0);\r
+        } else {\r
+            mMediaController.show(0);\r
+        }*/\r
+    }\r
+\r
+\r
     private void bindMediaService() {\r
         Log.d(TAG, "Binding to MediaService...");\r
         if (mMediaServiceConnection == null) {\r
     private void bindMediaService() {\r
         Log.d(TAG, "Binding to MediaService...");\r
         if (mMediaServiceConnection == null) {\r