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

Commit 772df0fa authored by Xiangyu/Malcolm Chen's avatar Xiangyu/Malcolm Chen Committed by android-build-merger
Browse files

Merge "Dynamically revoke Internet capability in NetworkAgent." am: 0b4cac5b

am: 3ce431b4

Change-Id: I449fbe2d25483f6d900c592b0e54dc90ff96a1df
parents 69d2a3f3 3ce431b4
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ public class DataConnection extends StateMachine {
    private NetworkInfo mNetworkInfo;
    private DcNetworkAgent mNetworkAgent;
    private LocalLog mNetCapsLocalLog = new LocalLog(50);
    private int mDisabledApnTypeBitMask = 0;

    int mTag;
    public int mCid;
@@ -739,6 +740,7 @@ public class DataConnection extends StateMachine {
        mUnmeteredUseOnly = false;
        mRestrictedNetworkOverride = false;
        mDcFailCause = null;
        mDisabledApnTypeBitMask = 0;
    }

    /**
@@ -991,7 +993,7 @@ public class DataConnection extends StateMachine {

        if (mApnSetting != null) {
            final String[] types = ApnSetting.getApnTypesStringFromBitmask(
                mApnSetting.getApnTypeBitmask()).split(",");
                mApnSetting.getApnTypeBitmask() & ~mDisabledApnTypeBitMask).split(",");
            for (String type : types) {
                if (!mRestrictedNetworkOverride && mUnmeteredUseOnly
                        && ApnSettingUtils.isMeteredApnType(type, mPhone)) {
@@ -1760,6 +1762,10 @@ public class DataConnection extends StateMachine {
                    // either add this new apn context to our set or
                    // update the existing cp with the latest connection generation number
                    mApnContexts.put(cp.mApnContext, cp);
                    // TODO (b/118347948): evaluate if it's still needed after assigning
                    // different scores to different Cellular network.
                    mDisabledApnTypeBitMask &= ~cp.mApnContext.getApnTypeBitmask();
                    mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities());
                    if (DBG) {
                        log("DcActiveState: EVENT_CONNECT cp=" + cp + " dc=" + DataConnection.this);
                    }
@@ -1788,6 +1794,10 @@ public class DataConnection extends StateMachine {
                            transitionTo(mDisconnectingState);
                        } else {
                            mApnContexts.remove(dp.mApnContext);
                            // TODO (b/118347948): evaluate if it's still needed after assigning
                            // different scores to different Cellular network.
                            mDisabledApnTypeBitMask |= dp.mApnContext.getApnTypeBitmask();
                            mNetworkAgent.sendNetworkCapabilities(getNetworkCapabilities());
                            notifyDisconnectCompleted(dp, false);
                        }
                    } else {
+6 −2
Original line number Diff line number Diff line
@@ -861,11 +861,15 @@ public class DcTracker extends Handler {
        if (apnContext != null) apnContext.requestNetwork(networkRequest, log);
    }

    public void releaseNetwork(NetworkRequest networkRequest, LocalLog log) {
    public void releaseNetwork(NetworkRequest networkRequest, LocalLog log,
            boolean cleanUpConnection) {
        final int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest);
        final ApnContext apnContext = mApnContextsByType.get(apnType);
        log.log("DcTracker.releaseNetwork for " + networkRequest + " found " + apnContext);
        if (apnContext != null) apnContext.releaseNetwork(networkRequest, log);
        if (apnContext != null) {
            apnContext.releaseNetwork(networkRequest, log);
            if (cleanUpConnection) cleanUpConnectionInternal(true, apnContext);
        }
    }

    // Turn telephony radio on or off.
+8 −7
Original line number Diff line number Diff line
@@ -160,8 +160,8 @@ public class TelephonyNetworkFactory extends NetworkFactory {
    private static final int ACTION_REQUEST = 1;
    private static final int ACTION_RELEASE = 2;

    private void applyRequests(HashMap<NetworkRequest, LocalLog> requestMap,
            int action, String logStr) {
    private void applyRequestsOnActivePhoneSwitch(HashMap<NetworkRequest, LocalLog> requestMap,
            boolean cleanUpOnRelease, int action, String logStr) {
        if (action == ACTION_NO_OP) return;

        for (NetworkRequest networkRequest : requestMap.keySet()) {
@@ -170,7 +170,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
            if (action == ACTION_REQUEST) {
                mDcTracker.requestNetwork(networkRequest, localLog);
            } else if (action == ACTION_RELEASE) {
                mDcTracker.releaseNetwork(networkRequest, localLog);
                mDcTracker.releaseNetwork(networkRequest, localLog, cleanUpOnRelease);
            }
        }
    }
@@ -196,9 +196,10 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                + "newIsActiveForDefault " + newIsActiveForDefault + ")";
        if (DBG) log(logString);

        applyRequests(mSpecificRequests, getAction(mIsActive, newIsActive), logString);
        applyRequests(mDefaultRequests, getAction(mIsActiveForDefault, newIsActiveForDefault),
                logString);
        applyRequestsOnActivePhoneSwitch(mSpecificRequests, false,
                getAction(mIsActive, newIsActive), logString);
        applyRequestsOnActivePhoneSwitch(mDefaultRequests, true,
                getAction(mIsActiveForDefault, newIsActiveForDefault), logString);

        mIsActive = newIsActive;
        mIsActiveForDefault = newIsActiveForDefault;
@@ -279,7 +280,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
            String s = "onReleaseNetworkFor";
            localLog.log(s);
            log(s + " " + networkRequest);
            mDcTracker.releaseNetwork(networkRequest, localLog);
            mDcTracker.releaseNetwork(networkRequest, localLog, false);
        } else {
            String s = "not releasing - isApplicable=" + isApplicable + ", mIsActive=" + mIsActive;
            localLog.log(s);
+2 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.doAnswer;

import android.content.Context;
@@ -116,7 +117,7 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest {
        doAnswer(invocation -> {
            mNetworkRequestList.remove((NetworkRequest) invocation.getArguments()[0]);
            return null;
        }).when(mDcTracker).releaseNetwork(any(), any());
        }).when(mDcTracker).releaseNetwork(any(), any(), anyBoolean());
    }

    @After