172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/*
272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 Esmertec AG.
372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project
472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License.
772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at
872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and
1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License.
1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.ui;
1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
203c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylorimport android.app.ActionBar;
2190e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylorimport android.app.Activity;
228447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylorimport android.app.AlertDialog;
238447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylorimport android.app.Dialog;
24d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylorimport android.content.Context;
258447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylorimport android.content.DialogInterface;
264c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylorimport android.content.Intent;
279258283a430fdf030785c96380c2628603ea7e20Jim Shumaimport android.content.SharedPreferences;
2890e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylorimport android.media.Ringtone;
2990e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylorimport android.media.RingtoneManager;
3090e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylorimport android.net.Uri;
3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle;
32d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylorimport android.preference.CheckBoxPreference;
339258283a430fdf030785c96380c2628603ea7e20Jim Shumaimport android.preference.ListPreference;
3453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylorimport android.preference.Preference;
35d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.preference.Preference.OnPreferenceChangeListener;
3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.preference.PreferenceActivity;
374c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylorimport android.preference.PreferenceCategory;
3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.preference.PreferenceManager;
3953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylorimport android.preference.PreferenceScreen;
4090e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylorimport android.preference.RingtonePreference;
41f114492537753bc68640d4a0d403861387296bcbMark Wagnerimport android.provider.SearchRecentSuggestions;
4241ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylorimport android.text.TextUtils;
4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Menu;
4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.MenuItem;
453239889e9a417617b755d4cde22070843e5c070bTom Taylor
46d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.MmsApp;
47d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.MmsConfig;
48d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.R;
4956e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylorimport com.android.mms.transaction.TransactionService;
503239889e9a417617b755d4cde22070843e5c070bTom Taylorimport com.android.mms.util.Recycler;
5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/**
5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * With this activity, users can set preferences for MMS and SMS and
5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * can access and manipulate SMS messages stored on the SIM.
5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
5692bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylorpublic class MessagingPreferenceActivity extends PreferenceActivity
5792bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor            implements OnPreferenceChangeListener {
5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    // Symbolic names for the keys used for preference lookup
5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String MMS_DELIVERY_REPORT_MODE = "pref_key_mms_delivery_reports";
6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String EXPIRY_TIME              = "pref_key_mms_expiry";
6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String PRIORITY                 = "pref_key_mms_priority";
6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String READ_REPORT_MODE         = "pref_key_mms_read_reports";
6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String SMS_DELIVERY_REPORT_MODE = "pref_key_sms_delivery_reports";
6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String NOTIFICATION_ENABLED     = "pref_key_enable_notifications";
6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String NOTIFICATION_VIBRATE     = "pref_key_vibrate";
66006d49271549ed639ffcd70d94c7650bb3514796Jim Shuma    public static final String NOTIFICATION_VIBRATE_WHEN= "pref_key_vibrateWhen";
6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String NOTIFICATION_RINGTONE    = "pref_key_ringtone";
6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String AUTO_RETRIEVAL           = "pref_key_mms_auto_retrieval";
6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String RETRIEVAL_DURING_ROAMING = "pref_key_mms_retrieval_during_roaming";
703239889e9a417617b755d4cde22070843e5c070bTom Taylor    public static final String AUTO_DELETE              = "pref_key_auto_delete";
719889006f9d29d0509c1c036987ce028de43ac96eTom Taylor    public static final String GROUP_MMS_MODE           = "pref_key_mms_group_mms";
7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    // Menu entries
7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final int MENU_RESTORE_DEFAULTS    = 1;
7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private Preference mSmsLimitPref;
77b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin    private Preference mSmsDeliveryReportPref;
7853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private Preference mMmsLimitPref;
79b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin    private Preference mMmsDeliveryReportPref;
809889006f9d29d0509c1c036987ce028de43ac96eTom Taylor    private Preference mMmsGroupMmsPref;
81b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin    private Preference mMmsReadReportPref;
824c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor    private Preference mManageSimPref;
838447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor    private Preference mClearHistoryPref;
8490e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor    private CheckBoxPreference mVibratePref;
85d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    private CheckBoxPreference mEnableNotificationsPref;
8656e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor    private CheckBoxPreference mMmsAutoRetrievialPref;
8790e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor    private RingtonePreference mRingtonePref;
8853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private Recycler mSmsRecycler;
8953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private Recycler mMmsRecycler;
908447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor    private static final int CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG = 3;
9153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    protected void onCreate(Bundle icicle) {
9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        super.onCreate(icicle);
95dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor
96dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        loadPrefs();
97dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor
98dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        ActionBar actionBar = getActionBar();
99dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        actionBar.setDisplayHomeAsUpEnabled(true);
100dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor    }
101dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor
102dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor    @Override
103dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor    protected void onResume() {
104dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        super.onResume();
105dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor
106dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // Since the enabled notifications pref can be changed outside of this activity,
107dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // we have to reload it whenever we resume.
108dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        setEnabledNotificationsPref();
109b7eb6357e0884b7423a81ae3fed008e8e07c14e1Jean-Baptiste Queru        registerListeners();
110dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor    }
111dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor
112dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor    private void loadPrefs() {
11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        addPreferencesFromResource(R.xml.preferences);
11453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
1154c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor        mManageSimPref = findPreference("pref_key_manage_sim_messages");
11653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        mSmsLimitPref = findPreference("pref_key_sms_delete_limit");
117b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin        mSmsDeliveryReportPref = findPreference("pref_key_sms_delivery_reports");
118b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin        mMmsDeliveryReportPref = findPreference("pref_key_mms_delivery_reports");
1199889006f9d29d0509c1c036987ce028de43ac96eTom Taylor        mMmsGroupMmsPref = findPreference("pref_key_mms_group_mms");
120b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin        mMmsReadReportPref = findPreference("pref_key_mms_read_reports");
12153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        mMmsLimitPref = findPreference("pref_key_mms_delete_limit");
1228447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor        mClearHistoryPref = findPreference("pref_key_mms_clear_history");
123d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        mEnableNotificationsPref = (CheckBoxPreference) findPreference(NOTIFICATION_ENABLED);
12456e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor        mMmsAutoRetrievialPref = (CheckBoxPreference) findPreference(AUTO_RETRIEVAL);
12590e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        mVibratePref = (CheckBoxPreference) findPreference(NOTIFICATION_VIBRATE);
12690e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        mRingtonePref = (RingtonePreference) findPreference(NOTIFICATION_RINGTONE);
12792bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor
128d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        setMessagePreferences();
129d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    }
130d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
131dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor    private void restoreDefaultPreferences() {
132dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        PreferenceManager.getDefaultSharedPreferences(this).edit().clear().apply();
133dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        setPreferenceScreen(null);
134dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        loadPrefs();
135dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor
136dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // NOTE: After restoring preferences, the auto delete function (i.e. message recycler)
137dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // will be turned off by default. However, we really want the default to be turned on.
138dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // Because all the prefs are cleared, that'll cause:
139dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // ConversationList.runOneTimeStorageLimitCheckForLegacyMessages to get executed the
140dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // next time the user runs the Messaging app and it will either turn on the setting
141dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // by default, or if the user is over the limits, encourage them to turn on the setting
142dd52c9d19bbc089d69d86811f49fead9b52be507Tom Taylor        // manually.
143d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    }
144d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
145d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    private void setMessagePreferences() {
146bb8edcae15a50b3651261db70791afc668aae294Tom Taylor        if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) {
1474c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor            // No SIM card, remove the SIM-related prefs
1484c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor            PreferenceCategory smsCategory =
1494c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor                (PreferenceCategory)findPreference("pref_key_sms_settings");
1504c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor            smsCategory.removePreference(mManageSimPref);
1514c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor        }
152b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin
153602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor        if (!MmsConfig.getSMSDeliveryReportsEnabled()) {
154b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin            PreferenceCategory smsCategory =
155b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin                (PreferenceCategory)findPreference("pref_key_sms_settings");
156b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin            smsCategory.removePreference(mSmsDeliveryReportPref);
157b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin            if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) {
158b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin                getPreferenceScreen().removePreference(smsCategory);
159b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin            }
160b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin        }
161b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin
162c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor        if (!MmsConfig.getMmsEnabled()) {
163c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor            // No Mms, remove all the mms-related preferences
164c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor            PreferenceCategory mmsOptions =
165c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor                (PreferenceCategory)findPreference("pref_key_mms_settings");
166c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor            getPreferenceScreen().removePreference(mmsOptions);
167c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor
168c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor            PreferenceCategory storageOptions =
169c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor                (PreferenceCategory)findPreference("pref_key_storage_settings");
170c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor            storageOptions.removePreference(findPreference("pref_key_mms_delete_limit"));
171b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin        } else {
1729889006f9d29d0509c1c036987ce028de43ac96eTom Taylor            PreferenceCategory mmsOptions =
173b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin                    (PreferenceCategory)findPreference("pref_key_mms_settings");
1749889006f9d29d0509c1c036987ce028de43ac96eTom Taylor            if (!MmsConfig.getMMSDeliveryReportsEnabled()) {
175b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin                mmsOptions.removePreference(mMmsDeliveryReportPref);
176b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin            }
177602025862f535f493bb348dc2a6cc9a1fe150fb1Tom Taylor            if (!MmsConfig.getMMSReadReportsEnabled()) {
178b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin                mmsOptions.removePreference(mMmsReadReportPref);
179b264ea0a6b212e90b4736d0a8ffde69c15293ee3Soojung Shin            }
18041ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor            // If the phone's SIM doesn't know it's own number, disable group mms.
18141ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor            if (!MmsConfig.getGroupMmsEnabled() ||
18241ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor                    TextUtils.isEmpty(MessageUtils.getLocalNumber())) {
1839889006f9d29d0509c1c036987ce028de43ac96eTom Taylor                mmsOptions.removePreference(mMmsGroupMmsPref);
1849889006f9d29d0509c1c036987ce028de43ac96eTom Taylor            }
185c555f86a3f5b2f19244cc9c282f49cb834de12e8Tom Taylor        }
1864c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor
187d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        setEnabledNotificationsPref();
188d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
18990e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        // If needed, migrate vibration setting from the previous tri-state setting stored in
19090e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        // NOTIFICATION_VIBRATE_WHEN to the boolean setting stored in NOTIFICATION_VIBRATE.
1919258283a430fdf030785c96380c2628603ea7e20Jim Shuma        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
19290e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        if (sharedPreferences.contains(NOTIFICATION_VIBRATE_WHEN)) {
19390e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            String vibrateWhen = sharedPreferences.
19490e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor                    getString(MessagingPreferenceActivity.NOTIFICATION_VIBRATE_WHEN, null);
19590e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            boolean vibrate = "always".equals(vibrateWhen);
19690e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
19790e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            prefsEditor.putBoolean(NOTIFICATION_VIBRATE, vibrate);
19890e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            prefsEditor.remove(NOTIFICATION_VIBRATE_WHEN);  // remove obsolete setting
19990e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            prefsEditor.apply();
20090e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            mVibratePref.setChecked(vibrate);
2019258283a430fdf030785c96380c2628603ea7e20Jim Shuma        }
2029258283a430fdf030785c96380c2628603ea7e20Jim Shuma
20353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        mSmsRecycler = Recycler.getSmsRecycler();
20453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        mMmsRecycler = Recycler.getMmsRecycler();
20553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
2063239889e9a417617b755d4cde22070843e5c070bTom Taylor        // Fix up the recycler's summary with the correct values
20753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        setSmsDisplayLimit();
20853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        setMmsDisplayLimit();
20992bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor
21090e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        String soundValue = sharedPreferences.getString(NOTIFICATION_RINGTONE, null);
21190e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        setRingtoneSummary(soundValue);
21290e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor    }
21390e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor
21490e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor    private void setRingtoneSummary(String soundValue) {
21590e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        Uri soundUri = TextUtils.isEmpty(soundValue) ? null : Uri.parse(soundValue);
21690e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        Ringtone tone = soundUri != null ? RingtoneManager.getRingtone(this, soundUri) : null;
21790e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        mRingtonePref.setSummary(tone != null ? tone.getTitle(this)
21890e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor                : getResources().getString(R.string.silent_ringtone));
21953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
22053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
221d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    private void setEnabledNotificationsPref() {
222d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        // The "enable notifications" setting is really stored in our own prefs. Read the
223d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        // current value and set the checkbox to match.
224d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        mEnableNotificationsPref.setChecked(getNotificationEnabled(this));
225d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    }
226d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
22753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private void setSmsDisplayLimit() {
22853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        mSmsLimitPref.setSummary(
22953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                getString(R.string.pref_summary_delete_limit,
23053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                        mSmsRecycler.getMessageLimit(this)));
23153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
23253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
23353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    private void setMmsDisplayLimit() {
23453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        mMmsLimitPref.setSummary(
23553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                getString(R.string.pref_summary_delete_limit,
23653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                        mMmsRecycler.getMessageLimit(this)));
23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        super.onCreateOptionsMenu(menu);
24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        menu.clear();
24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        menu.add(0, MENU_RESTORE_DEFAULTS, 0, R.string.restore_default);
24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return true;
24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public boolean onOptionsItemSelected(MenuItem item) {
24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        switch (item.getItemId()) {
24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            case MENU_RESTORE_DEFAULTS:
25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                restoreDefaultPreferences();
25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                return true;
2523c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylor
2533c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylor            case android.R.id.home:
2543c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylor                // The user clicked on the Messaging icon in the action bar. Take them back from
2553c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylor                // wherever they came from
2563c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylor                finish();
2573c4edf4c2b63078cb7aae9806b7ed7b2faa50d9eTom Taylor                return true;
25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return false;
26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
26153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
26253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    @Override
26353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
26453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            Preference preference) {
26553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        if (preference == mSmsLimitPref) {
26653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            new NumberPickerDialog(this,
26753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mSmsLimitListener,
26853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mSmsRecycler.getMessageLimit(this),
26953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mSmsRecycler.getMessageMinLimit(),
27053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mSmsRecycler.getMessageMaxLimit(),
27153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    R.string.pref_title_sms_delete).show();
27253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        } else if (preference == mMmsLimitPref) {
27353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            new NumberPickerDialog(this,
27453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mMmsLimitListener,
27553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mMmsRecycler.getMessageLimit(this),
27653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mMmsRecycler.getMessageMinLimit(),
27753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    mMmsRecycler.getMessageMaxLimit(),
27853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                    R.string.pref_title_mms_delete).show();
2794c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor        } else if (preference == mManageSimPref) {
2804c93cf90a87725e0b6958f933b20e149e6c074f0Tom Taylor            startActivity(new Intent(this, ManageSimMessages.class));
2818447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor        } else if (preference == mClearHistoryPref) {
2828447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor            showDialog(CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG);
2838447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor            return true;
284d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        } else if (preference == mEnableNotificationsPref) {
285d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor            // Update the actual "enable notifications" value that is stored in secure settings.
286d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor            enableNotifications(mEnableNotificationsPref.isChecked(), this);
28756e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor        } else if (preference == mMmsAutoRetrievialPref) {
28856e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor            if (mMmsAutoRetrievialPref.isChecked()) {
28956e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor                startMmsDownload();
29056e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor            }
29153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        }
29253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
29353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        return super.onPreferenceTreeClick(preferenceScreen, preference);
29453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    }
29553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
29656e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor    /**
29756e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor     * Trigger the TransactionService to download any outstanding messages.
29856e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor     */
29956e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor    private void startMmsDownload() {
30056e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor        startService(new Intent(TransactionService.ACTION_ENABLE_AUTO_RETRIEVE, null, this,
30156e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor                TransactionService.class));
30256e8095ef2e82f8db5fd4a04fa0a67c91cc7fbd3Tom Taylor    }
30353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
30453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    NumberPickerDialog.OnNumberSetListener mSmsLimitListener =
30553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        new NumberPickerDialog.OnNumberSetListener() {
30653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            public void onNumberSet(int limit) {
30753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                mSmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit);
30853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                setSmsDisplayLimit();
30953a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            }
31053a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    };
31153a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor
31253a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    NumberPickerDialog.OnNumberSetListener mMmsLimitListener =
31353a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor        new NumberPickerDialog.OnNumberSetListener() {
31453a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            public void onNumberSet(int limit) {
31553a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                mMmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit);
31653a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor                setMmsDisplayLimit();
31753a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor            }
31853a1dc1c4fed88c20a3ce4c2d37c909dc1e469e2Tom Taylor    };
3198447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor
3208447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor    @Override
3218447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor    protected Dialog onCreateDialog(int id) {
3228447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor        switch (id) {
3238447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor            case CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG:
3248447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                return new AlertDialog.Builder(MessagingPreferenceActivity.this)
3258447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                    .setTitle(R.string.confirm_clear_search_title)
3268447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                    .setMessage(R.string.confirm_clear_search_text)
3278447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                    .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
3288447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                        public void onClick(DialogInterface dialog, int which) {
329f114492537753bc68640d4a0d403861387296bcbMark Wagner                            SearchRecentSuggestions recent =
330f114492537753bc68640d4a0d403861387296bcbMark Wagner                                ((MmsApp)getApplication()).getRecentSuggestions();
331f114492537753bc68640d4a0d403861387296bcbMark Wagner                            if (recent != null) {
332f114492537753bc68640d4a0d403861387296bcbMark Wagner                                recent.clearHistory();
333f114492537753bc68640d4a0d403861387296bcbMark Wagner                            }
334c4a34a0ccd414e2bba937e8abd105a0383afff35Tom Taylor                            dialog.dismiss();
3358447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                        }
3368447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                    })
3378447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                    .setNegativeButton(android.R.string.cancel, null)
3387ad0a61f99867ac19cabd31b0d8db2ef4c234d24Björn Lundén                    .setIconAttribute(android.R.attr.alertDialogIcon)
3398447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor                    .create();
3408447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor        }
3418447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor        return super.onCreateDialog(id);
3428447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor    }
3438447aa1d84a469e8938b53a60b0763633b08ae98Tom Taylor
344d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    public static boolean getNotificationEnabled(Context context) {
345d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
346d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        boolean notificationsEnabled =
347d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor            prefs.getBoolean(MessagingPreferenceActivity.NOTIFICATION_ENABLED, true);
348d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        return notificationsEnabled;
349d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    }
350d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
351d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    public static void enableNotifications(boolean enabled, Context context) {
352d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        // Store the value of notifications in SharedPreferences
353d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        SharedPreferences.Editor editor =
354d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor            PreferenceManager.getDefaultSharedPreferences(context).edit();
355d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
356d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        editor.putBoolean(MessagingPreferenceActivity.NOTIFICATION_ENABLED, enabled);
357d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor
358d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor        editor.apply();
359d83675687b1ef742c33bffe8195d7b1852c2c01dTom Taylor    }
36092bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor
36192bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor    private void registerListeners() {
36290e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        mRingtonePref.setOnPreferenceChangeListener(this);
36392bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor    }
36492bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor
36592bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor    public boolean onPreferenceChange(Preference preference, Object newValue) {
36692bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor        boolean result = false;
36790e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor        if (preference == mRingtonePref) {
36890e32e59610d4a395716b1cfa9c8b041b45e3d4eTom Taylor            setRingtoneSummary((String)newValue);
36992bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor            result = true;
37092bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor        }
37192bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor        return result;
37292bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor    }
37392bf054558be5898b54bd3c4f098c6924c2f77bbTom Taylor
37441ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor    // For the group mms feature to be enabled, the following must be true:
37541ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor    //  1. the feature is enabled in mms_config.xml (currently on by default)
37641ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor    //  2. the feature is enabled in the mms settings page
37741ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor    //  3. the SIM knows its own phone number
3789889006f9d29d0509c1c036987ce028de43ac96eTom Taylor    public static boolean getIsGroupMmsEnabled(Context context) {
3799889006f9d29d0509c1c036987ce028de43ac96eTom Taylor        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
3809889006f9d29d0509c1c036987ce028de43ac96eTom Taylor        boolean groupMmsPrefOn = prefs.getBoolean(
3819889006f9d29d0509c1c036987ce028de43ac96eTom Taylor                MessagingPreferenceActivity.GROUP_MMS_MODE, true);
38241ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor        return MmsConfig.getGroupMmsEnabled() &&
38341ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor                groupMmsPrefOn &&
38441ae031d70cbb9973d283fa2bff1643f08999e3cTom Taylor                !TextUtils.isEmpty(MessageUtils.getLocalNumber());
3859889006f9d29d0509c1c036987ce028de43ac96eTom Taylor    }
38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project}
387