[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