AccountSettings.java revision 8978aac1977408b05e386ae846c30920c7faa0a6
1 2package com.android.email.activity.setup; 3 4import android.content.Context; 5import android.content.Intent; 6import android.content.SharedPreferences; 7import android.os.Bundle; 8import android.view.KeyEvent; 9import android.preference.PreferenceActivity; 10import android.preference.EditTextPreference; 11import android.preference.ListPreference; 12import android.preference.CheckBoxPreference; 13import android.preference.Preference; 14import android.preference.RingtonePreference; 15 16import com.android.email.Account; 17import com.android.email.Email; 18import com.android.email.Preferences; 19import com.android.email.R; 20 21public class AccountSettings extends PreferenceActivity { 22 private static final String EXTRA_ACCOUNT = "account"; 23 24 private static final String PREFERENCE_TOP_CATERGORY = "account_settings"; 25 private static final String PREFERENCE_DESCRIPTION = "account_description"; 26 private static final String PREFERENCE_NAME = "account_name"; 27 private static final String PREFERENCE_FREQUENCY = "account_check_frequency"; 28 private static final String PREFERENCE_DEFAULT = "account_default"; 29 private static final String PREFERENCE_NOTIFY = "account_notify"; 30 private static final String PREFERENCE_VIBRATE = "account_vibrate"; 31 private static final String PREFERENCE_RINGTONE = "account_ringtone"; 32 private static final String PREFERENCE_INCOMING = "incoming"; 33 private static final String PREFERENCE_OUTGOING = "outgoing"; 34 private static final String PREFERENCE_ADD_ACCOUNT = "add_account"; 35 36 private Account mAccount; 37 38 private EditTextPreference mAccountDescription; 39 private EditTextPreference mAccountName; 40 private ListPreference mCheckFrequency; 41 private CheckBoxPreference mAccountDefault; 42 private CheckBoxPreference mAccountNotify; 43 private CheckBoxPreference mAccountVibrate; 44 private RingtonePreference mAccountRingtone; 45 46 public static void actionSettings(Context context, Account account) { 47 Intent i = new Intent(context, AccountSettings.class); 48 i.putExtra(EXTRA_ACCOUNT, account); 49 context.startActivity(i); 50 } 51 52 @Override 53 public void onCreate(Bundle savedInstanceState) { 54 super.onCreate(savedInstanceState); 55 56 mAccount = (Account)getIntent().getSerializableExtra(EXTRA_ACCOUNT); 57 58 addPreferencesFromResource(R.xml.account_settings_preferences); 59 60 Preference category = findPreference(PREFERENCE_TOP_CATERGORY); 61 category.setTitle(getString(R.string.account_settings_title_fmt)); 62 63 mAccountDescription = (EditTextPreference) findPreference(PREFERENCE_DESCRIPTION); 64 mAccountDescription.setSummary(mAccount.getDescription()); 65 mAccountDescription.setText(mAccount.getDescription()); 66 mAccountDescription.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 67 public boolean onPreferenceChange(Preference preference, Object newValue) { 68 final String summary = newValue.toString(); 69 mAccountDescription.setSummary(summary); 70 mAccountDescription.setText(summary); 71 return false; 72 } 73 }); 74 75 mAccountName = (EditTextPreference) findPreference(PREFERENCE_NAME); 76 mAccountName.setSummary(mAccount.getName()); 77 mAccountName.setText(mAccount.getName()); 78 mAccountName.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 79 public boolean onPreferenceChange(Preference preference, Object newValue) { 80 final String summary = newValue.toString(); 81 mAccountName.setSummary(summary); 82 mAccountName.setText(summary); 83 return false; 84 } 85 }); 86 87 mCheckFrequency = (ListPreference) findPreference(PREFERENCE_FREQUENCY); 88 mCheckFrequency.setValue(String.valueOf(mAccount.getAutomaticCheckIntervalMinutes())); 89 mCheckFrequency.setSummary(mCheckFrequency.getEntry()); 90 mCheckFrequency.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 91 public boolean onPreferenceChange(Preference preference, Object newValue) { 92 final String summary = newValue.toString(); 93 int index = mCheckFrequency.findIndexOfValue(summary); 94 mCheckFrequency.setSummary(mCheckFrequency.getEntries()[index]); 95 mCheckFrequency.setValue(summary); 96 return false; 97 } 98 }); 99 100 mAccountDefault = (CheckBoxPreference) findPreference(PREFERENCE_DEFAULT); 101 mAccountDefault.setChecked( 102 mAccount.equals(Preferences.getPreferences(this).getDefaultAccount())); 103 104 mAccountNotify = (CheckBoxPreference) findPreference(PREFERENCE_NOTIFY); 105 mAccountNotify.setChecked(mAccount.isNotifyNewMail()); 106 107 mAccountRingtone = (RingtonePreference) findPreference(PREFERENCE_RINGTONE); 108 109 // XXX: The following two lines act as a workaround for the RingtonePreference 110 // which does not let us set/get the value programmatically 111 SharedPreferences prefs = mAccountRingtone.getPreferenceManager().getSharedPreferences(); 112 prefs.edit().putString(PREFERENCE_RINGTONE, mAccount.getRingtone()).commit(); 113 114 mAccountVibrate = (CheckBoxPreference) findPreference(PREFERENCE_VIBRATE); 115 mAccountVibrate.setChecked(mAccount.isVibrate()); 116 117 findPreference(PREFERENCE_INCOMING).setOnPreferenceClickListener( 118 new Preference.OnPreferenceClickListener() { 119 public boolean onPreferenceClick(Preference preference) { 120 onIncomingSettings(); 121 return true; 122 } 123 }); 124 125 findPreference(PREFERENCE_OUTGOING).setOnPreferenceClickListener( 126 new Preference.OnPreferenceClickListener() { 127 public boolean onPreferenceClick(Preference preference) { 128 onOutgoingSettings(); 129 return true; 130 } 131 }); 132 findPreference(PREFERENCE_ADD_ACCOUNT).setOnPreferenceClickListener( 133 new Preference.OnPreferenceClickListener() { 134 public boolean onPreferenceClick(Preference preference) { 135 onAddNewAccount(); 136 return true; 137 } 138 }); 139 } 140 141 @Override 142 public void onResume() { 143 super.onResume(); 144 mAccount.refresh(Preferences.getPreferences(this)); 145 } 146 147 private void saveSettings() { 148 if (mAccountDefault.isChecked()) { 149 Preferences.getPreferences(this).setDefaultAccount(mAccount); 150 } 151 mAccount.setDescription(mAccountDescription.getText()); 152 mAccount.setName(mAccountName.getText()); 153 mAccount.setNotifyNewMail(mAccountNotify.isChecked()); 154 mAccount.setAutomaticCheckIntervalMinutes(Integer.parseInt(mCheckFrequency.getValue())); 155 mAccount.setVibrate(mAccountVibrate.isChecked()); 156 SharedPreferences prefs = mAccountRingtone.getPreferenceManager().getSharedPreferences(); 157 mAccount.setRingtone(prefs.getString(PREFERENCE_RINGTONE, null)); 158 mAccount.save(Preferences.getPreferences(this)); 159 Email.setServicesEnabled(this); 160 } 161 162 @Override 163 public boolean onKeyDown(int keyCode, KeyEvent event) { 164 if (keyCode == KeyEvent.KEYCODE_BACK) { 165 saveSettings(); 166 } 167 return super.onKeyDown(keyCode, event); 168 } 169 170 private void onIncomingSettings() { 171 AccountSetupIncoming.actionEditIncomingSettings(this, mAccount); 172 } 173 174 private void onOutgoingSettings() { 175 AccountSetupOutgoing.actionEditOutgoingSettings(this, mAccount); 176 } 177 178 private void onAddNewAccount() { 179 AccountSetupBasics.actionNewAccount(this); 180 finish(); 181 } 182} 183