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

Commit 56ceab8c authored by Sarah Chin's avatar Sarah Chin Committed by Gerrit Code Review
Browse files

Merge "Don't overwrite link bandwidth values on getNetworkCapabilities"

parents 05a5c1f1 f9328899
Loading
Loading
Loading
Loading
+97 −42
Original line number Diff line number Diff line
@@ -273,6 +273,8 @@ public class DataConnection extends StateMachine {
    private int mRilRat = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
    private int mDataRegState = Integer.MAX_VALUE;
    private NetworkInfo mNetworkInfo;
    private int mDownlinkBandwidth = 14;
    private int mUplinkBandwidth = 14;

    /** The corresponding network agent for this data connection. */
    private DcNetworkAgent mNetworkAgent;
@@ -326,7 +328,9 @@ public class DataConnection extends StateMachine {
    static final int EVENT_NR_STATE_CHANGED = BASE + 27;
    static final int EVENT_DATA_CONNECTION_METEREDNESS_CHANGED = BASE + 28;
    static final int EVENT_NR_FREQUENCY_CHANGED = BASE + 29;
    private static final int CMD_TO_STRING_COUNT = EVENT_NR_FREQUENCY_CHANGED - BASE + 1;
    static final int EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED = BASE + 30;
    private static final int CMD_TO_STRING_COUNT =
            EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED - BASE + 1;

    private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
    static {
@@ -366,6 +370,8 @@ public class DataConnection extends StateMachine {
        sCmdToString[EVENT_DATA_CONNECTION_METEREDNESS_CHANGED - BASE] =
                "EVENT_DATA_CONNECTION_METEREDNESS_CHANGED";
        sCmdToString[EVENT_NR_FREQUENCY_CHANGED - BASE] = "EVENT_NR_FREQUENCY_CHANGED";
        sCmdToString[EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED - BASE] =
                "EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED";
    }
    // Convert cmd to string or null if unknown
    static String cmdToString(int cmd) {
@@ -604,6 +610,9 @@ public class DataConnection extends StateMachine {
        if (nri != null) {
            networkType = nri.getAccessNetworkTechnology();
            mRilRat = ServiceState.networkTypeToRilRadioTechnology(networkType);
            if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_CARRIER_CONFIG_KEY)) {
                updateLinkBandwidthsFromCarrierConfig(mRilRat);
            }
        }

        mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_MOBILE,
@@ -925,6 +934,8 @@ public class DataConnection extends StateMachine {
        mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        mSubscriptionOverride = 0;
        mUnmeteredOverride = false;
        mDownlinkBandwidth = 14;
        mUplinkBandwidth = 14;
    }

    /**
@@ -1102,21 +1113,64 @@ public class DataConnection extends StateMachine {
        mLinkProperties.setTcpBufferSizes(sizes);
    }

    private void updateLinkBandwidths(NetworkCapabilities caps, int rilRat) {
        String ratName = ServiceState.rilRadioTechnologyToString(rilRat).toLowerCase(Locale.ROOT);
        if (ratName.equals("LTE") && isNRConnected()) {
    private void updateLinkBandwidthsFromCarrierConfig(int rilRat) {
        String ratName = ServiceState.rilRadioTechnologyToString(rilRat);
        if (rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected()) {
            ratName = mPhone.getServiceState().getNrFrequencyRange()
                    == ServiceState.FREQUENCY_RANGE_MMWAVE ? "NR_NSA_MMWAVE" : "NR_NSA";
                    == ServiceState.FREQUENCY_RANGE_MMWAVE
                    ? DctConstants.RAT_NAME_NR_NSA_MMWAVE : DctConstants.RAT_NAME_NR_NSA;
        }

        if (DBG) log("updateLinkBandwidths: " + ratName);
        if (DBG) log("updateLinkBandwidthsFromCarrierConfig: " + ratName);

        Pair<Integer, Integer> values = mDct.getLinkBandwidths(ratName);
        Pair<Integer, Integer> values = mDct.getLinkBandwidthsFromCarrierConfig(ratName);
        if (values == null) {
            values = new Pair<>(14, 14);
        }
        caps.setLinkDownstreamBandwidthKbps(values.first);
        caps.setLinkUpstreamBandwidthKbps(values.second);
        mDownlinkBandwidth = values.first;
        mUplinkBandwidth = values.second;
    }


    private void updateLinkBandwidthsFromModem(LinkCapacityEstimate lce) {
        boolean downlinkUpdated = false;
        boolean uplinkUpdated = false;
        if (mPhone.getLceStatus() == RILConstants.LCE_ACTIVE) {
            if (lce.downlinkCapacityKbps != LinkCapacityEstimate.INVALID) {
                mDownlinkBandwidth = lce.downlinkCapacityKbps;
                downlinkUpdated = true;
            }
            if (lce.uplinkCapacityKbps != LinkCapacityEstimate.INVALID) {
                mUplinkBandwidth = lce.uplinkCapacityKbps;
                uplinkUpdated = true;
            }
        }
        if (DBG) log("updateLinkBandwidthsFromModem");
        if (!downlinkUpdated || !uplinkUpdated) {
            String ratName = ServiceState.rilRadioTechnologyToString(mRilRat);
            if (mRilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected()) {
                ratName = mPhone.getServiceState().getNrFrequencyRange()
                        == ServiceState.FREQUENCY_RANGE_MMWAVE
                        ? DctConstants.RAT_NAME_NR_NSA_MMWAVE : DctConstants.RAT_NAME_NR_NSA;
            }
            Pair<Integer, Integer> values = mDct.getLinkBandwidthsFromCarrierConfig(ratName);
            if (values != null) {
                if (!downlinkUpdated) {
                    mDownlinkBandwidth = values.first;
                }
                if (!uplinkUpdated) {
                    mUplinkBandwidth = values.second;
                }
            }
        }
        if (mNetworkAgent != null) {
            mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities(), DataConnection.this);
        }
    }

    private boolean isBandwidthSourceKey(String source) {
        return source.equals(mPhone.getContext().getResources().getString(
                com.android.internal.R.string.config_bandwidthEstimateSource));
    }

    /**
@@ -1331,7 +1385,8 @@ public class DataConnection extends StateMachine {
            result.removeCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
        }

        updateLinkBandwidths(result, mRilRat);
        result.setLinkDownstreamBandwidthKbps(mDownlinkBandwidth);
        result.setLinkUpstreamBandwidthKbps(mUplinkBandwidth);

        result.setNetworkSpecifier(new TelephonyNetworkSpecifier.Builder()
                .setSubscriptionId(mSubId).build());
@@ -1650,6 +1705,9 @@ public class DataConnection extends StateMachine {
                    Pair<Integer, Integer> drsRatPair = (Pair<Integer, Integer>)ar.result;
                    mDataRegState = drsRatPair.first;
                    updateTcpBufferSizes(drsRatPair.second);
                    if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_CARRIER_CONFIG_KEY)) {
                        updateLinkBandwidthsFromCarrierConfig(drsRatPair.second);
                    }
                    mRilRat = drsRatPair.second;
                    if (DBG) {
                        log("DcDefaultState: EVENT_DATA_CONNECTION_DRS_OR_RAT_CHANGED"
@@ -2015,6 +2073,9 @@ public class DataConnection extends StateMachine {
            mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED,
                    mNetworkInfo.getReason(), null);
            updateTcpBufferSizes(mRilRat);
            if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_CARRIER_CONFIG_KEY)) {
                updateLinkBandwidthsFromCarrierConfig(mRilRat);
            }

            final NetworkAgentConfig.Builder configBuilder = new NetworkAgentConfig.Builder();
            configBuilder.setLegacyType(ConnectivityManager.TYPE_MOBILE);
@@ -2235,6 +2296,9 @@ public class DataConnection extends StateMachine {
                    Pair<Integer, Integer> drsRatPair = (Pair<Integer, Integer>) ar.result;
                    mDataRegState = drsRatPair.first;
                    updateTcpBufferSizes(drsRatPair.second);
                    if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_CARRIER_CONFIG_KEY)) {
                        updateLinkBandwidthsFromCarrierConfig(drsRatPair.second);
                    }
                    mRilRat = drsRatPair.second;
                    if (DBG) {
                        log("DcActiveState: EVENT_DATA_CONNECTION_DRS_OR_RAT_CHANGED"
@@ -2251,6 +2315,18 @@ public class DataConnection extends StateMachine {
                    retVal = HANDLED;
                    break;
                }
                case EVENT_NR_FREQUENCY_CHANGED:
                    // fallthrough
                case EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED:
                    if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_CARRIER_CONFIG_KEY)) {
                        updateLinkBandwidthsFromCarrierConfig(mRilRat);
                    }
                    if (mNetworkAgent != null) {
                        mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities(),
                                DataConnection.this);
                    }
                    retVal = HANDLED;
                    break;
                case EVENT_DATA_CONNECTION_METEREDNESS_CHANGED:
                    boolean isUnmetered = (boolean) msg.obj;
                    if (isUnmetered == mUnmeteredOverride) {
@@ -2259,14 +2335,12 @@ public class DataConnection extends StateMachine {
                    }
                    mUnmeteredOverride = isUnmetered;
                    // fallthrough
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_DATA_CONNECTION_ROAM_ON:
                case EVENT_DATA_CONNECTION_ROAM_OFF:
                case EVENT_DATA_CONNECTION_OVERRIDE_CHANGED: {
                    if (mNetworkAgent != null) {
                        mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities(),
                                DataConnection.this);
                        mNetworkAgent.sendNetworkInfo(mNetworkInfo, DataConnection.this);
                    }
                    retVal = HANDLED;
                    break;
@@ -2276,21 +2350,8 @@ public class DataConnection extends StateMachine {
                    if (ar.exception != null) {
                        log("EVENT_BW_REFRESH_RESPONSE: error ignoring, e=" + ar.exception);
                    } else {
                        boolean useModem = DctConstants.BANDWIDTH_SOURCE_MODEM_KEY.equals(
                                mPhone.getContext().getResources().getString(com.android.internal.R
                                        .string.config_bandwidthEstimateSource));
                        NetworkCapabilities nc = getNetworkCapabilities();
                        LinkCapacityEstimate lce = (LinkCapacityEstimate) ar.result;
                        if (useModem && mPhone.getLceStatus() == RILConstants.LCE_ACTIVE) {
                            if (lce.downlinkCapacityKbps != LinkCapacityEstimate.INVALID) {
                                nc.setLinkDownstreamBandwidthKbps(lce.downlinkCapacityKbps);
                            }
                            if (lce.uplinkCapacityKbps != LinkCapacityEstimate.INVALID) {
                                nc.setLinkUpstreamBandwidthKbps(lce.uplinkCapacityKbps);
                            }
                        }
                        if (mNetworkAgent != null) {
                            mNetworkAgent.sendNetworkCapabilities(nc, DataConnection.this);
                        if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_MODEM_KEY)) {
                            updateLinkBandwidthsFromModem((LinkCapacityEstimate) ar.result);
                        }
                    }
                    retVal = HANDLED;
@@ -2407,21 +2468,8 @@ public class DataConnection extends StateMachine {
                    if (ar.exception != null) {
                        loge("EVENT_LINK_CAPACITY_CHANGED e=" + ar.exception);
                    } else {
                        boolean useModem = DctConstants.BANDWIDTH_SOURCE_MODEM_KEY.equals(
                                mPhone.getContext().getResources().getString(com.android.internal.R
                                        .string.config_bandwidthEstimateSource));
                        NetworkCapabilities nc = getNetworkCapabilities();
                        if (useModem) {
                            LinkCapacityEstimate lce = (LinkCapacityEstimate) ar.result;
                            if (lce.downlinkCapacityKbps != LinkCapacityEstimate.INVALID) {
                                nc.setLinkDownstreamBandwidthKbps(lce.downlinkCapacityKbps);
                            }
                            if (lce.uplinkCapacityKbps != LinkCapacityEstimate.INVALID) {
                                nc.setLinkUpstreamBandwidthKbps(lce.uplinkCapacityKbps);
                            }
                        }
                        if (mNetworkAgent != null) {
                            mNetworkAgent.sendNetworkCapabilities(nc, DataConnection.this);
                        if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_MODEM_KEY)) {
                            updateLinkBandwidthsFromModem((LinkCapacityEstimate) ar.result);
                        }
                    }
                    retVal = HANDLED;
@@ -2468,8 +2516,13 @@ public class DataConnection extends StateMachine {
                }
                case EVENT_NR_STATE_CHANGED: {
                    updateTcpBufferSizes(mRilRat);
                    if (isBandwidthSourceKey(DctConstants.BANDWIDTH_SOURCE_CARRIER_CONFIG_KEY)) {
                        updateLinkBandwidthsFromCarrierConfig(mRilRat);
                    }
                    if (mNetworkAgent != null) {
                        mNetworkAgent.sendLinkProperties(mLinkProperties, DataConnection.this);
                        mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities(),
                                DataConnection.this);
                    }
                    retVal = HANDLED;
                    break;
@@ -3026,6 +3079,8 @@ public class DataConnection extends StateMachine {
        pw.println("mRestrictedNetworkOverride=" + mRestrictedNetworkOverride);
        pw.println("mUnmeteredUseOnly=" + mUnmeteredUseOnly);
        pw.println("mUnmeteredOverride=" + mUnmeteredOverride);
        pw.println("mDownlinkBandwidth" + mDownlinkBandwidth);
        pw.println("mUplinkBandwidth=" + mUplinkBandwidth);
        pw.println("disallowedApnTypes="
                + ApnSetting.getApnTypesStringFromBitmask(getDisallowedApnTypes()));
        pw.println("mInstanceNumber=" + mInstanceNumber);
+13 −8
Original line number Diff line number Diff line
@@ -3956,19 +3956,24 @@ public class DcTracker extends Handler {
                }
            }
            if (useLte) {
                Pair<Integer, Integer> ltePair = mBandwidths.get("LTE");
                Pair<Integer, Integer> ltePair = mBandwidths.get(DctConstants.RAT_NAME_LTE);
                if (ltePair != null) {
                    if (mBandwidths.containsKey("NR_NSA")) {
                        mBandwidths.put("NR_NSA",
                                new Pair<>(mBandwidths.get("NR_NSA").first, ltePair.second));
                    if (mBandwidths.containsKey(DctConstants.RAT_NAME_NR_NSA)) {
                        mBandwidths.put(DctConstants.RAT_NAME_NR_NSA, new Pair<>(
                                mBandwidths.get(DctConstants.RAT_NAME_NR_NSA).first,
                                ltePair.second));
                    }
                    if (mBandwidths.containsKey("NR_NSA_MMWAVE")) {
                        mBandwidths.put("NR_NSA_MMWAVE",
                                new Pair<>(mBandwidths.get("NR_NSA_MMWAVE").first, ltePair.second));
                    if (mBandwidths.containsKey(DctConstants.RAT_NAME_NR_NSA_MMWAVE)) {
                        mBandwidths.put(DctConstants.RAT_NAME_NR_NSA_MMWAVE, new Pair<>(
                                mBandwidths.get(DctConstants.RAT_NAME_NR_NSA_MMWAVE).first,
                                ltePair.second));
                    }
                }
            }
        }
        for (DataConnection dc : mDataConnections.values()) {
            dc.sendMessage(DataConnection.EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED);
        }
    }

    /**
@@ -3976,7 +3981,7 @@ public class DcTracker extends Handler {
     * @param ratName RAT name from ServiceState#rilRadioTechnologyToString.
     * @return pair of downstream/upstream values (kbps), or null if the config is not defined.
     */
    public Pair<Integer, Integer> getLinkBandwidths(String ratName) {
    public Pair<Integer, Integer> getLinkBandwidthsFromCarrierConfig(String ratName) {
        return mBandwidths.get(ratName);
    }