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.AlertDialog; 25 import android.app.Dialog; 26 import android.content.DialogInterface; 27 import android.content.Intent; 28 import android.content.SharedPreferences; 29 import android.os.Bundle; 30 import android.preference.ListPreference; 31 import android.preference.Preference; 32 import android.preference.PreferenceActivity; 33 import android.preference.PreferenceCategory; 34 import android.preference.PreferenceManager; 35 import android.preference.PreferenceScreen; 36 import android.provider.SearchRecentSuggestions; 37 import android.telephony.TelephonyManager; 38 import android.view.Menu; 39 import android.view.MenuItem; 40 41 import com.android.mms.util.Recycler; 42 43 import android.content.res.Resources; 44 45 /** 46 * With this activity, users can set preferences for MMS and SMS and 47 * can access and manipulate SMS messages stored on the SIM. 48 */ 49 public class MessagingPreferenceActivity extends PreferenceActivity { 50 // Symbolic names for the keys used for preference lookup 51 public static final String MMS_DELIVERY_REPORT_MODE = "pref_key_mms_delivery_reports"; 52 public static final String EXPIRY_TIME = "pref_key_mms_expiry"; 53 public static final String PRIORITY = "pref_key_mms_priority"; 54 public static final String READ_REPORT_MODE = "pref_key_mms_read_reports"; 55 public static final String SMS_DELIVERY_REPORT_MODE = "pref_key_sms_delivery_reports"; 56 public static final String NOTIFICATION_ENABLED = "pref_key_enable_notifications"; 57 public static final String NOTIFICATION_VIBRATE = "pref_key_vibrate"; 58 public static final String NOTIFICATION_VIBRATE_WHEN= "pref_key_vibrateWhen"; 59 public static final String NOTIFICATION_RINGTONE = "pref_key_ringtone"; 60 public static final String AUTO_RETRIEVAL = "pref_key_mms_auto_retrieval"; 61 public static final String RETRIEVAL_DURING_ROAMING = "pref_key_mms_retrieval_during_roaming"; 62 public static final String AUTO_DELETE = "pref_key_auto_delete"; 63 64 // Menu entries 65 private static final int MENU_RESTORE_DEFAULTS = 1; 66 67 private Preference mSmsLimitPref; 68 private Preference mSmsDeliveryReportPref; 69 private Preference mMmsLimitPref; 70 private Preference mMmsDeliveryReportPref; 71 private Preference mMmsReadReportPref; 72 private Preference mManageSimPref; 73 private Preference mClearHistoryPref; 74 private ListPreference mVibrateWhenPref; 75 private Recycler mSmsRecycler; 76 private Recycler mMmsRecycler; 77 private static final int CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG = 3; 78 79 @Override 80 protected void onCreate(Bundle icicle) { 81 super.onCreate(icicle); 82 addPreferencesFromResource(R.xml.preferences); 83 84 setMessagePreferences(); 85 } 86 87 private void setMessagePreferences() { 88 mManageSimPref = findPreference("pref_key_manage_sim_messages"); 89 mSmsLimitPref = findPreference("pref_key_sms_delete_limit"); 90 mSmsDeliveryReportPref = findPreference("pref_key_sms_delivery_reports"); 91 mMmsDeliveryReportPref = findPreference("pref_key_mms_delivery_reports"); 92 mMmsReadReportPref = findPreference("pref_key_mms_read_reports"); 93 mMmsLimitPref = findPreference("pref_key_mms_delete_limit"); 94 mClearHistoryPref = findPreference("pref_key_mms_clear_history"); 95 mVibrateWhenPref = (ListPreference) findPreference(NOTIFICATION_VIBRATE_WHEN); 96 97 if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) { 98 // No SIM card, remove the SIM-related prefs 99 PreferenceCategory smsCategory = 100 (PreferenceCategory)findPreference("pref_key_sms_settings"); 101 smsCategory.removePreference(mManageSimPref); 102 } 103 104 boolean SMSDeliveryReport = Resources.getSystem() 105 .getBoolean(com.android.internal.R.bool.config_sms_delivery_reports_support); 106 if (!SMSDeliveryReport) { 107 PreferenceCategory smsCategory = 108 (PreferenceCategory)findPreference("pref_key_sms_settings"); 109 smsCategory.removePreference(mSmsDeliveryReportPref); 110 if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) { 111 getPreferenceScreen().removePreference(smsCategory); 112 } 113 } 114 115 if (!MmsConfig.getMmsEnabled()) { 116 // No Mms, remove all the mms-related preferences 117 PreferenceCategory mmsOptions = 118 (PreferenceCategory)findPreference("pref_key_mms_settings"); 119 getPreferenceScreen().removePreference(mmsOptions); 120 121 PreferenceCategory storageOptions = 122 (PreferenceCategory)findPreference("pref_key_storage_settings"); 123 storageOptions.removePreference(findPreference("pref_key_mms_delete_limit")); 124 } else { 125 boolean MMSDeliveryReport = Resources.getSystem() 126 .getBoolean(com.android.internal.R.bool.config_mms_delivery_reports_support); 127 boolean MMSReadReport = Resources.getSystem() 128 .getBoolean(com.android.internal.R.bool.config_mms_read_reports_support); 129 if (!MMSDeliveryReport) { 130 PreferenceCategory mmsOptions = 131 (PreferenceCategory)findPreference("pref_key_mms_settings"); 132 mmsOptions.removePreference(mMmsDeliveryReportPref); 133 } 134 if (!MMSReadReport) { 135 PreferenceCategory mmsOptions = 136 (PreferenceCategory)findPreference("pref_key_mms_settings"); 137 mmsOptions.removePreference(mMmsReadReportPref); 138 } 139 } 140 141 // If needed, migrate vibration setting from a previous version 142 SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 143 if (!sharedPreferences.contains(NOTIFICATION_VIBRATE_WHEN) && 144 sharedPreferences.contains(NOTIFICATION_VIBRATE)) { 145 int stringId = sharedPreferences.getBoolean(NOTIFICATION_VIBRATE, false) ? 146 R.string.prefDefault_vibrate_true : 147 R.string.prefDefault_vibrate_false; 148 mVibrateWhenPref.setValue(getString(stringId)); 149 } 150 151 mSmsRecycler = Recycler.getSmsRecycler(); 152 mMmsRecycler = Recycler.getMmsRecycler(); 153 154 // Fix up the recycler's summary with the correct values 155 setSmsDisplayLimit(); 156 setMmsDisplayLimit(); 157 } 158 159 private void setSmsDisplayLimit() { 160 mSmsLimitPref.setSummary( 161 getString(R.string.pref_summary_delete_limit, 162 mSmsRecycler.getMessageLimit(this))); 163 } 164 165 private void setMmsDisplayLimit() { 166 mMmsLimitPref.setSummary( 167 getString(R.string.pref_summary_delete_limit, 168 mMmsRecycler.getMessageLimit(this))); 169 } 170 171 public boolean onCreateOptionsMenu(Menu menu) { 172 super.onCreateOptionsMenu(menu); 173 menu.clear(); 174 menu.add(0, MENU_RESTORE_DEFAULTS, 0, R.string.restore_default); 175 return true; 176 } 177 178 @Override 179 public boolean onOptionsItemSelected(MenuItem item) { 180 switch (item.getItemId()) { 181 case MENU_RESTORE_DEFAULTS: 182 restoreDefaultPreferences(); 183 return true; 184 } 185 return false; 186 } 187 188 @Override 189 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 190 Preference preference) { 191 if (preference == mSmsLimitPref) { 192 new NumberPickerDialog(this, 193 mSmsLimitListener, 194 mSmsRecycler.getMessageLimit(this), 195 mSmsRecycler.getMessageMinLimit(), 196 mSmsRecycler.getMessageMaxLimit(), 197 R.string.pref_title_sms_delete).show(); 198 } else if (preference == mMmsLimitPref) { 199 new NumberPickerDialog(this, 200 mMmsLimitListener, 201 mMmsRecycler.getMessageLimit(this), 202 mMmsRecycler.getMessageMinLimit(), 203 mMmsRecycler.getMessageMaxLimit(), 204 R.string.pref_title_mms_delete).show(); 205 } else if (preference == mManageSimPref) { 206 startActivity(new Intent(this, ManageSimMessages.class)); 207 } else if (preference == mClearHistoryPref) { 208 showDialog(CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG); 209 return true; 210 } 211 212 return super.onPreferenceTreeClick(preferenceScreen, preference); 213 } 214 215 216 private void restoreDefaultPreferences() { 217 PreferenceManager.getDefaultSharedPreferences(this) 218 .edit().clear().apply(); 219 setPreferenceScreen(null); 220 addPreferencesFromResource(R.xml.preferences); 221 setMessagePreferences(); 222 } 223 224 NumberPickerDialog.OnNumberSetListener mSmsLimitListener = 225 new NumberPickerDialog.OnNumberSetListener() { 226 public void onNumberSet(int limit) { 227 mSmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit); 228 setSmsDisplayLimit(); 229 } 230 }; 231 232 NumberPickerDialog.OnNumberSetListener mMmsLimitListener = 233 new NumberPickerDialog.OnNumberSetListener() { 234 public void onNumberSet(int limit) { 235 mMmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit); 236 setMmsDisplayLimit(); 237 } 238 }; 239 240 @Override 241 protected Dialog onCreateDialog(int id) { 242 switch (id) { 243 case CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG: 244 return new AlertDialog.Builder(MessagingPreferenceActivity.this) 245 .setTitle(R.string.confirm_clear_search_title) 246 .setMessage(R.string.confirm_clear_search_text) 247 .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { 248 public void onClick(DialogInterface dialog, int which) { 249 SearchRecentSuggestions recent = 250 ((MmsApp)getApplication()).getRecentSuggestions(); 251 if (recent != null) { 252 recent.clearHistory(); 253 } 254 dialog.dismiss(); 255 } 256 }) 257 .setNegativeButton(android.R.string.cancel, null) 258 .setIcon(android.R.drawable.ic_dialog_alert) 259 .create(); 260 } 261 return super.onCreateDialog(id); 262 } 263 264 } 265