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

Commit 262eb299 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 8292183 from 0ba86a57 to tm-d1-release

Change-Id: I85df962f0202b848c313532b401e8c1f125f033d
parents ccd46cc6 0ba86a57
Loading
Loading
Loading
Loading
+92 −27
Original line number Diff line number Diff line
@@ -69,12 +69,12 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IntArray;
import android.util.LocalLog;
import android.util.Pair;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.UiccPort;
import com.android.internal.telephony.uicc.UiccProfile;
import com.android.internal.util.ArrayUtils;
import com.android.telephony.Rlog;

import java.io.FileDescriptor;
@@ -85,6 +85,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;
import java.util.concurrent.TimeUnit;
@@ -216,19 +217,21 @@ public class CarrierPrivilegesTracker extends Handler {
    /** Small snapshot to hold package names and UIDs of privileged packages. */
    private static final class PrivilegedPackageInfo {
        @NonNull final Set<String> mPackageNames;
        @NonNull final int[] mUids; // Note: must be kept sorted for equality purposes
        @NonNull final Set<Integer> mUids;
        // The carrier service (packageName, UID) pair
        @NonNull final Pair<String, Integer> mCarrierService;

        PrivilegedPackageInfo() {
            mPackageNames = Collections.emptySet();
            mUids = new int[0];
            mUids = Collections.emptySet();
            mCarrierService = new Pair<>(null, Process.INVALID_UID);
        }

        PrivilegedPackageInfo(@NonNull Set<String> packageNames, @NonNull Set<Integer> uids) {
        PrivilegedPackageInfo(@NonNull Set<String> packageNames, @NonNull Set<Integer> uids,
                @NonNull Pair<String, Integer> carrierService) {
            mPackageNames = packageNames;
            IntArray converter = new IntArray(uids.size());
            uids.forEach(converter::add);
            mUids = converter.toArray();
            Arrays.sort(mUids); // for equality purposes
            mUids = uids;
            mCarrierService = carrierService;
        }

        @Override
@@ -236,7 +239,11 @@ public class CarrierPrivilegesTracker extends Handler {
            return "{packageNames="
                    + getObfuscatedPackages(mPackageNames, pkg -> Rlog.pii(TAG, pkg))
                    + ", uids="
                    + Arrays.toString(mUids)
                    + mUids
                    + ", carrierServicePackageName="
                    + Rlog.pii(TAG, mCarrierService.first)
                    + ", carrierServiceUid="
                    + mCarrierService.second
                    + "}";
        }

@@ -249,13 +256,13 @@ public class CarrierPrivilegesTracker extends Handler {
                return false;
            }
            PrivilegedPackageInfo other = (PrivilegedPackageInfo) o;
            return mPackageNames.equals(other.mPackageNames) && Arrays.equals(mUids, other.mUids);
            return mPackageNames.equals(other.mPackageNames) && mUids.equals(other.mUids)
                    && mCarrierService.equals(other.mCarrierService);
        }

        @Override
        public int hashCode() {
            // Since we have an array, we have to use deepHashCode instead of "regular" Objects.hash
            return Arrays.deepHashCode(new Object[] {mPackageNames, mUids});
            return Objects.hash(mPackageNames, mUids, mCarrierService);
        }
    }

@@ -406,9 +413,10 @@ public class CarrierPrivilegesTracker extends Handler {
        mRegistrantList.add(registrant);
        mPrivilegedPackageInfoLock.readLock().lock();
        try {
            // Old registrant callback still takes int[] as parameter, need conversion here
            int[] uids = intSetToArray(mPrivilegedPackageInfo.mUids);
            registrant.notifyResult(
                    Arrays.copyOf(
                            mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length));
                    Arrays.copyOf(uids, uids.length));
        } finally {
            mPrivilegedPackageInfoLock.readLock().unlock();
        }
@@ -641,9 +649,24 @@ public class CarrierPrivilegesTracker extends Handler {
        PrivilegedPackageInfo currentPrivilegedPackageInfo =
                getCurrentPrivilegedPackagesForAllUsers();

        boolean carrierPrivilegesPackageNamesChanged;
        boolean carrierPrivilegesUidsChanged;
        boolean carrierServiceChanged;

        mPrivilegedPackageInfoLock.readLock().lock();
        try {
            if (mPrivilegedPackageInfo.equals(currentPrivilegedPackageInfo)) return;

            mLocalLog.log("Privileged packages info changed. New state = "
                    + currentPrivilegedPackageInfo);

            carrierPrivilegesPackageNamesChanged =
                    !currentPrivilegedPackageInfo.mPackageNames.equals(
                            mPrivilegedPackageInfo.mPackageNames);
            carrierPrivilegesUidsChanged =
                    !currentPrivilegedPackageInfo.mUids.equals(mPrivilegedPackageInfo.mUids);
            carrierServiceChanged = !currentPrivilegedPackageInfo.mCarrierService.equals(
                    mPrivilegedPackageInfo.mCarrierService);
        } finally {
            mPrivilegedPackageInfoLock.readLock().unlock();
        }
@@ -657,16 +680,24 @@ public class CarrierPrivilegesTracker extends Handler {

        mPrivilegedPackageInfoLock.readLock().lock();
        try {
            mLocalLog.log("Privileged packages changed. New state = " + mPrivilegedPackageInfo);
            mRegistrantList.notifyResult(
                    Arrays.copyOf(
                            mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length));
            // The obsoleted callback only care about UIDs
            if (carrierPrivilegesUidsChanged) {
                int[] uids = intSetToArray(mPrivilegedPackageInfo.mUids);
                mRegistrantList.notifyResult(Arrays.copyOf(uids, uids.length));
            }

            if (carrierPrivilegesPackageNamesChanged || carrierPrivilegesUidsChanged) {
                mTelephonyRegistryManager.notifyCarrierPrivilegesChanged(
                        mPhone.getPhoneId(),
                    Collections.unmodifiableList(
                            new ArrayList<>(mPrivilegedPackageInfo.mPackageNames)),
                    Arrays.copyOf(
                            mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length));
                        Collections.unmodifiableSet(mPrivilegedPackageInfo.mPackageNames),
                        Collections.unmodifiableSet(mPrivilegedPackageInfo.mUids));
            }

            if (carrierServiceChanged) {
                mTelephonyRegistryManager.notifyCarrierServiceChanged(mPhone.getPhoneId(),
                        mPrivilegedPackageInfo.mCarrierService.first,
                        mPrivilegedPackageInfo.mCarrierService.second);
            }
        } finally {
            mPrivilegedPackageInfoLock.readLock().unlock();
        }
@@ -687,7 +718,8 @@ public class CarrierPrivilegesTracker extends Handler {
                privilegedUids.addAll(getUidsForPackage(e.getKey(), /* invalidateCache= */ false));
            }
        }
        return new PrivilegedPackageInfo(privilegedPackageNames, privilegedUids);
        return new PrivilegedPackageInfo(privilegedPackageNames, privilegedUids,
                getCarrierService(privilegedPackageNames));
    }

    /**
@@ -746,6 +778,16 @@ public class CarrierPrivilegesTracker extends Handler {
        return uids;
    }

    private int getPackageUid(@Nullable String pkgName) {
        int uid = Process.INVALID_UID;
        try {
            uid = mPackageManager.getPackageUid(pkgName, /* flags= */0);
        } catch (NameNotFoundException e) {
            Rlog.e(TAG, "Unable to find uid for package " + pkgName);
        }
        return uid;
    }

    /**
     * Dump the local log buffer and other internal state of CarrierPrivilegesTracker.
     */
@@ -880,7 +922,7 @@ public class CarrierPrivilegesTracker extends Handler {
        try {
            if (mSimIsReadyButNotLoaded) {
                return CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
            } else if (ArrayUtils.contains(mPrivilegedPackageInfo.mUids, uid)) {
            } else if (mPrivilegedPackageInfo.mUids.contains(uid)) {
                return CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
            } else {
                return CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
@@ -922,7 +964,6 @@ public class CarrierPrivilegesTracker extends Handler {
            mPrivilegedPackageInfoLock.readLock().unlock();
        }


        // Do the PackageManager queries before we take the lock, as these are the longest-running
        // pieces of this method and don't depend on the set of carrier apps.
        List<ResolveInfo> resolveInfos = new ArrayList<>();
@@ -960,4 +1001,28 @@ public class CarrierPrivilegesTracker extends Handler {
        if (resolveInfo.providerInfo != null) return resolveInfo.providerInfo.packageName;
        return null;
    }

    @NonNull
    private Pair<String, Integer> getCarrierService(@NonNull Set<String> privilegedPackageNames) {
        List<ResolveInfo> carrierServiceResolveInfos = mPackageManager.queryIntentServices(
                new Intent(CarrierService.CARRIER_SERVICE_INTERFACE), /* flags= */ 0);
        String carrierServicePackageName = null;
        for (ResolveInfo resolveInfo : carrierServiceResolveInfos) {
            String packageName = getPackageName(resolveInfo);
            if (privilegedPackageNames.contains(packageName)) {
                carrierServicePackageName = packageName;
                break;
            }
        }
        return carrierServicePackageName == null
                ? new Pair<>(null, Process.INVALID_UID)
                : new Pair<>(carrierServicePackageName, getPackageUid(carrierServicePackageName));
    }

    @NonNull
    private static int[] intSetToArray(@NonNull Set<Integer> intSet) {
        IntArray converter = new IntArray(intSet.size());
        intSet.forEach(converter::add);
        return converter.toArray();
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -1483,8 +1483,7 @@ public class DataNetworkController extends Handler {

        // If users switch preferred profile in APN editor, we need to tear down network.
        if (dataNetwork.isInternetSupported()
                && !mDataProfileManager.isDataProfilePreferred(dataProfile)
                && mDataProfileManager.isAnyPreferredDataProfileExisting()) {
                && !mDataProfileManager.isDataProfilePreferred(dataProfile)) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_PROFILE_NOT_PREFERRED);
        }

+0 −12
Original line number Diff line number Diff line
@@ -698,18 +698,6 @@ public class DataProfileManager extends Handler {
        return dataProfile.equals(mPreferredDataProfile);
    }

    /**
     * Check if any preferred data profile exists.
     *
     * @return {@code true} if any preferred data profile exists
     */
    public boolean isAnyPreferredDataProfileExisting() {
        for (DataProfile dataProfile : mAllDataProfiles) {
            if (dataProfile.isPreferred()) return true;
        }
        return false;
    }

    /**
     * Dedupe the similar data profiles.
     */
+6 −2
Original line number Diff line number Diff line
@@ -3720,8 +3720,12 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
            // Check with the DCTracker to see if data is enabled; there may be a case when
            // ImsPhoneCallTracker isn't being informed of the right data enabled state via its
            // registration, so we'll refresh now.
            boolean isDataEnabled = mPhone.getDefaultPhone().getDataEnabledSettings()
                    .isDataEnabled();
            boolean isDataEnabled;
            if (mPhone.getDefaultPhone().isUsingNewDataStack()) {
                isDataEnabled = mPhone.getDefaultPhone().getDataSettingsManager().isDataEnabled();
            } else {
                isDataEnabled = mPhone.getDefaultPhone().getDataEnabledSettings().isDataEnabled();
            }

            if (DBG) {
                log("onCallHandover ::  srcAccessTech=" + srcAccessTech + ", targetAccessTech="
+44 −45

File changed.

Preview size limit exceeded, changes collapsed.

Loading