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.MmsConfig; 21 import com.android.mms.R; 22 23 import android.content.Intent; 24 import android.os.Bundle; 25 import android.preference.Preference; 26 import android.preference.PreferenceActivity; 27 import android.preference.PreferenceCategory; 28 import android.preference.PreferenceManager; 29 import android.preference.PreferenceScreen; 30 import android.telephony.TelephonyManager; 31 import android.view.Menu; 32 import android.view.MenuItem; 33 34 import com.android.mms.util.Recycler; 35 36 /** 37 * With this activity, users can set preferences for MMS and SMS and 38 * can access and manipulate SMS messages stored on the SIM. 39 */ 40 public class MessagingPreferenceActivity extends PreferenceActivity { 41 // Symbolic names for the keys used for preference lookup 42 public static final String MMS_DELIVERY_REPORT_MODE = "pref_key_mms_delivery_reports"; 43 public static final String EXPIRY_TIME = "pref_key_mms_expiry"; 44 public static final String PRIORITY = "pref_key_mms_priority"; 45 public static final String READ_REPORT_MODE = "pref_key_mms_read_reports"; 46 public static final String SMS_DELIVERY_REPORT_MODE = "pref_key_sms_delivery_reports"; 47 public static final String NOTIFICATION_ENABLED = "pref_key_enable_notifications"; 48 public static final String NOTIFICATION_VIBRATE = "pref_key_vibrate"; 49 public static final String NOTIFICATION_RINGTONE = "pref_key_ringtone"; 50 public static final String AUTO_RETRIEVAL = "pref_key_mms_auto_retrieval"; 51 public static final String RETRIEVAL_DURING_ROAMING = "pref_key_mms_retrieval_during_roaming"; 52 public static final String AUTO_DELETE = "pref_key_auto_delete"; 53 54 // Menu entries 55 private static final int MENU_RESTORE_DEFAULTS = 1; 56 57 private Preference mSmsLimitPref; 58 private Preference mMmsLimitPref; 59 private Preference mManageSimPref; 60 private Recycler mSmsRecycler; 61 private Recycler mMmsRecycler; 62 63 @Override onCreate(Bundle icicle)64 protected void onCreate(Bundle icicle) { 65 super.onCreate(icicle); 66 addPreferencesFromResource(R.xml.preferences); 67 68 mManageSimPref = findPreference("pref_key_manage_sim_messages"); 69 mSmsLimitPref = findPreference("pref_key_sms_delete_limit"); 70 mMmsLimitPref = findPreference("pref_key_mms_delete_limit"); 71 72 if (!TelephonyManager.getDefault().hasIccCard()) { 73 // No SIM card, remove the SIM-related prefs 74 PreferenceCategory smsCategory = 75 (PreferenceCategory)findPreference("pref_key_sms_settings"); 76 smsCategory.removePreference(mManageSimPref); 77 } 78 if (!MmsConfig.getMmsEnabled()) { 79 // No Mms, remove all the mms-related preferences 80 PreferenceCategory mmsOptions = 81 (PreferenceCategory)findPreference("pref_key_mms_settings"); 82 getPreferenceScreen().removePreference(mmsOptions); 83 84 PreferenceCategory storageOptions = 85 (PreferenceCategory)findPreference("pref_key_storage_settings"); 86 storageOptions.removePreference(findPreference("pref_key_mms_delete_limit")); 87 } 88 89 mSmsRecycler = Recycler.getSmsRecycler(); 90 mMmsRecycler = Recycler.getMmsRecycler(); 91 92 // Fix up the recycler's summary with the correct values 93 setSmsDisplayLimit(); 94 setMmsDisplayLimit(); 95 } 96 setSmsDisplayLimit()97 private void setSmsDisplayLimit() { 98 mSmsLimitPref.setSummary( 99 getString(R.string.pref_summary_delete_limit, 100 mSmsRecycler.getMessageLimit(this))); 101 } 102 setMmsDisplayLimit()103 private void setMmsDisplayLimit() { 104 mMmsLimitPref.setSummary( 105 getString(R.string.pref_summary_delete_limit, 106 mMmsRecycler.getMessageLimit(this))); 107 } 108 onCreateOptionsMenu(Menu menu)109 public boolean onCreateOptionsMenu(Menu menu) { 110 super.onCreateOptionsMenu(menu); 111 menu.clear(); 112 menu.add(0, MENU_RESTORE_DEFAULTS, 0, R.string.restore_default); 113 return true; 114 } 115 116 @Override onOptionsItemSelected(MenuItem item)117 public boolean onOptionsItemSelected(MenuItem item) { 118 switch (item.getItemId()) { 119 case MENU_RESTORE_DEFAULTS: 120 restoreDefaultPreferences(); 121 return true; 122 } 123 return false; 124 } 125 126 @Override onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)127 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 128 Preference preference) { 129 if (preference == mSmsLimitPref) { 130 new NumberPickerDialog(this, 131 mSmsLimitListener, 132 mSmsRecycler.getMessageLimit(this), 133 mSmsRecycler.getMessageMinLimit(), 134 mSmsRecycler.getMessageMaxLimit(), 135 R.string.pref_title_sms_delete).show(); 136 } else if (preference == mMmsLimitPref) { 137 new NumberPickerDialog(this, 138 mMmsLimitListener, 139 mMmsRecycler.getMessageLimit(this), 140 mMmsRecycler.getMessageMinLimit(), 141 mMmsRecycler.getMessageMaxLimit(), 142 R.string.pref_title_mms_delete).show(); 143 } else if (preference == mManageSimPref) { 144 startActivity(new Intent(this, ManageSimMessages.class)); 145 } 146 147 return super.onPreferenceTreeClick(preferenceScreen, preference); 148 } 149 150 restoreDefaultPreferences()151 private void restoreDefaultPreferences() { 152 PreferenceManager.getDefaultSharedPreferences(this) 153 .edit().clear().commit(); 154 setPreferenceScreen(null); 155 addPreferencesFromResource(R.xml.preferences); 156 } 157 158 NumberPickerDialog.OnNumberSetListener mSmsLimitListener = 159 new NumberPickerDialog.OnNumberSetListener() { 160 public void onNumberSet(int limit) { 161 mSmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit); 162 setSmsDisplayLimit(); 163 } 164 }; 165 166 NumberPickerDialog.OnNumberSetListener mMmsLimitListener = 167 new NumberPickerDialog.OnNumberSetListener() { 168 public void onNumberSet(int limit) { 169 mMmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit); 170 setMmsDisplayLimit(); 171 } 172 }; 173 } 174