dialog refactor

This commit is contained in:
Yuriy Liskov
2020-09-26 02:07:49 +03:00
parent b76218f831
commit c908fc740b
7 changed files with 67 additions and 68 deletions
@@ -118,11 +118,11 @@ public class PlayerUiManager extends PlayerEventListenerHelper {
createCheckedOptions();
createSingleOptions();
mSettingsPresenter.showDialog(() -> {
enableUiAutoHideTimeout();
updateBackgroundPlayback();
});
mSettingsPresenter.showDialog(mActivity.getString(R.string.playback_settings),
() -> {
enableUiAutoHideTimeout();
updateBackgroundPlayback();
});
}
@Override
@@ -26,4 +26,5 @@
<string name="option_background_playback_off">Отключено</string>
<string name="option_background_playback_all">Видео и аудио</string>
<string name="option_background_playback_only_audio">Только аудио</string>
<string name="playback_settings">Настройки воспроизведения</string>
</resources>
+1
View File
@@ -26,4 +26,5 @@
<string name="option_background_playback_off">Disabled</string>
<string name="option_background_playback_all">Video and audio</string>
<string name="option_background_playback_only_audio">Only audio</string>
<string name="playback_settings">Playback settings</string>
</resources>
@@ -1,17 +1,13 @@
package com.liskovsoft.smartyoutubetv2.tv.ui.settings;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.leanback.preference.LeanbackListPreferenceDialogFragment;
import androidx.leanback.preference.LeanbackPreferenceDialogFragment;
import androidx.leanback.preference.LeanbackPreferenceFragment;
import androidx.leanback.preference.LeanbackSettingsFragment;
import androidx.preference.DialogPreference;
import androidx.preference.MultiSelectListPreference;
import androidx.preference.MultiSelectListPreferenceDialogFragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragment;
import androidx.preference.PreferenceScreen;
@@ -26,7 +22,7 @@ import java.util.List;
public class AppSettingsFragment extends LeanbackSettingsFragment
implements DialogPreference.TargetFragment, VideoSettingsView {
private PrefFragment mPreferenceFragment;
private AppPreferenceFragment mPreferenceFragment;
private VideoSettingsPresenter mSettingsPresenter;
@Override
@@ -75,8 +71,8 @@ public class AppSettingsFragment extends LeanbackSettingsFragment
return mPreferenceFragment.findPreference(charSequence);
}
private PrefFragment buildPreferenceFragment() {
return new PrefFragment();
private AppPreferenceFragment buildPreferenceFragment() {
return new AppPreferenceFragment();
}
@Override
@@ -89,37 +85,26 @@ public class AppSettingsFragment extends LeanbackSettingsFragment
mPreferenceFragment.setTitle(title);
}
//@Override
//public boolean onPreferenceDisplayDialog(@NonNull PreferenceFragment caller, Preference pref) {
// if (pref instanceof StringListPreference) {
// StringListPreference listPreference = (StringListPreference) pref;
// LeanbackPreferenceDialogFragment f = StringListPreferenceDialogFragment.newInstanceStringList(listPreference.getKey());
// f.setTargetFragment(caller, 0);
// startPreferenceFragment(f);
//
// return true;
// }
//
// return super.onPreferenceDisplayDialog(caller, pref);
//}
@Override
public boolean onPreferenceDisplayDialog(@NonNull PreferenceFragment caller, Preference pref) {
if (pref instanceof StringListPreference) {
StringListPreference listPreference = (StringListPreference) pref;
LeanbackPreferenceDialogFragment f = StringListPreferenceDialogFragment.newInstanceStringList(listPreference.getKey());
f.setTargetFragment(caller, 0);
startPreferenceFragment(f);
public static class PrefFragment extends LeanbackPreferenceFragment {
return true;
}
return super.onPreferenceDisplayDialog(caller, pref);
}
public static class AppPreferenceFragment extends LeanbackPreferenceFragment {
private List<SettingsCategory> mCategories;
private Context mStyledContext;
private SettingsFragmentHelper mManager;
private String mTitle;
@Override
public void onDisplayPreferenceDialog(Preference preference) {
//if (preference instanceof StringListPreference) {
// StringListPreferenceDialogFragment f = StringListPreferenceDialogFragment.newInstanceStringList(preference.getKey());
// f.setTargetFragment(this, 0);
// f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG);
//}
super.onDisplayPreferenceDialog(preference);
}
@Override
public void onCreatePreferences(Bundle bundle, String s) {
mStyledContext = (Context) Helpers.getField(this, "mStyledContext");
@@ -1,6 +1,7 @@
package com.liskovsoft.smartyoutubetv2.tv.ui.settings;
import android.content.Context;
import androidx.preference.DialogPreference;
import androidx.preference.ListPreference;
import androidx.preference.MultiSelectListPreference;
import androidx.preference.Preference;
@@ -16,13 +17,13 @@ import java.util.Set;
public class SettingsFragmentHelper {
private final Context mStyledContext;
public static class ListPrefData {
public static class ListPreferenceData {
public final CharSequence[] entries;
public final CharSequence[] values;
public final String defaultValue;
public final Set<String> defaultValues;
public ListPrefData(CharSequence[] entries, CharSequence[] values, String defaultValue, Set<String> defaultValues) {
public ListPreferenceData(CharSequence[] entries, CharSequence[] values, String defaultValue, Set<String> defaultValues) {
this.entries = entries;
this.values = values;
this.defaultValue = defaultValue;
@@ -54,7 +55,7 @@ public class SettingsFragmentHelper {
private Preference createStringListPreference(SettingsCategory category) {
MultiSelectListPreference pref = new StringListPreference(mStyledContext);
initMultiSelectListPref(category, pref);
initMultiSelectListPreference(category, pref);
return pref;
}
@@ -83,16 +84,16 @@ public class SettingsFragmentHelper {
if (category.items.size() == 1) {
OptionItem item = category.items.get(0);
SwitchPreference pref = new SwitchPreference(mStyledContext);
pref.setPersistent(false);
pref.setTitle(item.getTitle());
pref.setDefaultValue(item.isSelected());
pref.setOnPreferenceChangeListener((preference, newValue) -> {
Preference preference = new SwitchPreference(mStyledContext);
preference.setPersistent(false);
preference.setTitle(item.getTitle());
preference.setDefaultValue(item.isSelected());
preference.setOnPreferenceChangeListener((pref, newValue) -> {
item.onSelect((boolean) newValue);
return true;
});
result = pref;
result = preference;
}
return result;
@@ -100,11 +101,24 @@ public class SettingsFragmentHelper {
public Preference createRadioListPreference(SettingsCategory category) {
ListPreference pref = new ListPreference(mStyledContext);
pref.setPersistent(false);
pref.setTitle(category.title);
pref.setKey(category.toString());
ListPrefData prefData = createListPrefData(category.items);
initSingleSelectListPreference(category, pref);
return pref;
}
public Preference createCheckedListPreference(SettingsCategory category) {
MultiSelectListPreference pref = new MultiSelectListPreference(mStyledContext);
initMultiSelectListPreference(category, pref);
return pref;
}
private void initSingleSelectListPreference(SettingsCategory category, ListPreference pref) {
initDialogPreference(category, pref);
ListPreferenceData prefData = createListPreferenceData(category.items);
pref.setEntries(prefData.entries);
pref.setEntryValues(prefData.values);
@@ -120,24 +134,12 @@ public class SettingsFragmentHelper {
return true;
});
return pref;
}
public Preference createCheckedListPreference(SettingsCategory category) {
MultiSelectListPreference pref = new MultiSelectListPreference(mStyledContext);
private void initMultiSelectListPreference(SettingsCategory category, MultiSelectListPreference pref) {
initDialogPreference(category, pref);
initMultiSelectListPref(category, pref);
return pref;
}
private void initMultiSelectListPref(SettingsCategory category, MultiSelectListPreference pref) {
pref.setPersistent(false);
pref.setTitle(category.title);
pref.setKey(category.toString());
ListPrefData prefData = createListPrefData(category.items);
ListPreferenceData prefData = createListPreferenceData(category.items);
pref.setEntries(prefData.entries);
pref.setEntryValues(prefData.values);
@@ -162,7 +164,7 @@ public class SettingsFragmentHelper {
});
}
public ListPrefData createListPrefData(List<OptionItem> items) {
public ListPreferenceData createListPreferenceData(List<OptionItem> items) {
CharSequence[] titles = new CharSequence[items.size()];
CharSequence[] hashes = new CharSequence[items.size()];
String defaultValue = null;
@@ -183,6 +185,13 @@ public class SettingsFragmentHelper {
}
}
return new ListPrefData(titles, hashes, defaultValue, defaultValues);
return new ListPreferenceData(titles, hashes, defaultValue, defaultValues);
}
private void initDialogPreference(SettingsCategory category, DialogPreference pref) {
pref.setPersistent(false);
pref.setTitle(category.title);
pref.setDialogTitle(category.title);
pref.setKey(category.toString());
}
}
@@ -94,7 +94,7 @@ public class StringListPreferenceDialogFragment extends LeanbackListPreferenceDi
@Override
public Adapter<ViewHolder> onCreateAdapter() {
return new AdapterMulti(mEntries, mEntryValues, mInitialSelections);
return new AdapterMultiStrings(mEntries, mEntryValues, mInitialSelections);
}
public class AdapterMultiStrings extends RecyclerView.Adapter<ViewHolder>
@@ -50,12 +50,15 @@ public class AppUpdateManager implements AppUpdateCheckerListener {
}
private void showUpdateDialog(String versionName, List<String> changelog, String apkPath) {
mSettingsPresenter.clear();
mSettingsPresenter.appendStrings(mContext.getString(R.string.update_changelog), createChangelogOptions(changelog));
mSettingsPresenter.appendButton(
UiOptionItem.from(mContext.getString(R.string.install_update), optionItem -> {
mUpdateChecker.installUpdate();
mUpdateInstalled = true;
}, false));
mSettingsPresenter.showDialog(String.format("%s %s", mContext.getString(R.string.app_name), versionName), ()->{
if (!mUpdateInstalled) {
mUpdateChecker.onUserCancel();