CallFeaturesSetting.java revision 365ab88d8d3f80f350bed0fee7c2ee1f52247b2e
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 19cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport com.android.internal.telephony.Phone; 20cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport com.android.internal.telephony.PhoneFactory; 21cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport com.android.internal.telephony.cdma.TtyIntent; 22cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 23b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.AlertDialog; 24b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.Dialog; 25cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.content.Context; 26b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.DialogInterface; 27b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Intent; 28365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.ActivityInfo; 29365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.PackageManager; 30365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport android.content.pm.ResolveInfo; 31b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.database.Cursor; 32cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.media.AudioManager; 33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.AsyncResult; 34b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Bundle; 35b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Handler; 36b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Message; 37b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.CheckBoxPreference; 38b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.ListPreference; 39b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.Preference; 40b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.PreferenceActivity; 41b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.preference.PreferenceScreen; 42a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Savilleimport android.provider.Contacts.PhonesColumns; 43cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.provider.Settings; 44b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.TextUtils; 45365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 46b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.Log; 47b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.WindowManager; 48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 49365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.HashMap; 50365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.List; 51365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinskyimport java.util.Map; 52365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 53365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 54b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpublic class CallFeaturesSetting extends PreferenceActivity 55b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project implements DialogInterface.OnClickListener, 56b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Preference.OnPreferenceChangeListener, 57b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference.OnDialogClosedListener, 58b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference.GetDefaultNumberListener{ 59b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 60b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // intent action for this activity. 61b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public static final String ACTION_ADD_VOICEMAIL = 62b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project "com.android.phone.CallFeaturesSetting.ADD_VOICEMAIL"; 63365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public static final String ACTION_CONFIGURE_VOICEMAIL = 64365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky "com.android.phone.CallFeaturesSetting.CONFIGURE_VOICEMAIL"; 65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 66b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // debug data 6787258b2b589c3afea4b89b840251012378e0d3b4David Brown private static final String LOG_TAG = "CallFeaturesSetting"; 68cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); 69b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 70b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // string contants 71b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String NUM_PROJECTION[] = {PhonesColumns.NUMBER}; 72b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 73b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // String keys for preference lookup 74b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String BUTTON_VOICEMAIL_KEY = "button_voicemail_key"; 75365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final String BUTTON_VOICEMAIL_PROVIDER_KEY = "button_voicemail_provider_key"; 76365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final String BUTTON_VOICEMAIL_SETTING_KEY = "button_voicemail_setting_key"; 77b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final String BUTTON_FDN_KEY = "button_fdn_key"; 78b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 79cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_DTMF_KEY = "button_dtmf_settings"; 803800ac871d6548790ac6119bb68b9be0640af261David Krause private static final String BUTTON_RETRY_KEY = "button_auto_retry_key"; 81cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_TTY_KEY = "button_tty_mode_key"; 82cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_HAC_KEY = "button_hac_key"; 83cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 84cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_GSM_UMTS_OPTIONS = "button_gsm_more_expand_key"; 85cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CDMA_OPTIONS = "button_cdma_more_expand_key"; 86a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 87b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Intent mContactListIntent; 88b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 89b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** Event for Async voicemail change call */ 90b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int EVENT_VOICEMAIL_CHANGED = 500; 91d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 92a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville // preferred TTY mode 93cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Phone.TTY_MODE_xxx 94cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause static final int preferredTtyMode = Phone.TTY_MODE_OFF; 95b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 96d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville // Dtmf tone types 97d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville static final int DTMF_TONE_TYPE_NORMAL = 0; 98d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville static final int DTMF_TONE_TYPE_LONG = 1; 99d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 100cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String HAC_KEY = "HACSetting"; 101cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String HAC_VAL_ON = "ON"; 102cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String HAC_VAL_OFF = "OFF"; 103d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** Handle to voicemail pref */ 105cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int VOICEMAIL_PREF_ID = 1; 106365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private static final int VOICEMAIL_PROVIDER_CFG_ID = 2; 107b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 108b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Phone mPhone; 109b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 110cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private AudioManager mAudioManager; 111cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 112b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VM_NOCHANGE_ERROR = 400; 113b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VM_RESPONSE_ERROR = 500; 114b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 115b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 116b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // dialog identifiers for voicemail 117b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int VOICEMAIL_DIALOG_CONFIRM = 600; 118b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 119b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // status message sent back from handlers 120b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_OK = 100; 121cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 122b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // special statuses for voicemail controls. 123b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_EXCEPTION = 400; 124b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_OK = 600; 125b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MSG_VM_NOCHANGE = 700; 126cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 127b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditPhoneNumberPreference mSubMenuVoicemailSettings; 128cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 1293800ac871d6548790ac6119bb68b9be0640af261David Krause private CheckBoxPreference mButtonAutoRetry; 130cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CheckBoxPreference mButtonHAC; 131cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private ListPreference mButtonDTMF; 132404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville private ListPreference mButtonTTY; 133365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private ListPreference mVoicemailProviders; 134365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private PreferenceScreen mVoicemailSettings; 135365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private class VoiceMailProvider { 136365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public VoiceMailProvider(String name, Intent intent) { 137365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.name = name; 138365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.intent = intent; 139365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 140365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public String name; 141365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky public Intent intent; 142365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 143365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 144365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 145365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Data about discovered voice mail settings providers. 146365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Is populated by querying which activities can handle ACTION_CONFIGURE_VOICEMAIL. 147365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * They key in this map is package name + activity name. 148365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * We always add an entry for the default provider with a key of empty 149365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * string and intent value of null. 150365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * @see #initVoiceMailProviders. 151365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 152365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private Map<String, VoiceMailProvider> mVMProvidersData = 153365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky new HashMap<String, VoiceMailProvider>(); 154b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 155b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** string to hold old voicemail number as it is being updated. */ 156b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private String mOldVmNumber; 157b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 158b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 159cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause TTYHandler ttyHandler; 160cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 161b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 162b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Click Listeners, handle click based on objects attached to UI. 163b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 164b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 165b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Click listener for all toggle events 166b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 167b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 168cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (preference == mSubMenuVoicemailSettings) { 169cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return true; 170cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonDTMF) { 171b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 172a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } else if (preference == mButtonTTY) { 173404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville return true; 1743800ac871d6548790ac6119bb68b9be0640af261David Krause } else if (preference == mButtonAutoRetry) { 175cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.System.putInt(mPhone.getContext().getContentResolver(), 176cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.System.CALL_AUTO_RETRY, 177cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.isChecked() ? 1 : 0); 178cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return true; 179cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonHAC) { 180cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int hac = mButtonHAC.isChecked() ? 1 : 0; 181cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Update HAC value in Settings database 182cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.putInt(mPhone.getContext().getContentResolver(), 183cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.HEARING_AID, hac); 184b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 185cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // Update HAC Value in AudioManager 186cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mAudioManager.setParameter(HAC_KEY, hac != 0 ? HAC_VAL_ON : HAC_VAL_OFF); 187b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 188365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else if (preference == mVoicemailSettings) { 189365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (preference.getIntent() != null) { 190365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky this.startActivityForResult(preference.getIntent(), VOICEMAIL_PROVIDER_CFG_ID); 191365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else { 192365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky updateVoiceNumberField(); 193365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 194365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return true; 195b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 196b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return false; 197b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 198b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 199b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 200b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Implemented to support onPreferenceChangeListener to look for preference 201cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause * changes. 202b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 203cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause * @param preference is the preference to be changed 204b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * @param objValue should be the value of the selection, NOT its localized 205b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * display value. 206b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 207b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public boolean onPreferenceChange(Preference preference, Object objValue) { 208cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (preference == mButtonDTMF) { 209cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int index = mButtonDTMF.findIndexOfValue((String) objValue); 210d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville Settings.System.putInt(mPhone.getContext().getContentResolver(), 211d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index); 212cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else if (preference == mButtonTTY) { 213cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleTTYChange(preference, objValue); 214365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else if (preference == mVoicemailProviders) { 215365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky updateVMPreferenceWidgets((String)objValue); 216b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 217b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // always let the preference setting proceed. 218b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return true; 219b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 220b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 221b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Preference click listener invoked on OnDialogClosed for EditPhoneNumberPreference. 222b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onDialogClosed(EditPhoneNumberPreference preference, int buttonClicked) { 223b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onPreferenceClick: request preference click on dialog close."); 224b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 225b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (preference instanceof EditPhoneNumberPreference) { 226b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EditPhoneNumberPreference epn = preference; 227b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 228b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (epn == mSubMenuVoicemailSettings) { 229b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project handleVMBtnClickRequest(); 230b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 231b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 232b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 233b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 234b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /** 235b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Implemented for EditPhoneNumberPreference.GetDefaultNumberListener. 236b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * This method set the default values for the various 237b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * EditPhoneNumberPreference dialogs. 238b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 239b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public String onGetDefaultNumber(EditPhoneNumberPreference preference) { 240b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (preference == mSubMenuVoicemailSettings) { 241b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // update the voicemail number field, which takes care of the 242b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // mSubMenuVoicemailSettings itself, so we should return null. 243b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("updating default for voicemail dialog"); 244b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 245b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 246b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 247b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 248a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville String vmDisplay = mPhone.getVoiceMailNumber(); 249b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (TextUtils.isEmpty(vmDisplay)) { 250b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // if there is no voicemail number, we just return null to 251b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // indicate no contribution. 252b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 253b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 254b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 255b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Return the voicemail number prepended with "VM: " 256b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("updating default for call forwarding dialogs"); 257b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return getString(R.string.voicemail_abbreviated) + " " + vmDisplay; 258b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 259b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 260b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 261b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // override the startsubactivity call to make changes in state consistent. 262b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 263b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void startActivityForResult(Intent intent, int requestCode) { 264b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (requestCode == -1) { 265b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // this is an intent requested from the preference framework. 266b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.startActivityForResult(intent, requestCode); 267b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 268b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 269b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 270b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("startSubActivity: starting requested subactivity"); 271b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.startActivityForResult(intent, requestCode); 272b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 273b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 274365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // asynchronous result call after contacts are selected or after we return from 275365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // a call to the VM settings provider. 276b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 277b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, Intent data) { 278b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // there are cases where the contact picker may end up sending us more than one 279b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // request. We want to ignore the request if we're not in the correct state. 280365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (requestCode == VOICEMAIL_PROVIDER_CFG_ID) { 281365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (resultCode != RESULT_OK) { 282365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result not OK."); 283365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 284365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 285365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (data == null) { 286365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result has no data"); 287365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 288365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 289365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky String vmNum = data.getStringExtra("vmnum"); 290365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (vmNum == null) { 291365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (DBG) log("onActivityResult: vm provider cfg result has no vmnum"); 292365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 293365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 294365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky saveVoiceMailNumber(vmNum); 295365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky return; 296365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 297b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 298b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (resultCode != RESULT_OK) { 299b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onActivityResult: contact picker result not OK."); 300b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 301b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 302b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 303b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Cursor cursor = getContentResolver().query(data.getData(), 304b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project NUM_PROJECTION, null, null, null); 305b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if ((cursor == null) || (!cursor.moveToFirst())) { 306b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("onActivityResult: bad contact data, no results found."); 307b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 308b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 309b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 310b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (requestCode) { 311b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VOICEMAIL_PREF_ID: 312b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mSubMenuVoicemailSettings.onPickActivityResult(cursor.getString(0)); 313b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 314b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 315b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: may need exception here. 316b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 317b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 318b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 319b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Voicemail button logic 320b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void handleVMBtnClickRequest() { 321b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // normally called on the dialog close. 322b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 323b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Since we're stripping the formatting out on the getPhoneNumber() 324b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // call now, we won't need to do so here anymore. 325365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky saveVoiceMailNumber(mSubMenuVoicemailSettings.getPhoneNumber()); 326b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 327365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 328365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 329365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void saveVoiceMailNumber(String newVMNumber) { 330b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // empty vm number == clearing the vm number ? 331b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (newVMNumber == null) { 332b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project newVMNumber = ""; 333b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 334b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 335b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project //throw a warning if they are the same. 336b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (newVMNumber.equals(mOldVmNumber)) { 337cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showVMDialog(MSG_VM_NOCHANGE); 338b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 339b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 340b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 341b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // otherwise, set it. 342b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("save voicemail #: " + newVMNumber); 343b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPhone.setVoiceMailNumber( 344b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPhone.getVoiceMailAlphaTag().toString(), 345b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project newVMNumber, 346b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Message.obtain(mSetOptionComplete, EVENT_VOICEMAIL_CHANGED)); 347b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 348b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 349b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 350b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Callback to handle option update completions 351b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 352b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 353b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // **Callback on option setting when complete. 354b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Handler mSetOptionComplete = new Handler() { 355b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 356b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void handleMessage(Message msg) { 357b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // query to make sure we're looking at the same data as that in the network. 358b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (msg.what) { 359b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case EVENT_VOICEMAIL_CHANGED: 360b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project handleSetVMMessage((AsyncResult) msg.obj); 361b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 362b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 363b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: should never reach this, may want to throw exception 364b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 365b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 366b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }; 367b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 368b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Voicemail Object 369b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void handleSetVMMessage(AsyncResult ar) { 370b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) { 371b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project log("handleSetVMMessage: set VM request complete"); 372b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 373b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (ar.exception == null) { 374b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("change VM success!"); 375cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showVMDialog(MSG_VM_OK); 376b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 377b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: may want to check the exception and branch on it. 378b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("change VM failed!"); 379cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showVMDialog(MSG_VM_EXCEPTION); 380b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 381b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 382b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 383b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 384b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 385b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Methods used to sync UI state with that of the network 386b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 387b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 388b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // update the voicemail number from what we've recorded on the sim. 389b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void updateVoiceNumberField() { 3904ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang if (mSubMenuVoicemailSettings == null) { 3914ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang return; 3924ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang } 393404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 394b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldVmNumber = mPhone.getVoiceMailNumber(); 395b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mOldVmNumber == null) { 396b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldVmNumber = ""; 397b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 398b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mSubMenuVoicemailSettings.setPhoneNumber(mOldVmNumber); 399365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String summary = (mOldVmNumber.length() > 0) ? mOldVmNumber : 400365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky getString(R.string.voicemail_number_not_set); 401365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mSubMenuVoicemailSettings.setSummary(summary); 402b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 403b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 404b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 405b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Helper Methods for Activity class. 406b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * The inital query commands are split into two pieces now 407b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * for individual expansion. This combined with the ability 408b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * to cancel queries allows for a much better user experience, 409b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * and also ensures that the user only waits to update the 410b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * data that is relevant. 411b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 412b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 413b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // dialog creation method, called by showDialog() 414b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 415b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected Dialog onCreateDialog(int id) { 416cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if ((id == VM_RESPONSE_ERROR) || (id == VM_NOCHANGE_ERROR) || 417cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause (id == VOICEMAIL_DIALOG_CONFIRM)) { 418b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 419b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AlertDialog.Builder b = new AlertDialog.Builder(this); 420b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 421b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int msgId; 422b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int titleId = R.string.error_updating_title; 423b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (id) { 424b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VOICEMAIL_DIALOG_CONFIRM: 425b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.vm_changed; 426b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project titleId = R.string.voicemail; 427b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 2 428b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNegativeButton(R.string.close_dialog, this); 429b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 430b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VM_NOCHANGE_ERROR: 431b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // even though this is technically an error, 432b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // keep the title friendly. 433b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.no_change; 434b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project titleId = R.string.voicemail; 435b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 2 436b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNegativeButton(R.string.close_dialog, this); 437b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 438b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case VM_RESPONSE_ERROR: 439b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.vm_change_failed; 440b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 1 441b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setPositiveButton(R.string.close_dialog, this); 442b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 443b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 444b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project msgId = R.string.exception_error; 445b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Set Button 3, tells the activity that the error is 446b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // not recoverable on dialog exit. 447b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setNeutralButton(R.string.close_dialog, this); 448b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 449b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 450b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 451b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setTitle(getText(titleId)); 452b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setMessage(getText(msgId)); 453b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project b.setCancelable(false); 454b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AlertDialog dialog = b.create(); 455b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 456b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // make the dialog more obvious by bluring the background. 457b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 458b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 459b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return dialog; 460b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 461b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 462b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return null; 463b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 464b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 465b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // This is a method implemented for DialogInterface.OnClickListener. 466b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Used with the error dialog to close the app, voicemail dialog to just dismiss. 467b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Close button is mapped to BUTTON1 for the errors that close the activity, 468b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // while those that are mapped to 3 only move the preference focus. 469b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 470b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project dialog.dismiss(); 471b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (which){ 472b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case DialogInterface.BUTTON3: 473b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Neutral Button, used when we want to cancel expansion. 474b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 475b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case DialogInterface.BUTTON1: 476b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Negative Button 477b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project finish(); 478b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 479b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 480b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // just let the dialog close and go back to the input 481b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // ready state 482b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // Positive Button 483b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 484b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 485b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 486b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // set the app state with optional status. 487cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void showVMDialog(int msgStatus) { 488cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause switch (msgStatus) { 489cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_EXCEPTION: 490cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showDialog(VM_RESPONSE_ERROR); 491b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 492cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_NOCHANGE: 493cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showDialog(VM_NOCHANGE_ERROR); 494b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 495cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_VM_OK: 496cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause showDialog(VOICEMAIL_DIALOG_CONFIRM); 497b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 498cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case MSG_OK: 499cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause default: 500cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // This should never happen. 501a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 502a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 503404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 504b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* 505b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Activity class methods 506b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 507b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 508b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 509b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project protected void onCreate(Bundle icicle) { 510b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onCreate(icicle); 511a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville mPhone = PhoneFactory.getDefaultPhone(); 512b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 513cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.call_feature_setting); 514cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 515cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 516cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 517b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // get buttons 518b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project PreferenceScreen prefSet = getPreferenceScreen(); 519365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mSubMenuVoicemailSettings = (EditPhoneNumberPreference)findPreference(BUTTON_VOICEMAIL_KEY); 5204ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang if (mSubMenuVoicemailSettings != null) { 5214ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setParentActivity(this, VOICEMAIL_PREF_ID, this); 5224ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setDialogOnClosedListener(this); 5234ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang mSubMenuVoicemailSettings.setDialogTitle(R.string.voicemail_settings_number_label); 5244ccb1b7d68d5b5bb7ed54251a1f214162013bc60John Wang } 525404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 526cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF = (ListPreference) findPreference(BUTTON_DTMF_KEY); 527cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry = (CheckBoxPreference) findPreference(BUTTON_RETRY_KEY); 528cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC = (CheckBoxPreference) findPreference(BUTTON_HAC_KEY); 529cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY = (ListPreference) findPreference(BUTTON_TTY_KEY); 530365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders = (ListPreference) findPreference(BUTTON_VOICEMAIL_PROVIDER_KEY); 531365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setOnPreferenceChangeListener(this); 532365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings = (PreferenceScreen)findPreference(BUTTON_VOICEMAIL_SETTING_KEY); 533365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 534365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky initVoiceMailProviders(); 535b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 536cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.dtmf_type_enabled)) { 537cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF.setOnPreferenceChangeListener(this); 538cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 539cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonDTMF); 540cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF = null; 5415b269ecd49279c3c4f85f55fa4fd4baa88e3a54bjsh } 542b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 543cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.auto_retry_enabled)) { 544cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.setOnPreferenceChangeListener(this); 545cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 546cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonAutoRetry); 547cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry = null; 548cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 549b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 550cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.hac_enabled)) { 551cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC.setOnPreferenceChangeListener(this); 552cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 553cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonHAC); 554cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC = null; 555cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 556b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 557cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getResources().getBoolean(R.bool.tty_enabled)) { 558cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setOnPreferenceChangeListener(this); 559cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyHandler = new TTYHandler(); 560b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 561cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(mButtonTTY); 562cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY = null; 563cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 564cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 565cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (!getResources().getBoolean(R.bool.world_phone)) { 566cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(prefSet.findPreference(BUTTON_CDMA_OPTIONS)); 567cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(prefSet.findPreference(BUTTON_GSM_UMTS_OPTIONS)); 568cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 569cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mPhone.getPhoneName().equals("CDMA")) { 570cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause prefSet.removePreference(prefSet.findPreference(BUTTON_FDN_KEY)); 571cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.cdma_call_options); 572cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 573cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.gsm_umts_call_options); 574b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 575b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 576b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 577cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // create intent to bring up contact list 578cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mContactListIntent = new Intent(Intent.ACTION_GET_CONTENT); 579cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mContactListIntent.setType(android.provider.Contacts.Phones.CONTENT_ITEM_TYPE); 580cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 581cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // check the intent that started this activity and pop up the voicemail 582cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // dialog if we've been asked to. 583cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (getIntent().getAction().equals(ACTION_ADD_VOICEMAIL)) { 584cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mSubMenuVoicemailSettings.showPhoneNumberDialog(); 585cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 586b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project updateVoiceNumberField(); 587b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 588b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 589b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project @Override 590cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause protected void onResume() { 591cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause super.onResume(); 592b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 593cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonDTMF != null) { 594cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int dtmf = Settings.System.getInt(getContentResolver(), 595cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, DTMF_TONE_TYPE_NORMAL); 596cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonDTMF.setValueIndex(dtmf); 597cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 598d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 599cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonAutoRetry != null) { 600cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int autoretry = Settings.System.getInt(getContentResolver(), 601cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Settings.System.CALL_AUTO_RETRY, 0); 602cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonAutoRetry.setChecked(autoretry != 0); 603d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville } 6043800ac871d6548790ac6119bb68b9be0640af261David Krause 605cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonHAC != null) { 606cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int hac = Settings.System.getInt(getContentResolver(), Settings.System.HEARING_AID, 0); 607cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonHAC.setChecked(hac != 0); 608cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 609d533a71d64507e33d78dc65aa2521eacb5f8bb25Wink Saville 610cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (mButtonTTY != null) { 611cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPhone.queryTTYMode(ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_GET)); 612cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 613b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 614b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 615cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleTTYChange(Preference preference, Object objValue) { 616404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville int buttonTtyMode; 617404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville buttonTtyMode = Integer.valueOf((String) objValue).intValue(); 618404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville int settingsTtyMode = android.provider.Settings.Secure.getInt( 619cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause getContentResolver(), 620404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville android.provider.Settings.Secure.PREFERRED_TTY_MODE, preferredTtyMode); 621cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleTTYChange: requesting set TTY mode enable (TTY) to" + 622404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville Integer.toString(buttonTtyMode)); 623404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 624404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville if (buttonTtyMode != settingsTtyMode) { 625404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville switch(buttonTtyMode) { 626404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_OFF: 627404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_FULL: 628404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_HCO: 629404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case Phone.TTY_MODE_VCO: 630cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPhone.setTTYMode(buttonTtyMode, 631cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_SET)); 632404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville break; 633404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville default: 634404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville mPhone.setTTYMode(Phone.TTY_MODE_OFF, 635cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_SET)); 636404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 637404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 638a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 639a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 640cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause class TTYHandler extends Handler { 641cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause /** Event for TTY mode change */ 642cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int EVENT_TTY_MODE_GET = 700; 643cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final int EVENT_TTY_MODE_SET = 800; 644a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 645a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville @Override 646a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville public void handleMessage(Message msg) { 647a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville switch (msg.what) { 648cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case EVENT_TTY_MODE_GET: 649cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleQueryTTYModeResponse(msg); 650404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville break; 651404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville case EVENT_TTY_MODE_SET: 652cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause handleSetTTYModeResponse(msg); 653a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville break; 654404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 655404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville } 656404edc94de563aef5fd5ba48be9114a970cb93bbWink Saville 657cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void updatePreferredTtyModeSummary(int TtyMode) { 658cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause String [] txts = getResources().getStringArray(R.array.tty_mode_entries); 659cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause switch(TtyMode) { 660cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_OFF: 661cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_HCO: 662cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_VCO: 663cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case Phone.TTY_MODE_FULL: 664cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setSummary(txts[TtyMode]); 665a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville break; 666a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville default: 667cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setEnabled(false); 668cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setSummary(txts[Phone.TTY_MODE_OFF]); 669a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 670a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 671a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 672cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleQueryTTYModeResponse(Message msg) { 673cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause AsyncResult ar = (AsyncResult) msg.obj; 674cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (ar.exception != null) { 675cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleQueryTTYModeResponse: Error getting TTY state."); 676cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setEnabled(false); 677cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } else { 678cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleQueryTTYModeResponse: TTY enable state successfully queried."); 679a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 680cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause int ttymode = ((int[]) ar.result)[0]; 681cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleQueryTTYModeResponse:ttymode=" + ttymode); 682a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 683cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Intent ttyModeChanged = new Intent(TtyIntent.TTY_ENABLED_CHANGE_ACTION); 684cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause ttyModeChanged.putExtra("ttyEnabled", ttymode != Phone.TTY_MODE_OFF); 685cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause sendBroadcast(ttyModeChanged); 686cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.Secure.putInt(getContentResolver(), 687cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause android.provider.Settings.Secure.PREFERRED_TTY_MODE, ttymode ); 688cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonTTY.setValue(Integer.toString(ttymode)); 689cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause updatePreferredTtyModeSummary(ttymode); 690a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 691a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 692a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 693cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private void handleSetTTYModeResponse(Message msg) { 694cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause AsyncResult ar = (AsyncResult) msg.obj; 695a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 696cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (ar.exception != null) { 697cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) log("handleSetTTYModeResponse: Error setting TTY mode, ar.exception" 698cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause + ar.exception); 699a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 700cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPhone.queryTTYMode(ttyHandler.obtainMessage(TTYHandler.EVENT_TTY_MODE_GET)); 701a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville } 702a69de9f9a2e99fe08f0009bb218b95ed7985c575Wink Saville 7033800ac871d6548790ac6119bb68b9be0640af261David Krause } 7043800ac871d6548790ac6119bb68b9be0640af261David Krause 705b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static void log(String msg) { 706b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Log.d(LOG_TAG, msg); 707b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 708365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 709365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 710365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Updates the look of the VM preference widgets based on current VM provider settings. 711365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Note that the provider name is loaded form the found activity via loadLabel in 712365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * initVoiceMailProviders in order for it to be localizable. 713365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 714365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void updateVMPreferenceWidgets(String currentProviderSetting) { 715365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String key = currentProviderSetting; 716365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final VoiceMailProvider provider = mVMProvidersData.get(key); 717365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 718365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /* This is the case when we are coming up on a freshly wiped phone and there is no 719365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky persisted value for the list preference mVoicemailProviders. 720365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky In this case we want to show the UI asking the user to select a voicemail provider as 721365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky opposed to silently falling back to default one. */ 722365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky if (provider == null) { 723365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setSummary(getString(R.string.sum_voicemail_choose_provider)); 724365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setSummary(""); 725365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setEnabled(false); 726365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setIntent(null); 727365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } else { 728365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String providerName = provider.name; 729365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setSummary(providerName); 730365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setSummary(getApplicationContext().getString( 731365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky R.string.voicemail_settings_for, providerName)); 732365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setEnabled(true); 733365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailSettings.setIntent(provider.intent); 734365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 735365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 736365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 737365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky /** 738365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * Enumerates existing VM providers and puts their data into the list and populates 739365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky * the preference list objects with their names. 740365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky */ 741365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky private void initVoiceMailProviders() { 742365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.clear(); 743365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 744365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // Stick the default element which is always there 745365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String myCarrier = getString(R.string.voicemail_default); 746365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.put("", new VoiceMailProvider(myCarrier, null)); 747365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 748365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky // Enumerate providers 749365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky PackageManager pm = getPackageManager(); 750365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky Intent intent = new Intent(); 751365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky intent.setAction(ACTION_CONFIGURE_VOICEMAIL); 752365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); 753365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 754365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final int len = resolveInfos.size() + 1; 755365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky String [] entries = new String [len]; 756365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky String [] values = new String [len]; 757365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky entries[0] = myCarrier; 758365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky values[0] = ""; 759365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky for (int i = 0; i < resolveInfos.size(); i++) { 760365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final ResolveInfo ri= resolveInfos.get(i); 761365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String nameForDisplay = ri.loadLabel(pm).toString(); 762365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky ActivityInfo currentActivityInfo = ri.activityInfo; 763365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky Intent providerIntent = new Intent(); 764365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky providerIntent.setAction(ACTION_CONFIGURE_VOICEMAIL); 765365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky providerIntent.setClassName(currentActivityInfo.packageName, 766365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky currentActivityInfo.name); 767365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky final String key = currentActivityInfo.packageName + "." + currentActivityInfo.name; 768365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVMProvidersData.put( 769365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky key, 770365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky new VoiceMailProvider(nameForDisplay, providerIntent)); 771365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky entries[i + 1] = nameForDisplay; 772365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky values[i + 1] = key; 773365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 774365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 775365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setEntries(entries); 776365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky mVoicemailProviders.setEntryValues(values); 777365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky 778365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky updateVMPreferenceWidgets(mVoicemailProviders.getValue()); 779365ab88d8d3f80f350bed0fee7c2ee1f52247b2eIlia Tulchinsky } 780b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project} 781