CallFeaturesSetting.java revision 9f994b77f3f22b9a23887a324380d9fd317d4e06
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 19b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.AlertDialog; 20b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.Dialog; 219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.app.ProgressDialog; 22cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.content.Context; 23b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.DialogInterface; 24b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Intent; 25e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinskyimport android.content.SharedPreferences; 269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.content.SharedPreferences.Editor; 27365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.ActivityInfo; 28365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.PackageManager; 29365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.ResolveInfo; 30b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.database.Cursor; 31cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.media.AudioManager; 32b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.AsyncResult; 33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Bundle; 34b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Handler; 35b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Message; 36b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.CheckBoxPreference; 37b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.ListPreference; 38b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.Preference; 39b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.PreferenceActivity; 40b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.PreferenceScreen; 41cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.provider.Settings; 422bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Parkimport android.provider.ContactsContract.CommonDataKinds; 439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinskyimport android.telephony.PhoneNumberUtils; 44b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.TextUtils; 45b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.Log; 46b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.WindowManager; 476da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinskyimport android.widget.ListAdapter; 48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 492bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Parkimport com.android.internal.telephony.CallForwardInfo; 502bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Parkimport com.android.internal.telephony.CommandsInterface; 512bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Parkimport com.android.internal.telephony.Phone; 522bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Parkimport com.android.internal.telephony.PhoneFactory; 532bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Parkimport com.android.internal.telephony.cdma.TtyIntent; 542bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park 55f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil Kingimport java.util.Collection; 56365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.HashMap; 57f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil Kingimport java.util.HashSet; 58f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil Kingimport java.util.Iterator; 59365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.List; 60365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.Map; 61365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 62365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 63b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpublic class CallFeaturesSetting extends PreferenceActivity 64b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project implements DialogInterface.OnClickListener, 65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Preference.OnPreferenceChangeListener, 66b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference.OnDialogClosedListener, 67b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference.GetDefaultNumberListener{ 68b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 696da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // intent action to bring up voice mail settings 70b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public static final String ACTION_ADD_VOICEMAIL = 71b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project "com.android.phone.CallFeaturesSetting.ADD_VOICEMAIL"; 726da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // intent action sent by this activity to a voice mail provider 736da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // to trigger its configuration UI 74365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public static final String ACTION_CONFIGURE_VOICEMAIL = 75365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky "com.android.phone.CallFeaturesSetting.CONFIGURE_VOICEMAIL"; 766da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Extra put in the return from VM provider config containing voicemail number to set 776da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky public static final String VM_NUMBER_EXTRA = "com.android.phone.VoicemailNumber"; 789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Extra put in the return from VM provider config containing call forwarding number to set 799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_NUMBER_EXTRA = "com.android.phone.ForwardingNumber"; 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_TIME_EXTRA = "com.android.phone.ForwardingNumberTime"; 829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // If the VM provider returns non null value in this extra we will force the user to 839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // choose another VM provider 849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String SIGNOUT_EXTRA = "com.android.phone.Signout"; 859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Used to tell the saving logic to leave forwarding number as is 879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final CallForwardInfo[] FWD_SETTINGS_DONT_TOUCH = null; 889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to provider key for storing vm number 899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String VM_NUMBER_TAG = "#VMNumber"; 909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to provider key for storing forwarding settings 919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTINGS_TAG = "#FWDSettings"; 929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to forward settings key for storing length of settings array 939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTINGS_LENGTH_TAG = "#Length"; 949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffix appended to forward settings key for storing an individual setting 959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_TAG = "#Setting"; 969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Suffixes appended to forward setting key for storing an individual setting properties 979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_STATUS = "#Status"; 989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_REASON = "#Reason"; 999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_NUMBER = "#Number"; 1009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String FWD_SETTING_TIME = "#Time"; 1019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 1029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Key identifying the default vocie mail provider 1039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public static final String DEFAULT_VM_PROVIDER_KEY = ""; 104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 105e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky // Extra put into ACTION_ADD_VOICEMAIL call to indicate which provider 106e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky // to remove from the list of providers presented to the user 107e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky public static final String IGNORE_PROVIDER_EXTRA = "com.android.phone.ProviderToIgnore"; 108e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 109b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // debug data 11087258b2b589c3afea4b89b840251012378e0d3b4David Brown private static final String LOG_TAG = "CallFeaturesSetting"; 111cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); 112b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1136da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // string constants 114153b94130a5e7a0e7bb17f17ce8f1ed294453d9eDmitri Plotnikov private static final String NUM_PROJECTION[] = {CommonDataKinds.Phone.NUMBER}; 115b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 116b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // String keys for preference lookup 117b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String BUTTON_VOICEMAIL_KEY = "button_voicemail_key"; 118365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final String BUTTON_VOICEMAIL_PROVIDER_KEY = "button_voicemail_provider_key"; 119365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final String BUTTON_VOICEMAIL_SETTING_KEY = "button_voicemail_setting_key"; 120b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String BUTTON_FDN_KEY = "button_fdn_key"; 121b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 122cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_DTMF_KEY = "button_dtmf_settings"; 1233800ac871d6548790ac6119bb68b9be0640af261David Krause private static final String BUTTON_RETRY_KEY = "button_auto_retry_key"; 124cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_TTY_KEY = "button_tty_mode_key"; 125cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_HAC_KEY = "button_hac_key"; 126cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 127cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_GSM_UMTS_OPTIONS = "button_gsm_more_expand_key"; 128cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CDMA_OPTIONS = "button_cdma_more_expand_key"; 129a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 130e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky private static final String VM_NUMBERS_SHARED_PREFERENCES_NAME = "vm_numbers"; 131e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 132b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Intent mContactListIntent; 133b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 134b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** Event for Async voicemail change call */ 1359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int EVENT_VOICEMAIL_CHANGED = 500; 1369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int EVENT_FORWARDING_CHANGED = 501; 1379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int EVENT_FORWARDING_GET_COMPLETED = 502; 138d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 139a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville // preferred TTY mode 140cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Phone.TTY_MODE_xxx 141cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause static final int preferredTtyMode = Phone.TTY_MODE_OFF; 142b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 143d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville // Dtmf tone types 144d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville static final int DTMF_TONE_TYPE_NORMAL = 0; 145d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville static final int DTMF_TONE_TYPE_LONG = 1; 146d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 14706376849cdac54b573be9204837b451ef8013cc6Eric Laurent public static final String HAC_KEY = "HACSetting"; 14806376849cdac54b573be9204837b451ef8013cc6Eric Laurent public static final String HAC_VAL_ON = "ON"; 14906376849cdac54b573be9204837b451ef8013cc6Eric Laurent public static final String HAC_VAL_OFF = "OFF"; 150d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 151b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** Handle to voicemail pref */ 152cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int VOICEMAIL_PREF_ID = 1; 153365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final int VOICEMAIL_PROVIDER_CFG_ID = 2; 154b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 155b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Phone mPhone; 156b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 157cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private AudioManager mAudioManager; 158cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 159b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VM_NOCHANGE_ERROR = 400; 160b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VM_RESPONSE_ERROR = 500; 1619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int FW_SET_RESPONSE_ERROR = 501; 1629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int FW_GET_RESPONSE_ERROR = 502; 163b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 164b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 165b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // dialog identifiers for voicemail 166b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VOICEMAIL_DIALOG_CONFIRM = 600; 1679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int VOICEMAIL_FWD_SAVING_DIALOG = 601; 1689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int VOICEMAIL_FWD_READING_DIALOG = 602; 169bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private static final int VOICEMAIL_REVERTING_DIALOG = 603; 170b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 171b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // status message sent back from handlers 172b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_OK = 100; 173cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 174b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // special statuses for voicemail controls. 175b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_EXCEPTION = 400; 1769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int MSG_FW_SET_EXCEPTION = 401; 1779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private static final int MSG_FW_GET_EXCEPTION = 402; 178b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_OK = 600; 179b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_NOCHANGE = 700; 180cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 181b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditPhoneNumberPreference mSubMenuVoicemailSettings; 182cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1833800ac871d6548790ac6119bb68b9be0640af261David Krause private CheckBoxPreference mButtonAutoRetry; 184cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CheckBoxPreference mButtonHAC; 185cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private ListPreference mButtonDTMF; 186404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville private ListPreference mButtonTTY; 187365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private ListPreference mVoicemailProviders; 188365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private PreferenceScreen mVoicemailSettings; 1899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 190365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private class VoiceMailProvider { 191365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public VoiceMailProvider(String name, Intent intent) { 192365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.name = name; 193365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.intent = intent; 194365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 195365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public String name; 196365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public Intent intent; 197365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 1999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 2009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Forwarding settings we are going to save. 2019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky static final int [] FORWARDING_SETTINGS_REASONS = new int[] { 2039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_UNCONDITIONAL, 2049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_BUSY, 2059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_NO_REPLY, 2069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_NOT_REACHABLE 2079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky }; 2089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private class VoiceMailProviderSettings { 2109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 2119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Constructs settings object, setting all conditional forwarding to the specified number 2129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public VoiceMailProviderSettings(String voicemailNumber, String forwardingNumber, 2149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky int timeSeconds) { 2159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber = voicemailNumber; 2169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (forwardingNumber == null || forwardingNumber.length() == 0) { 2179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings = FWD_SETTINGS_DONT_TOUCH; 2189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 2199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length]; 2209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < this.forwardingSettings.length; i++) { 2219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo fi = new CallForwardInfo(); 2229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings[i] = fi; 2239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.reason = FORWARDING_SETTINGS_REASONS[i]; 2249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.status = (fi.reason == CommandsInterface.CF_REASON_UNCONDITIONAL) ? 0 : 1; 2259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 2269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.toa = PhoneNumberUtils.TOA_International; 2279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.number = forwardingNumber; 2289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.timeSeconds = timeSeconds; 2299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public VoiceMailProviderSettings(String voicemailNumber, CallForwardInfo[] infos) { 2349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber = voicemailNumber; 2359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.forwardingSettings = infos; 2369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky @Override 2399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public boolean equals(Object o) { 2409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (o == null) return false; 2419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (!(o instanceof VoiceMailProviderSettings)) return false; 2429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final VoiceMailProviderSettings v = (VoiceMailProviderSettings)o; 2439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return ((this.voicemailNumber == null && 2459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky v.voicemailNumber == null) || 2469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber != null && 2479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.voicemailNumber.equals(v.voicemailNumber)) 2489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky && 2499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky forwardingSettingsEqual(this.forwardingSettings, 2509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky v.forwardingSettings); 2519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private boolean forwardingSettingsEqual(CallForwardInfo[] infos1, 2549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] infos2) { 2559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (infos1 == infos2) return true; 2569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (infos1 == null || infos2 == null) return false; 2579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (infos1.length != infos2.length) return false; 2589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < infos1.length; i++) { 2599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo i1 = infos1[i]; 2609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo i2 = infos2[i]; 2619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (i1.status != i2.status || 2629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.reason != i2.reason || 2639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.serviceClass != i2.serviceClass || 2649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.toa != i2.toa || 2659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.number != i2.number || 2669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky i1.timeSeconds != i2.timeSeconds) { 2679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return false; 2689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return true; 2719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky @Override 2749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public String toString() { 2759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return voicemailNumber + ((forwardingSettings != null ) ? (", " + 2769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky forwardingSettings.toString()) : ""); 2779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public String voicemailNumber; 2809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public CallForwardInfo[] forwardingSettings; 2819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 2829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 283e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky SharedPreferences mPerProviderSavedVMNumbers; 284365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 285365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 2869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Results of reading forwarding settings 2879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 2889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] mForwardingReadResults = null; 2899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 2909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 291f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * Result of forwarding number change. 292f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * Keys are reasons (eg. unconditional forwarding). 2939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 294f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private Map<Integer, AsyncResult> mForwardingChangeResults = null; 295f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 296f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King /** 297f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * Expected CF read result types. 298f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * This set keeps track of the CF types for which we've issued change 299f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * commands so we can tell when we've received all of the responses. 300f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King */ 301f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private Collection<Integer> mExpectedChangeResultReasons = null; 3029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Result of vm number change 3059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult mVoicemailChangeResult = null; 3079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Previous VM provider setting so we can return to it in case of failure. 3109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String mPreviousVMProviderKey = null; 3129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Id of the dialog being currently shown. 3159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky int mCurrentDialogId = 0; 3179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 3189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 3199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Flag indicating that we are invoking settings for the voicemail provider programmatically 3209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * due to vm provider change. 3219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 3229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean mVMProviderSettingsForced = false; 3238e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 3248e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky /** 3258e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky * Flag indicating that we are making changes to vm or fwd numbers 3268e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky * due to vm provider change. 3278e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky */ 3288e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky boolean mChangingVMorFwdDueToProviderChange = false; 3298e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 3309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 331bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * True if we are in the process of vm & fwd number change and vm has already been changed. 332bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * This is used to decide what to do in case of rollback. 333bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 334bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky boolean mVMChangeCompletedSuccesfully = false; 335bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 336bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 3374e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky * True if we had full or partial failure setting forwarding numbers and so need to roll them 3384e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky * back. 339bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 3404e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky boolean mFwdChangesRequireRollback = false; 341bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 342bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 343bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * Id of error msg to display to user once we are done reverting the VM provider to the previous 344bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * one. 345bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 346bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky int mVMOrFwdSetError = 0; 347bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 348bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 349365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Data about discovered voice mail settings providers. 350365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Is populated by querying which activities can handle ACTION_CONFIGURE_VOICEMAIL. 351365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * They key in this map is package name + activity name. 352365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * We always add an entry for the default provider with a key of empty 353365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * string and intent value of null. 354365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * @see #initVoiceMailProviders. 355365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 3562bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park private final Map<String, VoiceMailProvider> mVMProvidersData = 357365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky new HashMap<String, VoiceMailProvider>(); 358b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 359b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** string to hold old voicemail number as it is being updated. */ 360b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private String mOldVmNumber; 361b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 3629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // New call forwarding settings and vm number we will be setting 3639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Need to save these since before we get to saving we need to asynchronously 3649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // query the existing forwarding settings. 365f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private CallForwardInfo[] mNewFwdSettings; 3669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String mNewVMNumber; 367b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 368b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King private boolean mForeground; 369b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 370b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King @Override 371b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King public void onPause() { 372b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King super.onPause(); 373b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King mForeground = false; 374b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 375b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 376f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King /** 377f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * We have to pull current settings from the network for all kinds of 378f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * voicemail providers so we can tell whether we have to update them, 379f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * so use this bit to keep track of whether we're reading settings for the 380f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * default provider and should therefore save them out when done. 381f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King */ 382f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private boolean mReadingSettingsForDefaultProvider = false; 383f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 384b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 385b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Click Listeners, handle click based on objects attached to UI. 386b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 387b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 388b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Click listener for all toggle events 389b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 390b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 391cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (preference == mSubMenuVoicemailSettings) { 392cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return true; 393cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonDTMF) { 394b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 395a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } else if (preference == mButtonTTY) { 396404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville return true; 3973800ac871d6548790ac6119bb68b9be0640af261David Krause } else if (preference == mButtonAutoRetry) { 398cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.System.putInt(mPhone.getContext().getContentResolver(), 399cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.System.CALL_AUTO_RETRY, 400cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.isChecked() ? 1 : 0); 401cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return true; 402cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonHAC) { 403cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int hac = mButtonHAC.isChecked() ? 1 : 0; 404cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Update HAC value in Settings database 405cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.putInt(mPhone.getContext().getContentResolver(), 406cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.HEARING_AID, hac); 407b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 408cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Update HAC Value in AudioManager 409cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mAudioManager.setParameter(HAC_KEY, hac != 0 ? HAC_VAL_ON : HAC_VAL_OFF); 410b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 41196454d0324a3e5c3c1e66c0372bcf1e9cbd63584Freeman Ng } else if (preference == mVoicemailSettings && preference.getIntent() != null) { 41296454d0324a3e5c3c1e66c0372bcf1e9cbd63584Freeman Ng if (DBG) log("Invoking cfg intent " + preference.getIntent().getPackage()); 41396454d0324a3e5c3c1e66c0372bcf1e9cbd63584Freeman Ng this.startActivityForResult(preference.getIntent(), VOICEMAIL_PROVIDER_CFG_ID); 414365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return true; 415b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 416b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return false; 417b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 418b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 419b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 420b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Implemented to support onPreferenceChangeListener to look for preference 421cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause * changes. 422b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 423cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause * @param preference is the preference to be changed 424b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * @param objValue should be the value of the selection, NOT its localized 425b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * display value. 426b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 427b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public boolean onPreferenceChange(Preference preference, Object objValue) { 428cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (preference == mButtonDTMF) { 429cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int index = mButtonDTMF.findIndexOfValue((String) objValue); 430d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville Settings.System.putInt(mPhone.getContext().getContentResolver(), 431d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index); 432cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonTTY) { 433cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleTTYChange(preference, objValue); 434365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else if (preference == mVoicemailProviders) { 435495e409315aa3181a562baeb9d586f633b9eedc2Virgil King final String currentProviderKey = getCurrentVoicemailProviderKey(); 4369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String newProviderKey = (String)objValue; 4379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("VM provider changes to " + newProviderKey + " from " + 4389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPreviousVMProviderKey); 439bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mPreviousVMProviderKey.equals(newProviderKey)) { 440bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("No change "); 441bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return true; 442bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 4439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky updateVMPreferenceWidgets(newProviderKey); 444e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 4453897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky mPreviousVMProviderKey = currentProviderKey; 446495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final VoiceMailProviderSettings newProviderSettings = 4483897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky loadSettingsForVoiceMailProvider(newProviderKey); 449495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // If the user switches to a voice mail provider and we have a 4513897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky // numbers stored for it we will automatically change the 4523897278c8d39ac3ede871e4f9f963d145f6e895dIlia Tulchinsky // phone's 4539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // voice mail and forwarding number to the stored ones. 4549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Otherwise we will bring up provider's configuration UI. 455495e409315aa3181a562baeb9d586f633b9eedc2Virgil King 4569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (newProviderSettings == null) { 4574e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky // Force the user into a configuration of the chosen provider 4587c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Saved preferences not found - invoking config"); 4599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProviderSettingsForced = true; 460e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky simulatePreferenceClick(mVoicemailSettings); 461e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } else { 4627c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Saved preferences found - switching to them"); 4634e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky // Set this flag so if we get a failure we revert to previous provider 4644e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = true; 4659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumber(newProviderKey, newProviderSettings); 466e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 467b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 468b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // always let the preference setting proceed. 469b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 470b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 471b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 472b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Preference click listener invoked on OnDialogClosed for EditPhoneNumberPreference. 473b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onDialogClosed(EditPhoneNumberPreference preference, int buttonClicked) { 4749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("onPreferenceClick: request preference click on dialog close: " + 4759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky buttonClicked); 4769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (buttonClicked == DialogInterface.BUTTON_NEGATIVE) { 4779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 4789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 479b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (preference instanceof EditPhoneNumberPreference) { 480b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference epn = preference; 481b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 482b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (epn == mSubMenuVoicemailSettings) { 483b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project handleVMBtnClickRequest(); 484b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 485b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 486b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 487b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 488b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 489b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Implemented for EditPhoneNumberPreference.GetDefaultNumberListener. 490b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * This method set the default values for the various 491b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * EditPhoneNumberPreference dialogs. 492b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 493b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public String onGetDefaultNumber(EditPhoneNumberPreference preference) { 494b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (preference == mSubMenuVoicemailSettings) { 495b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // update the voicemail number field, which takes care of the 496b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // mSubMenuVoicemailSettings itself, so we should return null. 497b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("updating default for voicemail dialog"); 498b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 499b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 500b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 501b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 502a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville String vmDisplay = mPhone.getVoiceMailNumber(); 503b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (TextUtils.isEmpty(vmDisplay)) { 504b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // if there is no voicemail number, we just return null to 505b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // indicate no contribution. 506b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 507b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 508b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 509b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Return the voicemail number prepended with "VM: " 510b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("updating default for call forwarding dialogs"); 511b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return getString(R.string.voicemail_abbreviated) + " " + vmDisplay; 512b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 513b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 514b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 515b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // override the startsubactivity call to make changes in state consistent. 516b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 517b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void startActivityForResult(Intent intent, int requestCode) { 518b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (requestCode == -1) { 519b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // this is an intent requested from the preference framework. 520b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.startActivityForResult(intent, requestCode); 521b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 522b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 523b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 524b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("startSubActivity: starting requested subactivity"); 525b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.startActivityForResult(intent, requestCode); 526b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 527b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 5289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void switchToPreviousVoicemailProvider() { 5299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("switchToPreviousVoicemailProvider " + mPreviousVMProviderKey); 5309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mPreviousVMProviderKey != null) { 5314e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (mVMChangeCompletedSuccesfully || mFwdChangesRequireRollback) { 5324e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky // we have to revert with carrier 533bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky showDialog(VOICEMAIL_REVERTING_DIALOG); 534bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky VoiceMailProviderSettings prevSettings = 535bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky loadSettingsForVoiceMailProvider(mPreviousVMProviderKey); 536bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVMChangeCompletedSuccesfully) { 537bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mNewVMNumber = prevSettings.voicemailNumber; 538bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("have to revert VM to " + mNewVMNumber); 539bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mPhone.setVoiceMailNumber( 540bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mPhone.getVoiceMailAlphaTag().toString(), 541bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mNewVMNumber, 542bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky Message.obtain(mRevertOptionComplete, EVENT_VOICEMAIL_CHANGED)); 543bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 5444e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (mFwdChangesRequireRollback) { 545bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("have to revert fwd"); 546f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King final CallForwardInfo[] prevFwdSettings = 547f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King prevSettings.forwardingSettings; 548bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (prevFwdSettings != null) { 549f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King Map<Integer, AsyncResult> results = 550f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingChangeResults; 551f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King resetForwardingChangeState(); 552bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky for (int i = 0; i < prevFwdSettings.length; i++) { 553bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky CallForwardInfo fi = prevFwdSettings[i]; 554bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("Reverting fwd #: " + i + ": " + fi.toString()); 555f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King // Only revert the settings for which the update 556f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King // succeeded 557f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King AsyncResult result = results.get(fi.reason); 558f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (result != null && result.exception == null) { 559f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mExpectedChangeResultReasons.add(fi.reason); 560f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mPhone.setCallForwardingOption( 561f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King (fi.status == 1 ? 562f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King CommandsInterface.CF_ACTION_REGISTRATION : 563f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King CommandsInterface.CF_ACTION_DISABLE), 564f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.reason, 565f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.number, 566f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.timeSeconds, 567f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mRevertOptionComplete.obtainMessage( 568f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King EVENT_FORWARDING_CHANGED, i, 0)); 569f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 570f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 571bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 572bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 573bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } else { 574bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("No need to revert"); 575bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky onRevertDone(); 576bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 577bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 578bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 579bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 580bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky void onRevertDone() { 581bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("Flipping provider key back to " + mPreviousVMProviderKey); 582bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVoicemailProviders.setValue(mPreviousVMProviderKey); 583bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVMPreferenceWidgets(mPreviousVMProviderKey); 584bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVoiceNumberField(); 585bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVMOrFwdSetError != 0) { 586bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky showVMDialog(mVMOrFwdSetError); 587bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMOrFwdSetError = 0; 5889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 5899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 5909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 591365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // asynchronous result call after contacts are selected or after we return from 592365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // a call to the VM settings provider. 593b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 594b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, Intent data) { 595b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // there are cases where the contact picker may end up sending us more than one 596b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // request. We want to ignore the request if we're not in the correct state. 597365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (requestCode == VOICEMAIL_PROVIDER_CFG_ID) { 5989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean failure = false; 5999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 6009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // No matter how the processing of result goes lets clear the flag 6019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("mVMProviderSettingsForced: " + mVMProviderSettingsForced); 6029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final boolean isVMProviderSettingsForced = mVMProviderSettingsForced; 6039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProviderSettingsForced = false; 6049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 6057c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky String vmNum = null; 606365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (resultCode != RESULT_OK) { 607365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result not OK."); 6089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky failure = true; 6097c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } else { 6107c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (data == null) { 6117c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result has no data"); 6127c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky failure = true; 6139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 6147c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (data.getBooleanExtra(SIGNOUT_EXTRA, false)) { 6157c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Provider requested signout"); 6167c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (isVMProviderSettingsForced) { 6177c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Going back to previous provider on signout"); 6187c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky switchToPreviousVoicemailProvider(); 6197c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } else { 6207c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky final String victim = getCurrentVoicemailProviderKey(); 6217c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("Relaunching activity and ignoring " + victim); 6227c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky Intent i = new Intent(ACTION_ADD_VOICEMAIL); 6237c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky i.putExtra(IGNORE_PROVIDER_EXTRA, victim); 6247c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 6257c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky this.startActivity(i); 6267c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 6277c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky return; 6287c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 6297c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky vmNum = data.getStringExtra(VM_NUMBER_EXTRA); 6307c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (vmNum == null || vmNum.length() == 0) { 6317c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result has no vmnum"); 6327c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky failure = true; 6337c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 6349440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 6359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 6369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (failure) { 6379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Failure in return from voicemail provider"); 6389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (isVMProviderSettingsForced) { 6399440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky switchToPreviousVoicemailProvider(); 6409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 6419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Not switching back the provider since this is not forced config"); 6429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 643365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 644365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 6458e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = isVMProviderSettingsForced; 6469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String fwdNum = data.getStringExtra(FWD_NUMBER_EXTRA); 6479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 6489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // TODO(iliat): It would be nice to load the current network setting for this and 6499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // send it to the provider when it's config is invoked so it can use this as default 6509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final int fwdNumTime = data.getIntExtra(FWD_NUMBER_TIME_EXTRA, 20); 6519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 6529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result " + 6539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky (fwdNum != null ? "has" : " does not have") + " forwarding number"); 6547c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky saveVoiceMailAndForwardingNumber(getCurrentVoicemailProviderKey(), 655b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King new VoiceMailProviderSettings(vmNum, fwdNum, fwdNumTime)); 656365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 657365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 658b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 659b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (resultCode != RESULT_OK) { 660b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onActivityResult: contact picker result not OK."); 661b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 662b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 663b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 664b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Cursor cursor = getContentResolver().query(data.getData(), 665b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project NUM_PROJECTION, null, null, null); 666b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if ((cursor == null) || (!cursor.moveToFirst())) { 667b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onActivityResult: bad contact data, no results found."); 668b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 669b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 670b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 671b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (requestCode) { 672b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VOICEMAIL_PREF_ID: 673b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mSubMenuVoicemailSettings.onPickActivityResult(cursor.getString(0)); 674b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 675b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 676b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: may need exception here. 677b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 678b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 679b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 680b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Voicemail button logic 681b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void handleVMBtnClickRequest() { 682b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // normally called on the dialog close. 683b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 684b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Since we're stripping the formatting out on the getPhoneNumber() 685b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // call now, we won't need to do so here anymore. 686b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 6879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumber( 6887c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky getCurrentVoicemailProviderKey(), 6899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky new VoiceMailProviderSettings(mSubMenuVoicemailSettings.getPhoneNumber(), 6909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky FWD_SETTINGS_DONT_TOUCH)); 691365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 692365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 693b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King private void showDialogIfForeground(int id) { 694b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King if (mForeground) { 695b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialog(id); 696b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 697b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 698b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 699b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King private void dismissDialogSafely(int id) { 700b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King try { 701b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialog(id); 702b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } catch (IllegalArgumentException e) { 703b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // This is expected in the case where we were in the background 704b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // at the time we would normally have shown the dialog, so we didn't 705b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // show it. 706b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 707b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 708b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 7099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void saveVoiceMailAndForwardingNumber(String key, 7109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VoiceMailProviderSettings newSettings) { 7119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("saveVoiceMailAndForwardingNumber: " + newSettings.toString()); 7129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewVMNumber = newSettings.voicemailNumber; 713b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // empty vm number == clearing the vm number ? 7149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mNewVMNumber == null) { 7159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewVMNumber = ""; 7169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewFwdSettings = newSettings.forwardingSettings; 7199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("newFwdNumber " + 7209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String.valueOf((mNewFwdSettings != null ? mNewFwdSettings.length : 0)) 7219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky + " settings"); 7229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // No fwd settings on CDMA 7249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mPhone.getPhoneType() == Phone.PHONE_TYPE_CDMA) { 7259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("ignoring forwarding setting since this is CDMA phone"); 7269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewFwdSettings = FWD_SETTINGS_DONT_TOUCH; 727b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 728b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 7299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky //throw a warning if the vm is the same and we do not touch forwarding. 7309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mNewVMNumber.equals(mOldVmNumber) && mNewFwdSettings == FWD_SETTINGS_DONT_TOUCH) { 731cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showVMDialog(MSG_VM_NOCHANGE); 732b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 733b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 734b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 7359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky maybeSaveSettingsForVoicemailProvider(key, newSettings); 736bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMChangeCompletedSuccesfully = false; 7374e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky mFwdChangesRequireRollback = false; 738bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMOrFwdSetError = 0; 739f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (!key.equals(mPreviousVMProviderKey)) { 740f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mReadingSettingsForDefaultProvider = 741f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mPreviousVMProviderKey.equals(DEFAULT_VM_PROVIDER_KEY); 7429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Reading current forwarding settings"); 7439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults = new CallForwardInfo[FORWARDING_SETTINGS_REASONS.length]; 7449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < FORWARDING_SETTINGS_REASONS.length; i++) { 7459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults[i] = null; 7469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPhone.getCallForwardingOption(FORWARDING_SETTINGS_REASONS[i], 7479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mGetOptionComplete.obtainMessage(EVENT_FORWARDING_GET_COMPLETED, i, 0)); 7489440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 749b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VOICEMAIL_FWD_READING_DIALOG); 7509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 7519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumberStage2(); 7529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7552bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park private final Handler mGetOptionComplete = new Handler() { 7569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky @Override 7579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky public void handleMessage(Message msg) { 7589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult result = (AsyncResult) msg.obj; 7599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky switch (msg.what) { 7609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case EVENT_FORWARDING_GET_COMPLETED: 7619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky handleForwardingSettingsReadResult(result, msg.arg1); 7629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 7639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky }; 7669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky void handleForwardingSettingsReadResult(AsyncResult ar, int idx) { 7689440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "handleForwardingSettingsReadResult: " + idx); 7699440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky Throwable error = null; 7709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (ar.exception != null) { 7719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "FwdRead: ar.exception=" + 7729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky ar.exception.getMessage()); 7739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky error = ar.exception; 7749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (ar.userObj instanceof Throwable) { 7769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "FwdRead: userObj=" + 7779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky ((Throwable)ar.userObj).getMessage()); 7789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky error = (Throwable)ar.userObj; 7799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // We may have already gotten an error and decided to ignore the other results. 7829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingReadResults == null) { 7839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "ignoring fwd reading result: " + idx); 7849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 7859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // In case of error ignore other results, show an error dialog 7889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (error != null) { 7899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Error discovered for fwd read : " + idx); 7909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults = null; 791b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialogSafely(VOICEMAIL_FWD_READING_DIALOG); 7929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky showVMDialog(MSG_FW_GET_EXCEPTION); 7939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 7949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 7959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 7969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Get the forwarding info 7979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final CallForwardInfo cfInfoArray[] = (CallForwardInfo[]) ar.result; 7989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo fi = null; 7999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0 ; i < cfInfoArray.length; i++) { 8009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if ((cfInfoArray[i].serviceClass & CommandsInterface.SERVICE_CLASS_VOICE) != 0) { 8019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi = cfInfoArray[i]; 8029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 8039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (fi == null) { 8069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 8079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // In case we go nothing it means we need this reason disabled 8089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // so create a CallForwardInfo for capturing this 8099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Creating default info for " + idx); 8109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi = new CallForwardInfo(); 8119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.status = 0; 8129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.reason = FORWARDING_SETTINGS_REASONS[idx]; 8139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky fi.serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 8149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 8152bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park // if there is not a forwarding number, ensure the entry is set to "not active." 8162bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park if (fi.number == null || fi.number.length() == 0) { 8172bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park fi.status = 0; 8182bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park } 8192bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park 8209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Got " + fi.toString() + " for " + idx); 8219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingReadResults[idx] = fi; 8239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 8249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Check if we got all the results already 8259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean done = true; 8269440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < mForwardingReadResults.length; i++) { 8279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingReadResults[i] == null) { 8289440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky done = false; 8299440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 8309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8329440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (done) { 8339440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Done receiving fwd info"); 834b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialogSafely(VOICEMAIL_FWD_READING_DIALOG); 835f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (mReadingSettingsForDefaultProvider) { 836f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King maybeSaveSettingsForVoicemailProvider(DEFAULT_VM_PROVIDER_KEY, 837f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King new VoiceMailProviderSettings(this.mOldVmNumber, 838f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingReadResults)); 839f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mReadingSettingsForDefaultProvider = false; 840f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 8419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumberStage2(); 8429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 8439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) Log.d(LOG_TAG, "Not done receiving fwd info"); 8449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 8469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 847f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private CallForwardInfo infoForReason(CallForwardInfo[] infos, int reason) { 848f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King CallForwardInfo result = null; 849f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (null != infos) { 850f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King for (CallForwardInfo info : infos) { 851f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (info.reason == reason) { 852f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = info; 853f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King break; 854f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 855f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 856f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 857f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King return result; 858f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 859f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 860f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private boolean isUpdateRequired(CallForwardInfo oldInfo, 861f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King CallForwardInfo newInfo) { 862f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King boolean result = true; 863f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (0 == newInfo.status) { 864f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King // If we're disabling a type of forwarding, and it's already 865f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King // disabled for the account, don't make any change 866f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (oldInfo != null && oldInfo.status == 0) { 867f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = false; 868f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 869f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 870f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King return result; 871f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 872f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 873f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King private void resetForwardingChangeState() { 874f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingChangeResults = new HashMap<Integer, AsyncResult>(); 875f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mExpectedChangeResultReasons = new HashSet<Integer>(); 876f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 877f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 8789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Called after we are done saving the previous forwarding settings if 8799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // we needed. 8809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void saveVoiceMailAndForwardingNumberStage2() { 8819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mForwardingChangeResults = null; 8829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVoicemailChangeResult = null; 8839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mNewFwdSettings != FWD_SETTINGS_DONT_TOUCH) { 884f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King resetForwardingChangeState(); 8859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < mNewFwdSettings.length; i++) { 8869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo fi = mNewFwdSettings[i]; 8879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 888f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King final boolean doUpdate = isUpdateRequired(infoForReason( 889f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingReadResults, fi.reason), fi); 890f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 891f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (doUpdate) { 892f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (DBG) log("Setting fwd #: " + i + ": " + fi.toString()); 893f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mExpectedChangeResultReasons.add(i); 894f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King 895f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mPhone.setCallForwardingOption( 896f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.status == 1 ? 897f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King CommandsInterface.CF_ACTION_REGISTRATION : 898f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King CommandsInterface.CF_ACTION_DISABLE, 899f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.reason, 900f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.number, 901f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King fi.timeSeconds, 902f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mSetOptionComplete.obtainMessage( 903f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King EVENT_FORWARDING_CHANGED, fi.reason, 0)); 904f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 9059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 906b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VOICEMAIL_FWD_SAVING_DIALOG); 9079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 9089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Not touching fwd #"); 909bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky setVMNumberWithCarrier(); 9109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 911bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 912bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 913bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky void setVMNumberWithCarrier() { 9149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("save voicemail #: " + mNewVMNumber); 915b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPhone.setVoiceMailNumber( 916b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPhone.getVoiceMailAlphaTag().toString(), 9179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mNewVMNumber, 918b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Message.obtain(mSetOptionComplete, EVENT_VOICEMAIL_CHANGED)); 919b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 920b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 9219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 922b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Callback to handle option update completions 923b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 9242bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park private final Handler mSetOptionComplete = new Handler() { 925b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 926b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void handleMessage(Message msg) { 9279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky AsyncResult result = (AsyncResult) msg.obj; 9284e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky boolean done = false; 929b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (msg.what) { 930b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case EVENT_VOICEMAIL_CHANGED: 9319440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVoicemailChangeResult = result; 932bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMChangeCompletedSuccesfully = checkVMChangeSuccess() == null; 933bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("VM change complete msg, VM change done = " + 934bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky String.valueOf(mVMChangeCompletedSuccesfully)); 9354e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky done = true; 9369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 9379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case EVENT_FORWARDING_CHANGED: 938f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingChangeResults.put(msg.arg1, result); 9394e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (result.exception != null) { 9404e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Error in setting fwd# " + msg.arg1 + ": " + 9414e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky result.exception.getMessage()); 9424e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } else { 9434e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Success in setting fwd# " + msg.arg1); 9444e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } 945bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final boolean completed = checkForwardingCompleted(); 946bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (completed) { 9474e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (checkFwdChangeSuccess() == null) { 9484e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Overall fwd changes completed ok, starting vm change"); 9494e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky setVMNumberWithCarrier(); 9504e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } else { 9514e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Overall fwd changes completed, failure"); 9524e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky mFwdChangesRequireRollback = false; 953f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King Iterator<Map.Entry<Integer,AsyncResult>> it = 954f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingChangeResults.entrySet().iterator(); 955f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King while (it.hasNext()) { 956f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King Map.Entry<Integer,AsyncResult> entry = it.next(); 957f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (entry.getValue().exception == null) { 9584e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky // If at least one succeeded we have to revert 9594e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Rollback will be required"); 9604e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky mFwdChangesRequireRollback =true; 9614e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky break; 9624e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } 9634e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } 9644e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky done = true; 9654e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } 966bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 967b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 968b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 969b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: should never reach this, may want to throw exception 970b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 9719440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (done) { 9724e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("All VM provider related changes done"); 9739440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingChangeResults != null) { 974b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King dismissDialogSafely(VOICEMAIL_FWD_SAVING_DIALOG); 9759440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 9769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky handleSetVMOrFwdMessage(); 9779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 978b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 979b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }; 980b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 981bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 982bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * Callback to handle option revert completions 983bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 9842bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park private final Handler mRevertOptionComplete = new Handler() { 985bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky @Override 986bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky public void handleMessage(Message msg) { 987bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky AsyncResult result = (AsyncResult) msg.obj; 988bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky switch (msg.what) { 989bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky case EVENT_VOICEMAIL_CHANGED: 990bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVoicemailChangeResult = result; 991bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("VM revert complete msg"); 992bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky break; 993bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky case EVENT_FORWARDING_CHANGED: 994f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingChangeResults.put(msg.arg1, result); 9954e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (result.exception != null) { 9964e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Error in reverting fwd# " + msg.arg1 + ": " + 9974e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky result.exception.getMessage()); 9984e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } else { 9994e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky if (DBG) log("Success in reverting fwd# " + msg.arg1); 10004e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky } 1001bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("FWD revert complete msg "); 1002bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky break; 1003bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky default: 1004bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky // TODO: should never reach this, may want to throw exception 1005bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1006bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final boolean done = 1007bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky (!mVMChangeCompletedSuccesfully || mVoicemailChangeResult != null) && 10084e3c60c0f82e3e499a854dc6f10f18ce17c6dbf4Ilia Tulchinsky (!mFwdChangesRequireRollback || checkForwardingCompleted()); 1009bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (done) { 1010bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (DBG) log("All VM reverts done"); 10112bff2d1ba5f915d4309d4ae851c3e777f51465b4Tim Park dismissDialogSafely(VOICEMAIL_REVERTING_DIALOG); 1012bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky onRevertDone(); 1013bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1014bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1015bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky }; 1016bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 1017bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 1018bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * @return true if forwarding change has completed 1019bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 1020bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private boolean checkForwardingCompleted() { 1021f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King boolean result; 1022bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mForwardingChangeResults == null) { 1023f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = true; 1024f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } else { 1025f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King // return true iff there is a change result for every reason for 1026f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King // which we expected a result 1027f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = true; 1028f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King for (Integer reason : mExpectedChangeResultReasons) { 1029f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (mForwardingChangeResults.get(reason) == null) { 1030f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = false; 1031f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King break; 1032f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King } 1033bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1034bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1035f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King return result; 1036bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1037bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 1038bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky * @return error string or null if successful 1039bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 1040bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private String checkFwdChangeSuccess() { 1041f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King String result = null; 1042f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King Iterator<Map.Entry<Integer,AsyncResult>> it = 1043f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King mForwardingChangeResults.entrySet().iterator(); 1044f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King while (it.hasNext()) { 1045f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King Map.Entry<Integer,AsyncResult> entry = it.next(); 1046f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King Throwable exception = entry.getValue().exception; 1047f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (exception != null) { 1048f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = exception.getMessage(); 1049f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King if (result == null) { 1050f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King result = ""; 1051bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1052f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King break; 1053bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1054bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1055f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King return result; 1056bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1057bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 1058bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky /** 1059f5cf5d465914cb9aa9158baf5ecc855adf1dde5eVirgil King * @return error string or null if successful 1060bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky */ 1061bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky private String checkVMChangeSuccess() { 1062bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (mVoicemailChangeResult.exception != null) { 1063bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky final String msg = mVoicemailChangeResult.exception.getMessage(); 1064bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (msg == null) { 1065bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return ""; 1066bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1067bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return msg; 1068bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1069bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return null; 1070bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 1071bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky 10729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void handleSetVMOrFwdMessage() { 1073b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) { 1074b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project log("handleSetVMMessage: set VM request complete"); 1075b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 10769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean success = true; 10779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky boolean fwdFailure = false; 10789440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String exceptionMessage = ""; 10799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mForwardingChangeResults != null) { 1080bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky exceptionMessage = checkFwdChangeSuccess(); 1081bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (exceptionMessage != null) { 1082bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky success = false; 1083bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky fwdFailure = true; 10849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 10859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 1086bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (success) { 1087bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky exceptionMessage = checkVMChangeSuccess(); 1088bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky if (exceptionMessage != null) { 1089bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky success = false; 1090bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } 10919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 10929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (success) { 1093b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("change VM success!"); 10948e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky handleVMAndFwdSetSuccess(MSG_VM_OK); 1095bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVoiceNumberField(); 1096b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 10979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (fwdFailure) { 10989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky log("change FW failed: " + exceptionMessage); 10998e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky handleVMOrFwdSetError(MSG_FW_SET_EXCEPTION); 11009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 11019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky log("change VM failed: " + exceptionMessage); 11028e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky handleVMOrFwdSetError(MSG_VM_EXCEPTION); 11039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 1104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1105b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1106b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 11078e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky private void handleVMOrFwdSetError(int msgId) { 11088e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky if (mChangingVMorFwdDueToProviderChange) { 1109bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mVMOrFwdSetError = msgId; 1110bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky mChangingVMorFwdDueToProviderChange = false; 11118e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky switchToPreviousVoicemailProvider(); 1112bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky return; 11138e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky } 11148e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = false; 11158e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky showVMDialog(msgId); 1116bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky updateVoiceNumberField(); 11178e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky } 11188e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 11198e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky private void handleVMAndFwdSetSuccess(int msgId) { 11208e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky mChangingVMorFwdDueToProviderChange = false; 11218e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky showVMDialog(msgId); 11228e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky } 11238e31f011098fe32a383f4486d80d579e170de848Ilia Tulchinsky 1124b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 1125b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Methods used to sync UI state with that of the network 1126b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 1127b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // update the voicemail number from what we've recorded on the sim. 1128b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void updateVoiceNumberField() { 11294ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang if (mSubMenuVoicemailSettings == null) { 11304ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang return; 11314ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang } 1132404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1133b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldVmNumber = mPhone.getVoiceMailNumber(); 1134b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mOldVmNumber == null) { 1135b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldVmNumber = ""; 1136b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1137b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mSubMenuVoicemailSettings.setPhoneNumber(mOldVmNumber); 1138365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String summary = (mOldVmNumber.length() > 0) ? mOldVmNumber : 1139365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky getString(R.string.voicemail_number_not_set); 1140365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mSubMenuVoicemailSettings.setSummary(summary); 1141b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1142b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1143b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 1144b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Helper Methods for Activity class. 1145b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King * The initial query commands are split into two pieces now 1146b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * for individual expansion. This combined with the ability 1147b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * to cancel queries allows for a much better user experience, 1148b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * and also ensures that the user only waits to update the 1149b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * data that is relevant. 1150b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 1151b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1152b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King @Override 1153b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King protected void onPrepareDialog(int id, Dialog dialog) { 1154b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King super.onPrepareDialog(id, dialog); 1155b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King mCurrentDialogId = id; 1156b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King } 1157b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King 1158b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // dialog creation method, called by showDialog() 1159b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 1160b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected Dialog onCreateDialog(int id) { 1161cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if ((id == VM_RESPONSE_ERROR) || (id == VM_NOCHANGE_ERROR) || 11629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky (id == FW_SET_RESPONSE_ERROR) || (id == FW_GET_RESPONSE_ERROR) || 1163cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause (id == VOICEMAIL_DIALOG_CONFIRM)) { 1164b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1165b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AlertDialog.Builder b = new AlertDialog.Builder(this); 1166b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1167b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int msgId; 1168b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int titleId = R.string.error_updating_title; 1169b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (id) { 1170b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VOICEMAIL_DIALOG_CONFIRM: 1171b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.vm_changed; 1172b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project titleId = R.string.voicemail; 1173b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 2 1174b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNegativeButton(R.string.close_dialog, this); 1175b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1176b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VM_NOCHANGE_ERROR: 1177b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // even though this is technically an error, 1178b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // keep the title friendly. 1179b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.no_change; 1180b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project titleId = R.string.voicemail; 1181b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 2 1182b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNegativeButton(R.string.close_dialog, this); 1183b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1184b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VM_RESPONSE_ERROR: 1185b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.vm_change_failed; 1186b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 1 1187b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setPositiveButton(R.string.close_dialog, this); 1188b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 11899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case FW_SET_RESPONSE_ERROR: 11909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky msgId = R.string.fw_change_failed; 11919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Set Button 1 11929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setPositiveButton(R.string.close_dialog, this); 11939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 11949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case FW_GET_RESPONSE_ERROR: 11959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky msgId = R.string.fw_get_in_vm_failed; 11969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setPositiveButton(R.string.alert_dialog_yes, this); 11979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setNegativeButton(R.string.alert_dialog_no, this); 11989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 1199b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 1200b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.exception_error; 1201b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 3, tells the activity that the error is 1202b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // not recoverable on dialog exit. 1203b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNeutralButton(R.string.close_dialog, this); 1204b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1205b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1206b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1207b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setTitle(getText(titleId)); 12089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String message = getText(msgId).toString(); 12099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky b.setMessage(message); 1210b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setCancelable(false); 1211b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AlertDialog dialog = b.create(); 1212b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1213b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // make the dialog more obvious by bluring the background. 1214b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 1215b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1216b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return dialog; 1217bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky } else if (id == VOICEMAIL_FWD_SAVING_DIALOG || id == VOICEMAIL_FWD_READING_DIALOG || 1218bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky id == VOICEMAIL_REVERTING_DIALOG) { 12199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky ProgressDialog dialog = new ProgressDialog(this); 12209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setTitle(getText(R.string.updating_title)); 12219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setIndeterminate(true); 12229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setCancelable(false); 12239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky dialog.setMessage(getText( 1224bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky id == VOICEMAIL_FWD_SAVING_DIALOG ? R.string.updating_settings : 1225bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky (id == VOICEMAIL_REVERTING_DIALOG ? R.string.reverting_settings : 1226bb5f36f06f18e4ae1bb04609cd3d91c38c77f1ffIlia Tulchinsky R.string.reading_settings))); 12279440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return dialog; 1228b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1229b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 12309440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 1231b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 1232b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1233b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1234b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // This is a method implemented for DialogInterface.OnClickListener. 1235b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Used with the error dialog to close the app, voicemail dialog to just dismiss. 12369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // Close button is mapped to BUTTON_POSITIVE for the errors that close the activity, 12379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // while those that are mapped to BUTTON_NEUTRAL only move the preference focus. 1238b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 1239b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project dialog.dismiss(); 1240b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (which){ 12419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case DialogInterface.BUTTON_NEUTRAL: 12429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Neutral button"); 1243b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 12449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case DialogInterface.BUTTON_NEGATIVE: 12459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Negative button"); 12469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mCurrentDialogId == FW_GET_RESPONSE_ERROR) { 12479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // We failed to get current forwarding settings and the user 124830225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // does not wish to continue. 12499440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky switchToPreviousVoicemailProvider(); 12509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 12519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 12529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case DialogInterface.BUTTON_POSITIVE: 12539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Positive button"); 12549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mCurrentDialogId == FW_GET_RESPONSE_ERROR) { 12559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // We failed to get current forwarding settings but the user 12569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky // wishes to continue changing settings to the new vm provider 12579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky saveVoiceMailAndForwardingNumberStage2(); 12589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 12599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky finish(); 12609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 126130225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky return; 1262b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 1263b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // just let the dialog close and go back to the input 1264b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 126530225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // In all dialogs, all buttons except BUTTON_POSITIVE lead to the end of user interaction 126630225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // with settings UI. If we were called to explicitly configure voice mail then 126730225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky // we finish the settings activity here to come back to whatever the user was doing. 126830225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL)) { 126930225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky finish(); 127030225c1135aaf518fc61b83f434af4bf38469437Ilia Tulchinsky } 1271b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1272b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1273b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // set the app state with optional status. 1274cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void showVMDialog(int msgStatus) { 1275cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause switch (msgStatus) { 1276b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // It's a bit worrisome to punt in the error cases here when we're 1277b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King // not in the foreground; maybe toast instead? 1278cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_EXCEPTION: 1279b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VM_RESPONSE_ERROR); 1280b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 12819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case MSG_FW_SET_EXCEPTION: 1282b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(FW_SET_RESPONSE_ERROR); 12839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 12849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky case MSG_FW_GET_EXCEPTION: 1285b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(FW_GET_RESPONSE_ERROR); 12869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky break; 1287cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_NOCHANGE: 1288b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VM_NOCHANGE_ERROR); 1289b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1290cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_OK: 1291b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King showDialogIfForeground(VOICEMAIL_DIALOG_CONFIRM); 1292b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 1293cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_OK: 1294cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause default: 1295cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // This should never happen. 1296a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1297a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1298404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1299b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 1300b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Activity class methods 1301b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 1302b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1303b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 1304b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onCreate(Bundle icicle) { 1305b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onCreate(icicle); 13069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Creating activity"); 1307a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville mPhone = PhoneFactory.getDefaultPhone(); 1308b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1309cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.call_feature_setting); 1310cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1311cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 1312cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1313b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // get buttons 1314b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project PreferenceScreen prefSet = getPreferenceScreen(); 1315365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mSubMenuVoicemailSettings = (EditPhoneNumberPreference)findPreference(BUTTON_VOICEMAIL_KEY); 13164ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang if (mSubMenuVoicemailSettings != null) { 13174ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setParentActivity(this, VOICEMAIL_PREF_ID, this); 13184ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setDialogOnClosedListener(this); 13194ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setDialogTitle(R.string.voicemail_settings_number_label); 13204ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang } 1321404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1322cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF = (ListPreference) findPreference(BUTTON_DTMF_KEY); 1323cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry = (CheckBoxPreference) findPreference(BUTTON_RETRY_KEY); 1324cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY); 1325cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY = (ListPreference) findPreference(BUTTON_TTY_KEY); 1326365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders = (ListPreference) findPreference(BUTTON_VOICEMAIL_PROVIDER_KEY); 1327b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky if (mVoicemailProviders != null) { 1328b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky mVoicemailProviders.setOnPreferenceChangeListener(this); 1329b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky mVoicemailSettings = (PreferenceScreen)findPreference(BUTTON_VOICEMAIL_SETTING_KEY); 1330b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1331b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky initVoiceMailProviders(); 1332b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky } 1333605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang 1334605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (mButtonDTMF != null) { 1335605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (getResources().getBoolean(R.bool.dtmf_type_enabled)) { 1336605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonDTMF.setOnPreferenceChangeListener(this); 1337605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } else { 1338605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang prefSet.removePreference(mButtonDTMF); 1339605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonDTMF = null; 1340605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } 13415b269ecd49279c3c4f85f55fa4fd4baa88e3a54bjsh } 1342b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1343605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (mButtonAutoRetry != null) { 1344605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (getResources().getBoolean(R.bool.auto_retry_enabled)) { 1345605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonAutoRetry.setOnPreferenceChangeListener(this); 1346605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } else { 1347605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang prefSet.removePreference(mButtonAutoRetry); 1348605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonAutoRetry = null; 1349605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } 1350cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1351b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1352605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (mButtonHAC != null) { 1353605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (getResources().getBoolean(R.bool.hac_enabled)) { 1354605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang 1355605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonHAC.setOnPreferenceChangeListener(this); 1356605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } else { 1357605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang prefSet.removePreference(mButtonHAC); 1358605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonHAC = null; 1359605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } 1360cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1361b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1362605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (mButtonTTY != null) { 1363605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang if (getResources().getBoolean(R.bool.tty_enabled)) { 1364605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonTTY.setOnPreferenceChangeListener(this); 1365605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } else { 1366605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang prefSet.removePreference(mButtonTTY); 1367605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang mButtonTTY = null; 1368605c4fd2e24b487dfb265b34eafc1ab73dfae786John Wang } 1369cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1370cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1371cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (!getResources().getBoolean(R.bool.world_phone)) { 137272f5bad415f3f723cf11b22effe76908ed222826John Wang Preference options = prefSet.findPreference(BUTTON_CDMA_OPTIONS); 137372f5bad415f3f723cf11b22effe76908ed222826John Wang if (options != null) 137472f5bad415f3f723cf11b22effe76908ed222826John Wang prefSet.removePreference(options); 137572f5bad415f3f723cf11b22effe76908ed222826John Wang options = prefSet.findPreference(BUTTON_GSM_UMTS_OPTIONS); 137672f5bad415f3f723cf11b22effe76908ed222826John Wang if (options != null) 137772f5bad415f3f723cf11b22effe76908ed222826John Wang prefSet.removePreference(options); 1378cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 137979b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink int phoneType = mPhone.getPhoneType(); 138079b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink if (phoneType == Phone.PHONE_TYPE_CDMA) { 138172f5bad415f3f723cf11b22effe76908ed222826John Wang Preference fdnButton = prefSet.findPreference(BUTTON_FDN_KEY); 138272f5bad415f3f723cf11b22effe76908ed222826John Wang if (fdnButton != null) 138372f5bad415f3f723cf11b22effe76908ed222826John Wang prefSet.removePreference(fdnButton); 1384cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.cdma_call_options); 138579b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink } else if (phoneType == Phone.PHONE_TYPE_GSM) { 1386cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.gsm_umts_call_options); 138779b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink } else { 138879b9f6e30e8402b103f1ec3ed9dda1fcad2b1cd5Tammo Spalink throw new IllegalStateException("Unexpected phone type: " + phoneType); 1389b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1390b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1391b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1392cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // create intent to bring up contact list 1393cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mContactListIntent = new Intent(Intent.ACTION_GET_CONTENT); 1394cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mContactListIntent.setType(android.provider.Contacts.Phones.CONTENT_ITEM_TYPE); 1395cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1396cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // check the intent that started this activity and pop up the voicemail 1397cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // dialog if we've been asked to. 13986da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // If we have at least one non default VM provider registered then bring up 13996da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // the selection for the VM provider, otherwise bring up a VM number dialog. 14006da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // We only bring up the dialog the first time we are called (not after orientation change) 14016da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (icicle == null) { 1402b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL) && 1403b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky mVoicemailProviders != null) { 14046da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (mVMProvidersData.size() > 1) { 14056da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky simulatePreferenceClick(mVoicemailProviders); 14066da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } else { 14079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky onPreferenceChange(mVoicemailProviders, DEFAULT_VM_PROVIDER_KEY); 14089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVoicemailProviders.setValue(DEFAULT_VM_PROVIDER_KEY); 14096da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 14106da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 1411cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1412b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 14139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProviderSettingsForced = false; 1414fad09042967550e13affd57f139f375e2948b8afChung-yih Wang addPreferencesFromResource(R.xml.sip_settings_category); 1415b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1416b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1417b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 1418cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause protected void onResume() { 1419cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause super.onResume(); 1420b924a7bfc71f3f04e2fc19535d14e494522a2f9aVirgil King mForeground = true; 1421b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1422cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonDTMF != null) { 1423cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int dtmf = Settings.System.getInt(getContentResolver(), 1424cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_NORMAL); 1425cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF.setValueIndex(dtmf); 1426cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1427d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 1428cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonAutoRetry != null) { 1429cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int autoretry = Settings.System.getInt(getContentResolver(), 1430cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.CALL_AUTO_RETRY, 0); 1431cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.setChecked(autoretry != 0); 1432d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville } 14333800ac871d6548790ac6119bb68b9be0640af261David Krause 1434cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonHAC != null) { 1435cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int hac = Settings.System.getInt(getContentResolver(), Settings.System.HEARING_AID, 0); 1436cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC.setChecked(hac != 0); 1437cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1438d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 1439cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonTTY != null) { 1440dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent int settingsTtyMode = Settings.Secure.getInt(getContentResolver(), 1441dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent Settings.Secure.PREFERRED_TTY_MODE, 1442dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent Phone.TTY_MODE_OFF); 1443dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent mButtonTTY.setValue(Integer.toString(settingsTtyMode)); 1444dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent updatePreferredTtyModeSummary(settingsTtyMode); 1445cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1446b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1447b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 1448cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleTTYChange(Preference preference, Object objValue) { 1449404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville int buttonTtyMode; 1450404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville buttonTtyMode = Integer.valueOf((String) objValue).intValue(); 1451404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville int settingsTtyMode = android.provider.Settings.Secure.getInt( 1452cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause getContentResolver(), 1453404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville android.provider.Settings.Secure.PREFERRED_TTY_MODE, preferredTtyMode); 1454cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" + 1455404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville Integer.toString(buttonTtyMode)); 1456404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 1457404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville if (buttonTtyMode != settingsTtyMode) { 1458404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville switch(buttonTtyMode) { 1459404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_OFF: 1460404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_FULL: 1461404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_HCO: 1462404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_VCO: 1463dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent android.provider.Settings.Secure.putInt(getContentResolver(), 1464dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent android.provider.Settings.Secure.PREFERRED_TTY_MODE, buttonTtyMode); 1465404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville break; 1466404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville default: 1467dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent buttonTtyMode = Phone.TTY_MODE_OFF; 1468404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 1469a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1470dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent mButtonTTY.setValue(Integer.toString(buttonTtyMode)); 1471dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent updatePreferredTtyModeSummary(buttonTtyMode); 1472dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent Intent ttyModeChanged = new Intent(TtyIntent.TTY_PREFERRED_MODE_CHANGE_ACTION); 1473dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent ttyModeChanged.putExtra(TtyIntent.TTY_PREFFERED_MODE, buttonTtyMode); 1474dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent sendBroadcast(ttyModeChanged); 1475a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 1476dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent } 1477a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 1478dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent private void updatePreferredTtyModeSummary(int TtyMode) { 1479dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent String [] txts = getResources().getStringArray(R.array.tty_mode_entries); 1480dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent switch(TtyMode) { 1481dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent case Phone.TTY_MODE_OFF: 1482dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent case Phone.TTY_MODE_HCO: 1483dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent case Phone.TTY_MODE_VCO: 1484dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent case Phone.TTY_MODE_FULL: 1485dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent mButtonTTY.setSummary(txts[TtyMode]); 1486dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent break; 1487dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent default: 1488cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setEnabled(false); 1489dc4b8d2f09ca215cc4a29513e56cd254d0c6d5f8Eric Laurent mButtonTTY.setSummary(txts[Phone.TTY_MODE_OFF]); 1490a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 14913800ac871d6548790ac6119bb68b9be0640af261David Krause } 14923800ac871d6548790ac6119bb68b9be0640af261David Krause 1493b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static void log(String msg) { 1494b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Log.d(LOG_TAG, msg); 1495b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 1496365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1497365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 1498365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Updates the look of the VM preference widgets based on current VM provider settings. 1499365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Note that the provider name is loaded form the found activity via loadLabel in 1500365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * initVoiceMailProviders in order for it to be localizable. 1501365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 1502365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void updateVMPreferenceWidgets(String currentProviderSetting) { 1503365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String key = currentProviderSetting; 1504365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final VoiceMailProvider provider = mVMProvidersData.get(key); 1505365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1506365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /* This is the case when we are coming up on a freshly wiped phone and there is no 1507365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky persisted value for the list preference mVoicemailProviders. 1508365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky In this case we want to show the UI asking the user to select a voicemail provider as 1509365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky opposed to silently falling back to default one. */ 1510365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (provider == null) { 1511365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setSummary(getString(R.string.sum_voicemail_choose_provider)); 1512365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setSummary(""); 1513365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setEnabled(false); 1514365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setIntent(null); 1515365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else { 1516365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String providerName = provider.name; 1517365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setSummary(providerName); 1518365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setSummary(getApplicationContext().getString( 1519365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky R.string.voicemail_settings_for, providerName)); 1520365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setEnabled(true); 1521365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setIntent(provider.intent); 1522365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1523365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1524365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1525365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 1526365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Enumerates existing VM providers and puts their data into the list and populates 1527365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * the preference list objects with their names. 15286da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * In case we are called with ACTION_ADD_VOICEMAIL intent the intent may have 1529e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * an extra string called IGNORE_PROVIDER_EXTRA with "package.activityName" of the provider 15306da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * which should be hidden when we bring up the list of possible VM providers to choose. 15316da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * This allows a provider which is being disabled (e.g. GV user logging out) to force the user 15326da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * to pick some other provider. 1533365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 1534365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void initVoiceMailProviders() { 15359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPerProviderSavedVMNumbers = 15369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky this.getApplicationContext().getSharedPreferences( 15379440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VM_NUMBERS_SHARED_PREFERENCES_NAME, MODE_PRIVATE); 15389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 15396da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky String providerToIgnore = null; 15406da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL)) { 15419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("ACTION_ADD_VOICEMAIL"); 15429440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (getIntent().hasExtra(IGNORE_PROVIDER_EXTRA)) { 15439440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky providerToIgnore = getIntent().getStringExtra(IGNORE_PROVIDER_EXTRA); 15449440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 15459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("providerToIgnore=" + providerToIgnore); 15467c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky if (providerToIgnore != null) { 15477c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky deleteSettingsForVoicemailProvider(providerToIgnore); 15487c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 15496da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15506da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 1551365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.clear(); 1552365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1553365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // Stick the default element which is always there 1554365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String myCarrier = getString(R.string.voicemail_default); 15559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mVMProvidersData.put(DEFAULT_VM_PROVIDER_KEY, new VoiceMailProvider(myCarrier, null)); 1556365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1557365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // Enumerate providers 1558365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky PackageManager pm = getPackageManager(); 1559365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky Intent intent = new Intent(); 1560365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky intent.setAction(ACTION_CONFIGURE_VOICEMAIL); 1561365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); 15626da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky int len = resolveInfos.size() + 1; // +1 for the default choice we will insert. 1563365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 15646da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Go through the list of discovered providers populating the data map 15656da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // skip the provider we were instructed to ignore if there was one 1566365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky for (int i = 0; i < resolveInfos.size(); i++) { 1567365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final ResolveInfo ri= resolveInfos.get(i); 15686da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final ActivityInfo currentActivityInfo = ri.activityInfo; 15696da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final String key = makeKeyForActivity(currentActivityInfo); 15709440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Loading " + key); 15716da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (key.equals(providerToIgnore)) { 15729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Ignoring " + key); 15736da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky len--; 15746da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky continue; 15756da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 1576365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String nameForDisplay = ri.loadLabel(pm).toString(); 1577365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky Intent providerIntent = new Intent(); 1578365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky providerIntent.setAction(ACTION_CONFIGURE_VOICEMAIL); 1579365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky providerIntent.setClassName(currentActivityInfo.packageName, 1580365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky currentActivityInfo.name); 1581365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.put( 1582365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky key, 1583365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky new VoiceMailProvider(nameForDisplay, providerIntent)); 15846da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 15856da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15866da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 15876da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Now we know which providers to display - create entries and values array for 15886da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // the list preference 15896da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky String [] entries = new String [len]; 15906da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky String [] values = new String [len]; 15916da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky entries[0] = myCarrier; 15929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky values[0] = DEFAULT_VM_PROVIDER_KEY; 15936da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky int entryIdx = 1; 15946da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky for (int i = 0; i < resolveInfos.size(); i++) { 15956da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final String key = makeKeyForActivity(resolveInfos.get(i).activityInfo); 15966da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (!mVMProvidersData.containsKey(key)) { 15976da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky continue; 15986da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 15996da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky entries[entryIdx] = mVMProvidersData.get(key).name; 16006da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky values[entryIdx] = key; 16016da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky entryIdx++; 1602365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 1603365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 1604365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setEntries(entries); 1605365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setEntryValues(values); 1606365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 16077c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky mPreviousVMProviderKey = getCurrentVoicemailProviderKey(); 16089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky updateVMPreferenceWidgets(mPreviousVMProviderKey); 1609365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 16106da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 16116da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky private String makeKeyForActivity(ActivityInfo ai) { 16129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return ai.name; 16136da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 16146da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky 16156da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky /** 16166da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * Simulates user clicking on a passed preference. 16176da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * Usually needed when the preference is a dialog preference and we want to invoke 16186da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * a dialog for this preference programmatically. 16196da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky * TODO(iliat): figure out if there is a cleaner way to cause preference dlg to come up 16206da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky */ 16216da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky private void simulatePreferenceClick(Preference preference) { 16226da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // Go through settings until we find our setting 16236da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky // and then simulate a click on it to bring up the dialog 16246da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky final ListAdapter adapter = getPreferenceScreen().getRootAdapter(); 16256da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky for (int idx = 0; idx < adapter.getCount(); idx++) { 16266da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky if (adapter.getItem(idx) == preference) { 16276da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky getPreferenceScreen().onItemClick(this.getListView(), 16286da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky null, idx, adapter.getItemId(idx)); 16296da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky break; 16306da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 16316da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 16326da0c032426ecf86a5b56f8a8ddd47bad784c674Ilia Tulchinsky } 1633e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 1634e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky /** 16359440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Saves new VM provider settings associating them with the currently selected 16369440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * provider if settings are different than the ones already stored for this 1637e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * provider. 16389440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Later on these will be used when the user switches a provider. 1639e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky */ 16409440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void maybeSaveSettingsForVoicemailProvider(String key, 16419440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VoiceMailProviderSettings newSettings) { 1642b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky if (mVoicemailProviders == null) { 1643b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky return; 1644b4b73b57c4047a2863d210c037257024d6452f89Ilia Tulchinsky } 16459440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final VoiceMailProviderSettings curSettings = loadSettingsForVoiceMailProvider(key); 16469440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (newSettings.equals(curSettings)) { 16479440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Not saving setting for " + key + " since they have not changed"); 1648e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky return; 1649e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 16509440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Saving settings for " + key + ": " + newSettings.toString()); 16519440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky Editor editor = mPerProviderSavedVMNumbers.edit(); 16529440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putString(key + VM_NUMBER_TAG,newSettings.voicemailNumber); 16539440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String fwdKey = key + FWD_SETTINGS_TAG; 16549440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] s = newSettings.forwardingSettings; 16559440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (s != FWD_SETTINGS_DONT_TOUCH) { 16569440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, s.length); 16579440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < s.length; i++) { 16589440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 16599440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final CallForwardInfo fi = s[i]; 16609440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(settingKey + FWD_SETTING_STATUS, fi.status); 16619440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(settingKey + FWD_SETTING_REASON, fi.reason); 16629440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putString(settingKey + FWD_SETTING_NUMBER, fi.number); 16639440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(settingKey + FWD_SETTING_TIME, fi.timeSeconds); 16649440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16659440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } else { 16669440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 16679440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16689f994b77f3f22b9a23887a324380d9fd317d4e06Brad Fitzpatrick editor.apply(); 1669e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 1670e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky 1671e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky /** 16729440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Returns settings previously stored for the currently selected 1673e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * voice mail provider. If none is stored returns null. 16749440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * If the user switches to a voice mail provider and we have settings 1675e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky * stored for it we will automatically change the phone's voice mail number 16769440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * and forwarding number to the stored one. Otherwise we will bring up provider's configuration 16779440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * UI. 1678e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky */ 16799440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private VoiceMailProviderSettings loadSettingsForVoiceMailProvider(String key) { 16809440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String vmNumberSetting = mPerProviderSavedVMNumbers.getString(key + VM_NUMBER_TAG, 16819440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky null); 16829440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (vmNumberSetting == null) { 16839440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Settings for " + key + " not found"); 16849440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return null; 16859440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 16869440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 16879440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CallForwardInfo[] cfi = FWD_SETTINGS_DONT_TOUCH; 16889440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky String fwdKey = key + FWD_SETTINGS_TAG; 16899440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final int fwdLen = mPerProviderSavedVMNumbers.getInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 16909440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (fwdLen > 0) { 16919440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi = new CallForwardInfo[fwdLen]; 16929440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky for (int i = 0; i < cfi.length; i++) { 16939440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky final String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 16949440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i] = new CallForwardInfo(); 16959440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].status = mPerProviderSavedVMNumbers.getInt( 16969440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_STATUS, 0); 16979440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].reason = mPerProviderSavedVMNumbers.getInt( 16989440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_REASON, 16999440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky CommandsInterface.CF_REASON_ALL_CONDITIONAL); 17009440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 17019440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].toa = PhoneNumberUtils.TOA_International; 17029440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].number = mPerProviderSavedVMNumbers.getString( 17039440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_NUMBER, ""); 17049440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky cfi[i].timeSeconds = mPerProviderSavedVMNumbers.getInt( 17059440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky settingKey + FWD_SETTING_TIME, 20); 17069440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 17079440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 17089440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 17099440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky VoiceMailProviderSettings settings = new VoiceMailProviderSettings(vmNumberSetting, cfi); 17109440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Loaded settings for " + key + ": " + settings.toString()); 17119440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return settings; 17129440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 17139440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky 17149440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky /** 17159440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky * Deletes settings for the specified provider. 17169440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky */ 17179440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky private void deleteSettingsForVoicemailProvider(String key) { 17189440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (DBG) log("Deleting settings for" + key); 17199440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky if (mVoicemailProviders == null) { 17209440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky return; 17219440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky } 17229440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky mPerProviderSavedVMNumbers.edit() 17239440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky .putString(key + VM_NUMBER_TAG, null) 17249440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky .putInt(key + FWD_SETTINGS_TAG + FWD_SETTINGS_LENGTH_TAG, 0) 17259440c4bbc4601889eb266d65cd94ac7c6b879dbaIlia Tulchinsky .commit(); 1726e1b454c721ebe6bd5c3908413728a691e92d80b9Ilia Tulchinsky } 17277c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky 17287c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky private String getCurrentVoicemailProviderKey() { 17297c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky final String key = mVoicemailProviders.getValue(); 17307c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky return (key != null) ? key : DEFAULT_VM_PROVIDER_KEY; 17317c08e235bfd5109f3eaac2ce2f73c7da27916dacIlia Tulchinsky } 1732b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project} 1733