package info.papdt.express.helper.ui.fragment.settings; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.SwitchPreference; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import com.afollestad.materialdialogs.prefs.MaterialListPreference; import com.rengwuxian.materialedittext.MaterialEditText; import info.papdt.express.helper.R; import info.papdt.express.helper.support.Settings; import info.papdt.express.helper.support.Utility; import info.papdt.express.helper.ui.SettingsActivity; public class SettingsMain extends PreferenceFragment implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { public static SettingsMain newInstance() { return new SettingsMain(); } public SettingsMain() { } private Settings mSets; private Preference pref_version, pref_os_license, pref_api_provider, pref_weibo, pref_github, pref_token_custom; private SwitchPreference pref_swipe_back; private SwitchPreference pref_do_not_disturb; private SwitchPreference pref_disable_animation; private SwitchPreference pref_navigation_tint; private MaterialListPreference pref_token_choose; private MaterialListPreference pref_notification_interval; private MaterialDialog dialog_custom_token; private MaterialEditText et_secret, et_id; @Override public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); addPreferencesFromResource(R.xml.pref_main); mSets = Settings.getInstance(getActivity().getApplicationContext()); getActivity().setTitle(R.string.title_settings); pref_version = findPreference("application_version"); pref_weibo = findPreference("sina_weibo"); pref_os_license = findPreference("open_source_license"); pref_api_provider = findPreference("api_provider"); pref_github = findPreference("github_repo"); pref_token_choose = (MaterialListPreference) findPreference("api_token_choose"); pref_token_custom = findPreference("api_token_custom"); pref_swipe_back = (SwitchPreference) findPreference("swipe_back"); pref_notification_interval = (MaterialListPreference) findPreference("notification_interval"); pref_do_not_disturb = (SwitchPreference) findPreference("do_not_disturb"); pref_disable_animation = (SwitchPreference) findPreference("disable_animation"); pref_navigation_tint = (SwitchPreference) findPreference("navigation_tint"); String version = "Unknown"; try { version = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName; version += " (" + getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionCode + ")"; } catch (Exception e) { // Keep the default value } pref_version.setSummary(version); pref_swipe_back.setChecked(mSets.getBoolean(Settings.KEY_SWIPE_BACK, true)); pref_token_custom.setDefaultValue(mSets.getInt(Settings.KEY_TOKEN_CHOOSE, 0)); pref_token_custom.setEnabled(mSets.getInt(Settings.KEY_TOKEN_CHOOSE, 0) == 2); pref_do_not_disturb.setChecked(mSets.getBoolean(Settings.KEY_NOTIFICATION_DO_NOT_DISTURB, true)); pref_disable_animation.setChecked(mSets.getBoolean(Settings.KEY_DISABLE_ANIMATION, false)); if (Build.VERSION.SDK_INT < 21) { pref_navigation_tint.setEnabled(false); pref_navigation_tint.setChecked(false); } else { pref_navigation_tint.setChecked(mSets.getBoolean(Settings.KEY_NAVIGATION_TINT, true)); } String[] values = getResources().getStringArray(R.array.item_token_list_values); int index, target = mSets.getInt(Settings.KEY_TOKEN_CHOOSE, 0); for (index = 0; index < values.length; index++) { if (values[index].equals(String.valueOf(target))) break; } pref_token_choose.setSummary( getResources().getStringArray(R.array.item_token_list) [index] ); String[] values1 = getResources().getStringArray(R.array.notification_interval_item); int index1, target1 = mSets.getInt(Settings.KEY_NOTIFICATION_INTERVAL, 0); for (index1 = 0; index1 < values.length; index1++) { if (values1[index1].equals(String.valueOf(target1))) break; } pref_notification_interval.setSummary( getResources().getStringArray(R.array.notification_interval) [index1] ); pref_weibo.setOnPreferenceClickListener(this); pref_os_license.setOnPreferenceClickListener(this); pref_api_provider.setOnPreferenceClickListener(this); pref_github.setOnPreferenceClickListener(this); pref_token_custom.setOnPreferenceClickListener(this); pref_token_choose.setOnPreferenceChangeListener(this); pref_swipe_back.setOnPreferenceChangeListener(this); pref_notification_interval.setOnPreferenceChangeListener(this); pref_do_not_disturb.setOnPreferenceChangeListener(this); pref_disable_animation.setOnPreferenceChangeListener(this); pref_navigation_tint.setOnPreferenceChangeListener(this); } @Override public boolean onPreferenceClick(Preference p) { if (p == pref_weibo) { openWebsite(getString(R.string.item_weibo_author_url)); return true; } if (p == pref_os_license) { SettingsActivity.launchActivity(getActivity(), SettingsActivity.FLAG_LICENSE); return true; } if (p == pref_api_provider) { openWebsite(getString(R.string.api_provider_home)); return true; } if (p == pref_github) { openWebsite(getString(R.string.item_github_url)); return true; } if (p == pref_token_custom) { showCustomTokenDialog(); return true; } return false; } private void openWebsite(String url) { Uri uri = Uri.parse(url); startActivity(new Intent(Intent.ACTION_VIEW, uri)); } private void showCustomTokenDialog() { if (dialog_custom_token == null) { dialog_custom_token = new MaterialDialog.Builder(getActivity()) .title(R.string.dialog_token_custom_title) .customView(R.layout.dialog_custom_token, false) .positiveText(android.R.string.ok) .negativeText(android.R.string.cancel) .neutralText(R.string.dialog_token_custom_how_to_get_it) .callback(new MaterialDialog.ButtonCallback() { @Override public void onNegative(MaterialDialog dialog) { super.onNegative(dialog); } @Override public void onPositive(MaterialDialog dialog) { super.onPositive(dialog); mSets.putString(Settings.KEY_CUSTOM_SECRET, et_secret.getText().toString().trim()); mSets.putString(Settings.KEY_CUSTOM_ID, et_id.getText().toString().trim()); } @Override public void onNeutral(MaterialDialog dialog) { super.onNeutral(dialog); openWebsite("http://feng.moe/?p=111"); } }) .build(); et_secret = (MaterialEditText) dialog_custom_token.getCustomView().findViewById(R.id.et_secret); et_id = (MaterialEditText) dialog_custom_token.getCustomView().findViewById(R.id.et_app_id); } et_secret.setText(mSets.getString(Settings.KEY_CUSTOM_SECRET, "")); et_id.setText(mSets.getString(Settings.KEY_CUSTOM_ID, "")); dialog_custom_token.show(); } @Override public boolean onPreferenceChange(Preference pref, Object newValue) { if (pref == pref_token_choose) { int value = Integer.parseInt((String) newValue); mSets.putInt(Settings.KEY_TOKEN_CHOOSE, value); pref_token_custom.setEnabled(value == 2); String[] values = getResources().getStringArray(R.array.item_token_list_values); int index; for (index = 0; index < values.length; index++) { if (values[index].equals(newValue)) break; } pref_token_choose.setSummary(getResources().getStringArray(R.array.item_token_list)[index]); return true; } if (pref == pref_notification_interval) { int value = Integer.parseInt((String) newValue); mSets.putInt(Settings.KEY_NOTIFICATION_INTERVAL, value); String[] values = getResources().getStringArray(R.array.notification_interval_item); int index; for (index = 0; index < values.length; index++) { if (values[index].equals(newValue)) break; } pref_notification_interval.setSummary(getResources().getStringArray(R.array.notification_interval)[index]); Utility.restartServices(getActivity().getApplicationContext()); return true; } if (pref == pref_swipe_back) { Boolean b = (Boolean) newValue; mSets.putBoolean(Settings.KEY_SWIPE_BACK, b); pref_swipe_back.setChecked(b); showRestartTips(); return true; } if (pref == pref_do_not_disturb) { Boolean b = (Boolean) newValue; mSets.putBoolean(Settings.KEY_NOTIFICATION_DO_NOT_DISTURB, b); pref_do_not_disturb.setChecked(b); return true; } if (pref == pref_disable_animation) { Boolean b = (Boolean) newValue; mSets.putBoolean(Settings.KEY_DISABLE_ANIMATION, b); pref_disable_animation.setChecked(b); return true; } if (pref == pref_navigation_tint) { Boolean b = (Boolean) newValue; mSets.putBoolean(Settings.KEY_NAVIGATION_TINT, b); pref_navigation_tint.setChecked(b); return true; } return false; } private void showRestartTips() { Toast.makeText( getActivity().getApplicationContext(), R.string.toast_you_need_restart, Toast.LENGTH_SHORT ).show(); } }