| /* |
| * 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.ActionBar; |
| import android.app.Activity; |
| import android.app.AlertDialog; |
| import android.app.Dialog; |
| import android.content.Context; |
| import android.content.DialogInterface; |
| import android.content.Intent; |
| import android.content.SharedPreferences; |
| import android.os.Bundle; |
| import android.preference.CheckBoxPreference; |
| 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.view.Menu; |
| import android.view.MenuItem; |
| |
| import com.android.mms.util.Recycler; |
| |
| /** |
| * 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 CheckBoxPreference mEnableNotificationsPref; |
| 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); |
| |
| 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"); |
| mEnableNotificationsPref = (CheckBoxPreference) findPreference(NOTIFICATION_ENABLED); |
| mVibrateWhenPref = (ListPreference) findPreference(NOTIFICATION_VIBRATE_WHEN); |
| |
| ActionBar actionBar = getActionBar(); |
| actionBar.setDisplayHomeAsUpEnabled(true); |
| setMessagePreferences(); |
| } |
| |
| @Override |
| protected void onResume() { |
| super.onResume(); |
| |
| // Since the enabled notifications pref can be changed outside of this activity, |
| // we have to reload it whenever we resume. |
| setEnabledNotificationsPref(); |
| } |
| |
| private void setMessagePreferences() { |
| if (!MmsApp.getApplication().getTelephonyManager().hasIccCard()) { |
| // No SIM card, remove the SIM-related prefs |
| PreferenceCategory smsCategory = |
| (PreferenceCategory)findPreference("pref_key_sms_settings"); |
| smsCategory.removePreference(mManageSimPref); |
| } |
| |
| if (!MmsConfig.getSMSDeliveryReportsEnabled()) { |
| 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 { |
| if (!MmsConfig.getMMSDeliveryReportsEnabled()) { |
| PreferenceCategory mmsOptions = |
| (PreferenceCategory)findPreference("pref_key_mms_settings"); |
| mmsOptions.removePreference(mMmsDeliveryReportPref); |
| } |
| if (!MmsConfig.getMMSReadReportsEnabled()) { |
| PreferenceCategory mmsOptions = |
| (PreferenceCategory)findPreference("pref_key_mms_settings"); |
| mmsOptions.removePreference(mMmsReadReportPref); |
| } |
| } |
| |
| setEnabledNotificationsPref(); |
| |
| // 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 setEnabledNotificationsPref() { |
| // The "enable notifications" setting is really stored in our own prefs. Read the |
| // current value and set the checkbox to match. |
| mEnableNotificationsPref.setChecked(getNotificationEnabled(this)); |
| } |
| |
| 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; |
| |
| case android.R.id.home: |
| // The user clicked on the Messaging icon in the action bar. Take them back from |
| // wherever they came from |
| finish(); |
| 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; |
| } else if (preference == mEnableNotificationsPref) { |
| // Update the actual "enable notifications" value that is stored in secure settings. |
| enableNotifications(mEnableNotificationsPref.isChecked(), this); |
| } |
| |
| 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); |
| } |
| |
| public static boolean getNotificationEnabled(Context context) { |
| SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); |
| boolean notificationsEnabled = |
| prefs.getBoolean(MessagingPreferenceActivity.NOTIFICATION_ENABLED, true); |
| return notificationsEnabled; |
| } |
| |
| public static void enableNotifications(boolean enabled, Context context) { |
| // Store the value of notifications in SharedPreferences |
| SharedPreferences.Editor editor = |
| PreferenceManager.getDefaultSharedPreferences(context).edit(); |
| |
| editor.putBoolean(MessagingPreferenceActivity.NOTIFICATION_ENABLED, enabled); |
| |
| editor.apply(); |
| } |
| } |