Keep 4G LTE slider disabled after call
We were not checking the carrier config after
a call ended and disabling the 4G LTE slider.
This was causing bugs where the user was able
to disable (but not enable) 4G LTE and get it
stuck in that state until reboot.
Bug: 64195239
Test: Manual
Change-Id: Ic4a9df5b195d26784638b77914874e5fc32736c1
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index d9725d4..0290546 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -256,9 +256,18 @@
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (DBG) log("PhoneStateListener.onCallStateChanged: state=" + state);
- boolean enabled = (state == TelephonyManager.CALL_STATE_IDLE) &&
- ImsManager.isNonTtyOrTtyOnVolteEnabled
- (getActivity().getApplicationContext());
+
+ 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);
Preference pref = getPreferenceScreen().findPreference(BUTTON_4G_LTE_KEY);
if (pref != null) pref.setEnabled(enabled && hasActiveSubscriptions());
@@ -1014,12 +1023,8 @@
* but you do need to remember that this all needs to work when subscriptions
* change dynamically such as when hot swapping sims.
*/
- boolean canChange4glte =
- (mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE)
- && ImsManager.isNonTtyOrTtyOnVolteEnabled(
- activity.getApplicationContext())
- && carrierConfig.getBoolean(
- CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
+ boolean canChange4glte = is4gLtePrefEnabled(activity.getApplicationContext(),
+ carrierConfig);
boolean useVariant4glteTitle = carrierConfig.getBoolean(
CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_BOOL);
int enhanced4glteModeTitleId = useVariant4glteTitle ?
@@ -1225,6 +1230,13 @@
return true;
}
+ private boolean is4gLtePrefEnabled(Context context, PersistableBundle carrierConfig) {
+ return (mTelephonyManager.getCallState() == TelephonyManager.CALL_STATE_IDLE)
+ && ImsManager.isNonTtyOrTtyOnVolteEnabled(context)
+ && carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
+ }
+
private class MyHandler extends Handler {
static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 0;