/* * Copyright (C) 2007-2008 Esmertec AG. * Copyright (C) 2007-2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.mms.ui; import com.android.mms.MmsApp; import com.android.mms.MmsConfig; import com.android.mms.R; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.provider.SearchRecentSuggestions; import android.telephony.TelephonyManager; import android.view.Menu; import android.view.MenuItem; import com.android.mms.util.Recycler; import android.content.res.Resources; /** * With this activity, users can set preferences for MMS and SMS and * can access and manipulate SMS messages stored on the SIM. */ public class MessagingPreferenceActivity extends PreferenceActivity { // Symbolic names for the keys used for preference lookup public static final String MMS_DELIVERY_REPORT_MODE = "pref_key_mms_delivery_reports"; public static final String EXPIRY_TIME = "pref_key_mms_expiry"; public static final String PRIORITY = "pref_key_mms_priority"; public static final String READ_REPORT_MODE = "pref_key_mms_read_reports"; public static final String SMS_DELIVERY_REPORT_MODE = "pref_key_sms_delivery_reports"; public static final String NOTIFICATION_ENABLED = "pref_key_enable_notifications"; public static final String NOTIFICATION_VIBRATE = "pref_key_vibrate"; public static final String NOTIFICATION_VIBRATE_WHEN= "pref_key_vibrateWhen"; public static final String NOTIFICATION_RINGTONE = "pref_key_ringtone"; public static final String AUTO_RETRIEVAL = "pref_key_mms_auto_retrieval"; public static final String RETRIEVAL_DURING_ROAMING = "pref_key_mms_retrieval_during_roaming"; public static final String AUTO_DELETE = "pref_key_auto_delete"; // Menu entries private static final int MENU_RESTORE_DEFAULTS = 1; private Preference mSmsLimitPref; private Preference mSmsDeliveryReportPref; private Preference mMmsLimitPref; private Preference mMmsDeliveryReportPref; private Preference mMmsReadReportPref; private Preference mManageSimPref; private Preference mClearHistoryPref; private ListPreference mVibrateWhenPref; private Recycler mSmsRecycler; private Recycler mMmsRecycler; private static final int CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG = 3; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.preferences); setMessagePreferences(); } private void setMessagePreferences() { mManageSimPref = findPreference("pref_key_manage_sim_messages"); mSmsLimitPref = findPreference("pref_key_sms_delete_limit"); mSmsDeliveryReportPref = findPreference("pref_key_sms_delivery_reports"); mMmsDeliveryReportPref = findPreference("pref_key_mms_delivery_reports"); mMmsReadReportPref = findPreference("pref_key_mms_read_reports"); mMmsLimitPref = findPreference("pref_key_mms_delete_limit"); mClearHistoryPref = findPreference("pref_key_mms_clear_history"); mVibrateWhenPref = (ListPreference) findPreference(NOTIFICATION_VIBRATE_WHEN); if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) { // No SIM card, remove the SIM-related prefs PreferenceCategory smsCategory = (PreferenceCategory)findPreference("pref_key_sms_settings"); smsCategory.removePreference(mManageSimPref); } boolean SMSDeliveryReport = Resources.getSystem() .getBoolean(com.android.internal.R.bool.config_sms_delivery_reports_support); if (!SMSDeliveryReport) { PreferenceCategory smsCategory = (PreferenceCategory)findPreference("pref_key_sms_settings"); smsCategory.removePreference(mSmsDeliveryReportPref); if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) { getPreferenceScreen().removePreference(smsCategory); } } if (!MmsConfig.getMmsEnabled()) { // No Mms, remove all the mms-related preferences PreferenceCategory mmsOptions = (PreferenceCategory)findPreference("pref_key_mms_settings"); getPreferenceScreen().removePreference(mmsOptions); PreferenceCategory storageOptions = (PreferenceCategory)findPreference("pref_key_storage_settings"); storageOptions.removePreference(findPreference("pref_key_mms_delete_limit")); } else { boolean MMSDeliveryReport = Resources.getSystem() .getBoolean(com.android.internal.R.bool.config_mms_delivery_reports_support); boolean MMSReadReport = Resources.getSystem() .getBoolean(com.android.internal.R.bool.config_mms_read_reports_support); if (!MMSDeliveryReport) { PreferenceCategory mmsOptions = (PreferenceCategory)findPreference("pref_key_mms_settings"); mmsOptions.removePreference(mMmsDeliveryReportPref); } if (!MMSReadReport) { PreferenceCategory mmsOptions = (PreferenceCategory)findPreference("pref_key_mms_settings"); mmsOptions.removePreference(mMmsReadReportPref); } } // If needed, migrate vibration setting from a previous version SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); if (!sharedPreferences.contains(NOTIFICATION_VIBRATE_WHEN) && sharedPreferences.contains(NOTIFICATION_VIBRATE)) { int stringId = sharedPreferences.getBoolean(NOTIFICATION_VIBRATE, false) ? R.string.prefDefault_vibrate_true : R.string.prefDefault_vibrate_false; mVibrateWhenPref.setValue(getString(stringId)); } mSmsRecycler = Recycler.getSmsRecycler(); mMmsRecycler = Recycler.getMmsRecycler(); // Fix up the recycler's summary with the correct values setSmsDisplayLimit(); setMmsDisplayLimit(); } private void setSmsDisplayLimit() { mSmsLimitPref.setSummary( getString(R.string.pref_summary_delete_limit, mSmsRecycler.getMessageLimit(this))); } private void setMmsDisplayLimit() { mMmsLimitPref.setSummary( getString(R.string.pref_summary_delete_limit, mMmsRecycler.getMessageLimit(this))); } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.clear(); menu.add(0, MENU_RESTORE_DEFAULTS, 0, R.string.restore_default); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_RESTORE_DEFAULTS: restoreDefaultPreferences(); return true; } return false; } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mSmsLimitPref) { new NumberPickerDialog(this, mSmsLimitListener, mSmsRecycler.getMessageLimit(this), mSmsRecycler.getMessageMinLimit(), mSmsRecycler.getMessageMaxLimit(), R.string.pref_title_sms_delete).show(); } else if (preference == mMmsLimitPref) { new NumberPickerDialog(this, mMmsLimitListener, mMmsRecycler.getMessageLimit(this), mMmsRecycler.getMessageMinLimit(), mMmsRecycler.getMessageMaxLimit(), R.string.pref_title_mms_delete).show(); } else if (preference == mManageSimPref) { startActivity(new Intent(this, ManageSimMessages.class)); } else if (preference == mClearHistoryPref) { showDialog(CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG); return true; } return super.onPreferenceTreeClick(preferenceScreen, preference); } private void restoreDefaultPreferences() { PreferenceManager.getDefaultSharedPreferences(this) .edit().clear().apply(); setPreferenceScreen(null); addPreferencesFromResource(R.xml.preferences); setMessagePreferences(); } NumberPickerDialog.OnNumberSetListener mSmsLimitListener = new NumberPickerDialog.OnNumberSetListener() { public void onNumberSet(int limit) { mSmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit); setSmsDisplayLimit(); } }; NumberPickerDialog.OnNumberSetListener mMmsLimitListener = new NumberPickerDialog.OnNumberSetListener() { public void onNumberSet(int limit) { mMmsRecycler.setMessageLimit(MessagingPreferenceActivity.this, limit); setMmsDisplayLimit(); } }; @Override protected Dialog onCreateDialog(int id) { switch (id) { case CONFIRM_CLEAR_SEARCH_HISTORY_DIALOG: return new AlertDialog.Builder(MessagingPreferenceActivity.this) .setTitle(R.string.confirm_clear_search_title) .setMessage(R.string.confirm_clear_search_text) .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { SearchRecentSuggestions recent = ((MmsApp)getApplication()).getRecentSuggestions(); if (recent != null) { recent.clearHistory(); } dialog.dismiss(); } }) .setNegativeButton(android.R.string.cancel, null) .setIcon(android.R.drawable.ic_dialog_alert) .create(); } return super.onCreateDialog(id); } }