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