package tv.emby.embyatv.settings; import android.app.Fragment; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; import android.widget.TextView; import java.io.IOException; import tv.emby.embyatv.R; import tv.emby.embyatv.TvApp; import tv.emby.embyatv.livetv.TvManager; import tv.emby.embyatv.startup.LogonCredentials; import tv.emby.embyatv.util.Utils; /** * A simple {@link Fragment} subclass. */ public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Set version info TextView ver = (TextView) getActivity().findViewById(R.id.settings_version_info); ver.setText(String.format("%s %s", Utils.VersionString(), TvApp.getApplication().getRegistrationString())); // conditionally hide options that don't apply PreferenceCategory cat = (PreferenceCategory) findPreference("pref_playback_category"); if (Utils.isFireTvStick()) cat.removePreference(findPreference("pref_vlc_max_res")); if (Utils.isFireTv() && !Utils.is50()) cat.removePreference(findPreference("pref_audio_option")); if (Utils.is60()) { cat.removePreference(findPreference("pref_enable_vlc")); cat.removePreference(findPreference("pref_vlc_max_res")); cat.removePreference(findPreference("pref_bitstream_ac3")); } if (!TvApp.getApplication().isRegistered()) { //Indicate that cinema mode requires premiere CheckBoxPreference cm = (CheckBoxPreference) cat.findPreference("pref_enable_cinema_mode"); cm.setEnabled(false); cm.setSummary(R.string.lbl_cm_premiere); } } @Override public void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); ++i) { Preference preference = getPreferenceScreen().getPreference(i); if (preference instanceof PreferenceGroup) { PreferenceGroup preferenceGroup = (PreferenceGroup) preference; for (int j = 0; j < preferenceGroup.getPreferenceCount(); ++j) { updatePreference(preferenceGroup.getPreference(j)); } } else { updatePreference(preference); } } } @Override public void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { //If logon setting is changed to this user, save credentials if (key.equals("pref_login_behavior")) { ListPreference listPreference = (ListPreference) findPreference(key); if (listPreference.getValue().equals("1")) { try { Utils.SaveLoginCredentials(new LogonCredentials(TvApp.getApplication().getApiClient().getServerInfo(), TvApp.getApplication().getCurrentUser()), "tv.mediabrowser.login.json"); } catch (IOException e) { e.printStackTrace(); } } } if (key.equals("pref_guide_sort_date")) { TvManager.resetChannels(); } updatePreference(findPreference(key)); } private void updatePreference(Preference preference) { if (preference instanceof ListPreference) { ListPreference listPreference = (ListPreference) preference; if (listPreference.getKey().equals("pref_login_behavior")) { CheckBoxPreference pwPrompt = (CheckBoxPreference) findPreference("pref_auto_pw_prompt"); pwPrompt.setEnabled(TvApp.getApplication().getConfiguredAutoCredentials().getUserDto().getHasPassword()); String extra = ""; if (listPreference.getValue().equals("1")) { if (!TvApp.getApplication().getConfiguredAutoCredentials().getUserDto().getId().equals(TvApp.getApplication().getCurrentUser().getId())) { listPreference.setEnabled(false); pwPrompt.setEnabled(false); extra = getActivity().getString(R.string.lbl_paren_login_as)+TvApp.getApplication().getConfiguredAutoCredentials().getUserDto().getName()+getActivity().getString(R.string.lbl_to_change_paren); } listPreference.setSummary(getActivity().getString(R.string.lbl_login_as) + TvApp.getApplication().getConfiguredAutoCredentials().getUserDto().getName() + extra); } else { listPreference.setSummary(listPreference.getEntry()); pwPrompt.setEnabled(false); } } else { listPreference.setSummary(listPreference.getEntry()); } } if (preference instanceof CheckBoxPreference) { CheckBoxPreference cb = (CheckBoxPreference) preference; if (cb.getKey().equals("pref_enable_vlc")) { // enable other vlc only options Preference res = findPreference("pref_vlc_max_res"); if (res != null) res.setEnabled(cb.isChecked()); } } } }