| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) 2008 The Android Open Source Project | 
|  | 3 | * | 
|  | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 5 | * you may not use this file except in compliance with the License. | 
|  | 6 | * You may obtain a copy of the License at | 
|  | 7 | * | 
|  | 8 | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 9 | * | 
|  | 10 | * Unless required by applicable law or agreed to in writing, software | 
|  | 11 | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 13 | * See the License for the specific language governing permissions and | 
|  | 14 | * limitations under the License. | 
|  | 15 | */ | 
|  | 16 |  | 
|  | 17 | package com.android.phone; | 
|  | 18 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 19 | import android.app.Activity; | 
|  | 20 | import android.app.AlertDialog; | 
|  | 21 | import android.app.Dialog; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 22 | import android.content.Context; | 
|  | 23 | import android.content.DialogInterface; | 
|  | 24 | import android.content.Intent; | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 25 | import android.content.pm.PackageManager; | 
| Ta-wei Yen | b8e770c | 2017-01-24 17:49:58 -0800 | [diff] [blame] | 26 | import android.content.pm.PackageManager.NameNotFoundException; | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 27 | import android.content.pm.ResolveInfo; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 28 | import android.os.Bundle; | 
| Jonathan Basseri | c31f1f3 | 2015-05-12 10:13:03 -0700 | [diff] [blame] | 29 | import android.os.PersistableBundle; | 
| Xiaohui Chen | 9dc2bea | 2015-10-14 11:42:04 -0700 | [diff] [blame] | 30 | import android.os.UserManager; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 31 | import android.preference.Preference; | 
|  | 32 | import android.preference.PreferenceActivity; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 33 | import android.preference.PreferenceScreen; | 
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 34 | import android.preference.SwitchPreference; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 35 | import android.provider.Settings; | 
| Tyler Gunn | 4d45d1c | 2014-09-12 22:17:53 -0700 | [diff] [blame] | 36 | import android.telecom.PhoneAccountHandle; | 
|  | 37 | import android.telecom.TelecomManager; | 
| Jonathan Basseri | 4b40ff4 | 2015-04-30 21:54:10 -0700 | [diff] [blame] | 38 | import android.telephony.CarrierConfigManager; | 
| pkanwar | b4aef11 | 2016-07-17 15:39:30 -0700 | [diff] [blame] | 39 | import android.telephony.PhoneStateListener; | 
| Wenting Xiong | 6fec455 | 2018-08-04 17:56:50 +0800 | [diff] [blame] | 40 | import android.telephony.SubscriptionManager; | 
| Andrew Lee | 93c345f | 2014-10-27 15:25:07 -0700 | [diff] [blame] | 41 | import android.telephony.TelephonyManager; | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 42 | import android.telephony.ims.ProvisioningManager; | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 43 | import android.telephony.ims.feature.ImsFeature; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 44 | import android.util.Log; | 
|  | 45 | import android.view.MenuItem; | 
| Jay Shrauner | c268473 | 2014-11-12 12:10:37 -0800 | [diff] [blame] | 46 | import android.widget.Toast; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 47 |  | 
| Andrew Lee | effef9c | 2015-02-19 16:02:37 -0800 | [diff] [blame] | 48 | import com.android.ims.ImsConfig; | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 49 | import com.android.ims.ImsException; | 
| Andrew Lee | 312e817 | 2014-10-23 17:01:36 -0700 | [diff] [blame] | 50 | import com.android.ims.ImsManager; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 51 | import com.android.internal.telephony.Phone; | 
|  | 52 | import com.android.internal.telephony.PhoneConstants; | 
| Santos Cordon | 499378a | 2015-06-25 18:51:39 -0700 | [diff] [blame] | 53 | import com.android.phone.settings.PhoneAccountSettingsFragment; | 
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 54 | import com.android.phone.settings.SuppServicesUiUtil; | 
| Andrew Lee | bf07f76 | 2015-04-07 19:05:50 -0700 | [diff] [blame] | 55 | import com.android.phone.settings.VoicemailSettingsActivity; | 
| Andrew Lee | 5ed870c | 2014-10-29 11:47:49 -0700 | [diff] [blame] | 56 | import com.android.phone.settings.fdn.FdnSetting; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 57 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 58 | import java.util.List; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 59 |  | 
|  | 60 | /** | 
|  | 61 | * Top level "Call settings" UI; see res/xml/call_feature_setting.xml | 
|  | 62 | * | 
| Andrew Lee | ce8ae2a | 2014-09-10 10:41:48 -0700 | [diff] [blame] | 63 | * This preference screen is the root of the "Call settings" hierarchy available from the Phone | 
|  | 64 | * app; the settings here let you control various features related to phone calls (including | 
|  | 65 | * voicemail settings, the "Respond via SMS" feature, and others.)  It's used only on | 
|  | 66 | * voice-capable phone devices. | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 67 | * | 
|  | 68 | * Note that this activity is part of the package com.android.phone, even | 
|  | 69 | * though you reach it from the "Phone" app (i.e. DialtactsActivity) which | 
|  | 70 | * is from the package com.android.contacts. | 
|  | 71 | * | 
|  | 72 | * For the "Mobile network settings" screen under the main Settings app, | 
|  | 73 | * See {@link MobileNetworkSettings}. | 
|  | 74 | * | 
|  | 75 | * @see com.android.phone.MobileNetworkSettings | 
|  | 76 | */ | 
|  | 77 | public class CallFeaturesSetting extends PreferenceActivity | 
| Andrew Lee | bf07f76 | 2015-04-07 19:05:50 -0700 | [diff] [blame] | 78 | implements Preference.OnPreferenceChangeListener { | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 79 | private static final String LOG_TAG = "CallFeaturesSetting"; | 
|  | 80 | private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2); | 
|  | 81 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 82 | // String keys for preference lookup | 
|  | 83 | // TODO: Naming these "BUTTON_*" is confusing since they're not actually buttons(!) | 
| Andrew Lee | 8d66d81 | 2014-11-24 14:54:02 -0800 | [diff] [blame] | 84 | // TODO: Consider moving these strings to strings.xml, so that they are not duplicated here and | 
|  | 85 | // in the layout files. These strings need to be treated carefully; if the setting is | 
|  | 86 | // persistent, they are used as the key to store shared preferences and the name should not be | 
|  | 87 | // changed unless the settings are also migrated. | 
| Andrew Lee | 97708a4 | 2014-09-25 12:39:07 -0700 | [diff] [blame] | 88 | private static final String VOICEMAIL_SETTING_SCREEN_PREF_KEY = "button_voicemail_category_key"; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 89 | private static final String BUTTON_FDN_KEY   = "button_fdn_key"; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 90 | private static final String BUTTON_RETRY_KEY       = "button_auto_retry_key"; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 91 | private static final String BUTTON_GSM_UMTS_OPTIONS = "button_gsm_more_expand_key"; | 
|  | 92 | private static final String BUTTON_CDMA_OPTIONS = "button_cdma_more_expand_key"; | 
|  | 93 |  | 
| Andrew Lee | ce8ae2a | 2014-09-10 10:41:48 -0700 | [diff] [blame] | 94 | private static final String PHONE_ACCOUNT_SETTINGS_KEY = | 
|  | 95 | "phone_account_settings_preference_screen"; | 
| Andrew Lee | db2fe56 | 2014-09-03 15:40:43 -0700 | [diff] [blame] | 96 |  | 
| Andrew Lee | df14ead | 2014-10-17 14:22:52 -0700 | [diff] [blame] | 97 | private static final String ENABLE_VIDEO_CALLING_KEY = "button_enable_video_calling"; | 
|  | 98 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 99 | private Phone mPhone; | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 100 | private ImsManager mImsMgr; | 
| Andrew Lee | 5ed870c | 2014-10-29 11:47:49 -0700 | [diff] [blame] | 101 | private SubscriptionInfoHelper mSubscriptionInfoHelper; | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 102 | private TelecomManager mTelecomManager; | 
| Andrew Lee | 5ed870c | 2014-10-29 11:47:49 -0700 | [diff] [blame] | 103 |  | 
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 104 | private SwitchPreference mButtonAutoRetry; | 
| Andrew Lee | 97708a4 | 2014-09-25 12:39:07 -0700 | [diff] [blame] | 105 | private PreferenceScreen mVoicemailSettingsScreen; | 
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 106 | private SwitchPreference mEnableVideoCalling; | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 107 | private Preference mButtonWifiCalling; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 108 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 109 | /* | 
|  | 110 | * Click Listeners, handle click based on objects attached to UI. | 
|  | 111 | */ | 
|  | 112 |  | 
|  | 113 | // Click listener for all toggle events | 
|  | 114 | @Override | 
|  | 115 | public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { | 
| Andrew Lee | bf07f76 | 2015-04-07 19:05:50 -0700 | [diff] [blame] | 116 | if (preference == mButtonAutoRetry) { | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 117 | android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(), | 
|  | 118 | android.provider.Settings.Global.CALL_AUTO_RETRY, | 
|  | 119 | mButtonAutoRetry.isChecked() ? 1 : 0); | 
|  | 120 | return true; | 
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 121 | } else if (preference == preferenceScreen.findPreference( | 
|  | 122 | GsmUmtsCallOptions.CALL_FORWARDING_KEY)) { | 
|  | 123 | return doSsOverUtPrecautions(preference); | 
|  | 124 | } else if (preference == preferenceScreen.findPreference( | 
|  | 125 | GsmUmtsCallOptions.CALL_BARRING_KEY)) { | 
|  | 126 | return doSsOverUtPrecautions(preference); | 
|  | 127 | } | 
|  | 128 | return false; | 
|  | 129 | } | 
|  | 130 |  | 
|  | 131 | private boolean doSsOverUtPrecautions(Preference preference) { | 
|  | 132 | PersistableBundle b = null; | 
|  | 133 | if (mSubscriptionInfoHelper.hasSubId()) { | 
|  | 134 | b = PhoneGlobals.getInstance().getCarrierConfigForSubId( | 
|  | 135 | mSubscriptionInfoHelper.getSubId()); | 
|  | 136 | } else { | 
|  | 137 | b = PhoneGlobals.getInstance().getCarrierConfig(); | 
|  | 138 | } | 
|  | 139 |  | 
|  | 140 | String configKey; | 
|  | 141 | if (preference.getKey().equals(GsmUmtsCallOptions.CALL_FORWARDING_KEY)) { | 
|  | 142 | configKey = CarrierConfigManager.KEY_CALL_FORWARDING_OVER_UT_WARNING_BOOL; | 
|  | 143 | } else { | 
|  | 144 | configKey = CarrierConfigManager.KEY_CALL_BARRING_OVER_UT_WARNING_BOOL; | 
|  | 145 | } | 
|  | 146 | if (b != null && b.getBoolean(configKey) | 
|  | 147 | && mPhone != null | 
|  | 148 | && SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone)) { | 
|  | 149 | SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, | 
|  | 150 | preference.getKey()).show(); | 
|  | 151 | return true; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 152 | } | 
|  | 153 | return false; | 
|  | 154 | } | 
|  | 155 |  | 
|  | 156 | /** | 
|  | 157 | * Implemented to support onPreferenceChangeListener to look for preference | 
|  | 158 | * changes. | 
|  | 159 | * | 
|  | 160 | * @param preference is the preference to be changed | 
|  | 161 | * @param objValue should be the value of the selection, NOT its localized | 
|  | 162 | * display value. | 
|  | 163 | */ | 
|  | 164 | @Override | 
|  | 165 | public boolean onPreferenceChange(Preference preference, Object objValue) { | 
| Andrew Lee | 4ddb9bb | 2014-11-05 15:03:20 -0800 | [diff] [blame] | 166 | if (DBG) log("onPreferenceChange: \"" + preference + "\" changed to \"" + objValue + "\""); | 
| Andrew Lee | 2170a97 | 2014-08-13 18:13:01 -0700 | [diff] [blame] | 167 |  | 
| Andrew Lee | bf07f76 | 2015-04-07 19:05:50 -0700 | [diff] [blame] | 168 | if (preference == mEnableVideoCalling) { | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 169 | if (mImsMgr.isEnhanced4gLteModeSettingEnabledByUser()) { | 
| Suresh Koleti | 7963bfe | 2018-03-08 17:57:53 +0530 | [diff] [blame] | 170 | mImsMgr.setVtSetting((boolean) objValue); | 
| Andrew Lee | 312e817 | 2014-10-23 17:01:36 -0700 | [diff] [blame] | 171 | } else { | 
|  | 172 | AlertDialog.Builder builder = new AlertDialog.Builder(this); | 
|  | 173 | DialogInterface.OnClickListener networkSettingsClickListener = | 
|  | 174 | new Dialog.OnClickListener() { | 
|  | 175 | @Override | 
|  | 176 | public void onClick(DialogInterface dialog, int which) { | 
|  | 177 | startActivity(new Intent(mPhone.getContext(), | 
|  | 178 | com.android.phone.MobileNetworkSettings.class)); | 
|  | 179 | } | 
|  | 180 | }; | 
|  | 181 | builder.setMessage(getResources().getString( | 
|  | 182 | R.string.enable_video_calling_dialog_msg)) | 
|  | 183 | .setNeutralButton(getResources().getString( | 
|  | 184 | R.string.enable_video_calling_dialog_settings), | 
|  | 185 | networkSettingsClickListener) | 
|  | 186 | .setPositiveButton(android.R.string.ok, null) | 
|  | 187 | .show(); | 
|  | 188 | return false; | 
|  | 189 | } | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 190 | } | 
| Andrew Lee | 4ddb9bb | 2014-11-05 15:03:20 -0800 | [diff] [blame] | 191 |  | 
|  | 192 | // Always let the preference setting proceed. | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 193 | return true; | 
|  | 194 | } | 
|  | 195 |  | 
|  | 196 | @Override | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 197 | protected void onCreate(Bundle icicle) { | 
|  | 198 | super.onCreate(icicle); | 
| Andrew Lee | 4ddb9bb | 2014-11-05 15:03:20 -0800 | [diff] [blame] | 199 | if (DBG) log("onCreate: Intent is " + getIntent()); | 
|  | 200 |  | 
| Xiaohui Chen | 9dc2bea | 2015-10-14 11:42:04 -0700 | [diff] [blame] | 201 | // Make sure we are running as an admin user. | 
|  | 202 | if (!UserManager.get(this).isAdminUser()) { | 
|  | 203 | Toast.makeText(this, R.string.call_settings_admin_user_only, | 
| Jay Shrauner | c268473 | 2014-11-12 12:10:37 -0800 | [diff] [blame] | 204 | Toast.LENGTH_SHORT).show(); | 
|  | 205 | finish(); | 
|  | 206 | return; | 
|  | 207 | } | 
|  | 208 |  | 
| Andrew Lee | dd4f6df | 2014-12-09 19:13:51 -0800 | [diff] [blame] | 209 | mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent()); | 
| Andrew Lee | 5ed870c | 2014-10-29 11:47:49 -0700 | [diff] [blame] | 210 | mSubscriptionInfoHelper.setActionBarTitle( | 
|  | 211 | getActionBar(), getResources(), R.string.call_settings_with_label); | 
| Andrew Lee | 1479dd1 | 2014-11-06 23:06:32 -0800 | [diff] [blame] | 212 | mPhone = mSubscriptionInfoHelper.getPhone(); | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 213 | mTelecomManager = TelecomManager.from(this); | 
| Tyler Gunn | baee295 | 2014-09-10 16:01:02 -0700 | [diff] [blame] | 214 | } | 
|  | 215 |  | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 216 | private void updateImsManager(Phone phone) { | 
|  | 217 | log("updateImsManager :: phone.getContext()=" + phone.getContext() | 
|  | 218 | + " phone.getPhoneId()=" + phone.getPhoneId()); | 
|  | 219 | mImsMgr = ImsManager.getInstance(phone.getContext(), phone.getPhoneId()); | 
|  | 220 | if (mImsMgr == null) { | 
|  | 221 | log("updateImsManager :: Could not get ImsManager instance!"); | 
|  | 222 | } else { | 
|  | 223 | log("updateImsManager :: mImsMgr=" + mImsMgr); | 
|  | 224 | } | 
|  | 225 | } | 
|  | 226 |  | 
| Omata Shou | 81a0c8a | 2018-07-19 18:57:02 +0900 | [diff] [blame] | 227 | private void listenPhoneState(boolean listen) { | 
|  | 228 | TelephonyManager telephonyManager = | 
|  | 229 | (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); | 
|  | 230 | telephonyManager.listen(mPhoneStateListener, listen | 
|  | 231 | ? PhoneStateListener.LISTEN_CALL_STATE : PhoneStateListener.LISTEN_NONE); | 
|  | 232 | } | 
|  | 233 |  | 
| pkanwar | b4aef11 | 2016-07-17 15:39:30 -0700 | [diff] [blame] | 234 | private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { | 
|  | 235 | @Override | 
|  | 236 | public void onCallStateChanged(int state, String incomingNumber) { | 
|  | 237 | if (DBG) log("PhoneStateListener onCallStateChanged: state is " + state); | 
| Omata Shou | 81a0c8a | 2018-07-19 18:57:02 +0900 | [diff] [blame] | 238 | // Use TelecomManager#getCallStete instead of 'state' parameter because it needs | 
|  | 239 | // to check the current state of all phone calls. | 
|  | 240 | boolean isCallStateIdle = | 
|  | 241 | mTelecomManager.getCallState() == TelephonyManager.CALL_STATE_IDLE; | 
| pkanwar | b4aef11 | 2016-07-17 15:39:30 -0700 | [diff] [blame] | 242 | if (mEnableVideoCalling != null) { | 
| Suresh Koleti | 7963bfe | 2018-03-08 17:57:53 +0530 | [diff] [blame] | 243 | mEnableVideoCalling.setEnabled(isCallStateIdle); | 
| Omata Shou | 81a0c8a | 2018-07-19 18:57:02 +0900 | [diff] [blame] | 244 | } | 
|  | 245 | if (mButtonWifiCalling != null) { | 
| Suresh Koleti | 7963bfe | 2018-03-08 17:57:53 +0530 | [diff] [blame] | 246 | mButtonWifiCalling.setEnabled(isCallStateIdle); | 
| pkanwar | b4aef11 | 2016-07-17 15:39:30 -0700 | [diff] [blame] | 247 | } | 
|  | 248 | } | 
|  | 249 | }; | 
|  | 250 |  | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 251 | private final ProvisioningManager.Callback mProvisioningCallback = | 
|  | 252 | new ProvisioningManager.Callback() { | 
|  | 253 | @Override | 
|  | 254 | public void onProvisioningIntChanged(int item, int value) { | 
|  | 255 | if (item == ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED | 
|  | 256 | || item == ImsConfig.ConfigConstants.VLT_SETTING_ENABLED | 
|  | 257 | || item == ImsConfig.ConfigConstants.LVC_SETTING_ENABLED) { | 
|  | 258 | updateVtWfc(); | 
|  | 259 | } | 
|  | 260 | } | 
|  | 261 | }; | 
|  | 262 |  | 
| pkanwar | b4aef11 | 2016-07-17 15:39:30 -0700 | [diff] [blame] | 263 | @Override | 
|  | 264 | protected void onPause() { | 
| pkanwar | 0a66312 | 2016-07-19 12:26:44 -0700 | [diff] [blame] | 265 | super.onPause(); | 
| Omata Shou | 81a0c8a | 2018-07-19 18:57:02 +0900 | [diff] [blame] | 266 | listenPhoneState(false); | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 267 |  | 
|  | 268 | // Remove callback for provisioning changes. | 
|  | 269 | try { | 
|  | 270 | if (mImsMgr != null) { | 
|  | 271 | mImsMgr.getConfigInterface().removeConfigCallback( | 
|  | 272 | mProvisioningCallback.getBinder()); | 
|  | 273 | } | 
|  | 274 | } catch (ImsException e) { | 
|  | 275 | Log.w(LOG_TAG, "onPause: Unable to remove callback for provisioning changes"); | 
|  | 276 | } | 
| pkanwar | b4aef11 | 2016-07-17 15:39:30 -0700 | [diff] [blame] | 277 | } | 
|  | 278 |  | 
| Tyler Gunn | baee295 | 2014-09-10 16:01:02 -0700 | [diff] [blame] | 279 | @Override | 
|  | 280 | protected void onResume() { | 
|  | 281 | super.onResume(); | 
| Tyler Gunn | baee295 | 2014-09-10 16:01:02 -0700 | [diff] [blame] | 282 |  | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 283 | updateImsManager(mPhone); | 
| Omata Shou | 81a0c8a | 2018-07-19 18:57:02 +0900 | [diff] [blame] | 284 | listenPhoneState(true); | 
| Tyler Gunn | baee295 | 2014-09-10 16:01:02 -0700 | [diff] [blame] | 285 | PreferenceScreen preferenceScreen = getPreferenceScreen(); | 
|  | 286 | if (preferenceScreen != null) { | 
|  | 287 | preferenceScreen.removeAll(); | 
|  | 288 | } | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 289 |  | 
|  | 290 | addPreferencesFromResource(R.xml.call_feature_setting); | 
| Andrew Lee | 5ed870c | 2014-10-29 11:47:49 -0700 | [diff] [blame] | 291 |  | 
| Suresh Koleti | 7963bfe | 2018-03-08 17:57:53 +0530 | [diff] [blame] | 292 | TelephonyManager telephonyManager = getSystemService(TelephonyManager.class) | 
|  | 293 | .createForSubscriptionId(mPhone.getSubId()); | 
| Andrew Lee | 6fee2cb | 2014-12-09 16:42:18 -0800 | [diff] [blame] | 294 |  | 
| Yuling Liu | 7dc96de | 2018-06-11 14:14:23 +0800 | [diff] [blame] | 295 | // Note: The PhoneAccountSettingsActivity accessible via the | 
|  | 296 | // android.telecom.action.CHANGE_PHONE_ACCOUNTS intent is accessible directly from | 
|  | 297 | // the AOSP Dialer settings page on multi-sim devices. | 
|  | 298 | // Where a device does NOT make the PhoneAccountSettingsActivity directly accessible from | 
|  | 299 | // its Dialer app, this check must be modified in the device's AOSP branch to ensure that | 
|  | 300 | // the PhoneAccountSettingsActivity is always accessible. | 
|  | 301 | if (telephonyManager.isMultiSimEnabled()) { | 
|  | 302 | Preference phoneAccountSettingsPreference = findPreference(PHONE_ACCOUNT_SETTINGS_KEY); | 
|  | 303 | getPreferenceScreen().removePreference(phoneAccountSettingsPreference); | 
|  | 304 | } | 
|  | 305 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 306 | PreferenceScreen prefSet = getPreferenceScreen(); | 
| Andrew Lee | 2c02789 | 2014-10-29 11:29:54 -0700 | [diff] [blame] | 307 | mVoicemailSettingsScreen = | 
|  | 308 | (PreferenceScreen) findPreference(VOICEMAIL_SETTING_SCREEN_PREF_KEY); | 
| Andrew Lee | bf07f76 | 2015-04-07 19:05:50 -0700 | [diff] [blame] | 309 | mVoicemailSettingsScreen.setIntent(mSubscriptionInfoHelper.getIntent( | 
|  | 310 | VoicemailSettingsActivity.class)); | 
| Andrew Lee | 8d66d81 | 2014-11-24 14:54:02 -0800 | [diff] [blame] | 311 |  | 
| Ta-wei Yen | b8e770c | 2017-01-24 17:49:58 -0800 | [diff] [blame] | 312 | maybeHideVoicemailSettings(); | 
|  | 313 |  | 
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 314 | mButtonAutoRetry = (SwitchPreference) findPreference(BUTTON_RETRY_KEY); | 
| Andrew Lee | 64e5c9d | 2014-11-26 12:00:10 -0800 | [diff] [blame] | 315 |  | 
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 316 | mEnableVideoCalling = (SwitchPreference) findPreference(ENABLE_VIDEO_CALLING_KEY); | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 317 | mButtonWifiCalling = findPreference(getResources().getString( | 
|  | 318 | R.string.wifi_calling_settings_key)); | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 319 |  | 
| Jonathan Basseri | c31f1f3 | 2015-05-12 10:13:03 -0700 | [diff] [blame] | 320 | PersistableBundle carrierConfig = | 
|  | 321 | PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId()); | 
| Jonathan Basseri | 4b40ff4 | 2015-04-30 21:54:10 -0700 | [diff] [blame] | 322 |  | 
| Jonathan Basseri | 9504c6b | 2015-06-04 14:23:32 -0700 | [diff] [blame] | 323 | if (carrierConfig.getBoolean(CarrierConfigManager.KEY_AUTO_RETRY_ENABLED_BOOL)) { | 
| Andrew Lee | 64a7d79 | 2014-10-15 17:38:38 -0700 | [diff] [blame] | 324 | mButtonAutoRetry.setOnPreferenceChangeListener(this); | 
|  | 325 | int autoretry = Settings.Global.getInt( | 
|  | 326 | getContentResolver(), Settings.Global.CALL_AUTO_RETRY, 0); | 
|  | 327 | mButtonAutoRetry.setChecked(autoretry != 0); | 
|  | 328 | } else { | 
|  | 329 | prefSet.removePreference(mButtonAutoRetry); | 
|  | 330 | mButtonAutoRetry = null; | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 331 | } | 
|  | 332 |  | 
| Sanket Padawe | e09a6f6 | 2015-03-05 11:59:39 -0800 | [diff] [blame] | 333 | Preference cdmaOptions = prefSet.findPreference(BUTTON_CDMA_OPTIONS); | 
|  | 334 | Preference gsmOptions = prefSet.findPreference(BUTTON_GSM_UMTS_OPTIONS); | 
| Wileen Chiu | 98664e5 | 2015-07-29 14:10:01 +0530 | [diff] [blame] | 335 | Preference fdnButton = prefSet.findPreference(BUTTON_FDN_KEY); | 
|  | 336 | fdnButton.setIntent(mSubscriptionInfoHelper.getIntent(FdnSetting.class)); | 
| Jonathan Basseri | 9504c6b | 2015-06-04 14:23:32 -0700 | [diff] [blame] | 337 | if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) { | 
| Sanket Padawe | e09a6f6 | 2015-03-05 11:59:39 -0800 | [diff] [blame] | 338 | cdmaOptions.setIntent(mSubscriptionInfoHelper.getIntent(CdmaCallOptions.class)); | 
|  | 339 | gsmOptions.setIntent(mSubscriptionInfoHelper.getIntent(GsmUmtsCallOptions.class)); | 
|  | 340 | } else { | 
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 341 | prefSet.removePreference(cdmaOptions); | 
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 342 | prefSet.removePreference(gsmOptions); | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 343 |  | 
|  | 344 | int phoneType = mPhone.getPhoneType(); | 
| Junda Liu | a9ba9d4 | 2015-06-01 01:26:52 -0700 | [diff] [blame] | 345 | if (carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) { | 
| Andrew Lee | 5ed870c | 2014-10-29 11:47:49 -0700 | [diff] [blame] | 346 | prefSet.removePreference(fdnButton); | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 347 | } else { | 
| Junda Liu | a09d696 | 2014-11-12 13:39:02 -0800 | [diff] [blame] | 348 | if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) { | 
|  | 349 | prefSet.removePreference(fdnButton); | 
|  | 350 |  | 
| Jonathan Basseri | 9504c6b | 2015-06-04 14:23:32 -0700 | [diff] [blame] | 351 | if (!carrierConfig.getBoolean( | 
| Jonathan Basseri | 38c5855 | 2015-06-09 15:14:06 -0700 | [diff] [blame] | 352 | CarrierConfigManager.KEY_VOICE_PRIVACY_DISABLE_UI_BOOL)) { | 
| Junda Liu | a09d696 | 2014-11-12 13:39:02 -0800 | [diff] [blame] | 353 | addPreferencesFromResource(R.xml.cdma_call_privacy); | 
|  | 354 | } | 
|  | 355 | } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) { | 
| Xiangyu/Malcolm Chen | 2f810e8 | 2018-03-29 18:56:16 +0000 | [diff] [blame] | 356 | if (mPhone.getIccCard() == null || !mPhone.getIccCard().getIccFdnAvailable()) { | 
|  | 357 | prefSet.removePreference(fdnButton); | 
|  | 358 | } | 
| Jonathan Basseri | 9504c6b | 2015-06-04 14:23:32 -0700 | [diff] [blame] | 359 | if (carrierConfig.getBoolean( | 
|  | 360 | CarrierConfigManager.KEY_ADDITIONAL_CALL_SETTING_BOOL)) { | 
| Junda Liu | a09d696 | 2014-11-12 13:39:02 -0800 | [diff] [blame] | 361 | addPreferencesFromResource(R.xml.gsm_umts_call_options); | 
| Sanket Padawe | e09a6f6 | 2015-03-05 11:59:39 -0800 | [diff] [blame] | 362 | GsmUmtsCallOptions.init(prefSet, mSubscriptionInfoHelper); | 
| Junda Liu | a09d696 | 2014-11-12 13:39:02 -0800 | [diff] [blame] | 363 | } | 
|  | 364 | } else { | 
|  | 365 | throw new IllegalStateException("Unexpected phone type: " + phoneType); | 
|  | 366 | } | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 367 | } | 
|  | 368 | } | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 369 | updateVtWfc(); | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 370 |  | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 371 | // Register callback for provisioning changes. | 
|  | 372 | try { | 
|  | 373 | if (mImsMgr != null) { | 
|  | 374 | mImsMgr.getConfigInterface().addConfigCallback(mProvisioningCallback); | 
|  | 375 | } | 
|  | 376 | } catch (ImsException e) { | 
|  | 377 | Log.w(LOG_TAG, "onResume: Unable to register callback for provisioning changes."); | 
|  | 378 | } | 
|  | 379 | } | 
|  | 380 |  | 
|  | 381 | private void updateVtWfc() { | 
|  | 382 | PreferenceScreen prefSet = getPreferenceScreen(); | 
|  | 383 | TelephonyManager telephonyManager = getSystemService(TelephonyManager.class) | 
|  | 384 | .createForSubscriptionId(mPhone.getSubId()); | 
|  | 385 | PersistableBundle carrierConfig = | 
|  | 386 | PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId()); | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 387 | if (mImsMgr.isVtEnabledByPlatform() && mImsMgr.isVtProvisionedOnDevice() | 
|  | 388 | && (carrierConfig.getBoolean( | 
| Jack Yu | b762832 | 2016-11-28 11:10:18 -0800 | [diff] [blame] | 389 | CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS) | 
| Jack Yu | d79fba2 | 2018-12-13 11:51:28 -0800 | [diff] [blame] | 390 | || mPhone.getDataEnabledSettings().isDataEnabled())) { | 
| Andrew Lee | 312e817 | 2014-10-23 17:01:36 -0700 | [diff] [blame] | 391 | boolean currentValue = | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 392 | mImsMgr.isEnhanced4gLteModeSettingEnabledByUser() | 
| Suresh Koleti | 7963bfe | 2018-03-08 17:57:53 +0530 | [diff] [blame] | 393 | ? mImsMgr.isVtEnabledByUser() : false; | 
| Andrew Lee | 312e817 | 2014-10-23 17:01:36 -0700 | [diff] [blame] | 394 | mEnableVideoCalling.setChecked(currentValue); | 
| Andrew Lee | 77527ac | 2014-10-21 16:57:39 -0700 | [diff] [blame] | 395 | mEnableVideoCalling.setOnPreferenceChangeListener(this); | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 396 | prefSet.addPreference(mEnableVideoCalling); | 
| Andrew Lee | 77527ac | 2014-10-21 16:57:39 -0700 | [diff] [blame] | 397 | } else { | 
|  | 398 | prefSet.removePreference(mEnableVideoCalling); | 
|  | 399 | } | 
| Etan Cohen | a51d4ef | 2014-12-15 10:44:42 -0800 | [diff] [blame] | 400 |  | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 401 | final PhoneAccountHandle simCallManager = mTelecomManager.getSimCallManager(); | 
| Santos Cordon | 499378a | 2015-06-25 18:51:39 -0700 | [diff] [blame] | 402 | if (simCallManager != null) { | 
|  | 403 | Intent intent = PhoneAccountSettingsFragment.buildPhoneAccountConfigureIntent( | 
|  | 404 | this, simCallManager); | 
|  | 405 | if (intent != null) { | 
| Abhishek Gupta | a134adb | 2016-04-14 18:57:31 -0700 | [diff] [blame] | 406 | PackageManager pm = mPhone.getContext().getPackageManager(); | 
|  | 407 | List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0); | 
|  | 408 | if (!resolutions.isEmpty()) { | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 409 | mButtonWifiCalling.setTitle(resolutions.get(0).loadLabel(pm)); | 
|  | 410 | mButtonWifiCalling.setSummary(null); | 
|  | 411 | mButtonWifiCalling.setIntent(intent); | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 412 | prefSet.addPreference(mButtonWifiCalling); | 
| Abhishek Gupta | a134adb | 2016-04-14 18:57:31 -0700 | [diff] [blame] | 413 | } else { | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 414 | prefSet.removePreference(mButtonWifiCalling); | 
| Abhishek Gupta | a134adb | 2016-04-14 18:57:31 -0700 | [diff] [blame] | 415 | } | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 416 | } else { | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 417 | prefSet.removePreference(mButtonWifiCalling); | 
| Yorke Lee | 0b8d225 | 2015-06-10 16:31:20 -0700 | [diff] [blame] | 418 | } | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 419 | } else if (!mImsMgr.isWfcEnabledByPlatform() || !mImsMgr.isWfcProvisionedOnDevice()) { | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 420 | prefSet.removePreference(mButtonWifiCalling); | 
| Andrew Lee | effef9c | 2015-02-19 16:02:37 -0800 | [diff] [blame] | 421 | } else { | 
| Wenting Xiong | 6fec455 | 2018-08-04 17:56:50 +0800 | [diff] [blame] | 422 | String title = SubscriptionManager.getResourcesForSubId(mPhone.getContext(), | 
|  | 423 | mPhone.getSubId()).getString(R.string.wifi_calling); | 
|  | 424 | mButtonWifiCalling.setTitle(title); | 
|  | 425 |  | 
| Pavel Zhamaitsiak | ecae65a | 2015-03-23 14:45:34 -0700 | [diff] [blame] | 426 | int resId = com.android.internal.R.string.wifi_calling_off_summary; | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 427 | if (mImsMgr.isWfcEnabledByUser()) { | 
| Youhan Wang | 269606e | 2017-01-19 15:25:55 -0800 | [diff] [blame] | 428 | boolean isRoaming = telephonyManager.isNetworkRoaming(); | 
| Malcolm Chen | 995721f | 2017-12-12 18:19:27 -0800 | [diff] [blame] | 429 | int wfcMode = mImsMgr.getWfcMode(isRoaming); | 
| Andrew Lee | effef9c | 2015-02-19 16:02:37 -0800 | [diff] [blame] | 430 | switch (wfcMode) { | 
|  | 431 | case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY: | 
| Pavel Zhamaitsiak | ecae65a | 2015-03-23 14:45:34 -0700 | [diff] [blame] | 432 | resId = com.android.internal.R.string.wfc_mode_wifi_only_summary; | 
| Andrew Lee | effef9c | 2015-02-19 16:02:37 -0800 | [diff] [blame] | 433 | break; | 
|  | 434 | case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED: | 
| Pavel Zhamaitsiak | ecae65a | 2015-03-23 14:45:34 -0700 | [diff] [blame] | 435 | resId = com.android.internal.R.string.wfc_mode_cellular_preferred_summary; | 
| Andrew Lee | effef9c | 2015-02-19 16:02:37 -0800 | [diff] [blame] | 436 | break; | 
|  | 437 | case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED: | 
| Pavel Zhamaitsiak | ecae65a | 2015-03-23 14:45:34 -0700 | [diff] [blame] | 438 | resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary; | 
| Andrew Lee | effef9c | 2015-02-19 16:02:37 -0800 | [diff] [blame] | 439 | break; | 
|  | 440 | default: | 
|  | 441 | if (DBG) log("Unexpected WFC mode value: " + wfcMode); | 
|  | 442 | } | 
|  | 443 | } | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 444 | mButtonWifiCalling.setSummary(resId); | 
| Torbjorn Eklund | 82d5d74 | 2018-11-29 15:32:13 +0100 | [diff] [blame] | 445 | prefSet.addPreference(mButtonWifiCalling); | 
| Andrew Lee | b97fad8 | 2015-01-27 15:31:39 -0800 | [diff] [blame] | 446 | } | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 447 |  | 
|  | 448 | try { | 
| Brad Ebinger | a12246d | 2018-01-16 09:39:35 -0800 | [diff] [blame] | 449 | if (mImsMgr.getImsServiceState() != ImsFeature.STATE_READY) { | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 450 | log("Feature state not ready so remove vt and wfc settings for " | 
|  | 451 | + " phone =" + mPhone.getPhoneId()); | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 452 | prefSet.removePreference(mButtonWifiCalling); | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 453 | prefSet.removePreference(mEnableVideoCalling); | 
|  | 454 | } | 
|  | 455 | } catch (ImsException ex) { | 
|  | 456 | log("Exception when trying to get ImsServiceStatus: " + ex); | 
| Malcolm Chen | 4042eb4 | 2018-02-26 15:58:44 -0800 | [diff] [blame] | 457 | prefSet.removePreference(mButtonWifiCalling); | 
| Benergy Meenan Ravuri | 57f1899 | 2017-07-20 18:03:33 +0530 | [diff] [blame] | 458 | prefSet.removePreference(mEnableVideoCalling); | 
|  | 459 | } | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 460 | } | 
|  | 461 |  | 
| Ta-wei Yen | b8e770c | 2017-01-24 17:49:58 -0800 | [diff] [blame] | 462 | /** | 
|  | 463 | * Hides the top level voicemail settings entry point if the default dialer contains a | 
|  | 464 | * particular manifest metadata key. This is required when the default dialer wants to display | 
|  | 465 | * its own version of voicemail settings. | 
|  | 466 | */ | 
|  | 467 | private void maybeHideVoicemailSettings() { | 
|  | 468 | String defaultDialer = getSystemService(TelecomManager.class).getDefaultDialerPackage(); | 
|  | 469 | if (defaultDialer == null) { | 
|  | 470 | return; | 
|  | 471 | } | 
|  | 472 | try { | 
|  | 473 | Bundle metadata = getPackageManager() | 
|  | 474 | .getApplicationInfo(defaultDialer, PackageManager.GET_META_DATA).metaData; | 
| Tyler Gunn | 8b6aa68 | 2017-04-06 16:01:59 -0700 | [diff] [blame] | 475 | if (metadata == null) { | 
|  | 476 | return; | 
|  | 477 | } | 
| Ta-wei Yen | b8e770c | 2017-01-24 17:49:58 -0800 | [diff] [blame] | 478 | if (!metadata | 
|  | 479 | .getBoolean(TelephonyManager.METADATA_HIDE_VOICEMAIL_SETTINGS_MENU, false)) { | 
|  | 480 | if (DBG) { | 
|  | 481 | log("maybeHideVoicemailSettings(): not disabled by default dialer"); | 
|  | 482 | } | 
|  | 483 | return; | 
|  | 484 | } | 
|  | 485 | getPreferenceScreen().removePreference(mVoicemailSettingsScreen); | 
|  | 486 | if (DBG) { | 
|  | 487 | log("maybeHideVoicemailSettings(): disabled by default dialer"); | 
|  | 488 | } | 
|  | 489 | } catch (NameNotFoundException e) { | 
|  | 490 | // do nothing | 
|  | 491 | if (DBG) { | 
|  | 492 | log("maybeHideVoicemailSettings(): not controlled by default dialer"); | 
|  | 493 | } | 
|  | 494 | } | 
|  | 495 | } | 
|  | 496 |  | 
| Andrew Lee | 785ca2a | 2014-12-18 12:46:41 -0800 | [diff] [blame] | 497 | @Override | 
|  | 498 | protected void onNewIntent(Intent newIntent) { | 
|  | 499 | setIntent(newIntent); | 
|  | 500 |  | 
|  | 501 | mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent()); | 
|  | 502 | mSubscriptionInfoHelper.setActionBarTitle( | 
|  | 503 | getActionBar(), getResources(), R.string.call_settings_with_label); | 
|  | 504 | mPhone = mSubscriptionInfoHelper.getPhone(); | 
|  | 505 | } | 
|  | 506 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 507 | private static void log(String msg) { | 
|  | 508 | Log.d(LOG_TAG, msg); | 
|  | 509 | } | 
|  | 510 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 511 | @Override | 
|  | 512 | public boolean onOptionsItemSelected(MenuItem item) { | 
|  | 513 | final int itemId = item.getItemId(); | 
|  | 514 | if (itemId == android.R.id.home) {  // See ActionBar#setDisplayHomeAsUpEnabled() | 
| Yorke Lee | f2d0cac | 2013-09-09 19:42:56 -0700 | [diff] [blame] | 515 | onBackPressed(); | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 516 | return true; | 
|  | 517 | } | 
|  | 518 | return super.onOptionsItemSelected(item); | 
|  | 519 | } | 
| Andrew Lee | 8d66d81 | 2014-11-24 14:54:02 -0800 | [diff] [blame] | 520 |  | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 521 | /** | 
|  | 522 | * Finish current Activity and go up to the top level Settings ({@link CallFeaturesSetting}). | 
|  | 523 | * This is useful for implementing "HomeAsUp" capability for second-level Settings. | 
|  | 524 | */ | 
| Andrew Lee | 5efb112 | 2014-12-05 04:20:42 -0800 | [diff] [blame] | 525 | public static void goUpToTopLevelSetting( | 
| Andrew Lee | dd4f6df | 2014-12-09 19:13:51 -0800 | [diff] [blame] | 526 | Activity activity, SubscriptionInfoHelper subscriptionInfoHelper) { | 
|  | 527 | Intent intent = subscriptionInfoHelper.getIntent(CallFeaturesSetting.class); | 
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 528 | intent.setAction(Intent.ACTION_MAIN); | 
|  | 529 | intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); | 
|  | 530 | activity.startActivity(intent); | 
|  | 531 | activity.finish(); | 
|  | 532 | } | 
|  | 533 | } |