10f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki/*
20f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * Copyright (C) 2010 The Android Open Source Project
30f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki *
40f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
50f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * you may not use this file except in compliance with the License.
60f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * You may obtain a copy of the License at
70f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki *
80f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
90f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki *
100f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * Unless required by applicable law or agreed to in writing, software
110f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
120f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * See the License for the specific language governing permissions and
140f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki * limitations under the License.
150f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki */
160f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
170f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onukipackage com.android.email.activity.setup;
180f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
190f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onukiimport android.os.Bundle;
200f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onukiimport android.preference.ListPreference;
21ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadlerimport android.preference.Preference;
22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.preference.PreferenceCategory;
23ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadlerimport android.preference.Preference.OnPreferenceChangeListener;
24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.preference.PreferenceFragment;
25e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komaloimport android.preference.PreferenceScreen;
26e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komaloimport android.widget.Toast;
27e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo
28e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komaloimport com.android.email.Preferences;
29e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komaloimport com.android.email.R;
30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.email.activity.UiUtilities;
310f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpublic class GeneralPreferences extends PreferenceFragment implements OnPreferenceChangeListener  {
33652a907672165b63d715817ceb08bd010489dab2Paul Westbrook
34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private static final String PREFERENCE_CATEGORY_KEY = "category_general_preferences";
35bfbf0dd853182bd5d644a88363414a4287616781Michael Chan
36ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    private static final String PREFERENCE_KEY_AUTO_ADVANCE = "auto_advance";
37ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    private static final String PREFERENCE_KEY_TEXT_ZOOM = "text_zoom";
38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private static final String PREFERENCE_KEY_REPLY_ALL = Preferences.REPLY_ALL;
39e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo    private static final String PREFERENCE_KEY_CLEAR_TRUSTED_SENDERS = "clear_trusted_senders";
400f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
410f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    private Preferences mPreferences;
420f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    private ListPreference mAutoAdvance;
43ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    private ListPreference mTextZoom;
44ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler
45ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    CharSequence[] mSizeSummaries;
460f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
470f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    @Override
480f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    public void onCreate(Bundle savedInstanceState) {
490f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        super.onCreate(savedInstanceState);
500f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
51bfbf0dd853182bd5d644a88363414a4287616781Michael Chan        getPreferenceManager().setSharedPreferencesName(Preferences.PREFERENCES_FILE);
52bfbf0dd853182bd5d644a88363414a4287616781Michael Chan
530f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        // Load the preferences from an XML resource
540f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        addPreferencesFromResource(R.xml.general_preferences);
55bfbf0dd853182bd5d644a88363414a4287616781Michael Chan
56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (UiUtilities.useTwoPane(getActivity())) {
57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            // "Reply All" should only be shown on phones
58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            PreferenceCategory pc = (PreferenceCategory) findPreference(PREFERENCE_CATEGORY_KEY);
59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            pc.removePreference(findPreference(PREFERENCE_KEY_REPLY_ALL));
60652a907672165b63d715817ceb08bd010489dab2Paul Westbrook        }
610f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    }
620f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
630f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    @Override
640f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    public void onResume() {
650f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        loadSettings();
660f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        super.onResume();
670f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    }
680f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
690f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    @Override
70ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    public boolean onPreferenceChange(Preference preference, Object newValue) {
71ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        String key = preference.getKey();
72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
73ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        if (PREFERENCE_KEY_AUTO_ADVANCE.equals(key)) {
74ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler            mPreferences.setAutoAdvanceDirection(mAutoAdvance.findIndexOfValue((String) newValue));
75ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler            return true;
76ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        } else if (PREFERENCE_KEY_TEXT_ZOOM.equals(key)) {
77ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler            mPreferences.setTextZoom(mTextZoom.findIndexOfValue((String) newValue));
78ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler            reloadDynamicSummaries();
79ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler            return true;
80ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        }
81ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        return false;
820f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    }
830f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
84e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo    @Override
85e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
86e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo        if (getActivity() == null) {
87e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo            // Guard against monkeys.
88e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo            return false;
89e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo        }
90bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
91e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo        String key = preference.getKey();
92e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo        if (key.equals(PREFERENCE_KEY_CLEAR_TRUSTED_SENDERS)) {
93e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo            mPreferences.clearTrustedSenders();
94e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo            Toast.makeText(
95e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo                    getActivity(), R.string.trusted_senders_cleared, Toast.LENGTH_SHORT).show();
96e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo            return true;
97e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo        }
98bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
99e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo        return false;
100e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo    }
101e05f511a4ea9ae28841b385987531d8be1d2d87fBen Komalo
1020f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    private void loadSettings() {
1030f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        mPreferences = Preferences.getPreferences(getActivity());
104ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        mAutoAdvance = (ListPreference) findPreference(PREFERENCE_KEY_AUTO_ADVANCE);
1050f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki        mAutoAdvance.setValueIndex(mPreferences.getAutoAdvanceDirection());
106ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        mAutoAdvance.setOnPreferenceChangeListener(this);
107ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler
108ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        mTextZoom = (ListPreference) findPreference(PREFERENCE_KEY_TEXT_ZOOM);
109bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        mTextZoom.setValueIndex(mPreferences.getTextZoom());
110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        mTextZoom.setOnPreferenceChangeListener(this);
111ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler
112ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        reloadDynamicSummaries();
1130f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    }
1140f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki
115ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    /**
116ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler     * Reload any preference summaries that are updated dynamically
117ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler     */
118ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler    private void reloadDynamicSummaries() {
119bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        int textZoomIndex = mPreferences.getTextZoom();
120bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        // Update summary - but only load the array once
121bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (mSizeSummaries == null) {
122bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            mSizeSummaries = getActivity().getResources()
123bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                    .getTextArray(R.array.general_preference_text_zoom_summary_array);
124bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
125bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        CharSequence summary = null;
126bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (textZoomIndex >= 0 && textZoomIndex < mSizeSummaries.length) {
127bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            summary = mSizeSummaries[textZoomIndex];
128ba0b1bbc8d7cd546d548cea1e4f097462e1fb324Andrew Stadler        }
129bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        mTextZoom.setSummary(summary);
1300f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki    }
1310f52e546ef662e126b7360ad69c8c8f838789ef3Makoto Onuki}
132