Merge "Multi-sim support for Ims related settings." am: 27d915cf20
am: ff6f29b959
Change-Id: I21e221c2134184aae2c5d936cd1840fe1ba68f7a
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 493fd11..4f449cf 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -262,17 +262,11 @@
public void onCallStateChanged(int state, String incomingNumber) {
if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
- Activity activity = getActivity();
- if (activity == null) {
- return;
- }
-
int subId = mPhone != null
? mPhone.getSubId() : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
PersistableBundle carrierConfig =
PhoneGlobals.getInstance().getCarrierConfigForSubId(subId);
- boolean enabled = is4gLtePrefEnabled(activity.getApplicationContext(),
- carrierConfig);
+ boolean enabled = is4gLtePrefEnabled(carrierConfig);
Preference pref = getPreferenceScreen().findPreference(BUTTON_4G_LTE_KEY);
if (pref != null) pref.setEnabled(enabled && hasActiveSubscriptions());
@@ -566,8 +560,11 @@
final SubscriptionInfo sir = mSubscriptionManager
.getActiveSubscriptionInfoForSimSlotIndex(slotId);
if (sir != null) {
- mPhone = PhoneFactory.getPhone(
- SubscriptionManager.getPhoneId(sir.getSubscriptionId()));
+ int phoneId = SubscriptionManager.getPhoneId(sir.getSubscriptionId());
+ if (SubscriptionManager.isValidPhoneId(phoneId)) {
+ mPhone = PhoneFactory.getPhone(phoneId);
+ mImsMgr = ImsManager.getInstance(getContext(), phoneId);
+ }
}
if (mPhone == null) {
// Do the best we can
@@ -724,11 +721,6 @@
return;
}
- final Activity activity = getActivity();
- if (activity == null || activity.isDestroyed()) {
- Log.e(LOG_TAG, "onResume:- with no valid activity.");
- return;
- }
// upon resumption from the sub-activity, make sure we re-enable the
// preferences.
getPreferenceScreen().setEnabled(true);
@@ -743,15 +735,10 @@
updatePreferredNetworkUIFromDb();
}
- if (ImsManager.isVolteEnabledByPlatform(activity)
- && ImsManager.isVolteProvisionedOnDevice(activity)) {
- mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
- }
+ mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
// NOTE: Buttons will be enabled/disabled in mPhoneStateListener
- boolean enh4glteMode = ImsManager.isEnhanced4gLteModeSettingEnabledByUser(activity)
- && ImsManager.isNonTtyOrTtyOnVolteEnabled(activity);
- mButton4glte.setChecked(enh4glteMode);
+ updateEnhanced4gLteState();
// Video calling and WiFi calling state might have changed.
updateCallingCategory();
@@ -998,21 +985,7 @@
android.util.Log.d(LOG_TAG, "keep ltePref");
}
- Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY);
- try {
- if ((mImsMgr.getImsServiceStatus() != ImsFeature.STATE_READY)
- || hideEnhanced4gLteSettings(getActivity(), carrierConfig)) {
- if (pref != null) {
- prefSet.removePreference(pref);
- }
- }
- } catch (ImsException ex) {
- log("Exception when trying to get ImsServiceStatus: " + ex);
- if (pref != null) {
- prefSet.removePreference(pref);
- }
- }
-
+ updateEnhanced4gLteState();
updateCallingCategory();
// Enable link to CMAS app settings depending on the value in config.xml.
@@ -1058,8 +1031,7 @@
* but you do need to remember that this all needs to work when subscriptions
* change dynamically such as when hot swapping sims.
*/
- boolean canChange4glte = is4gLtePrefEnabled(activity.getApplicationContext(),
- carrierConfig);
+ boolean canChange4glte = is4gLtePrefEnabled(carrierConfig);
boolean useVariant4glteTitle = carrierConfig.getBoolean(
CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_BOOL);
int enhanced4glteModeTitleId = useVariant4glteTitle ?
@@ -1072,7 +1044,6 @@
mButton4glte.setEnabled(hasActiveSubscriptions && canChange4glte);
mLteDataServicePref.setEnabled(hasActiveSubscriptions);
Preference ps;
- PreferenceScreen root = getPreferenceScreen();
ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
if (ps != null) {
ps.setEnabled(hasActiveSubscriptions);
@@ -1229,11 +1200,9 @@
.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
}
} else if (preference == mButton4glte) {
- SwitchPreference enhanced4gModePref = (SwitchPreference) preference;
- boolean enhanced4gMode = !enhanced4gModePref.isChecked();
- enhanced4gModePref.setChecked(enhanced4gMode);
- ImsManager.setEnhanced4gLteModeSetting(getActivity(),
- enhanced4gModePref.isChecked());
+ boolean enhanced4gMode = !mButton4glte.isChecked();
+ mButton4glte.setChecked(enhanced4gMode);
+ mImsMgr.setEnhanced4gLteModeSetting(mButton4glte.isChecked());
} else if (preference == mButtonDataRoam) {
if (DBG) log("onPreferenceTreeClick: preference == mButtonDataRoam.");
@@ -1266,7 +1235,7 @@
// If mButton4glte is not checked, mVideoCallingPref should be disabled.
// So it only makes sense to call phoneMgr.enableVideoCalling if it's checked.
if (mButton4glte.isChecked()) {
- PhoneGlobals.getInstance().phoneMgr.enableVideoCalling((boolean) objValue);
+ mImsMgr.setVtSetting((boolean) objValue);
return true;
} else {
loge("mVideoCallingPref should be disabled if mButton4glte is not checked.");
@@ -1285,9 +1254,10 @@
return true;
}
- private boolean is4gLtePrefEnabled(Context context, PersistableBundle carrierConfig) {
+ private boolean is4gLtePrefEnabled(PersistableBundle carrierConfig) {
return (mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE)
- && ImsManager.isNonTtyOrTtyOnVolteEnabled(context)
+ && mImsMgr != null
+ && mImsMgr.isNonTtyOrTtyOnVolteEnabled()
&& carrierConfig.getBoolean(
CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
}
@@ -1644,14 +1614,15 @@
} else {
removePref = true;
}
- } else if (!ImsManager.isWfcEnabledByPlatform(mPhone.getContext())
- || !ImsManager.isWfcProvisionedOnDevice(mPhone.getContext())) {
+ } else if (mImsMgr == null
+ || !mImsMgr.isWfcEnabledByPlatform()
+ || !mImsMgr.isWfcProvisionedOnDevice()) {
removePref = true;
} else {
int resId = com.android.internal.R.string.wifi_calling_off_summary;
- if (ImsManager.isWfcEnabledByUser(mPhone.getContext())) {
+ if (mImsMgr.isWfcEnabledByUser()) {
boolean isRoaming = mTelephonyManager.isNetworkRoaming();
- int wfcMode = ImsManager.getWfcMode(mPhone.getContext(), isRoaming);
+ int wfcMode = mImsMgr.getWfcMode(isRoaming);
switch (wfcMode) {
case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
@@ -1677,6 +1648,34 @@
}
}
+ private void updateEnhanced4gLteState() {
+ if (mButton4glte == null) {
+ return;
+ }
+
+ PersistableBundle carrierConfig = PhoneGlobals.getInstance()
+ .getCarrierConfigForSubId(mPhone.getSubId());
+
+ try {
+ if ((mImsMgr == null
+ || mImsMgr.getImsServiceStatus() != ImsFeature.STATE_READY
+ || !mImsMgr.isVolteEnabledByPlatform()
+ || !mImsMgr.isVolteProvisionedOnDevice()
+ || carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL))) {
+ getPreferenceScreen().removePreference(mButton4glte);
+ } else {
+ // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
+ boolean enh4glteMode = mImsMgr.isEnhanced4gLteModeSettingEnabledByUser()
+ && mImsMgr.isNonTtyOrTtyOnVolteEnabled();
+ mButton4glte.setChecked(enh4glteMode);
+ }
+ } catch (ImsException ex) {
+ log("Exception when trying to get ImsServiceStatus: " + ex);
+ getPreferenceScreen().removePreference(mButton4glte);
+ }
+ }
+
private void updateVideoCallState() {
if (mVideoCallingPref == null || mCallingCategory == null) {
return;
@@ -1685,30 +1684,23 @@
PersistableBundle carrierConfig = PhoneGlobals.getInstance()
.getCarrierConfigForSubId(mPhone.getSubId());
- boolean removePref = false;
-
- if (ImsManager.isVtEnabledByPlatform(mPhone.getContext())
- && ImsManager.isVtProvisionedOnDevice(mPhone.getContext())
+ if (mImsMgr != null
+ && mImsMgr.isVtEnabledByPlatform()
+ && mImsMgr.isVtProvisionedOnDevice()
&& (carrierConfig.getBoolean(
- CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
- || mPhone.mDcTracker.isDataEnabled())) {
- boolean enhanced4gLteEnabled = mButton4glte.isChecked();
- mVideoCallingPref.setEnabled(enhanced4gLteEnabled);
- boolean currentValue = enhanced4gLteEnabled
- ? PhoneGlobals.getInstance().phoneMgr.isVideoCallingEnabled(
- getContext().getOpPackageName()) : false;
- mVideoCallingPref.setChecked(currentValue);
- if (enhanced4gLteEnabled) {
+ CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
+ || mPhone.mDcTracker.isDataEnabled())) {
+ mCallingCategory.addPreference(mVideoCallingPref);
+ if (!mButton4glte.isChecked()) {
+ mVideoCallingPref.setEnabled(false);
+ mVideoCallingPref.setChecked(false);
+ } else {
+ mVideoCallingPref.setEnabled(true);
+ mVideoCallingPref.setChecked(mImsMgr.isVtEnabledByUser());
mVideoCallingPref.setOnPreferenceChangeListener(this);
}
} else {
- removePref = true;
- }
-
- if (removePref) {
mCallingCategory.removePreference(mVideoCallingPref);
- } else {
- mCallingCategory.addPreference(mVideoCallingPref);
}
}