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

Commit 3ce431b4 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

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


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


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


        if (mApnSetting != null) {
        if (mApnSetting != null) {
            final String[] types = ApnSetting.getApnTypesStringFromBitmask(
            final String[] types = ApnSetting.getApnTypesStringFromBitmask(
                mApnSetting.getApnTypeBitmask()).split(",");
                mApnSetting.getApnTypeBitmask() & ~mDisabledApnTypeBitMask).split(",");
            for (String type : types) {
            for (String type : types) {
                if (!mRestrictedNetworkOverride && mUnmeteredUseOnly
                if (!mRestrictedNetworkOverride && mUnmeteredUseOnly
                        && ApnSettingUtils.isMeteredApnType(type, mPhone)) {
                        && ApnSettingUtils.isMeteredApnType(type, mPhone)) {
@@ -1760,6 +1762,10 @@ public class DataConnection extends StateMachine {
                    // either add this new apn context to our set or
                    // either add this new apn context to our set or
                    // update the existing cp with the latest connection generation number
                    // update the existing cp with the latest connection generation number
                    mApnContexts.put(cp.mApnContext, cp);
                    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) {
                    if (DBG) {
                        log("DcActiveState: EVENT_CONNECT cp=" + cp + " dc=" + DataConnection.this);
                        log("DcActiveState: EVENT_CONNECT cp=" + cp + " dc=" + DataConnection.this);
                    }
                    }
@@ -1788,6 +1794,10 @@ public class DataConnection extends StateMachine {
                            transitionTo(mDisconnectingState);
                            transitionTo(mDisconnectingState);
                        } else {
                        } else {
                            mApnContexts.remove(dp.mApnContext);
                            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);
                            notifyDisconnectCompleted(dp, false);
                        }
                        }
                    } else {
                    } else {
+6 −2
Original line number Original line Diff line number Diff line
@@ -860,11 +860,15 @@ public class DcTracker extends Handler {
        if (apnContext != null) apnContext.requestNetwork(networkRequest, log);
        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 int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest);
        final ApnContext apnContext = mApnContextsByType.get(apnType);
        final ApnContext apnContext = mApnContextsByType.get(apnType);
        log.log("DcTracker.releaseNetwork for " + networkRequest + " found " + apnContext);
        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.
    // Turn telephony radio on or off.
+8 −7
Original line number Original line 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_REQUEST = 1;
    private static final int ACTION_RELEASE = 2;
    private static final int ACTION_RELEASE = 2;


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


        for (NetworkRequest networkRequest : requestMap.keySet()) {
        for (NetworkRequest networkRequest : requestMap.keySet()) {
@@ -170,7 +170,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
            if (action == ACTION_REQUEST) {
            if (action == ACTION_REQUEST) {
                mDcTracker.requestNetwork(networkRequest, localLog);
                mDcTracker.requestNetwork(networkRequest, localLog);
            } else if (action == ACTION_RELEASE) {
            } 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 + ")";
                + "newIsActiveForDefault " + newIsActiveForDefault + ")";
        if (DBG) log(logString);
        if (DBG) log(logString);


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


        mIsActive = newIsActive;
        mIsActive = newIsActive;
        mIsActiveForDefault = newIsActiveForDefault;
        mIsActiveForDefault = newIsActiveForDefault;
@@ -279,7 +280,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
            String s = "onReleaseNetworkFor";
            String s = "onReleaseNetworkFor";
            localLog.log(s);
            localLog.log(s);
            log(s + " " + networkRequest);
            log(s + " " + networkRequest);
            mDcTracker.releaseNetwork(networkRequest, localLog);
            mDcTracker.releaseNetwork(networkRequest, localLog, false);
        } else {
        } else {
            String s = "not releasing - isApplicable=" + isApplicable + ", mIsActive=" + mIsActive;
            String s = "not releasing - isApplicable=" + isApplicable + ", mIsActive=" + mIsActive;
            localLog.log(s);
            localLog.log(s);
+2 −1
Original line number Original line 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.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doAnswer;


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


    @After
    @After