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

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

Merge "Support NR SA unmetered" am: 2d13062f

Change-Id: I4394a6c9c5cededadb10a5903483f1a213e11f2e
parents 1a1b6e8c 2d13062f
Loading
Loading
Loading
Loading
+43 −22
Original line number Diff line number Diff line
@@ -319,9 +319,12 @@ public class DcTracker extends Handler {
    private long mWatchdogTimeMs = 1000 * 60 * 60;

    /* Default for whether 5G frequencies are considered unmetered */
    private boolean mAllUnmetered = false;
    private boolean mMmwaveUnmetered = false;
    private boolean mSub6Unmetered = false;
    private boolean mNrNsaAllUnmetered = false;
    private boolean mNrNsaMmwaveUnmetered = false;
    private boolean mNrNsaSub6Unmetered = false;
    private boolean mNrSaAllUnmetered = false;
    private boolean mNrSaMmwaveUnmetered = false;
    private boolean mNrSaSub6Unmetered = false;

    /* Used to check whether 5G timers are currently active and waiting to go off */
    private boolean mHysteresis = false;
@@ -4025,10 +4028,15 @@ public class DcTracker extends Handler {

    private boolean reevaluateUnmeteredConnections() {
        log("reevaluateUnmeteredConnections");
        if (isNetworkTypeUnmetered(NETWORK_TYPE_NR) || isFrequencyRangeUnmetered()) {
            if (DBG) log("NR NSA is unmetered");
            if (mPhone.getServiceState().getNrState()
                    == NetworkRegistrationInfo.NR_STATE_CONNECTED) {
        int networkType = ServiceState.rilRadioTechnologyToNetworkType(getDataRat());
        boolean nrUnmetered = isNetworkTypeUnmetered(NETWORK_TYPE_NR);
        boolean nrNsaUnmetered = isNrNsaFrequencyRangeUnmetered();
        boolean nrSaUnmetered = isNrSaFrequencyRangeUnmetered();
        if (nrUnmetered || nrNsaUnmetered || nrSaUnmetered) {
            if (DBG) log("NR is unmetered");
            if ((nrUnmetered || nrNsaUnmetered) && mPhone.getServiceState().getNrState()
                    == NetworkRegistrationInfo.NR_STATE_CONNECTED
                    || (nrUnmetered || nrSaUnmetered) && networkType == NETWORK_TYPE_NR) {
                if (!m5GWasConnected) { // 4G -> 5G
                    stopHysteresisAlarm();
                    setDataConnectionUnmetered(true);
@@ -4042,15 +4050,13 @@ public class DcTracker extends Handler {
                    if (!mHysteresis && !startHysteresisAlarm()) {
                        // hysteresis is not active but carrier does not support hysteresis
                        stopWatchdogAlarm();
                        setDataConnectionUnmetered(isNetworkTypeUnmetered(
                                mTelephonyManager.getNetworkType(mPhone.getSubId())));
                        setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType));
                    }
                    m5GWasConnected = false;
                } else { // 4G -> 4G
                    if (!hasMessages(DctConstants.EVENT_5G_TIMER_HYSTERESIS)) {
                        stopWatchdogAlarm();
                        setDataConnectionUnmetered(isNetworkTypeUnmetered(
                                mTelephonyManager.getNetworkType(mPhone.getSubId())));
                        setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType));
                    }
                    // do nothing if waiting for hysteresis alarm to go off
                }
@@ -4058,8 +4064,7 @@ public class DcTracker extends Handler {
        } else {
            stopWatchdogAlarm();
            stopHysteresisAlarm();
            setDataConnectionUnmetered(isNetworkTypeUnmetered(
                    mTelephonyManager.getNetworkType(mPhone.getSubId())));
            setDataConnectionUnmetered(isNetworkTypeUnmetered(networkType));
            m5GWasConnected = false;
        }
        return updateDisplayInfo();
@@ -4108,17 +4113,27 @@ public class DcTracker extends Handler {
                || plan.getDataLimitBehavior() == SubscriptionPlan.LIMIT_BEHAVIOR_THROTTLED);
    }

    private boolean isFrequencyRangeUnmetered() {
        boolean nrConnected = mPhone.getServiceState().getNrState()
                == NetworkRegistrationInfo.NR_STATE_CONNECTED;
        if (mMmwaveUnmetered || mSub6Unmetered) {
    private boolean isNrNsaFrequencyRangeUnmetered() {
        if (mNrNsaMmwaveUnmetered || mNrNsaSub6Unmetered) {
            int frequencyRange = mPhone.getServiceState().getNrFrequencyRange();
            boolean mmwave = frequencyRange == ServiceState.FREQUENCY_RANGE_MMWAVE;
            // frequency range LOW, MID, or HIGH
            boolean sub6 = frequencyRange != ServiceState.FREQUENCY_RANGE_UNKNOWN && !mmwave;
            return (mMmwaveUnmetered && mmwave || mSub6Unmetered && sub6) && nrConnected;
            return mNrNsaMmwaveUnmetered && mmwave || mNrNsaSub6Unmetered && sub6;
        } else {
            return mAllUnmetered && nrConnected;
            return mNrNsaAllUnmetered;
        }
    }

    private boolean isNrSaFrequencyRangeUnmetered() {
        if (mNrSaMmwaveUnmetered || mNrSaSub6Unmetered) {
            int frequencyRange = mPhone.getServiceState().getNrFrequencyRange();
            boolean mmwave = frequencyRange == ServiceState.FREQUENCY_RANGE_MMWAVE;
            // frequency range LOW, MID, or HIGH
            boolean sub6 = frequencyRange != ServiceState.FREQUENCY_RANGE_UNKNOWN && !mmwave;
            return mNrSaMmwaveUnmetered && mmwave || mNrSaSub6Unmetered && sub6;
        } else {
            return mNrSaAllUnmetered;
        }
    }

@@ -5203,12 +5218,18 @@ public class DcTracker extends Handler {
                        CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT);
                mWatchdogTimeMs = b.getLong(
                        CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG);
                mAllUnmetered = b.getBoolean(
                mNrNsaAllUnmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL);
                mMmwaveUnmetered = b.getBoolean(
                mNrNsaMmwaveUnmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_NSA_MMWAVE_BOOL);
                mSub6Unmetered = b.getBoolean(
                mNrNsaSub6Unmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_NSA_SUB6_BOOL);
                mNrSaAllUnmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_SA_BOOL);
                mNrSaMmwaveUnmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_SA_MMWAVE_BOOL);
                mNrSaSub6Unmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_SA_SUB6_BOOL);
            }
        }