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

Commit ecc3bc27 authored by Benedict Wong's avatar Benedict Wong Committed by Automerger Merge Worker
Browse files

Merge "Add Carrier Config Package as OwnerUid" am: ef439d39 am: b8f3dd3e...

Merge "Add Carrier Config Package as OwnerUid" am: ef439d39 am: b8f3dd3e am: a31e63b1 am: 9a5b6ff7

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1905475

Change-Id: Ib402447490244f8ef8a02c59b67e02b9697df7a0
parents 2e3d8131 9a5b6ff7
Loading
Loading
Loading
Loading
+50 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,9 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.PendingIntent;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
import android.net.InetAddresses;
import android.net.InetAddresses;
import android.net.KeepalivePacketData;
import android.net.KeepalivePacketData;
@@ -46,8 +49,10 @@ import android.os.AsyncResult;
import android.os.HandlerExecutor;
import android.os.HandlerExecutor;
import android.os.Message;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.UserManager;
import android.provider.Telephony;
import android.provider.Telephony;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.TransportType;
import android.telephony.AccessNetworkConstants.TransportType;
@@ -97,6 +102,7 @@ import com.android.internal.telephony.metrics.DataCallSessionStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.nano.TelephonyProto.RilDataCall;
import com.android.internal.telephony.nano.TelephonyProto.RilDataCall;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Protocol;
import com.android.internal.util.Protocol;
@@ -1952,6 +1958,15 @@ public class DataConnection extends StateMachine {
            builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED);
            builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED);
        }
        }


        final int carrierServicePackageUid = getCarrierServicePackageUid();

        // TODO(b/205736323): Owner and Admin UIDs currently come from separate data sources. Unify
        //                    them, and remove ArrayUtils.contains() check.
        if (carrierServicePackageUid != Process.INVALID_UID
                && ArrayUtils.contains(mAdministratorUids, carrierServicePackageUid)) {
            builder.setOwnerUid(carrierServicePackageUid);
            // TODO: If carrier-restricted, add appropriate INTERNAL_NETWORK and AccessUids
        }
        builder.setAdministratorUids(mAdministratorUids);
        builder.setAdministratorUids(mAdministratorUids);


        // Always start with NOT_VCN_MANAGED, then remove if VcnManager indicates this is part of a
        // Always start with NOT_VCN_MANAGED, then remove if VcnManager indicates this is part of a
@@ -1964,6 +1979,41 @@ public class DataConnection extends StateMachine {
        return builder.build();
        return builder.build();
    }
    }


    // TODO(b/205736323): Once TelephonyManager#getCarrierServicePackageNameForLogicalSlot() is
    //                    plumbed to CarrierPrivilegesTracker's cache, query the cached UIDs.
    private int getFirstUidForPackage(String pkgName) {
        if (pkgName == null) {
            return Process.INVALID_UID;
        }

        List<UserInfo> users = mPhone.getContext().getSystemService(UserManager.class).getUsers();
        for (UserInfo user : users) {
            int userId = user.getUserHandle().getIdentifier();
            try {
                PackageManager pm = mPhone.getContext().getPackageManager();

                if (pm != null) {
                    return pm.getPackageUidAsUser(pkgName, userId);
                }
            } catch (NameNotFoundException exception) {
                // Didn't find package. Try other users
                Rlog.i(
                        "DataConnection",
                        "Unable to find uid for package " + pkgName + " and user " + userId);
            }
        }
        return Process.INVALID_UID;
    }

    private int getCarrierServicePackageUid() {
        String pkgName =
                mPhone.getContext()
                        .getSystemService(TelephonyManager.class)
                        .getCarrierServicePackageNameForLogicalSlot(mPhone.getPhoneId());

        return getFirstUidForPackage(pkgName);
    }

    /**
    /**
     * Returns whether the Network represented by this DataConnection is VCN-managed.
     * Returns whether the Network represented by this DataConnection is VCN-managed.
     *
     *
+36 −0
Original line number Original line Diff line number Diff line
@@ -43,6 +43,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;


import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.net.InetAddresses;
import android.net.InetAddresses;
import android.net.KeepalivePacketData;
import android.net.KeepalivePacketData;
import android.net.LinkAddress;
import android.net.LinkAddress;
@@ -54,6 +57,7 @@ import android.os.AsyncResult;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.Message;
import android.os.Message;
import android.os.UserManager;
import android.provider.Telephony;
import android.provider.Telephony;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
@@ -61,6 +65,7 @@ import android.telephony.CarrierConfigManager;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.ServiceState.RegState;
import android.telephony.ServiceState.RegState;
import android.telephony.ServiceState.RilRadioTechnology;
import android.telephony.ServiceState.RilRadioTechnology;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataProfile;
import android.telephony.data.DataProfile;
@@ -865,6 +870,37 @@ public class DataConnectionTest extends TelephonyTest {
        assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED));
        assertTrue(getNetworkCapabilities().hasCapability(NET_CAPABILITY_NOT_CONGESTED));
    }
    }


    @Test
    public void testOwnerUid() throws Exception {
        Context mockContext = mContextFixture.getTestDouble();
        doReturn(mockContext).when(mPhone).getContext();

        String testPkg = "com.android.telephony.test";
        TelephonyManager telMgr = mockContext.getSystemService(TelephonyManager.class);
        doReturn(testPkg).when(telMgr).getCarrierServicePackageNameForLogicalSlot(anyInt());

        UserInfo info = new UserInfo(0 /* id */, "TEST_USER", 0 /* flags */);
        UserManager userMgr = mockContext.getSystemService(UserManager.class);
        doReturn(Collections.singletonList(info)).when(userMgr).getUsers();

        int carrierConfigPkgUid = 12345;
        PackageManager pkgMgr = mockContext.getPackageManager();
        doReturn(carrierConfigPkgUid).when(pkgMgr).getPackageUidAsUser(eq(testPkg), anyInt());

        mContextFixture
                .getCarrierConfigBundle()
                .putStringArray(
                        CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                        new String[] {"default"});
        testConnectEvent();
        AsyncResult adminUidsResult = new AsyncResult(null, new int[] {carrierConfigPkgUid}, null);
        mDc.sendMessage(DataConnection.EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED, adminUidsResult);
        // Wait for carirer privilege UIDs to be updated
        waitForMs(100);

        assertEquals(carrierConfigPkgUid, getNetworkCapabilities().getOwnerUid());
    }

    @Test
    @Test
    public void testSubscriptionIds() throws Exception {
    public void testSubscriptionIds() throws Exception {
        mContextFixture.getCarrierConfigBundle().putStringArray(
        mContextFixture.getCarrierConfigBundle().putStringArray(