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

Commit c905cdfd authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge "Don't overwrite link bandwidth values on getNetworkCapabilities" am: 56ceab8c

Change-Id: Ic9c4e31fe80b47d692e11b8d5d68f7f1b33a6513
parents cc52e13b 56ceab8c
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);
    }