• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007-2008 Esmertec AG.
3  * Copyright (C) 2007-2008 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.mms.ui;
19 
20 import com.android.mms.MmsApp;
21 import com.android.mms.MmsConfig;
22 import com.android.mms.R;
23 
24 import android.app.ActionBar;
25 import android.app.AlertDialog;
26 import android.app.Dialog;
27 import android.content.DialogInterface;
28 import android.content.Intent;
29 import android.content.SharedPreferences;
30 import android.os.Bundle;
31 import android.preference.ListPreference;
32 import android.preference.Preference;
33 import android.preference.PreferenceActivity;
34 import android.preference.PreferenceCategory;
35 import android.preference.PreferenceManager;
36 import android.preference.PreferenceScreen;
37 import android.provider.SearchRecentSuggestions;
38 import android.telephony.TelephonyManager;
39 import android.view.Menu;
40 import android.view.MenuItem;
41 
42 import com.android.mms.util.Recycler;
43 
44 import android.content.res.Resources;
45 
46 /**
47  * With this activity, users can set preferences for MMS and SMS and
48  * can access and manipulate SMS messages stored on the SIM.
49  */
50 public class MessagingPreferenceActivity extends PreferenceActivity {
51     // Symbolic names for the keys used for preference lookup
52     public static final String MMS_DELIVERY_REPORT_MODE = "pref_key_mms_delivery_reports";
53     public static final String EXPIRY_TIME              = "pref_key_mms_expiry";
54     public static final String PRIORITY                 = "pref_key_mms_priority";
55     public static final String READ_REPORT_MODE         = "pref_key_mms_read_reports";
56     public static final String SMS_DELIVERY_REPORT_MODE = "pref_key_sms_delivery_reports";
57     public static final String NOTIFICATION_ENABLED     = "pref_key_enable_notifications";
58     public static final String NOTIFICATION_VIBRATE     = "pref_key_vibrate";
59     public static final String NOTIFICATION_VIBRATE_WHEN= "pref_key_vibrateWhen";
60     public static final String NOTIFICATION_RINGTONE    = "pref_key_ringtone";
61     public static final String AUTO_RETRIEVAL           = "pref_key_mms_auto_retrieval";
62     public static final String RETRIEVAL_DURING_ROAMING = "pref_key_mms_retrieval_during_roaming";
63     public static final String AUTO_DELETE              = "pref_key_auto_delete";
64 
65     // Menu entries
66     private static final int MENU_RESTORE_DEFAULTS    = 1;
67 
68     private Preference mSmsLimitPref;
69     private Preference mSmsDeliveryReportPref;
70     private Preference mMmsLimitPref;
71     private Preference mMmsDeliveryReportPref;
72     private Preference mMmsReadReportPref;
73     private Preference mManageSimPref;
74     private Preference mClearHistoryPref;
75     private ListPreference mVibrateWhenPref;
76     private Recycler mSmsRecycler;
77     private Recycler mMmsRecycler;
78     private static final int CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG = 3;
79 
80     @Override
onCreate(Bundle icicle)81     protected void onCreate(Bundle icicle) {
82         super.onCreate(icicle);
83         addPreferencesFromResource(R.xml.preferences);
84 
85         ActionBar actionBar = getActionBar();
86         actionBar.setDisplayHomeAsUpEnabled(true);
87 
88         setMessagePreferences();
89     }
90 
setMessagePreferences()91     private void setMessagePreferences() {
92         mManageSimPref = findPreference("pref_key_manage_sim_messages");
93         mSmsLimitPref = findPreference("pref_key_sms_delete_limit");
94         mSmsDeliveryReportPref = findPreference("pref_key_sms_delivery_reports");
95         mMmsDeliveryReportPref = findPreference("pref_key_mms_delivery_reports");
96         mMmsReadReportPref = findPreference("pref_key_mms_read_reports");
97         mMmsLimitPref = findPreference("pref_key_mms_delete_limit");
98         mClearHistoryPref = findPreference("pref_key_mms_clear_history");
99         mVibrateWhenPref = (ListPreference) findPreference(NOTIFICATION_VIBRATE_WHEN);
100 
101         if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) {
102             // No SIM card, remove the SIM-related prefs
103             PreferenceCategory smsCategory =
104                 (PreferenceCategory)findPreference("pref_key_sms_settings");
105             smsCategory.removePreference(mManageSimPref);
106         }
107 
108         if (!MmsConfig.getSMSDeliveryReportsEnabled()) {
109             PreferenceCategory smsCategory =
110                 (PreferenceCategory)findPreference("pref_key_sms_settings");
111             smsCategory.removePreference(mSmsDeliveryReportPref);
112             if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) {
113                 getPreferenceScreen().removePreference(smsCategory);
114             }
115         }
116 
117         if (!MmsConfig.getMmsEnabled()) {
118             // No Mms, remove all the mms-related preferences
119             PreferenceCategory mmsOptions =
120                 (PreferenceCategory)findPreference("pref_key_mms_settings");
121             getPreferenceScreen().removePreference(mmsOptions);
122 
123             PreferenceCategory storageOptions =
124                 (PreferenceCategory)findPreference("pref_key_storage_settings");
125             storageOptions.removePreference(findPreference("pref_key_mms_delete_limit"));
126         } else {
127             if (!MmsConfig.getMMSDeliveryReportsEnabled()) {
128                 PreferenceCategory mmsOptions =
129                     (PreferenceCategory)findPreference("pref_key_mms_settings");
130                 mmsOptions.removePreference(mMmsDeliveryReportPref);
131             }
132             if (!MmsConfig.getMMSReadReportsEnabled()) {
133                 PreferenceCategory mmsOptions =
134                     (PreferenceCategory)findPreference("pref_key_mms_settings");
135                 mmsOptions.removePreference(mMmsReadReportPref);
136             }
137         }
138 
139         // If needed, migrate vibration setting from a previous version
140         SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
141         if (!sharedPreferences.contains(NOTIFICATION_VIBRATE_WHEN) &&
142                 sharedPreferences.contains(NOTIFICATION_VIBRATE)) {
143             int stringId = sharedPreferences.getBoolean(NOTIFICATION_VIBRATE, false) ?
144                     R.string.prefDefault_vibrate_true :
145                     R.string.prefDefault_vibrate_false;
146             mVibrateWhenPref.setValue(getString(stringId));
147         }
148 
149         mSmsRecycler = Recycler.getSmsRecycler();
150         mMmsRecycler = Recycler.getMmsRecycler();
151 
152         // Fix up the recycler's summary with the correct values
153         setSmsDisplayLimit();
154         setMmsDisplayLimit();
155     }
156 
setSmsDisplayLimit()157     private void setSmsDisplayLimit() {
158         mSmsLimitPref.setSummary(
159                 getString(R.string.pref_summary_delete_limit,
160                         mSmsRecycler.getMessageLimit(this)));
161     }
162 
setMmsDisplayLimit()163     private void setMmsDisplayLimit() {
164         mMmsLimitPref.setSummary(
165                 getString(R.string.pref_summary_delete_limit,
166                         mMmsRecycler.getMessageLimit(this)));
167     }
168 
onCreateOptionsMenu(Menu menu)169     public boolean onCreateOptionsMenu(Menu menu) {
170         super.onCreateOptionsMenu(menu);
171         menu.clear();
172         menu.add(0, MENU_RESTORE_DEFAULTS, 0, R.string.restore_default);
173         return true;
174     }
175 
176     @Override
onOptionsItemSelected(MenuItem item)177     public boolean onOptionsItemSelected(MenuItem item) {
178         switch (item.getItemId()) {
179             case MENU_RESTORE_DEFAULTS:
180                 restoreDefaultPreferences();
181                 return true;
182 
183             case android.R.id.home:
184                 // The user clicked on the Messaging icon in the action bar. Take them back from
185                 // wherever they came from
186                 finish();
187                 return true;
188         }
189         return false;
190     }
191 
192     @Override
onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)193     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
194             Preference preference) {
195         if (preference == mSmsLimitPref) {
196             new NumberPickerDialog(this,
197                     mSmsLimitListener,
198                     mSmsRecycler.getMessageLimit(this),
199                     mSmsRecycler.getMessageMinLimit(),
200                     mSmsRecycler.getMessageMaxLimit(),
201                     R.string.pref_title_sms_delete).show();
202         } else if (preference == mMmsLimitPref) {
203             new NumberPickerDialog(this,
204                     mMmsLimitListener,
205                     mMmsRecycler.getMessageLimit(this),
206                     mMmsRecycler.getMessageMinLimit(),
207                     mMmsRecycler.getMessageMaxLimit(),
208                     R.string.pref_title_mms_delete).show();
209         } else if (preference == mManageSimPref) {
210             startActivity(new Intent(this, ManageSimMessages.class));
211         } else if (preference == mClearHistoryPref) {
212             showDialog(CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG);
213             return true;
214         }
215 
216         return super.onPreferenceTreeClick(preferenceScreen, preference);
217     }
218 
219 
restoreDefaultPreferences()220     private void restoreDefaultPreferences() {
221         PreferenceManager.getDefaultSharedPreferences(this)
222                 .edit().clear().apply();
223         setPreferenceScreen(null);
224         addPreferencesFromResource(R.xml.preferences);
225         setMessagePreferences();
226     }
227 
228     NumberPickerDialog.OnNumberSetListener mSmsLimitListener =
229         new NumberPickerDialog.OnNumberSetListener() {
230             public void onNumberSet(int limit) {
231                 mSmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit);
232                 setSmsDisplayLimit();
233             }
234     };
235 
236     NumberPickerDialog.OnNumberSetListener mMmsLimitListener =
237         new NumberPickerDialog.OnNumberSetListener() {
238             public void onNumberSet(int limit) {
239                 mMmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit);
240                 setMmsDisplayLimit();
241             }
242     };
243 
244     @Override
onCreateDialog(int id)245     protected Dialog onCreateDialog(int id) {
246         switch (id) {
247             case CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG:
248                 return new AlertDialog.Builder(MessagingPreferenceActivity.this)
249                     .setTitle(R.string.confirm_clear_search_title)
250                     .setMessage(R.string.confirm_clear_search_text)
251                     .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
252                         public void onClick(DialogInterface dialog, int which) {
253                             SearchRecentSuggestions recent =
254                                 ((MmsApp)getApplication()).getRecentSuggestions();
255                             if (recent != null) {
256                                 recent.clearHistory();
257                             }
258                             dialog.dismiss();
259                         }
260                     })
261                     .setNegativeButton(android.R.string.cancel, null)
262                     .setIcon(android.R.drawable.ic_dialog_alert)
263                     .create();
264         }
265         return super.onCreateDialog(id);
266     }
267 
268 }
269