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

Commit 5c90ff0f authored by Michal Karpinski's avatar Michal Karpinski
Browse files

[RefactoredBMS] Correct scope of "disabled?" check viz backup/restore decisions

This CL replicates ag/2204901 in RefactoredBMS.
Also adjusts tests and adds new ones for appIsDisabled method.

Test: runtest -p com.android.server.backup frameworks-services
Bug: 37973765
Change-Id: Ibaa15ba935ca1ada657e912b18a5a0b3bcffd00f
parent e601150a
Loading
Loading
Loading
Loading
+9 −20
Original line number Diff line number Diff line
@@ -887,7 +887,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                        PackageInfo pkg = mPackageManager.getPackageInfo(pkgName, 0);
                        if (AppBackupUtils.appGetsFullBackup(pkg)
                                && AppBackupUtils.appIsEligibleForBackup(
                                pkg.applicationInfo)) {
                                pkg.applicationInfo, mPackageManager)) {
                            schedule.add(new FullBackupEntry(pkgName, lastBackup));
                        } else {
                            if (DEBUG) {
@@ -908,7 +908,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                for (PackageInfo app : apps) {
                    if (AppBackupUtils.appGetsFullBackup(app)
                            && AppBackupUtils.appIsEligibleForBackup(
                            app.applicationInfo)) {
                            app.applicationInfo, mPackageManager)) {
                        if (!foundApps.contains(app.packageName)) {
                            if (MORE_DEBUG) {
                                Slog.i(TAG, "New full backup app " + app.packageName + " found");
@@ -934,7 +934,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
            schedule = new ArrayList<>(apps.size());
            for (PackageInfo info : apps) {
                if (AppBackupUtils.appGetsFullBackup(info) && AppBackupUtils.appIsEligibleForBackup(
                        info.applicationInfo)) {
                        info.applicationInfo, mPackageManager)) {
                    schedule.add(new FullBackupEntry(info.packageName, 0));
                }
            }
@@ -1219,7 +1219,7 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
                        PackageInfo app = mPackageManager.getPackageInfo(packageName, 0);
                        if (AppBackupUtils.appGetsFullBackup(app)
                                && AppBackupUtils.appIsEligibleForBackup(
                                app.applicationInfo)) {
                                app.applicationInfo, mPackageManager)) {
                            enqueueFullBackup(packageName, now);
                            scheduleNextFullBackupJob(0);
                        } else {
@@ -1577,7 +1577,8 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
            try {
                PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName,
                        PackageManager.GET_SIGNATURES);
                if (!AppBackupUtils.appIsEligibleForBackup(packageInfo.applicationInfo)) {
                if (!AppBackupUtils.appIsEligibleForBackup(packageInfo.applicationInfo,
                        mPackageManager)) {
                    BackupObserverUtils.sendBackupOnPackageResult(observer, packageName,
                            BackupManager.ERROR_BACKUP_NOT_ALLOWED);
                    continue;
@@ -3206,19 +3207,6 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
        }
    }

    // We also avoid backups of 'disabled' apps
    private static boolean appIsDisabled(ApplicationInfo app, PackageManager pm) {
        switch (pm.getApplicationEnabledSetting(app.packageName)) {
            case PackageManager.COMPONENT_ENABLED_STATE_DISABLED:
            case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER:
            case PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED:
                return true;

            default:
                return false;
        }
    }

    @Override
    public boolean isAppEligibleForBackup(String packageName) {
        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
@@ -3226,9 +3214,10 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
        try {
            PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName,
                    PackageManager.GET_SIGNATURES);
            if (!AppBackupUtils.appIsEligibleForBackup(packageInfo.applicationInfo) ||
            if (!AppBackupUtils.appIsEligibleForBackup(packageInfo.applicationInfo,
                            mPackageManager) ||
                    AppBackupUtils.appIsStopped(packageInfo.applicationInfo) ||
                    appIsDisabled(packageInfo.applicationInfo, mPackageManager)) {
                    AppBackupUtils.appIsDisabled(packageInfo.applicationInfo, mPackageManager)) {
                return false;
            }
            IBackupTransport transport = mTransportManager.getCurrentTransportBinder();
+3 −4
Original line number Diff line number Diff line
@@ -236,12 +236,11 @@ public class PerformAdbBackupTask extends FullBackupTask implements BackupRestor
        obbConnection.establish();  // we'll want this later

        sendStartBackup();
        PackageManager pm = backupManagerService.getPackageManager();

        // doAllApps supersedes the package set if any
        if (mAllApps) {
            List<PackageInfo> allPackages =
                    backupManagerService.getPackageManager().getInstalledPackages(
                            PackageManager.GET_SIGNATURES);
            List<PackageInfo> allPackages = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);
            for (int i = 0; i < allPackages.size(); i++) {
                PackageInfo pkg = allPackages.get(i);
                // Exclude system apps if we've been asked to do so
@@ -288,7 +287,7 @@ public class PerformAdbBackupTask extends FullBackupTask implements BackupRestor
        Iterator<Entry<String, PackageInfo>> iter = packagesToBackup.entrySet().iterator();
        while (iter.hasNext()) {
            PackageInfo pkg = iter.next().getValue();
            if (!AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo)
            if (!AppBackupUtils.appIsEligibleForBackup(pkg.applicationInfo, pm)
                    || AppBackupUtils.appIsStopped(pkg.applicationInfo)) {
                iter.remove();
                if (DEBUG) {
+3 −3
Original line number Diff line number Diff line
@@ -140,10 +140,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba

        for (String pkg : whichPackages) {
            try {
                PackageInfo info = backupManagerService.getPackageManager().getPackageInfo(pkg,
                        PackageManager.GET_SIGNATURES);
                PackageManager pm = backupManagerService.getPackageManager();
                PackageInfo info = pm.getPackageInfo(pkg, PackageManager.GET_SIGNATURES);
                mCurrentPackage = info;
                if (!AppBackupUtils.appIsEligibleForBackup(info.applicationInfo)) {
                if (!AppBackupUtils.appIsEligibleForBackup(info.applicationInfo, pm)) {
                    // Cull any packages that have indicated that backups are not permitted,
                    // that run as system-domain uids but do not define their own backup agents,
                    // as well as any explicit mention of the 'special' shared-storage agent
+3 −5
Original line number Diff line number Diff line
@@ -390,11 +390,9 @@ public class PerformBackupTask implements BackupRestoreTask {
        // to sanity-check here.  This also gives us the classname of the
        // package's backup agent.
        try {
            mCurrentPackage = backupManagerService.getPackageManager().getPackageInfo(
                    request.packageName,
                    PackageManager.GET_SIGNATURES);
            if (!AppBackupUtils.appIsEligibleForBackup(
                    mCurrentPackage.applicationInfo)) {
            PackageManager pm = backupManagerService.getPackageManager();
            mCurrentPackage = pm.getPackageInfo(request.packageName, PackageManager.GET_SIGNATURES);
            if (!AppBackupUtils.appIsEligibleForBackup(mCurrentPackage.applicationInfo, pm)) {
                // The manifest has changed but we had a stale backup request pending.
                // This won't happen again because the app won't be requesting further
                // backups.
+3 −4
Original line number Diff line number Diff line
@@ -198,8 +198,8 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {
            boolean hasSettings = false;
            for (int i = 0; i < filterSet.length; i++) {
                try {
                    PackageInfo info = backupManagerService.getPackageManager().getPackageInfo(
                            filterSet[i], 0);
                    PackageManager pm = backupManagerService.getPackageManager();
                    PackageInfo info = pm.getPackageInfo(filterSet[i], 0);
                    if ("android".equals(info.packageName)) {
                        hasSystem = true;
                        continue;
@@ -209,8 +209,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {
                        continue;
                    }

                    if (AppBackupUtils.appIsEligibleForBackup(
                            info.applicationInfo)) {
                    if (AppBackupUtils.appIsEligibleForBackup(info.applicationInfo, pm)) {
                        mAcceptSet.add(info);
                    }
                } catch (NameNotFoundException e) {
Loading