diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java index 0d51f94661..536fecf7cf 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java @@ -640,23 +640,29 @@ public class StyledPlayerControlView extends FrameLayout { } // Related to Settings List View - List settingsMainTextsList = - Arrays.asList(resources.getStringArray(R.array.exo_settings_main_texts)); - TypedArray settingsIconTypedArray = resources.obtainTypedArray(R.array.exo_settings_icon_ids); + String[] settingTexts = new String[2]; + Drawable[] settingIcons = new Drawable[2]; + settingTexts[SETTINGS_PLAYBACK_SPEED_POSITION] = + resources.getString(R.string.exo_controls_playback_speed); + settingIcons[SETTINGS_PLAYBACK_SPEED_POSITION] = + resources.getDrawable(R.drawable.exo_styled_controls_speed); + settingTexts[SETTINGS_AUDIO_TRACK_SELECTION_POSITION] = + resources.getString(R.string.exo_track_selection_title_audio); + settingIcons[SETTINGS_AUDIO_TRACK_SELECTION_POSITION] = + resources.getDrawable(R.drawable.exo_styled_controls_audiotrack); + settingsAdapter = new SettingsAdapter(settingTexts, settingIcons); + playbackSpeedTextList = new ArrayList<>(Arrays.asList(resources.getStringArray(R.array.exo_playback_speeds))); - String normalSpeed = resources.getString(R.string.exo_controls_playback_speed_normal); - selectedPlaybackSpeedIndex = playbackSpeedTextList.indexOf(normalSpeed); - playbackSpeedMultBy100List = new ArrayList<>(); int[] speeds = resources.getIntArray(R.array.exo_speed_multiplied_by_100); for (int speed : speeds) { playbackSpeedMultBy100List.add(speed); } + selectedPlaybackSpeedIndex = playbackSpeedMultBy100List.indexOf(100); customPlaybackSpeedIndex = UNDEFINED_POSITION; settingsWindowMargin = resources.getDimensionPixelSize(R.dimen.exo_settings_offset); - settingsAdapter = new SettingsAdapter(settingsMainTextsList, settingsIconTypedArray); subSettingsAdapter = new SubSettingsAdapter(); subSettingsAdapter.setCheckPosition(UNDEFINED_POSITION); settingsView = @@ -1431,7 +1437,7 @@ public class StyledPlayerControlView extends FrameLayout { } selectedPlaybackSpeedIndex = indexForCurrentSpeed; - settingsAdapter.updateSubTexts( + settingsAdapter.setSubTextAtPosition( SETTINGS_PLAYBACK_SPEED_POSITION, playbackSpeedTextList.get(indexForCurrentSpeed)); } @@ -1538,6 +1544,30 @@ public class StyledPlayerControlView extends FrameLayout { } } + private void onSettingViewClicked(int position) { + if (position == SETTINGS_PLAYBACK_SPEED_POSITION) { + subSettingsAdapter.setTexts(playbackSpeedTextList); + subSettingsAdapter.setCheckPosition(selectedPlaybackSpeedIndex); + selectedMainSettingsPosition = SETTINGS_PLAYBACK_SPEED_POSITION; + displaySettingsWindow(subSettingsAdapter); + } else if (position == SETTINGS_AUDIO_TRACK_SELECTION_POSITION) { + selectedMainSettingsPosition = SETTINGS_AUDIO_TRACK_SELECTION_POSITION; + displaySettingsWindow(audioTrackSelectionAdapter); + } else { + settingsWindow.dismiss(); + } + } + + private void onSubSettingViewClicked(int position) { + if (selectedMainSettingsPosition == SETTINGS_PLAYBACK_SPEED_POSITION) { + if (position != selectedPlaybackSpeedIndex) { + float speed = playbackSpeedMultBy100List.get(position) / 100.0f; + setPlaybackSpeed(speed); + } + } + settingsWindow.dismiss(); + } + private void onLayoutChange( View v, int left, @@ -1796,38 +1826,38 @@ public class StyledPlayerControlView extends FrameLayout { } } - private class SettingsAdapter extends RecyclerView.Adapter { - private List mainTexts; - @Nullable private List subTexts; - @Nullable private TypedArray iconIds; + private class SettingsAdapter extends RecyclerView.Adapter { + private final String[] mainTexts; + private final String[] subTexts; + private final Drawable[] iconIds; - public SettingsAdapter(List mainTexts, @Nullable TypedArray iconIds) { + public SettingsAdapter(String[] mainTexts, Drawable[] iconIds) { this.mainTexts = mainTexts; - this.subTexts = Arrays.asList(new String[mainTexts.size()]); + this.subTexts = new String[mainTexts.length]; this.iconIds = iconIds; } @Override - public SettingsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { + public SettingViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View v = LayoutInflater.from(getContext()).inflate(R.layout.exo_styled_settings_list_item, null); - return new SettingsViewHolder(v); + return new SettingViewHolder(v); } @Override - public void onBindViewHolder(SettingsViewHolder holder, int position) { - holder.mainTextView.setText(mainTexts.get(position)); + public void onBindViewHolder(SettingViewHolder holder, int position) { + holder.mainTextView.setText(mainTexts[position]); - if (subTexts == null || subTexts.get(position) == null) { + if (subTexts[position] == null) { holder.subTextView.setVisibility(GONE); } else { - holder.subTextView.setText(subTexts.get(position)); + holder.subTextView.setText(subTexts[position]); } - if (iconIds == null || iconIds.getDrawable(position) == null) { + if (iconIds[position] == null) { holder.iconView.setVisibility(GONE); } else { - holder.iconView.setImageDrawable(iconIds.getDrawable(position)); + holder.iconView.setImageDrawable(iconIds[position]); } } @@ -1838,65 +1868,43 @@ public class StyledPlayerControlView extends FrameLayout { @Override public int getItemCount() { - return mainTexts.size(); + return mainTexts.length; } - public void updateSubTexts(int position, String subText) { - if (this.subTexts != null) { - this.subTexts.set(position, subText); - } - } - - private class SettingsViewHolder extends RecyclerView.ViewHolder { - TextView mainTextView; - TextView subTextView; - ImageView iconView; - - SettingsViewHolder(View itemView) { - super(itemView); - - mainTextView = itemView.findViewById(R.id.exo_main_text); - subTextView = itemView.findViewById(R.id.exo_sub_text); - iconView = itemView.findViewById(R.id.exo_icon); - - itemView.setOnClickListener( - v -> { - int position = SettingsViewHolder.this.getAdapterPosition(); - if (position == RecyclerView.NO_POSITION) { - return; - } - - if (position == SETTINGS_PLAYBACK_SPEED_POSITION) { - subSettingsAdapter.setTexts(playbackSpeedTextList); - subSettingsAdapter.setCheckPosition(selectedPlaybackSpeedIndex); - selectedMainSettingsPosition = SETTINGS_PLAYBACK_SPEED_POSITION; - displaySettingsWindow(subSettingsAdapter); - } else if (position == SETTINGS_AUDIO_TRACK_SELECTION_POSITION) { - selectedMainSettingsPosition = SETTINGS_AUDIO_TRACK_SELECTION_POSITION; - displaySettingsWindow(audioTrackSelectionAdapter); - } else { - settingsWindow.dismiss(); - } - }); - } + public void setSubTextAtPosition(int position, String subText) { + this.subTexts[position] = subText; } } - private class SubSettingsAdapter - extends RecyclerView.Adapter { + private class SettingViewHolder extends RecyclerView.ViewHolder { + private final TextView mainTextView; + private final TextView subTextView; + private final ImageView iconView; + + public SettingViewHolder(View itemView) { + super(itemView); + mainTextView = itemView.findViewById(R.id.exo_main_text); + subTextView = itemView.findViewById(R.id.exo_sub_text); + iconView = itemView.findViewById(R.id.exo_icon); + itemView.setOnClickListener( + v -> onSettingViewClicked(SettingViewHolder.this.getAdapterPosition())); + } + } + + private class SubSettingsAdapter extends RecyclerView.Adapter { @Nullable private List texts; private int checkPosition; @Override - public SubSettingsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + public SubSettingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(getContext()) .inflate(R.layout.exo_styled_sub_settings_list_item, null); - return new SubSettingsViewHolder(v); + return new SubSettingViewHolder(v); } @Override - public void onBindViewHolder(SubSettingsViewHolder holder, int position) { + public void onBindViewHolder(SubSettingViewHolder holder, int position) { if (texts != null) { holder.textView.setText(texts.get(position)); } @@ -1915,33 +1923,18 @@ public class StyledPlayerControlView extends FrameLayout { public void setCheckPosition(int checkPosition) { this.checkPosition = checkPosition; } + } - private class SubSettingsViewHolder extends RecyclerView.ViewHolder { - TextView textView; - View checkView; + private class SubSettingViewHolder extends RecyclerView.ViewHolder { + private final TextView textView; + private final View checkView; - SubSettingsViewHolder(View itemView) { - super(itemView); - - textView = itemView.findViewById(R.id.exo_text); - checkView = itemView.findViewById(R.id.exo_check); - - itemView.setOnClickListener( - v -> { - int position = SubSettingsViewHolder.this.getAdapterPosition(); - if (position == RecyclerView.NO_POSITION) { - return; - } - - if (selectedMainSettingsPosition == SETTINGS_PLAYBACK_SPEED_POSITION) { - if (position != selectedPlaybackSpeedIndex) { - float speed = playbackSpeedMultBy100List.get(position) / 100.0f; - setPlaybackSpeed(speed); - } - } - settingsWindow.dismiss(); - }); - } + public SubSettingViewHolder(View itemView) { + super(itemView); + textView = itemView.findViewById(R.id.exo_text); + checkView = itemView.findViewById(R.id.exo_check); + itemView.setOnClickListener( + v -> onSubSettingViewClicked(SubSettingViewHolder.this.getAdapterPosition())); } } @@ -2057,7 +2050,7 @@ public class StyledPlayerControlView extends FrameLayout { } checkNotNull(trackSelector).setParameters(parametersBuilder); } - settingsAdapter.updateSubTexts( + settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, getResources().getString(R.string.exo_track_selection_auto)); settingsWindow.dismiss(); @@ -2066,7 +2059,7 @@ public class StyledPlayerControlView extends FrameLayout { @Override public void onTrackSelection(String subtext) { - settingsAdapter.updateSubTexts(SETTINGS_AUDIO_TRACK_SELECTION_POSITION, subtext); + settingsAdapter.setSubTextAtPosition(SETTINGS_AUDIO_TRACK_SELECTION_POSITION, subtext); } @Override @@ -2086,20 +2079,20 @@ public class StyledPlayerControlView extends FrameLayout { } } if (trackInfos.isEmpty()) { - settingsAdapter.updateSubTexts( + settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, getResources().getString(R.string.exo_track_selection_none)); // TODO(insun) : Make the audio item in main settings (settingsAdapater) // to be non-clickable. } else if (!hasSelectionOverride) { - settingsAdapter.updateSubTexts( + settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, getResources().getString(R.string.exo_track_selection_auto)); } else { for (int i = 0; i < trackInfos.size(); i++) { TrackInfo track = trackInfos.get(i); if (track.selected) { - settingsAdapter.updateSubTexts( + settingsAdapter.setSubTextAtPosition( SETTINGS_AUDIO_TRACK_SELECTION_POSITION, track.trackName); break; } diff --git a/library/ui/src/main/res/values/arrays.xml b/library/ui/src/main/res/values/arrays.xml index 382a899afb..8b326c3d4d 100644 --- a/library/ui/src/main/res/values/arrays.xml +++ b/library/ui/src/main/res/values/arrays.xml @@ -34,14 +34,4 @@ 1.5x 2x - - - @string/exo_controls_playback_speed - @string/exo_controls_audio_track - - - - @drawable/exo_styled_controls_speed - @drawable/exo_styled_controls_audiotrack - diff --git a/library/ui/src/main/res/values/strings.xml b/library/ui/src/main/res/values/strings.xml index 210f35f48c..dc71645878 100644 --- a/library/ui/src/main/res/values/strings.xml +++ b/library/ui/src/main/res/values/strings.xml @@ -44,6 +44,7 @@ Shuffle off VR mode + Download @@ -56,6 +57,7 @@ Download failed Removing downloads + Video @@ -90,13 +92,10 @@ CC %1$.2f Mbps + %1$s, %2$s - - Audio track @@ -104,9 +103,8 @@ Normal - - %1$.2fx - + %1$.2fx + 00:00:00