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

Commit d6c6e3ea authored by Chen Xu's avatar Chen Xu Committed by Automerger Merge Worker
Browse files

Merge "allow CBR to write SMS database" am: b5090807

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1353206

Change-Id: Id9aa98b6ecf7904aad50f276e4b58d55d8820ab2
parents 1762dfed b5090807
Loading
Loading
Loading
Loading
+18 −9
Original line number Original line Diff line number Diff line
@@ -542,13 +542,16 @@ public final class SmsApplication {


        // Assign permission to special system apps
        // Assign permission to special system apps
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
                PHONE_PACKAGE_NAME);
                PHONE_PACKAGE_NAME, true);
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
                BLUETOOTH_PACKAGE_NAME);
                BLUETOOTH_PACKAGE_NAME, true);
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
                MMS_SERVICE_PACKAGE_NAME);
                MMS_SERVICE_PACKAGE_NAME, true);
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
                TELEPHONY_PROVIDER_PACKAGE_NAME);
                TELEPHONY_PROVIDER_PACKAGE_NAME, true);
        // CellbroadcastReceiver is a mainline module thus skip signature match.
        assignExclusiveSmsPermissionsToSystemApp(context, packageManager, appOps,
                CellBroadcastUtils.getDefaultCellBroadcastReceiverPackageName(context), false);


        // Give AppOps permission to UID 1001 which contains multiple
        // Give AppOps permission to UID 1001 which contains multiple
        // apps, all of them should be able to write to telephony provider.
        // apps, all of them should be able to write to telephony provider.
@@ -738,17 +741,23 @@ public final class SmsApplication {
     * @param packageManager The package manager instance
     * @param packageManager The package manager instance
     * @param appOps The AppOps manager instance
     * @param appOps The AppOps manager instance
     * @param packageName The package name of the system app
     * @param packageName The package name of the system app
     * @param sigatureMatch whether to check signature match
     */
     */
    private static void assignExclusiveSmsPermissionsToSystemApp(Context context,
    private static void assignExclusiveSmsPermissionsToSystemApp(Context context,
            PackageManager packageManager, AppOpsManager appOps, String packageName) {
            PackageManager packageManager, AppOpsManager appOps, String packageName,
            boolean sigatureMatch) {
        // First check package signature matches the caller's package signature.
        // First check package signature matches the caller's package signature.
        // Since this class is only used internally by the system, this check makes sure
        // Since this class is only used internally by the system, this check makes sure
        // the package signature matches system signature.
        // the package signature matches system signature.
        final int result = packageManager.checkSignatures(context.getPackageName(), packageName);
        if (sigatureMatch) {
            final int result = packageManager.checkSignatures(context.getPackageName(),
                    packageName);
            if (result != PackageManager.SIGNATURE_MATCH) {
            if (result != PackageManager.SIGNATURE_MATCH) {
                Log.e(LOG_TAG, packageName + " does not have system signature");
                Log.e(LOG_TAG, packageName + " does not have system signature");
                return;
                return;
            }
            }
        }

        try {
        try {
            PackageInfo info = packageManager.getPackageInfo(packageName, 0);
            PackageInfo info = packageManager.getPackageInfo(packageName, 0);
            int mode = appOps.unsafeCheckOp(AppOpsManager.OPSTR_WRITE_SMS, info.applicationInfo.uid,
            int mode = appOps.unsafeCheckOp(AppOpsManager.OPSTR_WRITE_SMS, info.applicationInfo.uid,