[Android] [PATCH 1/2] VideoPlayer: refactor subtitle and audio track selection
Jean-Baptiste Kempf
jb at videolan.org
Wed Mar 18 18:21:05 CET 2015
Maybe you could fix also #7540, no?
See FIXME in the same file you edited :)
On 18 Mar, Thomas Guillem wrote :
> ---
> .../vlc/gui/video/VideoPlayerActivity.java | 131 ++++++++++-----------
> 1 file changed, 63 insertions(+), 68 deletions(-)
>
> 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 2ad63cc..ddb364a 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> @@ -1957,89 +1957,84 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
> popupMenu.show();
> }
>
> - private void selectAudioTrack() {
> - if (mAudioTracksList == null) return;
> -
> - final String[] arrList = new String[mAudioTracksList.size()];
> + private interface TrackSelectedListener {
> + public boolean onTrackSelected(int trackID);
> + }
> + private void selectTrack(final Map<Integer,String> trackMap, int currentTrack, int titleId,
> + final TrackSelectedListener listener) {
> + if (listener == null)
> + throw new IllegalArgumentException("listener must not be null");
> + if (trackMap == null)
> + return;
> + final String[] nameList = new String[trackMap.size()];
> int i = 0;
> int listPosition = 0;
> - for(Map.Entry<Integer,String> entry : mAudioTracksList.entrySet()) {
> - arrList[i] = entry.getValue();
> + for(Map.Entry<Integer,String> entry : trackMap.entrySet()) {
> + nameList[i] = entry.getValue();
> // map the track position to the list position
> - if(entry.getKey() == mLibVLC.getAudioTrack())
> + if(entry.getKey() == currentTrack)
> listPosition = i;
> i++;
> }
> +
> AlertDialog dialog = new AlertDialog.Builder(VideoPlayerActivity.this)
> - .setTitle(R.string.track_audio)
> - .setSingleChoiceItems(arrList, listPosition, new DialogInterface.OnClickListener() {
> - @Override
> - public void onClick(DialogInterface dialog, int listPosition) {
> - int trackID = -1;
> - // Reverse map search...
> - for (Map.Entry<Integer, String> entry : mAudioTracksList.entrySet()) {
> - if (arrList[listPosition].equals(entry.getValue())) {
> - trackID = entry.getKey();
> - break;
> + .setTitle(titleId)
> + .setSingleChoiceItems(nameList, listPosition, new DialogInterface.OnClickListener() {
> + @Override
> + public void onClick(DialogInterface dialog, int listPosition) {
> + int trackID = -1;
> + // Reverse map search...
> + for (Map.Entry<Integer, String> entry : trackMap.entrySet()) {
> + if (nameList[listPosition].equals(entry.getValue())) {
> + trackID = entry.getKey();
> + break;
> + }
> + }
> + listener.onTrackSelected(trackID);
> + dialog.dismiss();
> }
> - }
> - if (trackID < 0) return;
> -
> - MediaDatabase.getInstance().updateMedia(
> - mLocation,
> - MediaDatabase.mediaColumn.MEDIA_AUDIOTRACK,
> - trackID);
> - mLibVLC.setAudioTrack(trackID);
> - dialog.dismiss();
> - }
> - })
> - .create();
> + })
> + .create();
> dialog.setCanceledOnTouchOutside(true);
> dialog.setOwnerActivity(VideoPlayerActivity.this);
> dialog.show();
> }
>
> - private void selectSubtitles() {
> - if (mSubtitleTracksList == null)
> - mSubtitleTracksList = mLibVLC.getSpuTrackDescription();
> - final String[] arrList = new String[mSubtitleTracksList.size()];
> - int i = 0;
> - int listPosition = 0;
> - for(Map.Entry<Integer,String> entry : mSubtitleTracksList.entrySet()) {
> - arrList[i] = entry.getValue();
> - // map the track position to the list position
> - if(entry.getKey() == mLibVLC.getSpuTrack())
> - listPosition = i;
> - i++;
> - }
> -
> - AlertDialog dialog = new AlertDialog.Builder(VideoPlayerActivity.this)
> - .setTitle(R.string.track_text)
> - .setSingleChoiceItems(arrList, listPosition, new DialogInterface.OnClickListener() {
> - @Override
> - public void onClick(DialogInterface dialog, int listPosition) {
> - int trackID = -2;
> - // Reverse map search...
> - for(Map.Entry<Integer, String> entry : mSubtitleTracksList.entrySet()) {
> - if(arrList[listPosition].equals(entry.getValue())) {
> - trackID = entry.getKey();
> - break;
> + private void selectAudioTrack() {
> + setESTrackLists(false);
> + selectTrack(mAudioTracksList, mLibVLC.getAudioTrack(), R.string.track_audio,
> + new TrackSelectedListener() {
> + @Override
> + public boolean onTrackSelected(int trackID) {
> + if (trackID < 0)
> + return false;
> + MediaDatabase.getInstance().updateMedia(
> + mLocation,
> + MediaDatabase.mediaColumn.MEDIA_AUDIOTRACK,
> + trackID);
> + mLibVLC.setAudioTrack(trackID);
> + return true;
> }
> - }
> - if (trackID < -1) return;
> + });
> + }
>
> - MediaDatabase.getInstance().updateMedia(
> - mLocation,
> - MediaDatabase.mediaColumn.MEDIA_SPUTRACK,
> - trackID);
> - mLibVLC.setSpuTrack(trackID);
> - dialog.dismiss();
> - }
> - })
> - .create();
> - dialog.setCanceledOnTouchOutside(true);
> - dialog.setOwnerActivity(VideoPlayerActivity.this);
> - dialog.show();
> + private void selectSubtitles() {
> + setESTrackLists(false);
> + selectTrack(mSubtitleTracksList, mLibVLC.getSpuTrack(), R.string.track_text,
> + new TrackSelectedListener() {
> + @Override
> + public boolean onTrackSelected(int trackID) {
> + if (trackID < -1)
> + return false;
> +
> + MediaDatabase.getInstance().updateMedia(
> + mLocation,
> + MediaDatabase.mediaColumn.MEDIA_SPUTRACK,
> + trackID);
> + mLibVLC.setSpuTrack(trackID);
> + return true;
> + }
> + });
> }
>
> private void showNavMenu() {
> --
> 2.1.3
>
> _______________________________________________
> Android mailing list
> Android at videolan.org
> https://mailman.videolan.org/listinfo/android
--
With my kindest regards,
--
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device
More information about the Android
mailing list