private void bind(PreferenceGroup group) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); for (int i = 0; i < group.getPreferenceCount(); i++) { Preference p = group.getPreference(i); if (p instanceof PreferenceGroup) { bind((PreferenceGroup) p); } else { if (p instanceof CheckBoxPreference) {; } else { Object val = sp.getAll().get(p.getKey()); p.setSummary(val == null ? "" : ("" + val)); p.setOnPreferenceChangeListener(this); } } } }
private void initGroups(PreferenceGroup preferences) { final int count = preferences.getPreferenceCount(); for (int i = 0; i < count; i++) { Preference pref = preferences.getPreference(i); if (pref instanceof PreferenceGroup) initGroups((PreferenceGroup) pref); else { pref.setOnPreferenceChangeListener(this); // Some Preference UI elements are not actually preferences, // but they require a key to work correctly. For example, // "Clear private data" requires a key for its state to be // saved when the orientation changes. It uses the // "android.not_a_preference.privacy.clear" key - which doesn't // exist in Gecko - to satisfy this requirement. String key = pref.getKey(); if (key != null && !key.startsWith(NON_PREF_PREFIX)) { mPreferencesList.add(pref.getKey()); } } } }
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); sharedPreferences = getPreferenceScreen().getSharedPreferences(); connectionSettings = (PreferenceScreen) getPreferenceScreen().findPreference("connection_group"); hostPref = (EditTextPreference) getPreferenceScreen().findPreference("host"); portPref = (EditTextPreference) getPreferenceScreen().findPreference("port"); passPref = (EditTextPreference) getPreferenceScreen().findPreference("password"); textSizePref = (EditTextPreference) getPreferenceScreen().findPreference("text_size"); bufferFontPref = (FontPreference) getPreferenceScreen().findPreference("buffer_font"); timestampformatPref = (EditTextPreference) getPreferenceScreen().findPreference("timestamp_format"); timestampformatPref.setOnPreferenceChangeListener( new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object pattern) { try { new SimpleDateFormat((String) pattern); } catch (IllegalArgumentException e) { Toast.makeText( WeechatPreferencesActivity.this, R.string.pref_timestamp_invalid, Toast.LENGTH_SHORT) .show(); return false; } return true; } }); stunnelCert = (EditTextPreference) getPreferenceScreen().findPreference("stunnel_cert"); stunnelPass = (EditTextPreference) getPreferenceScreen().findPreference("stunnel_pass"); sshHostPref = (EditTextPreference) getPreferenceScreen().findPreference("ssh_host"); sshUserPref = (EditTextPreference) getPreferenceScreen().findPreference("ssh_user"); sshPortPref = (EditTextPreference) getPreferenceScreen().findPreference("ssh_port"); sshPassPref = (EditTextPreference) getPreferenceScreen().findPreference("ssh_pass"); sshKeyFilePref = (EditTextPreference) getPreferenceScreen().findPreference("ssh_keyfile"); prefixPref = (ListPreference) getPreferenceScreen().findPreference("prefix_align"); Preference prefixWidthPref = getPreferenceScreen().findPreference("prefix_max_width"); prefixWidthPref.setOnPreferenceChangeListener( new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { try { Integer.parseInt((String) newValue); } catch (IllegalArgumentException e) { Toast.makeText( WeechatPreferencesActivity.this, R.string.pref_prefix_width_invalid, Toast.LENGTH_SHORT) .show(); return false; } return true; } }); connectionTypePref = (ListPreference) getPreferenceScreen().findPreference("connection_type"); pingPreferences = (PreferenceScreen) getPreferenceScreen().findPreference("ping_group"); pingEnabledPref = (CheckBoxPreference) getPreferenceScreen().findPreference("ping_enabled"); setTitle(R.string.preferences); // Really simple validation to make sure they don't have a space in the hostname(common when // using android's autocomplete hostPref.setOnPreferenceChangeListener( new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String val = (String) newValue; if (val.contains(" ")) { Toast.makeText( WeechatPreferencesActivity.this, R.string.pref_hostname_invalid, Toast.LENGTH_SHORT) .show(); return false; } return true; } }); sshHostPref.setOnPreferenceChangeListener( new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String val = (String) newValue; if (val.contains(" ")) { Toast.makeText( WeechatPreferencesActivity.this, R.string.pref_hostname_invalid, Toast.LENGTH_SHORT) .show(); return false; } return true; } }); }
/** @see android.app.Activity#onResume() */ @Override protected void onResume() { super.onResume(); final HistoryManager historyManager = HashItApplication.getApp(this).getHistoryManager(); final PreferenceScreen prefScreen = getPreferenceScreen(); final SharedPreferences defaults = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); if (SDK_INT >= HONEYCOMB) { // Look & Feel final PreferenceCategory lookAndFeel = new PreferenceCategory(this); lookAndFeel.setTitle(R.string.Header_LookAndFeel); prefScreen.addPreference(lookAndFeel); final Preference useDarkTheme = addCheckBoxPreference( lookAndFeel, USE_DARK_THEME, R.string.CheckBox_UseDarkTheme, defaults, false); useDarkTheme.setOnPreferenceChangeListener( new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { recreate(); return true; } }); } // Convenience final PreferenceCategory convenience = new PreferenceCategory(this); convenience.setTitle(R.string.Header_Convenience); prefScreen.addPreference(convenience); final Preference enableHistory = addCheckBoxPreference( convenience, ENABLE_HISTORY, R.string.CheckBox_EnableHistory, defaults, true); enableHistory.setSummary(R.string.Summary_EnableHistory); final boolean enableClear = historyManager != null && !historyManager.isEmpty(); final Preference clear = addActionPreference( convenience, R.string.Action_ClearHistory, new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference pref) { historyManager.clear(); pref.setSummary(R.string.Summary_ClearHistory_Empty); pref.setEnabled(false); return true; } }, enableClear); clear.setSummary( enableClear ? R.string.Summary_ClearHistory : R.string.Summary_ClearHistory_Empty); final Preference autoExit = addCheckBoxPreference(convenience, AUTO_EXIT, R.string.CheckBox_AutoExit, defaults, false); autoExit.setSummary(R.string.Summary_AutoExit); final ListPreference cacheDuration = addListPreference( convenience, CACHE_DURATION, R.string.Label_CacheMasterKey, R.string.Header_CacheDuration, R.array.Array_CacheDuration, R.array.Array_CacheDuration_Values, defaults, -1); cacheDuration.setOnPreferenceChangeListener( new OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { updateSummary((ListPreference) preference, newValue); if (Integer.parseInt((String) newValue) <= 0) { MemoryCacheServiceImpl.stopService(SettingsActivity.this); } return true; } }); updateSummary(cacheDuration, cacheDuration.getValue()); final Preference showMasterKeyDigest; showMasterKeyDigest = addCheckBoxPreference( convenience, SHOW_MASTER_KEY_DIGEST, R.string.CheckBox_ShowMasterKeyDigest, defaults, true); showMasterKeyDigest.setSummary(R.string.Summary_ShowMasterKeyDigest); disableConflictingPreferences(DISABLE_CLIPBOARD, DEPS_DISABLE_CLIPBOARD); if (savedState != null) { final Parcelable listState = savedState.getParcelable(PREF_LIST_STATE); if (listState != null) { Handler handler = new Handler(); // run the position restore delayed (as it won't work synchronously) handler.post( new Runnable() { @Override public void run() { final ListView listView = getListView(); listView.onRestoreInstanceState(listState); } }); } savedState = null; } }
@Override protected void populateSecurityCategory( final PreferenceCategory security, final SharedPreferences defaults) { final Preference compatibilityMode = addCheckBoxPreference( security, COMPATIBILITY_MODE, R.string.CheckBox_CompatibilityMode, defaults, true); compatibilityMode.setSummary(R.string.Summary_CompatibilityMode); compatibilityMode.setOnPreferenceChangeListener( new OnPreferenceChangeListener() { public boolean onPreferenceChange(final Preference pref, final Object newValue) { if (Boolean.FALSE == newValue) { new AlertDialog.Builder(SettingsActivity.this) .setTitle(R.string.Title_SeedWarning) .setMessage(R.string.Message_SeedWarning) .setPositiveButton(android.R.string.ok, new DummyOnClickListener()) .setIcon(R.drawable.icon) .show(); } return true; } }); final Preference setPrivateKey = addActionPreference( security, R.string.Action_ChangeSeed, new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference pref) { final View view = View.inflate(SettingsActivity.this, R.layout.seed_entry, null); final EditText seed = (EditText) view.findViewById(R.id.Edit_SeedEntry); seed.setText(SeedHelper.getSeed(defaults)); new AlertDialog.Builder(SettingsActivity.this) .setTitle(R.string.Title_ChangeSeed) .setView(view) .setPositiveButton( android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { SeedHelper.storeSeed(seed.getText().toString(), defaults); } }) .setNegativeButton(android.R.string.cancel, new DummyOnClickListener()) .setCancelable(true) .setIcon(R.drawable.icon) .show(); return true; } }, true); setPrivateKey.setSummary(R.string.Summary_ChangeSeed); final Preference disableClipboard = addCheckBoxPreference( security, DISABLE_CLIPBOARD, R.string.CheckBox_DisableClipboard, defaults, false); disableClipboard.setSummary(R.string.Summary_DisableClipboard); disableClipboard.setOnPreferenceChangeListener( new OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newVal) { Boolean newValue = (Boolean) newVal; disableConflictingPreferences(newValue, true, DEPS_DISABLE_CLIPBOARD); if (newValue) ((CheckBoxPreference) findPreference(AUTO_EXIT)).setChecked(false); return true; } }); }