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

Commit f9334e8f authored by Cody Kesting's avatar Cody Kesting
Browse files

Use CarrierPrivilegesTracker in DataConnection.

CarrierPrivilegesTracker is included in Phone and DataConnection in
order to populate the NetworkCapabilities for a DataConnection network
as it's brought up. Specifically, CarrierPrivilegesTracker provides the
carrier privileged uids for the Phone under which the DataConnection
exists.

Bug: 147391402
Test: Tested on crosshatch build
Change-Id: I582eec1695d5045348ad204a7096c92d45ff53e0
parent 29712053
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ public class CarrierPrivilegesTracker extends Handler {

    // Map of PackageName -> UIDs for that Package
    private final Map<String, Set<Integer>> mCachedUids;
    private int[] mPrivilegedUids;
    protected int[] mPrivilegedUids;

    private final BroadcastReceiver mIntentReceiver =
            new BroadcastReceiver() {
@@ -198,10 +198,11 @@ public class CarrierPrivilegesTracker extends Handler {
            @NonNull Looper looper, @NonNull Phone phone, @NonNull Context context) {
        super(looper);
        mContext = context;
        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
        mPackageManager = context.getSystemService(PackageManager.class);
        mUserManager = context.getSystemService(UserManager.class);
        mTelephonyManager = context.getSystemService(TelephonyManager.class);
        mCarrierConfigManager =
                (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
        mPackageManager = mContext.getPackageManager();
        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
        mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
        mPhone = phone;

        IntentFilter filter = new IntentFilter();
+11 −0
Original line number Diff line number Diff line
@@ -417,6 +417,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {

    private boolean mUnitTestMode;

    private final CarrierPrivilegesTracker mCarrierPrivilegesTracker;

    public IccRecords getIccRecords() {
        return mIccRecords.get();
    }
@@ -538,6 +540,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        mIsVoiceCapable = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
                .isVoiceCapable();

        mCarrierPrivilegesTracker = new CarrierPrivilegesTracker(mLooper, this, mContext);

        /**
         *  Some RIL's don't always send RIL_UNSOL_CALL_RING so it needs
         *  to be generated locally. Ideally all ring tones should be loops
@@ -4237,6 +4241,11 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return "";
    }

    /** @hide */
    public CarrierPrivilegesTracker getCarrierPrivilegesTracker() {
        return mCarrierPrivilegesTracker;
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("Phone: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
@@ -4274,6 +4283,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        pw.println(" isInEmergencySmsMode=" + isInEmergencySmsMode());
        pw.println(" isEcmCanceledForEmergency=" + isEcmCanceledForEmergency());
        pw.println(" service state=" + getServiceState());
        String privilegedUids = Arrays.toString(mCarrierPrivilegesTracker.mPrivilegedUids);
        pw.println(" administratorUids=" + privilegedUids);
        pw.flush();
        pw.println("++++++++++++++++++++++++++++++++");

+34 −2
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ import java.lang.annotation.RetentionPolicy;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
@@ -182,6 +183,8 @@ public class DataConnection extends StateMachine {

    private final LocalLog mHandoverLocalLog = new LocalLog(100);

    private int[] mAdministratorUids = new int[0];

    /**
     * Used internally for saving connecting parameters.
     */
@@ -329,8 +332,8 @@ public class DataConnection extends StateMachine {
    static final int EVENT_DATA_CONNECTION_METEREDNESS_CHANGED = BASE + 28;
    static final int EVENT_NR_FREQUENCY_CHANGED = BASE + 29;
    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;
    static final int EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED = BASE + 31;
    private static final int CMD_TO_STRING_COUNT = EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED - BASE + 1;

    private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
    static {
@@ -372,6 +375,8 @@ public class DataConnection extends StateMachine {
        sCmdToString[EVENT_NR_FREQUENCY_CHANGED - BASE] = "EVENT_NR_FREQUENCY_CHANGED";
        sCmdToString[EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED - BASE] =
                "EVENT_CARRIER_CONFIG_LINK_BANDWIDTHS_CHANGED";
        sCmdToString[EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED - BASE] =
                "EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED";
    }
    // Convert cmd to string or null if unknown
    static String cmdToString(int cmd) {
@@ -1414,6 +1419,8 @@ public class DataConnection extends StateMachine {
                mNetworkInfo.getDetailedState() == NetworkInfo.DetailedState.SUSPENDED;
        result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED, !suspended);

        result.setAdministratorUids(mAdministratorUids);

        return result;
    }

@@ -1942,6 +1949,10 @@ public class DataConnection extends StateMachine {
            // tear down the connection through networkAgent unwanted callback if all requests for
            // this connection are going away.
            mRestrictedNetworkOverride = shouldRestrictNetwork();

            mPhone.getCarrierPrivilegesTracker()
                    .registerCarrierPrivilegesListener(
                            getHandler(), EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED, null);
        }
        @Override
        public boolean processMessage(Message msg) {
@@ -2031,6 +2042,12 @@ public class DataConnection extends StateMachine {
                    }
                    retVal = HANDLED;
                    break;
                case EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED:
                    AsyncResult asyncResult = (AsyncResult) msg.obj;
                    int[] administratorUids = (int[]) asyncResult.result;
                    mAdministratorUids = Arrays.copyOf(administratorUids, administratorUids.length);
                    retVal = HANDLED;
                    break;
                default:
                    if (VDBG) {
                        log("DcActivatingState not handled msg.what=" +
@@ -2208,6 +2225,8 @@ public class DataConnection extends StateMachine {

            TelephonyMetrics.getInstance().writeRilDataCallEvent(mPhone.getPhoneId(),
                    mCid, mApnSetting.getApnTypeBitmask(), RilDataCall.State.DISCONNECTED);

            mPhone.getCarrierPrivilegesTracker().unregisterCarrierPrivilegesListener(getHandler());
        }

        @Override
@@ -2528,6 +2547,19 @@ public class DataConnection extends StateMachine {
                    retVal = HANDLED;
                    break;
                }
                case EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED:
                    AsyncResult asyncResult = (AsyncResult) msg.obj;
                    int[] administratorUids = (int[]) asyncResult.result;
                    mAdministratorUids = Arrays.copyOf(administratorUids, administratorUids.length);

                    // Administrator UIDs changed, so update NetworkAgent with new
                    // NetworkCapabilities
                    if (mNetworkAgent != null) {
                        mNetworkAgent.sendNetworkCapabilities(
                                getNetworkCapabilities(), DataConnection.this);
                    }
                    retVal = HANDLED;
                    break;
                default:
                    if (VDBG) {
                        log("DcActiveState not handled msg.what=" + getWhatToString(msg.what));
+3 −0
Original line number Diff line number Diff line
@@ -278,6 +278,8 @@ public abstract class TelephonyTest {
    protected IccCard mIccCard;
    @Mock
    protected NetworkStatsManager mStatsManager;
    @Mock
    protected CarrierPrivilegesTracker mCarrierPrivilegesTracker;

    protected ActivityManager mActivityManager;
    protected ImsCallProfile mImsCallProfile;
@@ -495,6 +497,7 @@ public abstract class TelephonyTest {
        doReturn(mTransportManager).when(mPhone).getTransportManager();
        doReturn(mDataEnabledSettings).when(mPhone).getDataEnabledSettings();
        doReturn(mDcTracker).when(mPhone).getDcTracker(anyInt());
        doReturn(mCarrierPrivilegesTracker).when(mPhone).getCarrierPrivilegesTracker();
        mIccSmsInterfaceManager.mDispatchersController = mSmsDispatchersController;

        //mUiccController