diff options
Diffstat (limited to 'src/java/com/android/internal/telephony/PhoneConfigurationManager.java')
-rw-r--r-- | src/java/com/android/internal/telephony/PhoneConfigurationManager.java | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java index 8b9582419e..06ab58448a 100644 --- a/src/java/com/android/internal/telephony/PhoneConfigurationManager.java +++ b/src/java/com/android/internal/telephony/PhoneConfigurationManager.java @@ -28,10 +28,12 @@ import android.os.Message; import android.os.PowerManager; import android.os.RegistrantList; import android.os.SystemProperties; +import android.provider.DeviceConfig; import android.sysprop.TelephonyProperties; import android.telephony.PhoneCapability; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import android.text.TextUtils; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; @@ -46,18 +48,21 @@ import java.util.NoSuchElementException; * This class manages phone's configuration which defines the potential capability (static) of the * phone and its current activated capability (current). * It gets and monitors static and current phone capability from the modem; send broadcast - * if they change, and and sends commands to modem to enable or disable phones. + * if they change, and sends commands to modem to enable or disable phones. */ public class PhoneConfigurationManager { public static final String DSDA = "dsda"; public static final String DSDS = "dsds"; public static final String TSTS = "tsts"; public static final String SSSS = ""; + /** DeviceConfig key for whether Virtual DSDA is enabled. */ + private static final String KEY_ENABLE_VIRTUAL_DSDA = "enable_virtual_dsda"; private static final String LOG_TAG = "PhoneCfgMgr"; private static final int EVENT_SWITCH_DSDS_CONFIG_DONE = 100; private static final int EVENT_GET_MODEM_STATUS = 101; private static final int EVENT_GET_MODEM_STATUS_DONE = 102; private static final int EVENT_GET_PHONE_CAPABILITY_DONE = 103; + private static final int EVENT_DEVICE_CONFIG_CHANGED = 104; private static PhoneConfigurationManager sInstance = null; private final Context mContext; @@ -70,6 +75,11 @@ public class PhoneConfigurationManager { private final Map<Integer, Boolean> mPhoneStatusMap; private MockableInterface mMi = new MockableInterface(); private TelephonyManager mTelephonyManager; + /** + * True if 'Virtual DSDA' i.e., in-call IMS connectivity on both subs with only single logical + * modem, is enabled. + */ + private boolean mVirtualDsdaEnabled; private static final RegistrantList sMultiSimConfigChangeRegistrants = new RegistrantList(); private static final String ALLOW_MOCK_MODEM_PROPERTY = "persist.radio.allow_mock_modem"; private static final String BOOT_ALLOW_MOCK_MODEM_PROPERTY = "ro.boot.radio.allow_mock_modem"; @@ -102,6 +112,16 @@ public class PhoneConfigurationManager { mRadioConfig = RadioConfig.getInstance(); mHandler = new ConfigManagerHandler(); mPhoneStatusMap = new HashMap<>(); + mVirtualDsdaEnabled = DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_TELEPHONY, KEY_ENABLE_VIRTUAL_DSDA, false); + DeviceConfig.addOnPropertiesChangedListener( + DeviceConfig.NAMESPACE_TELEPHONY, Runnable::run, + properties -> { + if (TextUtils.equals(DeviceConfig.NAMESPACE_TELEPHONY, + properties.getNamespace())) { + mHandler.sendEmptyMessage(EVENT_DEVICE_CONFIG_CHANGED); + } + }); notifyCapabilityChanged(); @@ -127,10 +147,7 @@ public class PhoneConfigurationManager { // If virtual DSDA is enabled for this UE, then updates maxActiveVoiceSubscriptions to 2. private PhoneCapability maybeUpdateMaxActiveVoiceSubscriptions( final PhoneCapability staticCapability) { - boolean enableVirtualDsda = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_enable_virtual_dsda); - - if (staticCapability.getLogicalModemList().size() > 1 && enableVirtualDsda) { + if (staticCapability.getLogicalModemList().size() > 1 && mVirtualDsdaEnabled) { return new PhoneCapability.Builder(staticCapability) .setMaxActiveVoiceSubscriptions(2) .build(); @@ -197,13 +214,22 @@ public class PhoneConfigurationManager { ar = (AsyncResult) msg.obj; if (ar != null && ar.exception == null) { mStaticCapability = (PhoneCapability) ar.result; - mStaticCapability = - maybeUpdateMaxActiveVoiceSubscriptions(mStaticCapability); notifyCapabilityChanged(); } else { log(msg.what + " failure. Not getting phone capability." + ar.exception); } break; + case EVENT_DEVICE_CONFIG_CHANGED: + boolean isVirtualDsdaEnabled = DeviceConfig.getBoolean( + DeviceConfig.NAMESPACE_TELEPHONY, KEY_ENABLE_VIRTUAL_DSDA, false); + if (isVirtualDsdaEnabled != mVirtualDsdaEnabled) { + log("EVENT_DEVICE_CONFIG_CHANGED: from " + mVirtualDsdaEnabled + " to " + + isVirtualDsdaEnabled); + mVirtualDsdaEnabled = isVirtualDsdaEnabled; + } + break; + default: + log("Unknown event: " + msg.what); } } } @@ -317,6 +343,7 @@ public class PhoneConfigurationManager { mHandler, EVENT_GET_PHONE_CAPABILITY_DONE); mRadioConfig.getPhoneCapability(callback); } + mStaticCapability = maybeUpdateMaxActiveVoiceSubscriptions(mStaticCapability); log("getStaticPhoneCapability: mStaticCapability " + mStaticCapability); return mStaticCapability; } |