Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5a7ed81 authored by Brad Ebinger's avatar Brad Ebinger Committed by android-build-merger
Browse files

Do not set WFC mode separately when not editable

am: 6e5e8259

Change-Id: I4a8e55dda0b3d5b9e338691a738a19852c4467e5
parents 516fb162 6e5e8259
Loading
Loading
Loading
Loading
+33 −47
Original line number Diff line number Diff line
@@ -956,17 +956,6 @@ public class ImsManager {
        setWfcModeInternal(wfcMode);
    }

    /**
     * Changes the WFC mode to its default value for Carriers with non-editable WFC settings.
     */
    private void updateDefaultWfcMode() {
        if (DBG) log("updateDefaultWfcMode");
        if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
            setWfcMode(getIntCarrierConfig(
                    CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT));
        }
    }

    /**
     * Returns the user configuration of WFC preference setting
     *
@@ -991,34 +980,52 @@ public class ImsManager {
     * @param roaming {@code false} for home network setting, {@code true} for roaming  setting
     */
    public int getWfcMode(boolean roaming) {
        int setting = 0;
        int setting;
        if (!roaming) {
            setting = SubscriptionManager.getIntegerSubscriptionProperty(
                    getSubId(), SubscriptionManager.WFC_IMS_MODE,
                    SUB_PROPERTY_NOT_INITIALIZED, mContext);

            // SUB_PROPERTY_NOT_INITIALIZED indicates it's never set in sub db.
            if (setting == SUB_PROPERTY_NOT_INITIALIZED) {
            // The WFC mode is not editable, return the default setting in the CarrierConfig, not
            // the user set value.
            if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
                setting = getIntCarrierConfig(
                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT);

            } else {
                setting = getSettingFromSubscriptionManager(SubscriptionManager.WFC_IMS_MODE,
                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT);
            }
            if (DBG) log("getWfcMode - setting=" + setting);
        } else {
            setting = SubscriptionManager.getIntegerSubscriptionProperty(
                    getSubId(), SubscriptionManager.WFC_IMS_ROAMING_MODE,
                    SUB_PROPERTY_NOT_INITIALIZED, mContext);

            // SUB_PROPERTY_NOT_INITIALIZED indicates it's never set in sub db.
            if (setting == SUB_PROPERTY_NOT_INITIALIZED) {
            // The WFC roaming mode is not editable, return the default setting in the
            // CarrierConfig, not the user set value.
            if (!getBooleanCarrierConfig(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL)) {
                setting = getIntCarrierConfig(
                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT);
            }

            } else {
                setting = getSettingFromSubscriptionManager(
                        SubscriptionManager.WFC_IMS_ROAMING_MODE,
                        CarrierConfigManager.KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT);
            }
            if (DBG) log("getWfcMode (roaming) - setting=" + setting);
        }
        return setting;
    }

    /**
     * Returns the SubscriptionManager setting for the subSetting string. If it is not set, default
     * to the default CarrierConfig value for defaultConfigKey.
     */
    private int getSettingFromSubscriptionManager(String subSetting, String defaultConfigKey) {
        int result;
        result = SubscriptionManager.getIntegerSubscriptionProperty(getSubId(), subSetting,
                SUB_PROPERTY_NOT_INITIALIZED, mContext);

        // SUB_PROPERTY_NOT_INITIALIZED indicates it's never set in sub db.
        if (result == SUB_PROPERTY_NOT_INITIALIZED) {
            result = getIntCarrierConfig(defaultConfigKey);
        }
        return result;
    }

    /**
     * Change persistent WFC preference setting
     *
@@ -1068,26 +1075,6 @@ public class ImsManager {
        return subId;
    }

    private static void setWfcModeInternal(Context context, int wfcMode) {
        final ImsManager imsManager = ImsManager.getInstance(context,
                SubscriptionManager.getDefaultVoicePhoneId());
        if (imsManager != null) {
            final int value = wfcMode;
            Thread thread = new Thread(new Runnable() {
                public void run() {
                    try {
                        imsManager.getConfigInterface().setConfig(
                                ImsConfig.ConfigConstants.VOICE_OVER_WIFI_MODE,
                                value);
                    } catch (ImsException e) {
                        // do nothing
                    }
                }
            });
            thread.start();
        }
    }

    private void setWfcModeInternal(int wfcMode) {
        final int value = wfcMode;
        Thread thread = new Thread(() -> {
@@ -1383,7 +1370,6 @@ public class ImsManager {
        boolean isNetworkRoaming = tm.isNetworkRoaming();
        boolean available = isWfcEnabledByPlatform();
        boolean enabled = isWfcEnabledByUser();
        updateDefaultWfcMode();
        int mode = getWfcMode(isNetworkRoaming);
        boolean roaming = isWfcRoamingEnabledByUser();
        boolean isFeatureOn = available && enabled;
@@ -1400,7 +1386,7 @@ public class ImsManager {
            mode = ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED;
            roaming = false;
        }
        setWfcModeInternal(mContext, mode);
        setWfcModeInternal(mode);
        setWfcRoamingSettingInternal(roaming);

        return isFeatureOn;