package com.novoda.demo; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.widget.ArrayAdapter; import com.novoda.noplayer.NoPlayer; import com.novoda.noplayer.model.AudioTracks; import com.novoda.noplayer.model.PlayerAudioTrack; import com.novoda.noplayer.model.PlayerSubtitleTrack; import com.novoda.noplayer.model.PlayerVideoTrack; import java.util.ArrayList; import java.util.List; import java.util.Locale; class DialogCreator { private static final String VIDEO_TRACK_MESSAGE_FORMAT = "ID: %s Quality: %s"; private static final String AUDIO_TRACK_MESSAGE_FORMAT = "ID: %s Type: %s"; private static final int AUTO_TRACK_POSITION = 0; private final Context context; private final NoPlayer noPlayer; DialogCreator(Context context, NoPlayer noPlayer) { this.context = context; this.noPlayer = noPlayer; } void showVideoSelectionDialog() { final List<PlayerVideoTrack> videoTracks = noPlayer.getVideoTracks(); ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.list_item); adapter.addAll(mapVideoTrackToLabel(videoTracks)); new AlertDialog.Builder(context) .setTitle("Select Video track") .setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { if (position == AUTO_TRACK_POSITION) { noPlayer.clearVideoTrackSelection(); } else { PlayerVideoTrack videoTrack = videoTracks.get(position - 1); noPlayer.selectVideoTrack(videoTrack); } } }) .create() .show(); } private List<String> mapVideoTrackToLabel(List<PlayerVideoTrack> videoTracks) { List<String> labels = new ArrayList<>(); labels.add("Auto"); for (PlayerVideoTrack videoTrack : videoTracks) { String message = String.format(VIDEO_TRACK_MESSAGE_FORMAT, videoTrack.id(), videoTrack.height()); labels.add(message); } return labels; } void showAudioSelectionDialog() { final AudioTracks audioTracks = noPlayer.getAudioTracks(); ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.list_item); adapter.addAll(mapAudioTrackToLabel(audioTracks)); new AlertDialog.Builder(context) .setTitle("Select audio track") .setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { if (position == AUTO_TRACK_POSITION) { noPlayer.clearAudioTrackSelection(); } else { PlayerAudioTrack audioTrack = audioTracks.get(position - 1); noPlayer.selectAudioTrack(audioTrack); } } }) .create() .show(); } private List<String> mapAudioTrackToLabel(AudioTracks audioTracks) { List<String> labels = new ArrayList<>(); labels.add("Auto"); for (PlayerAudioTrack audioTrack : audioTracks) { String label = String.format( Locale.UK, AUDIO_TRACK_MESSAGE_FORMAT, audioTrack.trackId(), audioTrack.audioTrackType() ); labels.add(label); } return labels; } void showSubtitleSelectionDialog() { final List<PlayerSubtitleTrack> subtitleTracks = noPlayer.getSubtitleTracks(); ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.list_item); adapter.addAll(mapSubtitleTrackToLabel(subtitleTracks)); new AlertDialog.Builder(context) .setTitle("Select subtitle track") .setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { if (position == AUTO_TRACK_POSITION) { noPlayer.hideSubtitleTrack(); } else { PlayerSubtitleTrack subtitleTrack = subtitleTracks.get(position - 1); noPlayer.showSubtitleTrack(subtitleTrack); } } }) .create() .show(); } private List<String> mapSubtitleTrackToLabel(List<PlayerSubtitleTrack> subtitleTracks) { List<String> labels = new ArrayList<>(); labels.add("Dismiss subtitles"); for (PlayerSubtitleTrack subtitleTrack : subtitleTracks) { labels.add("Group: " + subtitleTrack.groupIndex() + " Format: " + subtitleTrack.formatIndex()); } return labels; } }