Browse Source

Fixed undesired video loop after completion, caused by bugs in GINGERBREAD

David A. Velasco 12 years ago
parent
commit
a11e7fd900

+ 3 - 0
src/com/owncloud/android/media/MediaControlView.java

@@ -391,6 +391,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
     @Override
     public void onClick(View v) {
         int pos;
+        boolean playing = mPlayer.isPlaying();
         switch (v.getId()) {
         
         case R.id.playBtn: 
@@ -401,6 +402,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
             pos = mPlayer.getCurrentPosition();
             pos -= 5000;
             mPlayer.seekTo(pos);
+            if (!playing) mPlayer.pause();  // necessary in some 2.3.x devices 
             setProgress();
             break;
 
@@ -408,6 +410,7 @@ public class MediaControlView extends FrameLayout /* implements OnLayoutChangeLi
             pos = mPlayer.getCurrentPosition();
             pos += 15000;
             mPlayer.seekTo(pos);
+            if (!playing) mPlayer.pause(); // necessary in some 2.3.x devices
             setProgress();
             break;
         

+ 19 - 1
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -35,6 +35,7 @@ import android.media.MediaPlayer.OnCompletionListener;
 import android.media.MediaPlayer.OnErrorListener;
 import android.media.MediaPlayer.OnPreparedListener;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -352,6 +353,7 @@ public class PreviewMediaFragment extends SherlockFragment implements
          */
         @Override
         public void onPrepared(MediaPlayer vp) {
+            Log.e(TAG, "onPrepared");
             mVideoPreview.seekTo(mSavedPlaybackPosition);
             if (mAutoplay) { 
                 mVideoPreview.start();
@@ -370,7 +372,23 @@ public class PreviewMediaFragment extends SherlockFragment implements
          */
         @Override
         public void onCompletion(MediaPlayer  mp) {
-            mVideoPreview.seekTo(0);
+            Log.e(TAG, "completed");
+            if (mp != null) {
+                mVideoPreview.seekTo(0);
+                // next lines are necessary to work around undesired video loops
+                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD) {
+                    mVideoPreview.pause();   
+                    
+                } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) {
+                    // mVideePreview.pause() is not enough
+                    
+                    mMediaController.setEnabled(false);
+                    mVideoPreview.stopPlayback();
+                    mAutoplay = false;
+                    mSavedPlaybackPosition = 0;
+                    mVideoPreview.setVideoPath(mFile.getStoragePath());
+                }
+            } // else : called from onError()
             mMediaController.updatePausePlay();
         }