[Android] [PATCH 1/3] Handle videos playlists

Geoffrey Métais geoffrey.metais at gmail.com
Tue Nov 24 17:25:27 CET 2015


---
 .../src/org/videolan/vlc/PlaybackService.java      | 13 +++++----
 .../org/videolan/vlc/gui/audio/AudioPlayer.java    | 11 --------
 .../vlc/gui/video/VideoPlayerActivity.java         | 31 ++++++++++++++--------
 3 files changed, 28 insertions(+), 27 deletions(-)

diff --git a/vlc-android/src/org/videolan/vlc/PlaybackService.java b/vlc-android/src/org/videolan/vlc/PlaybackService.java
index e9d4cf0..cfb5850 100644
--- a/vlc-android/src/org/videolan/vlc/PlaybackService.java
+++ b/vlc-android/src/org/videolan/vlc/PlaybackService.java
@@ -576,9 +576,12 @@ public class PlaybackService extends Service implements IVLCVout.Callback {
                     }
 
                     changeAudioFocus(true);
-                    showNotification();
                     if (!mWakeLock.isHeld())
                         mWakeLock.acquire();
+                    if (switchToVideo())
+                        hideNotification();
+                    else
+                        showNotification();
                     break;
                 case MediaPlayer.Event.Paused:
                     Log.i(TAG, "MediaPlayer.Event.Paused");
@@ -722,8 +725,8 @@ public class PlaybackService extends Service implements IVLCVout.Callback {
     public boolean switchToVideo() {
         if (!canSwitchToVideo())
             return false;
-        if (!mMediaPlayer.getVLCVout().areViewsAttached())
-            VideoPlayerActivity.startOpened(VLCApplication.getAppContext(), mCurrentIndex);
+        VideoPlayerActivity.startOpened(VLCApplication.getAppContext(),
+                getCurrentMediaWrapper().getUri(), mCurrentIndex);
         return true;
     }
 
@@ -1142,7 +1145,7 @@ public class PlaybackService extends Service implements IVLCVout.Callback {
         }
 
         playIndex(mCurrentIndex, 0);
-        onMediaChanged();
+        saveCurrentMedia();
     }
 
     @MainThread
@@ -1161,7 +1164,7 @@ public class PlaybackService extends Service implements IVLCVout.Callback {
             setPosition(0f);
 
         playIndex(mCurrentIndex, 0);
-        onMediaChanged();
+        saveCurrentMedia();
     }
 
     @MainThread
diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java b/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java
index 3ebdad1..6d7829a 100644
--- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java
+++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java
@@ -95,7 +95,6 @@ public class AudioPlayer extends PlaybackServiceFragment implements PlaybackServ
 
     private boolean mShowRemainingTime = false;
     private boolean mPreviewingSeek = false;
-    private boolean mSwitchedToVideo = false;
 
     private PlaylistAdapter mPlaylistAdapter;
 
@@ -176,7 +175,6 @@ public class AudioPlayer extends PlaybackServiceFragment implements PlaybackServ
             public void onClick(View v) {
                 if (mService != null) {
                     mService.switchToVideo();
-                    mSwitchedToVideo = true;
                 }
             }
         });
@@ -301,7 +299,6 @@ public class AudioPlayer extends PlaybackServiceFragment implements PlaybackServ
             if (mSettings.getBoolean(PreferencesActivity.VIDEO_RESTORE, false)){
                 Util.commitPreferences(mSettings.edit().putBoolean(PreferencesActivity.VIDEO_RESTORE, false));
                 mService.switchToVideo();
-                mSwitchedToVideo = true;
                 return;
             } else
                 show();
@@ -383,14 +380,6 @@ public class AudioPlayer extends PlaybackServiceFragment implements PlaybackServ
     public void onMediaPlayerEvent(MediaPlayer.Event event) {
         switch (event.type) {
             case MediaPlayer.Event.Opening:
-                mSwitchedToVideo = false;
-                break;
-            case MediaPlayer.Event.ESAdded:
-                final boolean forceAudio = (mService.getCurrentMediaWrapper().getFlags() & MediaWrapper.MEDIA_FORCE_AUDIO) != 0;
-                if (!forceAudio && !mSwitchedToVideo && event.getEsChangedType() == Media.Track.Type.Video) {
-                    mService.switchToVideo();
-                    mSwitchedToVideo = true;
-                }
                 break;
             case MediaPlayer.Event.Stopped:
                 hide();
diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
index c81357b..cd7e4e0 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
@@ -240,9 +240,11 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
     private boolean mHardwareAccelerationError;
     private boolean mEndReached;
     private boolean mHasSubItems = false;
+    private boolean mForceStop = false;
 
     // Playlist
     private int savedIndexPosition = -1;
+    private boolean mHasNext = false;
 
     // size of the video
     private int mVideoHeight;
@@ -536,7 +538,8 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
     protected void onNewIntent(Intent intent) {
         setIntent(intent);
         if (mPlaybackStarted) {
-            Uri uri = intent.hasExtra(PLAY_EXTRA_ITEM_LOCATION) ? (Uri) intent.getExtras().getParcelable(PLAY_EXTRA_ITEM_LOCATION) : intent.getData();
+            Uri uri = intent.hasExtra(PLAY_EXTRA_ITEM_LOCATION) ?
+                    (Uri) intent.getExtras().getParcelable(PLAY_EXTRA_ITEM_LOCATION) : intent.getData();
             if (uri == null || uri.equals(mUri))
                 return;
             stopPlayback();
@@ -820,7 +823,8 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
             time = 0;
         else
             time -= 2000; // go back 2 seconds, to compensate loading time
-        mService.stop();
+        if (mForceStop || !mHasNext)
+            mService.stop();
 
         SharedPreferences.Editor editor = mSettings.edit();
         // Save position
@@ -885,8 +889,8 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
     public static void start(Context context, Uri uri, String title) {
         start(context, uri, title, false, -1);
     }
-    public static void startOpened(Context context, int openedPosition) {
-        start(context, null, null, false, openedPosition);
+    public static void startOpened(Context context, Uri uri, int openedPosition) {
+        start(context, uri, null, false, openedPosition);
     }
 
     private static void start(Context context, Uri uri, String title, boolean fromStart, int openedPosition) {
@@ -895,10 +899,11 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
         intent.putExtra(PLAY_EXTRA_ITEM_LOCATION, uri);
         intent.putExtra(PLAY_EXTRA_ITEM_TITLE, title);
         intent.putExtra(PLAY_EXTRA_FROM_START, fromStart);
-        intent.putExtra(PLAY_EXTRA_OPENED_POSITION, openedPosition);
 
-        if (openedPosition != -1)
-            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+        if (openedPosition != -1) {
+            intent.putExtra(PLAY_EXTRA_OPENED_POSITION, openedPosition);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        }
 
         context.startActivity(intent);
     }
@@ -1011,8 +1016,10 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
             endDelaySetting();
         } else if (BuildConfig.tv && mShowing && !mIsLocked) {
             hideOverlay(true);
-        } else
+        } else {
+            mForceStop = true;
             exitOK();
+        }
     }
 
     @Override
@@ -1031,13 +1038,13 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
         showOverlayTimeout(OVERLAY_TIMEOUT);
         switch (keyCode) {
         case KeyEvent.KEYCODE_F:
-        case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
         case KeyEvent.KEYCODE_MEDIA_NEXT:
+        case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
             seekDelta(10000);
             return true;
         case KeyEvent.KEYCODE_R:
+            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
         case KeyEvent.KEYCODE_MEDIA_REWIND:
-        case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
             seekDelta(-10000);
             return true;
         case KeyEvent.KEYCODE_BUTTON_R1:
@@ -1511,7 +1518,7 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
             });
         } else {
             /* Exit player when reaching the end */
-            mEndReached = true;
+            mEndReached = !mService.hasNext();
             exitOK();
         }
     }
@@ -2795,6 +2802,8 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVLCVout.C
                     onPlaying();
             }
 
+            mHasNext = mService.hasNext();
+
             // Get possible subtitles
             String subtitleList_serialized = mSettings.getString(PreferencesActivity.VIDEO_SUBTITLE_FILES, null);
             ArrayList<String> prefsList = new ArrayList<String>();
-- 
2.5.0



More information about the Android mailing list