Commit 1c38b226 by tonihei Committed by Andrew Lewis

Stop using AlertDialog for TrackSelectionDialog.

AlertDialog owns its view, which causes problems with TabLayout on API 21
and 22. Now using AppCompatDialog instead so that we can own the view
ourselves.

Also:
 - Renamed layout files from download_xyz to track_selection_xyz.
 - Added OK and Cancel buttons to the view.
 - Applied alert dialog style to the "normal" dialog to get a nicer UI.
PiperOrigin-RevId: 233944647
parent 73d9b2d2
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.demo; package com.google.android.exoplayer2.demo;
import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.res.Resources; import android.content.res.Resources;
...@@ -27,10 +26,13 @@ import android.support.v4.app.Fragment; ...@@ -27,10 +26,13 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatDialog;
import android.util.SparseArray; import android.util.SparseArray;
import android.util.TypedValue;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
...@@ -162,11 +164,15 @@ public final class TrackSelectionDialog extends DialogFragment { ...@@ -162,11 +164,15 @@ public final class TrackSelectionDialog extends DialogFragment {
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity()) // We need to own the view to let tab layout work correctly on all API levels. That's why we
.setTitle(titleId) // can't use an AlertDialog as it owns its view itself. Using AppCompatDialog instead. We still
.setPositiveButton(android.R.string.ok, onClickListener) // want the "alertDialogTheme" style attribute of the current theme instead of AppCompatDialog's
.setNegativeButton(android.R.string.cancel, /* listener= */ null) // default "dialogTheme" style, so obtain that manually.
.create(); TypedValue alertDialogStyle = new TypedValue();
getActivity().getTheme().resolveAttribute(R.attr.alertDialogTheme, alertDialogStyle, true);
AppCompatDialog dialog = new AppCompatDialog(getActivity(), alertDialogStyle.resourceId);
dialog.setTitle(titleId);
return dialog;
} }
@Override @Override
...@@ -200,12 +206,19 @@ public final class TrackSelectionDialog extends DialogFragment { ...@@ -200,12 +206,19 @@ public final class TrackSelectionDialog extends DialogFragment {
tabFragments.put(i, tabFragment); tabFragments.put(i, tabFragment);
tabTitles.add(trackTypeString); tabTitles.add(trackTypeString);
} }
View dialogView = inflater.inflate(R.layout.download_dialog, container, false); View dialogView = inflater.inflate(R.layout.track_selection_dialog, container, false);
TabLayout tabLayout = dialogView.findViewById(R.id.download_dialog_tab_layout); TabLayout tabLayout = dialogView.findViewById(R.id.track_selection_dialog_tab_layout);
ViewPager viewPager = dialogView.findViewById(R.id.download_dialog_view_pager); ViewPager viewPager = dialogView.findViewById(R.id.track_selection_dialog_view_pager);
Button cancelButton = dialogView.findViewById(R.id.track_selection_dialog_cancel_button);
Button okButton = dialogView.findViewById(R.id.track_selection_dialog_ok_button);
viewPager.setAdapter(new FragmentAdapter(getChildFragmentManager())); viewPager.setAdapter(new FragmentAdapter(getChildFragmentManager()));
tabLayout.setupWithViewPager(viewPager); tabLayout.setupWithViewPager(viewPager);
((AlertDialog) getDialog()).setView(dialogView); cancelButton.setOnClickListener(view -> dismiss());
okButton.setOnClickListener(
view -> {
onClickListener.onClick(getDialog(), DialogInterface.BUTTON_POSITIVE);
dismiss();
});
return dialogView; return dialogView;
} }
...@@ -281,7 +294,8 @@ public final class TrackSelectionDialog extends DialogFragment { ...@@ -281,7 +294,8 @@ public final class TrackSelectionDialog extends DialogFragment {
@Nullable ViewGroup container, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) { @Nullable Bundle savedInstanceState) {
View rootView = View rootView =
inflater.inflate(R.layout.download_dialog_tab, container, /* attachToRoot= */ false); inflater.inflate(
R.layout.track_selection_dialog_tab, container, /* attachToRoot= */ false);
trackSelectionView = rootView.findViewById(R.id.download_dialog_track_selection_view); trackSelectionView = rootView.findViewById(R.id.download_dialog_track_selection_view);
trackSelectionView.setShowDisableOption(true); trackSelectionView.setShowDisableOption(true);
trackSelectionView.setAllowMultipleOverrides(allowMultipleOverrides); trackSelectionView.setAllowMultipleOverrides(allowMultipleOverrides);
......
...@@ -16,13 +16,33 @@ ...@@ -16,13 +16,33 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/track_selection_dialog_view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<android.support.design.widget.TabLayout <android.support.design.widget.TabLayout
android:id="@+id/download_dialog_tab_layout" android:id="@+id/track_selection_dialog_tab_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager </android.support.v4.view.ViewPager>
android:id="@+id/download_dialog_view_pager" <LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"
android:gravity="end">
<Button
android:id="@+id/track_selection_dialog_cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/cancel"
style="?android:attr/borderlessButtonStyle"/>
<Button
android:id="@+id/track_selection_dialog_ok_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/ok"
style="?android:attr/borderlessButtonStyle"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment