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