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

Commit 9df10324 authored by Ruslan Tkhakokhov's avatar Ruslan Tkhakokhov Committed by Automerger Merge Worker
Browse files

Merge "Skip backup/restore of wallpaper package" into rvc-dev am: 6eca78cd

Change-Id: I6d4a3ef152735e52312c827d8436853707eb1b27
parents 9d66fadc 6eca78cd
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -318,6 +318,9 @@ public class UserBackupManagerService {

    private static final String SERIAL_ID_FILE = "serial_id";

    private static final String SKIP_USER_FACING_DATA = "backup_skip_user_facing_data";
    private static final String WALLPAPER_PACKAGE = "com.android.wallpaperbackup";

    private final @UserIdInt int mUserId;
    private final BackupAgentTimeoutParameters mAgentTimeoutParameters;
    private final TransportManager mTransportManager;
@@ -3553,6 +3556,40 @@ public class UserBackupManagerService {
        }
    }

    /**
     * We want to skip backup/restore of certain packages if 'backup_skip_user_facing_data' is
     * set to true in secure settings. See b/153940088 for details.
     *
     * TODO(b/154822946): Remove this logic in the next release.
     */
    public List<PackageInfo> filterUserFacingPackages(List<PackageInfo> packages) {
        if (!shouldSkipUserFacingData()) {
            return packages;
        }

        List<PackageInfo> filteredPackages = new ArrayList<>(packages.size());
        for (PackageInfo packageInfo : packages)  {
            if (!shouldSkipPackage(packageInfo.packageName)) {
                filteredPackages.add(packageInfo);
            } else {
                Slog.i(TAG, "Will skip backup/restore for " + packageInfo.packageName);
            }
        }

        return filteredPackages;
    }

    @VisibleForTesting
    public boolean shouldSkipUserFacingData() {
        return Settings.Secure.getInt(mContext.getContentResolver(), SKIP_USER_FACING_DATA,
                /* def */ 0) != 0;
    }

    @VisibleForTesting
    public boolean shouldSkipPackage(String packageName) {
        return WALLPAPER_PACKAGE.equals(packageName);
    }

    private void updateStateForTransport(String newTransportName) {
        // Publish the name change
        Settings.Secure.putStringForUser(mContext.getContentResolver(),
+4 −1
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -131,7 +132,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba
    private UserBackupManagerService mUserBackupManagerService;
    private final Object mCancelLock = new Object();

    ArrayList<PackageInfo> mPackages;
    List<PackageInfo> mPackages;
    PackageInfo mCurrentPackage;
    boolean mUpdateSchedule;
    CountDownLatch mLatch;
@@ -249,6 +250,8 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba
                        null);
            }
        }

        mPackages = backupManagerService.filterUserFacingPackages(mPackages);
    }

    private void registerTask() {
+2 −0
Original line number Diff line number Diff line
@@ -270,6 +270,8 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask {
            }
        }

        mAcceptSet = backupManagerService.filterUserFacingPackages(mAcceptSet);

        if (MORE_DEBUG) {
            Slog.v(TAG, "Restore; accept set size is " + mAcceptSet.size());
            for (PackageInfo info : mAcceptSet) {
+46 −0
Original line number Diff line number Diff line
@@ -30,10 +30,13 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.expectThrows;

import android.app.backup.BackupManager;
@@ -86,6 +89,7 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
@@ -104,6 +108,7 @@ public class UserBackupManagerServiceTest {
    private static final String TAG = "BMSTest";
    private static final String PACKAGE_1 = "some.package.1";
    private static final String PACKAGE_2 = "some.package.2";
    private static final String USER_FACING_PACKAGE = "user.facing.package";
    private static final int USER_ID = 10;

    @Mock private TransportManager mTransportManager;
@@ -1186,6 +1191,47 @@ public class UserBackupManagerServiceTest {
                eq(packageTrackingReceiver), eq(UserHandle.of(USER_ID)), any(), any(), any());
    }

    @Test
    public void testFilterUserFacingPackages_shouldSkipUserFacing_filtersUserFacing() {
        List<PackageInfo> packages = Arrays.asList(getPackageInfo(USER_FACING_PACKAGE),
                getPackageInfo(PACKAGE_1));
        UserBackupManagerService backupManagerService = spy(
                createUserBackupManagerServiceAndRunTasks());
        when(backupManagerService.shouldSkipUserFacingData()).thenReturn(true);
        when(backupManagerService.shouldSkipPackage(eq(USER_FACING_PACKAGE))).thenReturn(true);

        List<PackageInfo> filteredPackages = backupManagerService.filterUserFacingPackages(
                packages);

        assertFalse(containsPackage(filteredPackages, USER_FACING_PACKAGE));
        assertTrue(containsPackage(filteredPackages, PACKAGE_1));
    }

    @Test
    public void testFilterUserFacingPackages_shouldNotSkipUserFacing_doesNotFilterUserFacing() {
        List<PackageInfo> packages = Arrays.asList(getPackageInfo(USER_FACING_PACKAGE),
                getPackageInfo(PACKAGE_1));
        UserBackupManagerService backupManagerService = spy(
                createUserBackupManagerServiceAndRunTasks());
        when(backupManagerService.shouldSkipUserFacingData()).thenReturn(false);
        when(backupManagerService.shouldSkipPackage(eq(USER_FACING_PACKAGE))).thenReturn(true);

        List<PackageInfo> filteredPackages = backupManagerService.filterUserFacingPackages(
                packages);

        assertTrue(containsPackage(filteredPackages, USER_FACING_PACKAGE));
        assertTrue(containsPackage(filteredPackages, PACKAGE_1));
    }

    private static boolean containsPackage(List<PackageInfo> packages, String targetPackage) {
        for (PackageInfo packageInfo : packages) {
            if (targetPackage.equals(packageInfo.packageName)) {
                return true;
            }
        }
        return false;
    }

    private UserBackupManagerService createUserBackupManagerServiceAndRunTasks() {
        return BackupManagerServiceTestUtils.createUserBackupManagerServiceAndRunTasks(
                USER_ID, mContext, mBackupThread, mBaseStateDir, mDataDir, mTransportManager);