Home | History | Annotate | Download | only in ui
      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