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

Change-Id: I3aba4f5e96bf60a2e535f9f6d83f136f5bd8be79
This commit is contained in:
Ruslan Tkhakokhov
2020-04-27 15:08:09 +00:00
committed by Automerger Merge Worker
4 changed files with 89 additions and 1 deletions

View File

@@ -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(),

View File

@@ -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() {

View File

@@ -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) {

View File

@@ -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);