CallFeaturesSetting.java revision 3897278c8d39ac3ede871e4f9f963d145f6e895d
1b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project/* 2b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 4b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * you may not use this file except in compliance with the License. 6b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * You may obtain a copy of the License at 7b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 8b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 10b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * See the License for the specific language governing permissions and 14b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * limitations under the License. 15b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 16b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 17b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpackage com.android.phone; 18b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport static com.android.phone.TimeConsumingPreferenceActivity.EXCEPTION_ERROR; 209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport static com.android.phone.TimeConsumingPreferenceActivity.RESPONSE_ERROR; 219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport com.android.internal.telephony.CallForwardInfo; 239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport com.android.internal.telephony.CommandsInterface; 24cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport com.android.internal.telephony.Phone; 25cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport com.android.internal.telephony.PhoneFactory; 26cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport com.android.internal.telephony.cdma.TtyIntent; 27cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.app.Activity; 29b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.AlertDialog; 30b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.Dialog; 319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.app.ProgressDialog; 32cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.content.Context; 33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.DialogInterface; 34b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Intent; 35e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinskyimport android.content.SharedPreferences; 369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.content.SharedPreferences.Editor; 37365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.ActivityInfo; 38365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.PackageManager; 39365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.ResolveInfo; 40b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.database.Cursor; 41cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.media.AudioManager; 42b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.AsyncResult; 43b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Bundle; 44b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Handler; 45b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Message; 46b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.CheckBoxPreference; 47b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.ListPreference; 48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.Preference; 49b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.PreferenceActivity; 50b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.PreferenceScreen; 51153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds; 52cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.provider.Settings; 539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.telephony.PhoneNumberUtils; 54b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.TextUtils; 55365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 56b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.Log; 57b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.WindowManager; 586da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinskyimport android.widget.ListAdapter; 59b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 60365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.HashMap; 61365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.List; 62365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.Map; 63365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 64365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpublic class CallFeaturesSetting extends PreferenceActivity 66b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project implements DialogInterface.OnClickListener, 67b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Preference.OnPreferenceChangeListener, 68b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference.OnDialogClosedListener, 69b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference.GetDefaultNumberListener{ 70b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 716da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // intent action to bring up voice mail settings 72b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public static final String ACTION_ADD_VOICEMAIL = 73b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project "com.android.phone.CallFeaturesSetting.ADD_VOICEMAIL"; 746da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // intent action sent by this activity to a voice mail provider 756da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // to trigger its configuration UI 76365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public static final String ACTION_CONFIGURE_VOICEMAIL = 77365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky "com.android.phone.CallFeaturesSetting.CONFIGURE_VOICEMAIL"; 786da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Extra put in the return from VM provider config containing voicemail number to set 796da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky public static final String VM_NUMBER_EXTRA = "com.android.phone.VoicemailNumber"; 809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Extra put in the return from VM provider config containing call forwarding number to set 819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_NUMBER_EXTRA = "com.android.phone.ForwardingNumber"; 829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Extra put in the return from VM provider config containing call forwarding number to set 839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_NUMBER_TIME_EXTRA = "com.android.phone.ForwardingNumberTime"; 849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // If the VM provider returns non null value in this extra we will force the user to 859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // choose another VM provider 869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String SIGNOUT_EXTRA = "com.android.phone.Signout"; 879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Used to tell the saving logic to leave forwarding number as is 899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final CallForwardInfo[] FWD_SETTINGS_DONT_TOUCH = null; 909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to provider key for storing vm number 919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String VM_NUMBER_TAG = "#VMNumber"; 929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to provider key for storing forwarding settings 939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTINGS_TAG = "#FWDSettings"; 949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to forward settings key for storing length of settings array 959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTINGS_LENGTH_TAG = "#Length"; 969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to forward settings key for storing an individual setting 979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_TAG = "#Setting"; 989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffixes appended to forward setting key for storing an individual setting properties 999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_STATUS = "#Status"; 1009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_REASON = "#Reason"; 1019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_NUMBER = "#Number"; 1029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_TIME = "#Time"; 1039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 1049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Key identifying the default vocie mail provider 1059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String DEFAULT_VM_PROVIDER_KEY = ""; 106b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 107e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky // Extra put into ACTION_ADD_VOICEMAIL call to indicate which provider 108e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky // to remove from the list of providers presented to the user 109e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky public static final String IGNORE_PROVIDER_EXTRA = "com.android.phone.ProviderToIgnore"; 110e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 111b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // debug data 11287258b2b589c3afea4b89b840251012378e0d3b4David Brown private static final String LOG_TAG = "CallFeaturesSetting"; 113cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); 114b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1156da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // string constants 116153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov private static final String NUM_PROJECTION[] = {CommonDataKinds.Phone.NUMBER}; 117b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 118b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // String keys for preference lookup 119b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String BUTTON_VOICEMAIL_KEY = "button_voicemail_key"; 120365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final String BUTTON_VOICEMAIL_PROVIDER_KEY = "button_voicemail_provider_key"; 121365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final String BUTTON_VOICEMAIL_SETTING_KEY = "button_voicemail_setting_key"; 122b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String BUTTON_FDN_KEY = "button_fdn_key"; 123b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 124cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_DTMF_KEY = "button_dtmf_settings"; 1253800ac871d6548790ac6119bb68b9be0640af261David Krause private static final String BUTTON_RETRY_KEY = "button_auto_retry_key"; 126cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_TTY_KEY = "button_tty_mode_key"; 127cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_HAC_KEY = "button_hac_key"; 128cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 129cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_GSM_UMTS_OPTIONS = "button_gsm_more_expand_key"; 130cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CDMA_OPTIONS = "button_cdma_more_expand_key"; 131a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 132e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky private static final String VM_NUMBERS_SHARED_PREFERENCES_NAME = "vm_numbers"; 133e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 134b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Intent mContactListIntent; 135b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 136b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** Event for Async voicemail change call */ 1379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int EVENT_VOICEMAIL_CHANGED = 500; 1389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int EVENT_FORWARDING_CHANGED = 501; 1399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int EVENT_FORWARDING_GET_COMPLETED = 502; 140d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 141a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville // preferred TTY mode 142cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Phone.TTY_MODE_xxx 143cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause static final int preferredTtyMode = Phone.TTY_MODE_OFF; 144b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 145d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville // Dtmf tone types 146d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville static final int DTMF_TONE_TYPE_NORMAL = 0; 147d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville static final int DTMF_TONE_TYPE_LONG = 1; 148d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 149cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String HAC_KEY = "HACSetting"; 150cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String HAC_VAL_ON = "ON"; 151cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String HAC_VAL_OFF = "OFF"; 152d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 153b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** Handle to voicemail pref */ 154cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int VOICEMAIL_PREF_ID = 1; 155365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final int VOICEMAIL_PROVIDER_CFG_ID = 2; 156b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 157b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Phone mPhone; 158b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 159cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private AudioManager mAudioManager; 160cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 161b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VM_NOCHANGE_ERROR = 400; 162b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VM_RESPONSE_ERROR = 500; 1639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int FW_SET_RESPONSE_ERROR = 501; 1649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int FW_GET_RESPONSE_ERROR = 502; 165b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 166b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 167b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // dialog identifiers for voicemail 168b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VOICEMAIL_DIALOG_CONFIRM = 600; 1699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int VOICEMAIL_FWD_SAVING_DIALOG = 601; 1709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int VOICEMAIL_FWD_READING_DIALOG = 602; 171bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private static final int VOICEMAIL_REVERTING_DIALOG = 603; 172b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 173b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // status message sent back from handlers 174b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_OK = 100; 175cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 176b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // special statuses for voicemail controls. 177b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_EXCEPTION = 400; 1789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int MSG_FW_SET_EXCEPTION = 401; 1799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int MSG_FW_GET_EXCEPTION = 402; 180b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_OK = 600; 181b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_NOCHANGE = 700; 182cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 183b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditPhoneNumberPreference mSubMenuVoicemailSettings; 184cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1853800ac871d6548790ac6119bb68b9be0640af261David Krause private CheckBoxPreference mButtonAutoRetry; 186cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CheckBoxPreference mButtonHAC; 187cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private ListPreference mButtonDTMF; 188404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville private ListPreference mButtonTTY; 189365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private ListPreference mVoicemailProviders; 190365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private PreferenceScreen mVoicemailSettings; 1919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 192365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private class VoiceMailProvider { 193365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public VoiceMailProvider(String name, Intent intent) { 194365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.name = name; 195365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.intent = intent; 196365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 197365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public String name; 198365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public Intent intent; 199365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 2009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 2029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Forwarding settings we are going to save. 2039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky static final int [] FORWARDING_SETTINGS_REASONS = new int[] { 2059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_UNCONDITIONAL, 2069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_BUSY, 2079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_NO_REPLY, 2089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_NOT_REACHABLE 2099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky }; 2109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private class VoiceMailProviderSettings { 2129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 2139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Constructs settings object, setting all conditional forwarding to the specified number 2149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public VoiceMailProviderSettings(String voicemailNumber, String forwardingNumber, 2169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky int timeSeconds) { 2179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber = voicemailNumber; 2189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (forwardingNumber == null || forwardingNumber.length() == 0) { 2199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings = FWD_SETTINGS_DONT_TOUCH; 2209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 2219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length]; 2229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < this.forwardingSettings.length; i++) { 2239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo fi = new CallForwardInfo(); 2249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings[i] = fi; 2259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.reason = FORWARDING_SETTINGS_REASONS[i]; 2269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.status = (fi.reason == CommandsInterface.CF_REASON_UNCONDITIONAL) ? 0 : 1; 2279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 2289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.toa = PhoneNumberUtils.TOA_International; 2299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.number = forwardingNumber; 2309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.timeSeconds = timeSeconds; 2319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public VoiceMailProviderSettings(String voicemailNumber, CallForwardInfo[] infos) { 2369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber = voicemailNumber; 2379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings = infos; 2389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky @Override 2419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public boolean equals(Object o) { 2429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (o == null) return false; 2439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (!(o instanceof VoiceMailProviderSettings)) return false; 2449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final VoiceMailProviderSettings v = (VoiceMailProviderSettings)o; 2459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return ((this.voicemailNumber == null && 2479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky v.voicemailNumber == null) || 2489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber != null && 2499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber.equals(v.voicemailNumber)) 2509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky && 2519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky forwardingSettingsEqual(this.forwardingSettings, 2529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky v.forwardingSettings); 2539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private boolean forwardingSettingsEqual(CallForwardInfo[] infos1, 2569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] infos2) { 2579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (infos1 == infos2) return true; 2589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (infos1 == null || infos2 == null) return false; 2599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (infos1.length != infos2.length) return false; 2609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < infos1.length; i++) { 2619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo i1 = infos1[i]; 2629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo i2 = infos2[i]; 2639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (i1.status != i2.status || 2649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.reason != i2.reason || 2659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.serviceClass != i2.serviceClass || 2669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.toa != i2.toa || 2679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.number != i2.number || 2689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.timeSeconds != i2.timeSeconds) { 2699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return false; 2709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return true; 2739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky @Override 2769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public String toString() { 2779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return voicemailNumber + ((forwardingSettings != null ) ? (", " + 2789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky forwardingSettings.toString()) : ""); 2799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public String voicemailNumber; 2829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public CallForwardInfo[] forwardingSettings; 2839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 285e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky SharedPreferences mPerProviderSavedVMNumbers; 286365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 287365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 2889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Results of reading forwarding settings 2899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] mForwardingReadResults = null; 2919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 2939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Result of forwarding number change 2949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult[] mForwardingChangeResults = null; 2969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 2989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Result of vm number change 2999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult mVoicemailChangeResult = null; 3019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Previous VM provider setting so we can return to it in case of failure. 3049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String mPreviousVMProviderKey = null; 3069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Id of the dialog being currently shown. 3099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky int mCurrentDialogId = 0; 3119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Flag indicating that we are invoking settings for the voicemail provider programmatically 3149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * due to vm provider change. 3159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean mVMProviderSettingsForced = false; 3178e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 3188e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky /** 3198e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky * Flag indicating that we are making changes to vm or fwd numbers 3208e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky * due to vm provider change. 3218e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky */ 3228e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky boolean mChangingVMorFwdDueToProviderChange = false; 3238e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 3249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 325bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * True if we are in the process of vm & fwd number change and vm has already been changed. 326bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * This is used to decide what to do in case of rollback. 327bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 328bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky boolean mVMChangeCompletedSuccesfully = false; 329bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 330bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 331bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * True if we are in the process of vm & fwd number change and fwd# has already been changed. 332bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * This is used to decide what to do in case of rollback. 333bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 334bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky boolean mFwdChangeCompletedSuccesfully = false; 335bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 336bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 337bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * Id of error msg to display to user once we are done reverting the VM provider to the previous 338bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * one. 339bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 340bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky int mVMOrFwdSetError = 0; 341bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 342bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 343365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Data about discovered voice mail settings providers. 344365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Is populated by querying which activities can handle ACTION_CONFIGURE_VOICEMAIL. 345365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * They key in this map is package name + activity name. 346365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * We always add an entry for the default provider with a key of empty 347365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * string and intent value of null. 348365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * @see #initVoiceMailProviders. 349365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 350365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private Map<String, VoiceMailProvider> mVMProvidersData = 351365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky new HashMap<String, VoiceMailProvider>(); 352b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 353b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** string to hold old voicemail number as it is being updated. */ 354b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private String mOldVmNumber; 355b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 3569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // New call forwarding settings and vm number we will be setting 3579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Need to save these since before we get to saving we need to asynchronously 3589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // query the existing forwarding settings. 3599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] mNewFwdSettings; 3609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String mNewVMNumber; 361b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 362cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause TTYHandler ttyHandler; 363cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 364b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King private boolean mForeground; 365b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 366b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King @Override 367b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King public void onPause() { 368b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King super.onPause(); 369b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King mForeground = false; 370b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 371b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 372b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 373b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Click Listeners, handle click based on objects attached to UI. 374b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 375b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 376b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Click listener for all toggle events 377b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 378b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 379cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (preference == mSubMenuVoicemailSettings) { 380cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return true; 381cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonDTMF) { 382b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 383a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } else if (preference == mButtonTTY) { 384404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville return true; 3853800ac871d6548790ac6119bb68b9be0640af261David Krause } else if (preference == mButtonAutoRetry) { 386cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.System.putInt(mPhone.getContext().getContentResolver(), 387cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.System.CALL_AUTO_RETRY, 388cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.isChecked() ? 1 : 0); 389cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return true; 390cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonHAC) { 391cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int hac = mButtonHAC.isChecked() ? 1 : 0; 392cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Update HAC value in Settings database 393cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.putInt(mPhone.getContext().getContentResolver(), 394cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.HEARING_AID, hac); 395b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 396cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Update HAC Value in AudioManager 397cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mAudioManager.setParameter(HAC_KEY, hac != 0 ? HAC_VAL_ON : HAC_VAL_OFF); 398b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 399365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else if (preference == mVoicemailSettings) { 400365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (preference.getIntent() != null) { 4017c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Invoking cfg intent " + preference.getIntent().getPackage()); 402365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.startActivityForResult(preference.getIntent(), VOICEMAIL_PROVIDER_CFG_ID); 403365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else { 4047c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Opening VM number cfg dialog"); 405365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky updateVoiceNumberField(); 4067c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky mSubMenuVoicemailSettings.showPhoneNumberDialog(); 407365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 408365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return true; 409b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 410b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return false; 411b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 412b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 413b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 414b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Implemented to support onPreferenceChangeListener to look for preference 415cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause * changes. 416b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 417cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause * @param preference is the preference to be changed 418b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * @param objValue should be the value of the selection, NOT its localized 419b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * display value. 420b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 421b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public boolean onPreferenceChange(Preference preference, Object objValue) { 422cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (preference == mButtonDTMF) { 423cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int index = mButtonDTMF.findIndexOfValue((String) objValue); 424d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville Settings.System.putInt(mPhone.getContext().getContentResolver(), 425d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index); 426cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonTTY) { 427cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleTTYChange(preference, objValue); 428365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else if (preference == mVoicemailProviders) { 429495e409315aa3181a562baeb9d586f633b9eedc2Virgil King final String currentProviderKey = getCurrentVoicemailProviderKey(); 4309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String newProviderKey = (String)objValue; 4319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("VM provider changes to " + newProviderKey + " from " + 4329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPreviousVMProviderKey); 433bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mPreviousVMProviderKey.equals(newProviderKey)) { 434bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("No change "); 435bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return true; 436bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 4379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky updateVMPreferenceWidgets(newProviderKey); 438e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 4393897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky mPreviousVMProviderKey = currentProviderKey; 440495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4413897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky updateVMPreferenceWidgets(newProviderKey); 442495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final VoiceMailProviderSettings newProviderSettings = 4443897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky loadSettingsForVoiceMailProvider(newProviderKey); 445495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // If the user switches to a voice mail provider and we have a 4473897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky // numbers stored for it we will automatically change the 4483897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky // phone's 4499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // voice mail and forwarding number to the stored ones. 4509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Otherwise we will bring up provider's configuration UI. 451495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (newProviderSettings == null) { 4537c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Saved preferences not found - invoking config"); 4549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProviderSettingsForced = true; 4553897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky // Force the user into a configuration of the chosen 4563897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky // provider 457e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky simulatePreferenceClick(mVoicemailSettings); 458e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } else { 4597c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Saved preferences found - switching to them"); 4609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumber(newProviderKey, newProviderSettings); 461e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 462b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 463b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // always let the preference setting proceed. 464b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 465b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 466b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 467b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Preference click listener invoked on OnDialogClosed for EditPhoneNumberPreference. 468b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onDialogClosed(EditPhoneNumberPreference preference, int buttonClicked) { 4699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("onPreferenceClick: request preference click on dialog close: " + 4709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky buttonClicked); 4719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (buttonClicked == DialogInterface.BUTTON_NEGATIVE) { 4729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 4739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 474b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (preference instanceof EditPhoneNumberPreference) { 475b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference epn = preference; 476b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 477b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (epn == mSubMenuVoicemailSettings) { 478b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project handleVMBtnClickRequest(); 479b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 480b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 481b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 482b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 483b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 484b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Implemented for EditPhoneNumberPreference.GetDefaultNumberListener. 485b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * This method set the default values for the various 486b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * EditPhoneNumberPreference dialogs. 487b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 488b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public String onGetDefaultNumber(EditPhoneNumberPreference preference) { 489b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (preference == mSubMenuVoicemailSettings) { 490b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // update the voicemail number field, which takes care of the 491b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // mSubMenuVoicemailSettings itself, so we should return null. 492b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("updating default for voicemail dialog"); 493b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 494b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 495b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 496b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 497a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville String vmDisplay = mPhone.getVoiceMailNumber(); 498b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (TextUtils.isEmpty(vmDisplay)) { 499b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // if there is no voicemail number, we just return null to 500b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // indicate no contribution. 501b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 502b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 503b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 504b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Return the voicemail number prepended with "VM: " 505b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("updating default for call forwarding dialogs"); 506b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return getString(R.string.voicemail_abbreviated) + " " + vmDisplay; 507b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 508b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 509b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 510b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // override the startsubactivity call to make changes in state consistent. 511b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 512b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void startActivityForResult(Intent intent, int requestCode) { 513b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (requestCode == -1) { 514b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // this is an intent requested from the preference framework. 515b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.startActivityForResult(intent, requestCode); 516b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 517b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 518b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 519b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("startSubActivity: starting requested subactivity"); 520b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.startActivityForResult(intent, requestCode); 521b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 522b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 5239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void switchToPreviousVoicemailProvider() { 5249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("switchToPreviousVoicemailProvider " + mPreviousVMProviderKey); 5259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mPreviousVMProviderKey != null) { 526bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVMChangeCompletedSuccesfully || mFwdChangeCompletedSuccesfully) { // we have to revert with carrier 527bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky showDialog(VOICEMAIL_REVERTING_DIALOG); 528bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky VoiceMailProviderSettings prevSettings = 529bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky loadSettingsForVoiceMailProvider(mPreviousVMProviderKey); 530bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVMChangeCompletedSuccesfully) { 531bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mNewVMNumber = prevSettings.voicemailNumber; 532bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("have to revert VM to " + mNewVMNumber); 533bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mPhone.setVoiceMailNumber( 534bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mPhone.getVoiceMailAlphaTag().toString(), 535bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mNewVMNumber, 536bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky Message.obtain(mRevertOptionComplete, EVENT_VOICEMAIL_CHANGED)); 537bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 538bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mFwdChangeCompletedSuccesfully) { 539bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("have to revert fwd"); 540bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final CallForwardInfo[] prevFwdSettings = prevSettings.forwardingSettings; 541bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (prevFwdSettings != null) { 542bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mForwardingChangeResults = new AsyncResult[mNewFwdSettings.length]; 543bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky for (int i = 0; i < prevFwdSettings.length; i++) { 544bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky CallForwardInfo fi = prevFwdSettings[i]; 545bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("Reverting fwd #: " + i + ": " + fi.toString()); 546bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mPhone.setCallForwardingOption( 547bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky (fi.status == 1 ? 548bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky CommandsInterface.CF_ACTION_REGISTRATION : 549bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky CommandsInterface.CF_ACTION_DISABLE), 550bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky fi.reason, 551bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky fi.number, 552bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky fi.timeSeconds, 553bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mRevertOptionComplete.obtainMessage( 554bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky EVENT_FORWARDING_CHANGED, i, 0)); 555bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 556bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 557bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 558bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } else { 559bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("No need to revert"); 560bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky onRevertDone(); 561bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 562bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 563bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 564bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 565bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky void onRevertDone() { 566bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("Flipping provider key back to " + mPreviousVMProviderKey); 567bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVoicemailProviders.setValue(mPreviousVMProviderKey); 568bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVMPreferenceWidgets(mPreviousVMProviderKey); 569bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVoiceNumberField(); 570bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVMOrFwdSetError != 0) { 571bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky showVMDialog(mVMOrFwdSetError); 572bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMOrFwdSetError = 0; 5739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 5749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 5759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 576365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // asynchronous result call after contacts are selected or after we return from 577365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // a call to the VM settings provider. 578b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 579b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, Intent data) { 580b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // there are cases where the contact picker may end up sending us more than one 581b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // request. We want to ignore the request if we're not in the correct state. 582365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (requestCode == VOICEMAIL_PROVIDER_CFG_ID) { 5839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean failure = false; 5849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 5859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // No matter how the processing of result goes lets clear the flag 5869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("mVMProviderSettingsForced: " + mVMProviderSettingsForced); 5879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final boolean isVMProviderSettingsForced = mVMProviderSettingsForced; 5889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProviderSettingsForced = false; 5899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 5907c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky String vmNum = null; 591365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (resultCode != RESULT_OK) { 592365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result not OK."); 5939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky failure = true; 5947c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } else { 5957c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (data == null) { 5967c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result has no data"); 5977c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky failure = true; 5989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 5997c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (data.getBooleanExtra(SIGNOUT_EXTRA, false)) { 6007c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Provider requested signout"); 6017c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (isVMProviderSettingsForced) { 6027c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Going back to previous provider on signout"); 6037c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky switchToPreviousVoicemailProvider(); 6047c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } else { 6057c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky final String victim = getCurrentVoicemailProviderKey(); 6067c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Relaunching activity and ignoring " + victim); 6077c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky Intent i = new Intent(ACTION_ADD_VOICEMAIL); 6087c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky i.putExtra(IGNORE_PROVIDER_EXTRA, victim); 6097c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 6107c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky this.startActivity(i); 6117c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 6127c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky return; 6137c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 6147c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky vmNum = data.getStringExtra(VM_NUMBER_EXTRA); 6157c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (vmNum == null || vmNum.length() == 0) { 6167c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result has no vmnum"); 6177c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky failure = true; 6187c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 6199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 6209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 6219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (failure) { 6229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Failure in return from voicemail provider"); 6239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (isVMProviderSettingsForced) { 6249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky switchToPreviousVoicemailProvider(); 6259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 6269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Not switching back the provider since this is not forced config"); 6279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 628365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 629365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 6308e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = isVMProviderSettingsForced; 6319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String fwdNum = data.getStringExtra(FWD_NUMBER_EXTRA); 6329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 6339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // TODO(iliat): It would be nice to load the current network setting for this and 6349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // send it to the provider when it's config is invoked so it can use this as default 6359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final int fwdNumTime = data.getIntExtra(FWD_NUMBER_TIME_EXTRA, 20); 6369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 6379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result " + 6389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky (fwdNum != null ? "has" : " does not have") + " forwarding number"); 6397c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky saveVoiceMailAndForwardingNumber(getCurrentVoicemailProviderKey(), 640b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King new VoiceMailProviderSettings(vmNum, fwdNum, fwdNumTime)); 641365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 642365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 643b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 644b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (resultCode != RESULT_OK) { 645b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onActivityResult: contact picker result not OK."); 646b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 647b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 648b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 649b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Cursor cursor = getContentResolver().query(data.getData(), 650b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project NUM_PROJECTION, null, null, null); 651b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if ((cursor == null) || (!cursor.moveToFirst())) { 652b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onActivityResult: bad contact data, no results found."); 653b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 654b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 655b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 656b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (requestCode) { 657b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VOICEMAIL_PREF_ID: 658b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mSubMenuVoicemailSettings.onPickActivityResult(cursor.getString(0)); 659b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 660b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 661b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: may need exception here. 662b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 663b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 664b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 665b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Voicemail button logic 666b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void handleVMBtnClickRequest() { 667b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // normally called on the dialog close. 668b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 669b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Since we're stripping the formatting out on the getPhoneNumber() 670b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // call now, we won't need to do so here anymore. 671b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 6729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumber( 6737c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky getCurrentVoicemailProviderKey(), 6749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky new VoiceMailProviderSettings(mSubMenuVoicemailSettings.getPhoneNumber(), 6759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky FWD_SETTINGS_DONT_TOUCH)); 676365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 677365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 678b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King private void showDialogIfForeground(int id) { 679b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King if (mForeground) { 680b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialog(id); 681b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 682b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 683b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 684b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King private void dismissDialogSafely(int id) { 685b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King try { 686b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialog(id); 687b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } catch (IllegalArgumentException e) { 688b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // This is expected in the case where we were in the background 689b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // at the time we would normally have shown the dialog, so we didn't 690b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // show it. 691b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 692b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 693b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 6949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void saveVoiceMailAndForwardingNumber(String key, 6959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VoiceMailProviderSettings newSettings) { 6969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("saveVoiceMailAndForwardingNumber: " + newSettings.toString()); 6979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewVMNumber = newSettings.voicemailNumber; 698b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // empty vm number == clearing the vm number ? 6999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mNewVMNumber == null) { 7009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewVMNumber = ""; 7019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewFwdSettings = newSettings.forwardingSettings; 7049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("newFwdNumber " + 7059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String.valueOf((mNewFwdSettings != null ? mNewFwdSettings.length : 0)) 7069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky + " settings"); 7079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // No fwd settings on CDMA 7099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mPhone.getPhoneType() == Phone.PHONE_TYPE_CDMA) { 7109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("ignoring forwarding setting since this is CDMA phone"); 7119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewFwdSettings = FWD_SETTINGS_DONT_TOUCH; 712b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 713b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 7149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky //throw a warning if the vm is the same and we do not touch forwarding. 7159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mNewVMNumber.equals(mOldVmNumber) && mNewFwdSettings == FWD_SETTINGS_DONT_TOUCH) { 716cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showVMDialog(MSG_VM_NOCHANGE); 717b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 718b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 719b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 7209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky maybeSaveSettingsForVoicemailProvider(key, newSettings); 721bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMChangeCompletedSuccesfully = false; 722bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mFwdChangeCompletedSuccesfully = false; 723bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMOrFwdSetError = 0; 7249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // If we are switching to a non default provider - save previous forwarding 7259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // settings 7269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (!key.equals(mPreviousVMProviderKey) && 7279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPreviousVMProviderKey.equals(DEFAULT_VM_PROVIDER_KEY)) { 7289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Reading current forwarding settings"); 7299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length]; 7309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < FORWARDING_SETTINGS_REASONS.length; i++) { 7319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults[i] = null; 7329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPhone.getCallForwardingOption(FORWARDING_SETTINGS_REASONS[i], 7339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mGetOptionComplete.obtainMessage(EVENT_FORWARDING_GET_COMPLETED, i, 0)); 7349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 735b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VOICEMAIL_FWD_READING_DIALOG); 7369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 7379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumberStage2(); 7389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private Handler mGetOptionComplete = new Handler() { 7429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky @Override 7439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public void handleMessage(Message msg) { 7449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult result = (AsyncResult) msg.obj; 7459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky switch (msg.what) { 7469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case EVENT_FORWARDING_GET_COMPLETED: 7479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky handleForwardingSettingsReadResult(result, msg.arg1); 7489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 7499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky }; 7529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky void handleForwardingSettingsReadResult(AsyncResult ar, int idx) { 7549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "handleForwardingSettingsReadResult: " + idx); 7559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky Throwable error = null; 7569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (ar.exception != null) { 7579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "FwdRead: ar.exception=" + 7589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky ar.exception.getMessage()); 7599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky error = ar.exception; 7609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (ar.userObj instanceof Throwable) { 7629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "FwdRead: userObj=" + 7639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky ((Throwable)ar.userObj).getMessage()); 7649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky error = (Throwable)ar.userObj; 7659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // We may have already gotten an error and decided to ignore the other results. 7689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingReadResults == null) { 7699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "ignoring fwd reading result: " + idx); 7709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 7719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // In case of error ignore other results, show an error dialog 7749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (error != null) { 7759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Error discovered for fwd read : " + idx); 7769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults = null; 777b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialogSafely(VOICEMAIL_FWD_READING_DIALOG); 7789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky showVMDialog(MSG_FW_GET_EXCEPTION); 7799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 7809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Get the forwarding info 7839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final CallForwardInfo cfInfoArray[] = (CallForwardInfo[]) ar.result; 7849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo fi = null; 7859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0 ; i < cfInfoArray.length; i++) { 7869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if ((cfInfoArray[i].serviceClass & CommandsInterface.SERVICE_CLASS_VOICE) != 0) { 7879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi = cfInfoArray[i]; 7889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 7899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (fi == null) { 7929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // In case we go nothing it means we need this reason disabled 7949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // so create a CallForwardInfo for capturing this 7959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Creating default info for " + idx); 7969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi = new CallForwardInfo(); 7979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.status = 0; 7989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.reason = FORWARDING_SETTINGS_REASONS[idx]; 7999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 8009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 8019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Got " + fi.toString() + " for " + idx); 8029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults[idx] = fi; 8049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 8059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Check if we got all the results already 8069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean done = true; 8079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < mForwardingReadResults.length; i++) { 8089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingReadResults[i] == null) { 8099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky done = false; 8109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 8119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (done) { 8149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Done receiving fwd info"); 815b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialogSafely(VOICEMAIL_FWD_READING_DIALOG); 8169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky maybeSaveSettingsForVoicemailProvider(DEFAULT_VM_PROVIDER_KEY, 8179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky new VoiceMailProviderSettings(this.mOldVmNumber, mForwardingReadResults)); 8189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumberStage2(); 8199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 8209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Not done receiving fwd info"); 8219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 8249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Called after we are done saving the previous forwarding settings if 8259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // we needed. 8269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void saveVoiceMailAndForwardingNumberStage2() { 8279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingChangeResults = null; 8289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVoicemailChangeResult = null; 8299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mNewFwdSettings != FWD_SETTINGS_DONT_TOUCH) { 8309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingChangeResults = new AsyncResult[mNewFwdSettings.length]; 8319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < mNewFwdSettings.length; i++) { 8329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo fi = mNewFwdSettings[i]; 8339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Setting fwd #: " + i + ": " + fi.toString()); 8349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPhone.setCallForwardingOption( 8359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky (fi.status == 1 ? 8369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_ACTION_REGISTRATION : 8379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_ACTION_DISABLE), 8389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.reason, 8399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.number, 8409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.timeSeconds, 8419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mSetOptionComplete.obtainMessage(EVENT_FORWARDING_CHANGED, i, 0)); 8429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 8439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 844b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VOICEMAIL_FWD_SAVING_DIALOG); 8459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 8469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Not touching fwd #"); 847bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky setVMNumberWithCarrier(); 8489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 849bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 850bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 851bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky void setVMNumberWithCarrier() { 8529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("save voicemail #: " + mNewVMNumber); 853b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPhone.setVoiceMailNumber( 854b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPhone.getVoiceMailAlphaTag().toString(), 8559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewVMNumber, 856b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Message.obtain(mSetOptionComplete, EVENT_VOICEMAIL_CHANGED)); 857b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 858b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 8599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 860b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Callback to handle option update completions 861b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 862b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Handler mSetOptionComplete = new Handler() { 863b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 864b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void handleMessage(Message msg) { 8659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult result = (AsyncResult) msg.obj; 866b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (msg.what) { 867b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case EVENT_VOICEMAIL_CHANGED: 8689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVoicemailChangeResult = result; 869bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMChangeCompletedSuccesfully = checkVMChangeSuccess() == null; 870bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("VM change complete msg, VM change done = " + 871bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky String.valueOf(mVMChangeCompletedSuccesfully)); 8729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 8739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case EVENT_FORWARDING_CHANGED: 8749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingChangeResults[msg.arg1] = result; 875bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final boolean completed = checkForwardingCompleted(); 876bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (completed) { 877bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mFwdChangeCompletedSuccesfully = checkFwdChangeSuccess() == null; 878bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 879bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("FWD change complete msg " + msg.arg1 + ", completed=" + 880bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky String.valueOf(completed) + ", succesfully=" + 881bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky String.valueOf(mFwdChangeCompletedSuccesfully)); 882bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mFwdChangeCompletedSuccesfully) { 883bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky setVMNumberWithCarrier(); 884bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 885b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 886b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 887b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: should never reach this, may want to throw exception 888b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 8899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Check if we are done - either we are only setting vm and that is done 8909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // or we are setting both vm and fwd and both are done. 891bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final boolean vmCompleted = mVoicemailChangeResult != null; 892bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 893bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky boolean done = false; 894bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mForwardingChangeResults != null) { 895bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (checkForwardingCompleted()) { 896bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (!mFwdChangeCompletedSuccesfully) { 897bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky done = true; 898bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } else { 899bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky done = vmCompleted; 9009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 9019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 902bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } else { 903bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky done = vmCompleted; 9049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 9059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (done) { 9069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("All VM related changes done"); 9079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingChangeResults != null) { 908b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialogSafely(VOICEMAIL_FWD_SAVING_DIALOG); 9099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 9109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky handleSetVMOrFwdMessage(); 9119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 912b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 913b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }; 914b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 915bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 916bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * Callback to handle option revert completions 917bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 918bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private Handler mRevertOptionComplete = new Handler() { 919bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky @Override 920bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky public void handleMessage(Message msg) { 921bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky AsyncResult result = (AsyncResult) msg.obj; 922bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky switch (msg.what) { 923bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky case EVENT_VOICEMAIL_CHANGED: 924bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVoicemailChangeResult = result; 925bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("VM revert complete msg"); 926bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky break; 927bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky case EVENT_FORWARDING_CHANGED: 928bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mForwardingChangeResults[msg.arg1] = result; 929bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("FWD revert complete msg "); 930bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky break; 931bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky default: 932bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky // TODO: should never reach this, may want to throw exception 933bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 934bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final boolean done = 935bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky (!mVMChangeCompletedSuccesfully || mVoicemailChangeResult != null) && 936bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky (!mFwdChangeCompletedSuccesfully || checkForwardingCompleted()); 937bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (done) { 938bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("All VM reverts done"); 939bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky dismissDialog(VOICEMAIL_REVERTING_DIALOG); 940bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky onRevertDone(); 941bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 942bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 943bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky }; 944bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 945bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 946bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * @return true if forwarding change has completed 947bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 948bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private boolean checkForwardingCompleted() { 949bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mForwardingChangeResults == null) { 950bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return true; 951bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 952bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky for (int i = 0; i < mForwardingChangeResults.length; i++) { 953bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mForwardingChangeResults[i] == null) { 954bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return false; 955bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 956bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 957bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return true; 958bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 959bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 960bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * @return error string or null if successful 961bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 962bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private String checkFwdChangeSuccess() { 963bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky for (int i = 0; i < mForwardingChangeResults.length; i++) { 964bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mForwardingChangeResults[i].exception != null) { 965bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final String msg = mForwardingChangeResults[i].exception.getMessage(); 966bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (msg == null) { 967bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return ""; 968bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 969bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return msg; 970bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 971bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 972bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return null; 973bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 974bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 975bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 976bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * @return error string or null if succesfull 977bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 978bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private String checkVMChangeSuccess() { 979bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVoicemailChangeResult.exception != null) { 980bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final String msg = mVoicemailChangeResult.exception.getMessage(); 981bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (msg == null) { 982bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return ""; 983bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 984bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return msg; 985bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 986bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return null; 987bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 988bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 9899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void handleSetVMOrFwdMessage() { 990b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) { 991b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project log("handleSetVMMessage: set VM request complete"); 992b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 9939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean success = true; 9949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean fwdFailure = false; 9959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String exceptionMessage = ""; 9969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingChangeResults != null) { 997bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky exceptionMessage = checkFwdChangeSuccess(); 998bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (exceptionMessage != null) { 999bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky success = false; 1000bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky fwdFailure = true; 10019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 10029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 1003bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (success) { 1004bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky exceptionMessage = checkVMChangeSuccess(); 1005bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (exceptionMessage != null) { 1006bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky success = false; 1007bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 10089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 10099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (success) { 1010b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("change VM success!"); 10118e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky handleVMAndFwdSetSuccess(MSG_VM_OK); 1012bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVoiceNumberField(); 1013b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 10149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (fwdFailure) { 10159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky log("change FW failed: " + exceptionMessage); 10168e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky handleVMOrFwdSetError(MSG_FW_SET_EXCEPTION); 10179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 10189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky log("change VM failed: " + exceptionMessage); 10198e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky handleVMOrFwdSetError(MSG_VM_EXCEPTION); 10209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 1021b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1022b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1023b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 10248e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky private void handleVMOrFwdSetError(int msgId) { 10258e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky if (mChangingVMorFwdDueToProviderChange) { 1026bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMOrFwdSetError = msgId; 1027bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mChangingVMorFwdDueToProviderChange = false; 10288e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky switchToPreviousVoicemailProvider(); 1029bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return; 10308e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky } 10318e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = false; 10328e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky showVMDialog(msgId); 1033bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVoiceNumberField(); 10348e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky } 10358e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 10368e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky private void handleVMAndFwdSetSuccess(int msgId) { 10378e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = false; 10388e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky showVMDialog(msgId); 10398e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky } 10408e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 1041b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 1042b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Methods used to sync UI state with that of the network 1043b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 1044b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // update the voicemail number from what we've recorded on the sim. 1045b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void updateVoiceNumberField() { 10464ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang if (mSubMenuVoicemailSettings == null) { 10474ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang return; 10484ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang } 1049404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1050b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldVmNumber = mPhone.getVoiceMailNumber(); 1051b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mOldVmNumber == null) { 1052b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldVmNumber = ""; 1053b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1054b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mSubMenuVoicemailSettings.setPhoneNumber(mOldVmNumber); 1055365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String summary = (mOldVmNumber.length() > 0) ? mOldVmNumber : 1056365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky getString(R.string.voicemail_number_not_set); 1057365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mSubMenuVoicemailSettings.setSummary(summary); 1058b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1059b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1060b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 1061b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Helper Methods for Activity class. 1062b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King * The initial query commands are split into two pieces now 1063b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * for individual expansion. This combined with the ability 1064b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * to cancel queries allows for a much better user experience, 1065b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * and also ensures that the user only waits to update the 1066b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * data that is relevant. 1067b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 1068b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1069b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King @Override 1070b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King protected void onPrepareDialog(int id, Dialog dialog) { 1071b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King super.onPrepareDialog(id, dialog); 1072b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King mCurrentDialogId = id; 1073b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 1074b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 1075b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // dialog creation method, called by showDialog() 1076b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 1077b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected Dialog onCreateDialog(int id) { 1078cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if ((id == VM_RESPONSE_ERROR) || (id == VM_NOCHANGE_ERROR) || 10799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky (id == FW_SET_RESPONSE_ERROR) || (id == FW_GET_RESPONSE_ERROR) || 1080cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause (id == VOICEMAIL_DIALOG_CONFIRM)) { 1081b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1082b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AlertDialog.Builder b = new AlertDialog.Builder(this); 1083b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1084b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int msgId; 1085b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int titleId = R.string.error_updating_title; 1086b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (id) { 1087b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VOICEMAIL_DIALOG_CONFIRM: 1088b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.vm_changed; 1089b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project titleId = R.string.voicemail; 1090b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 2 1091b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNegativeButton(R.string.close_dialog, this); 1092b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1093b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VM_NOCHANGE_ERROR: 1094b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // even though this is technically an error, 1095b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // keep the title friendly. 1096b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.no_change; 1097b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project titleId = R.string.voicemail; 1098b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 2 1099b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNegativeButton(R.string.close_dialog, this); 1100b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1101b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VM_RESPONSE_ERROR: 1102b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.vm_change_failed; 1103b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 1 1104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setPositiveButton(R.string.close_dialog, this); 1105b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 11069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case FW_SET_RESPONSE_ERROR: 11079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky msgId = R.string.fw_change_failed; 11089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Set Button 1 11099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setPositiveButton(R.string.close_dialog, this); 11109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 11119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case FW_GET_RESPONSE_ERROR: 11129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky msgId = R.string.fw_get_in_vm_failed; 11139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setPositiveButton(R.string.alert_dialog_yes, this); 11149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setNegativeButton(R.string.alert_dialog_no, this); 11159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 1116b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 1117b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.exception_error; 1118b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 3, tells the activity that the error is 1119b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // not recoverable on dialog exit. 1120b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNeutralButton(R.string.close_dialog, this); 1121b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1122b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1123b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1124b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setTitle(getText(titleId)); 11259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String message = getText(msgId).toString(); 11269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setMessage(message); 1127b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setCancelable(false); 1128b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AlertDialog dialog = b.create(); 1129b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1130b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // make the dialog more obvious by bluring the background. 1131b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 1132b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1133b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return dialog; 1134bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } else if (id == VOICEMAIL_FWD_SAVING_DIALOG || id == VOICEMAIL_FWD_READING_DIALOG || 1135bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky id == VOICEMAIL_REVERTING_DIALOG) { 11369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky ProgressDialog dialog = new ProgressDialog(this); 11379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setTitle(getText(R.string.updating_title)); 11389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setIndeterminate(true); 11399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setCancelable(false); 11409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setMessage(getText( 1141bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky id == VOICEMAIL_FWD_SAVING_DIALOG ? R.string.updating_settings : 1142bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky (id == VOICEMAIL_REVERTING_DIALOG ? R.string.reverting_settings : 1143bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky R.string.reading_settings))); 11449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return dialog; 1145b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1146b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 11479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 1148b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 1149b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1150b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1151b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // This is a method implemented for DialogInterface.OnClickListener. 1152b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Used with the error dialog to close the app, voicemail dialog to just dismiss. 11539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Close button is mapped to BUTTON_POSITIVE for the errors that close the activity, 11549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // while those that are mapped to BUTTON_NEUTRAL only move the preference focus. 1155b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 1156b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project dialog.dismiss(); 1157b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (which){ 11589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case DialogInterface.BUTTON_NEUTRAL: 11599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Neutral button"); 1160b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 11619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case DialogInterface.BUTTON_NEGATIVE: 11629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Negative button"); 11639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mCurrentDialogId == FW_GET_RESPONSE_ERROR) { 11649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // We failed to get current forwarding settings and the user 116530225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // does not wish to continue. 11669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky switchToPreviousVoicemailProvider(); 11679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 11689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 11699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case DialogInterface.BUTTON_POSITIVE: 11709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Positive button"); 11719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mCurrentDialogId == FW_GET_RESPONSE_ERROR) { 11729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // We failed to get current forwarding settings but the user 11739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // wishes to continue changing settings to the new vm provider 11749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumberStage2(); 11759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 11769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky finish(); 11779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 117830225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky return; 1179b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 1180b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // just let the dialog close and go back to the input 1181b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 118230225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // In all dialogs, all buttons except BUTTON_POSITIVE lead to the end of user interaction 118330225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // with settings UI. If we were called to explicitly configure voice mail then 118430225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // we finish the settings activity here to come back to whatever the user was doing. 118530225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL)) { 118630225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky finish(); 118730225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky } 1188b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1189b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1190b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // set the app state with optional status. 1191cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void showVMDialog(int msgStatus) { 1192cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause switch (msgStatus) { 1193b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // It's a bit worrisome to punt in the error cases here when we're 1194b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // not in the foreground; maybe toast instead? 1195cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_EXCEPTION: 1196b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VM_RESPONSE_ERROR); 1197b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 11989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case MSG_FW_SET_EXCEPTION: 1199b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(FW_SET_RESPONSE_ERROR); 12009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 12019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case MSG_FW_GET_EXCEPTION: 1202b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(FW_GET_RESPONSE_ERROR); 12039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 1204cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_NOCHANGE: 1205b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VM_NOCHANGE_ERROR); 1206b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1207cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_OK: 1208b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VOICEMAIL_DIALOG_CONFIRM); 1209b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1210cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_OK: 1211cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause default: 1212cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // This should never happen. 1213a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1214a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1215404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1216b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 1217b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Activity class methods 1218b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 1219b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1220b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 1221b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onCreate(Bundle icicle) { 1222b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onCreate(icicle); 12239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Creating activity"); 1224a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville mPhone = PhoneFactory.getDefaultPhone(); 1225b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1226cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.call_feature_setting); 1227cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1228cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 1229cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1230b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // get buttons 1231b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project PreferenceScreen prefSet = getPreferenceScreen(); 1232365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mSubMenuVoicemailSettings = (EditPhoneNumberPreference)findPreference(BUTTON_VOICEMAIL_KEY); 12334ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang if (mSubMenuVoicemailSettings != null) { 12344ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setParentActivity(this, VOICEMAIL_PREF_ID, this); 12354ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setDialogOnClosedListener(this); 12364ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setDialogTitle(R.string.voicemail_settings_number_label); 12374ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang } 1238404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1239cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF = (ListPreference) findPreference(BUTTON_DTMF_KEY); 1240cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry = (CheckBoxPreference) findPreference(BUTTON_RETRY_KEY); 1241cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY); 1242cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY = (ListPreference) findPreference(BUTTON_TTY_KEY); 1243365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders = (ListPreference) findPreference(BUTTON_VOICEMAIL_PROVIDER_KEY); 1244b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky if (mVoicemailProviders != null) { 1245b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky mVoicemailProviders.setOnPreferenceChangeListener(this); 1246b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky mVoicemailSettings = (PreferenceScreen)findPreference(BUTTON_VOICEMAIL_SETTING_KEY); 1247b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1248b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky initVoiceMailProviders(); 1249b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky } 1250cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.dtmf_type_enabled)) { 1251cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF.setOnPreferenceChangeListener(this); 1252cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 1253cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonDTMF); 1254cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF = null; 12555b269ecd49279c3c4f85f55fa4fd4baa88e3a54bjsh } 1256b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1257cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.auto_retry_enabled)) { 1258cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.setOnPreferenceChangeListener(this); 1259cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 1260cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonAutoRetry); 1261cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry = null; 1262cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1263b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1264cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.hac_enabled)) { 1265cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC.setOnPreferenceChangeListener(this); 1266cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 1267cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonHAC); 1268cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC = null; 1269cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1270b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1271cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.tty_enabled)) { 1272cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setOnPreferenceChangeListener(this); 1273cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyHandler = new TTYHandler(); 1274b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 1275cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonTTY); 1276cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY = null; 1277cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1278cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1279cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (!getResources().getBoolean(R.bool.world_phone)) { 1280cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(prefSet.findPreference(BUTTON_CDMA_OPTIONS)); 1281cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(prefSet.findPreference(BUTTON_GSM_UMTS_OPTIONS)); 1282cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 128379b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink int phoneType = mPhone.getPhoneType(); 128479b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink if (phoneType == Phone.PHONE_TYPE_CDMA) { 1285cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(prefSet.findPreference(BUTTON_FDN_KEY)); 1286cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.cdma_call_options); 128779b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink } else if (phoneType == Phone.PHONE_TYPE_GSM) { 1288cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.gsm_umts_call_options); 128979b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink } else { 129079b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink throw new IllegalStateException("Unexpected phone type: " + phoneType); 1291b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1292b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1293b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1294cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // create intent to bring up contact list 1295cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mContactListIntent = new Intent(Intent.ACTION_GET_CONTENT); 1296cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mContactListIntent.setType(android.provider.Contacts.Phones.CONTENT_ITEM_TYPE); 1297cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1298cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // check the intent that started this activity and pop up the voicemail 1299cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // dialog if we've been asked to. 13006da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // If we have at least one non default VM provider registered then bring up 13016da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // the selection for the VM provider, otherwise bring up a VM number dialog. 13026da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // We only bring up the dialog the first time we are called (not after orientation change) 13036da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (icicle == null) { 1304b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL) && 1305b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky mVoicemailProviders != null) { 13066da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (mVMProvidersData.size() > 1) { 13076da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky simulatePreferenceClick(mVoicemailProviders); 13086da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } else { 13099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky onPreferenceChange(mVoicemailProviders, DEFAULT_VM_PROVIDER_KEY); 13109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVoicemailProviders.setValue(DEFAULT_VM_PROVIDER_KEY); 13116da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 13126da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 1313cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1314b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 13159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProviderSettingsForced = false; 1316b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1317b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1318b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 1319cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause protected void onResume() { 1320cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause super.onResume(); 1321b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King mForeground = true; 1322b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1323cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonDTMF != null) { 1324cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int dtmf = Settings.System.getInt(getContentResolver(), 1325cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_NORMAL); 1326cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF.setValueIndex(dtmf); 1327cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1328d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 1329cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonAutoRetry != null) { 1330cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int autoretry = Settings.System.getInt(getContentResolver(), 1331cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.CALL_AUTO_RETRY, 0); 1332cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.setChecked(autoretry != 0); 1333d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville } 13343800ac871d6548790ac6119bb68b9be0640af261David Krause 1335cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonHAC != null) { 1336cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int hac = Settings.System.getInt(getContentResolver(), Settings.System.HEARING_AID, 0); 1337cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC.setChecked(hac != 0); 1338cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1339d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 1340cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonTTY != null) { 1341cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPhone.queryTTYMode(ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_GET)); 1342cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1343b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1344b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1345cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleTTYChange(Preference preference, Object objValue) { 1346404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville int buttonTtyMode; 1347404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville buttonTtyMode = Integer.valueOf((String) objValue).intValue(); 1348404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville int settingsTtyMode = android.provider.Settings.Secure.getInt( 1349cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause getContentResolver(), 1350404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville android.provider.Settings.Secure.PREFERRED_TTY_MODE, preferredTtyMode); 1351cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" + 1352404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville Integer.toString(buttonTtyMode)); 1353404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1354404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville if (buttonTtyMode != settingsTtyMode) { 1355404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville switch(buttonTtyMode) { 1356404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_OFF: 1357404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_FULL: 1358404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_HCO: 1359404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_VCO: 1360cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPhone.setTTYMode(buttonTtyMode, 1361cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_SET)); 1362404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville break; 1363404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville default: 1364404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville mPhone.setTTYMode(Phone.TTY_MODE_OFF, 1365cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_SET)); 1366404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 1367404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 1368a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1369a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1370cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause class TTYHandler extends Handler { 1371cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause /** Event for TTY mode change */ 1372cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int EVENT_TTY_MODE_GET = 700; 1373cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int EVENT_TTY_MODE_SET = 800; 1374a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1375a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville @Override 1376a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville public void handleMessage(Message msg) { 1377a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville switch (msg.what) { 1378cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case EVENT_TTY_MODE_GET: 1379cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleQueryTTYModeResponse(msg); 1380404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville break; 1381404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case EVENT_TTY_MODE_SET: 1382cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleSetTTYModeResponse(msg); 1383a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville break; 1384404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 1385404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 1386404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1387cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void updatePreferredTtyModeSummary(int TtyMode) { 1388cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause String [] txts = getResources().getStringArray(R.array.tty_mode_entries); 1389cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause switch(TtyMode) { 1390cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_OFF: 1391cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_HCO: 1392cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_VCO: 1393cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_FULL: 1394cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setSummary(txts[TtyMode]); 1395a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville break; 1396a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville default: 1397cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setEnabled(false); 1398cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setSummary(txts[Phone.TTY_MODE_OFF]); 1399a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1400a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1401a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1402cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleQueryTTYModeResponse(Message msg) { 1403cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause AsyncResult ar = (AsyncResult) msg.obj; 1404cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (ar.exception != null) { 1405cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleQueryTTYModeResponse: Error getting TTY state."); 1406cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setEnabled(false); 1407cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 1408cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleQueryTTYModeResponse: TTY enable state successfully queried."); 1409a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1410cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int ttymode = ((int[]) ar.result)[0]; 1411cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleQueryTTYModeResponse:ttymode=" + ttymode); 1412a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1413cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Intent ttyModeChanged = new Intent(TtyIntent.TTY_ENABLED_CHANGE_ACTION); 1414cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyModeChanged.putExtra("ttyEnabled", ttymode != Phone.TTY_MODE_OFF); 1415cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause sendBroadcast(ttyModeChanged); 1416cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.Secure.putInt(getContentResolver(), 1417cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.Secure.PREFERRED_TTY_MODE, ttymode ); 1418cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setValue(Integer.toString(ttymode)); 1419cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause updatePreferredTtyModeSummary(ttymode); 1420a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1421a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1422a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1423cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleSetTTYModeResponse(Message msg) { 1424cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause AsyncResult ar = (AsyncResult) msg.obj; 1425a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1426cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (ar.exception != null) { 1427cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleSetTTYModeResponse: Error setting TTY mode, ar.exception" 1428cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause + ar.exception); 1429a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1430cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPhone.queryTTYMode(ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_GET)); 1431a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1432a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 14333800ac871d6548790ac6119bb68b9be0640af261David Krause } 14343800ac871d6548790ac6119bb68b9be0640af261David Krause 1435b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static void log(String msg) { 1436b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Log.d(LOG_TAG, msg); 1437b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1438365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1439365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 1440365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Updates the look of the VM preference widgets based on current VM provider settings. 1441365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Note that the provider name is loaded form the found activity via loadLabel in 1442365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * initVoiceMailProviders in order for it to be localizable. 1443365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 1444365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void updateVMPreferenceWidgets(String currentProviderSetting) { 1445365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String key = currentProviderSetting; 1446365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final VoiceMailProvider provider = mVMProvidersData.get(key); 1447365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1448365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /* This is the case when we are coming up on a freshly wiped phone and there is no 1449365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky persisted value for the list preference mVoicemailProviders. 1450365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky In this case we want to show the UI asking the user to select a voicemail provider as 1451365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky opposed to silently falling back to default one. */ 1452365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (provider == null) { 1453365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setSummary(getString(R.string.sum_voicemail_choose_provider)); 1454365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setSummary(""); 1455365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setEnabled(false); 1456365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setIntent(null); 1457365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else { 1458365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String providerName = provider.name; 1459365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setSummary(providerName); 1460365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setSummary(getApplicationContext().getString( 1461365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky R.string.voicemail_settings_for, providerName)); 1462365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setEnabled(true); 1463365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setIntent(provider.intent); 1464365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1465365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1466365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1467365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 1468365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Enumerates existing VM providers and puts their data into the list and populates 1469365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * the preference list objects with their names. 14706da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * In case we are called with ACTION_ADD_VOICEMAIL intent the intent may have 1471e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * an extra string called IGNORE_PROVIDER_EXTRA with "package.activityName" of the provider 14726da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * which should be hidden when we bring up the list of possible VM providers to choose. 14736da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * This allows a provider which is being disabled (e.g. GV user logging out) to force the user 14746da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * to pick some other provider. 1475365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 1476365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void initVoiceMailProviders() { 14779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPerProviderSavedVMNumbers = 14789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.getApplicationContext().getSharedPreferences( 14799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VM_NUMBERS_SHARED_PREFERENCES_NAME, MODE_PRIVATE); 14809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 14816da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky String providerToIgnore = null; 14826da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL)) { 14839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("ACTION_ADD_VOICEMAIL"); 14849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (getIntent().hasExtra(IGNORE_PROVIDER_EXTRA)) { 14859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky providerToIgnore = getIntent().getStringExtra(IGNORE_PROVIDER_EXTRA); 14869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 14879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("providerToIgnore=" + providerToIgnore); 14887c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (providerToIgnore != null) { 14897c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky deleteSettingsForVoicemailProvider(providerToIgnore); 14907c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 14916da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 14926da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 1493365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.clear(); 1494365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1495365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // Stick the default element which is always there 1496365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String myCarrier = getString(R.string.voicemail_default); 14979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProvidersData.put(DEFAULT_VM_PROVIDER_KEY, new VoiceMailProvider(myCarrier, null)); 1498365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1499365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // Enumerate providers 1500365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky PackageManager pm = getPackageManager(); 1501365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky Intent intent = new Intent(); 1502365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky intent.setAction(ACTION_CONFIGURE_VOICEMAIL); 1503365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); 15046da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky int len = resolveInfos.size() + 1; // +1 for the default choice we will insert. 1505365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 15066da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Go through the list of discovered providers populating the data map 15076da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // skip the provider we were instructed to ignore if there was one 1508365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky for (int i = 0; i < resolveInfos.size(); i++) { 1509365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final ResolveInfo ri= resolveInfos.get(i); 15106da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final ActivityInfo currentActivityInfo = ri.activityInfo; 15116da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final String key = makeKeyForActivity(currentActivityInfo); 15129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Loading " + key); 15136da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (key.equals(providerToIgnore)) { 15149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Ignoring " + key); 15156da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky len--; 15166da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky continue; 15176da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 1518365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String nameForDisplay = ri.loadLabel(pm).toString(); 1519365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky Intent providerIntent = new Intent(); 1520365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky providerIntent.setAction(ACTION_CONFIGURE_VOICEMAIL); 1521365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky providerIntent.setClassName(currentActivityInfo.packageName, 1522365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky currentActivityInfo.name); 1523365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.put( 1524365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky key, 1525365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky new VoiceMailProvider(nameForDisplay, providerIntent)); 15266da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 15276da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15286da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 15296da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Now we know which providers to display - create entries and values array for 15306da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // the list preference 15316da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky String [] entries = new String [len]; 15326da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky String [] values = new String [len]; 15336da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky entries[0] = myCarrier; 15349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky values[0] = DEFAULT_VM_PROVIDER_KEY; 15356da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky int entryIdx = 1; 15366da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky for (int i = 0; i < resolveInfos.size(); i++) { 15376da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final String key = makeKeyForActivity(resolveInfos.get(i).activityInfo); 15386da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (!mVMProvidersData.containsKey(key)) { 15396da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky continue; 15406da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15416da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky entries[entryIdx] = mVMProvidersData.get(key).name; 15426da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky values[entryIdx] = key; 15436da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky entryIdx++; 1544365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1545365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1546365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setEntries(entries); 1547365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setEntryValues(values); 1548365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 15497c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky mPreviousVMProviderKey = getCurrentVoicemailProviderKey(); 15509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky updateVMPreferenceWidgets(mPreviousVMProviderKey); 1551365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 15526da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 15536da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky private String makeKeyForActivity(ActivityInfo ai) { 15549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return ai.name; 15556da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15566da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 15576da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky /** 15586da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * Simulates user clicking on a passed preference. 15596da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * Usually needed when the preference is a dialog preference and we want to invoke 15606da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * a dialog for this preference programmatically. 15616da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * TODO(iliat): figure out if there is a cleaner way to cause preference dlg to come up 15626da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky */ 15636da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky private void simulatePreferenceClick(Preference preference) { 15646da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Go through settings until we find our setting 15656da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // and then simulate a click on it to bring up the dialog 15666da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final ListAdapter adapter = getPreferenceScreen().getRootAdapter(); 15676da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky for (int idx = 0; idx < adapter.getCount(); idx++) { 15686da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (adapter.getItem(idx) == preference) { 15696da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky getPreferenceScreen().onItemClick(this.getListView(), 15706da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky null, idx, adapter.getItemId(idx)); 15716da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky break; 15726da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15736da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15746da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 1575e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 1576e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky /** 15779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Saves new VM provider settings associating them with the currently selected 15789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * provider if settings are different than the ones already stored for this 1579e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * provider. 15809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Later on these will be used when the user switches a provider. 1581e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky */ 15829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void maybeSaveSettingsForVoicemailProvider(String key, 15839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VoiceMailProviderSettings newSettings) { 1584b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky if (mVoicemailProviders == null) { 1585b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky return; 1586b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky } 15879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final VoiceMailProviderSettings curSettings = loadSettingsForVoiceMailProvider(key); 15889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (newSettings.equals(curSettings)) { 15899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Not saving setting for " + key + " since they have not changed"); 1590e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky return; 1591e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 15929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Saving settings for " + key + ": " + newSettings.toString()); 15939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky Editor editor = mPerProviderSavedVMNumbers.edit(); 15949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putString(key + VM_NUMBER_TAG,newSettings.voicemailNumber); 15959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String fwdKey = key + FWD_SETTINGS_TAG; 15969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] s = newSettings.forwardingSettings; 15979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (s != FWD_SETTINGS_DONT_TOUCH) { 15989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, s.length); 15999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < s.length; i++) { 16009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 16019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final CallForwardInfo fi = s[i]; 16029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(settingKey + FWD_SETTING_STATUS, fi.status); 16039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(settingKey + FWD_SETTING_REASON, fi.reason); 16049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putString(settingKey + FWD_SETTING_NUMBER, fi.number); 16059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(settingKey + FWD_SETTING_TIME, fi.timeSeconds); 16069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 16089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 16099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.commit(); 1611e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 1612e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 1613e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky /** 16149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Returns settings previously stored for the currently selected 1615e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * voice mail provider. If none is stored returns null. 16169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * If the user switches to a voice mail provider and we have settings 1617e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * stored for it we will automatically change the phone's voice mail number 16189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * and forwarding number to the stored one. Otherwise we will bring up provider's configuration 16199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * UI. 1620e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky */ 16219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private VoiceMailProviderSettings loadSettingsForVoiceMailProvider(String key) { 16229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String vmNumberSetting = mPerProviderSavedVMNumbers.getString(key + VM_NUMBER_TAG, 16239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky null); 16249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (vmNumberSetting == null) { 16259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Settings for " + key + " not found"); 16269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return null; 16279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 16299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] cfi = FWD_SETTINGS_DONT_TOUCH; 16309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String fwdKey = key + FWD_SETTINGS_TAG; 16319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final int fwdLen = mPerProviderSavedVMNumbers.getInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 16329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (fwdLen > 0) { 16339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi = new CallForwardInfo[fwdLen]; 16349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < cfi.length; i++) { 16359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 16369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i] = new CallForwardInfo(); 16379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].status = mPerProviderSavedVMNumbers.getInt( 16389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_STATUS, 0); 16399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].reason = mPerProviderSavedVMNumbers.getInt( 16409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_REASON, 16419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_ALL_CONDITIONAL); 16429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 16439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].toa = PhoneNumberUtils.TOA_International; 16449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].number = mPerProviderSavedVMNumbers.getString( 16459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_NUMBER, ""); 16469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].timeSeconds = mPerProviderSavedVMNumbers.getInt( 16479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_TIME, 20); 16489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 16519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VoiceMailProviderSettings settings = new VoiceMailProviderSettings(vmNumberSetting, cfi); 16529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Loaded settings for " + key + ": " + settings.toString()); 16539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return settings; 16549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 16569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 16579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Deletes settings for the specified provider. 16589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 16599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void deleteSettingsForVoicemailProvider(String key) { 16609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Deleting settings for" + key); 16619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mVoicemailProviders == null) { 16629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 16639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPerProviderSavedVMNumbers.edit() 16659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky .putString(key + VM_NUMBER_TAG, null) 16669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky .putInt(key + FWD_SETTINGS_TAG + FWD_SETTINGS_LENGTH_TAG, 0) 16679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky .commit(); 1668e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 16697c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky 16707c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky private String getCurrentVoicemailProviderKey() { 16717c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky final String key = mVoicemailProviders.getValue(); 16727c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky return (key != null) ? key : DEFAULT_VM_PROVIDER_KEY; 16737c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 1674b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project} 1675