Loading packages/LocalTransport/src/com/android/localtransport/LocalTransport.java +7 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.localtransport; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.backup.BackupAgent; import android.app.backup.BackupAgent.BackupTransportFlags; import android.app.backup.BackupAnnotations; import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; Loading Loading @@ -662,8 +663,13 @@ public class LocalTransport extends BackupTransport { mParameters.isDeviceTransfer() ? DEVICE_NAME_FOR_D2D_RESTORE_SET : DEFAULT_DEVICE_NAME_FOR_RESTORE_SET; @BackupTransportFlags int transportFlags = 0; if (Flags.enableCrossPlatformTransfer() && mParameters.isCrossPlatformTransferIos()) { transportFlags |= BackupAgent.FLAG_CROSS_PLATFORM_DATA_TRANSFER_IOS; } for (int i = 0; i < available.length; i++) { available[i] = new RestoreSet("Local disk image", deviceName, existing[i]); available[i] = new RestoreSet("Local disk image", deviceName, existing[i], transportFlags); } return available; } Loading services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java +6 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,12 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device) ? BackupDestination.DEVICE_TRANSFER : BackupDestination.CLOUD; if (Flags.enableCrossPlatformTransfer() && ((restoreSet.backupTransportFlags & BackupAgent.FLAG_CROSS_PLATFORM_DATA_TRANSFER_IOS) != 0)) { backupDestination = BackupDestination.CROSS_PLATFORM_TRANSFER; } if (!Flags.enableSkippingRestoreLaunchedApps()) { return mBackupManagerService.getEligibilityRulesForOperation(backupDestination); Loading services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java +8 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.app.ApplicationThreadConstants; import android.app.IBackupAgent; import android.app.backup.BackupAgent; import android.app.backup.BackupAnnotations; import android.app.backup.BackupAnnotations.BackupDestination; import android.app.backup.BackupManagerMonitor; import android.app.backup.FullBackup; import android.app.backup.IBackupManagerMonitor; Loading Loading @@ -800,11 +801,16 @@ public class FullRestoreEngine extends RestoreEngine { } private boolean isRestorableFile(FileMetadata info) { if (mBackupEligibilityRules.getBackupDestination() == BackupAnnotations.BackupDestination.DEVICE_TRANSFER) { if (mBackupEligibilityRules.getBackupDestination() == BackupDestination.DEVICE_TRANSFER) { // Everything is eligible for device-to-device migration. return true; } else if (Flags.enableCrossPlatformTransfer() && mBackupEligibilityRules.getBackupDestination() == BackupDestination.CROSS_PLATFORM_TRANSFER) { // Everything is eligible for cross platform transfers. return true; } if (FullBackup.CACHE_TREE_TOKEN.equals(info.domain)) { if (DEBUG) { Slog.i(TAG, "Dropping cache file path " + info.path); Loading services/tests/mockingservicestests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java +40 −8 Original line number Diff line number Diff line Loading @@ -18,17 +18,20 @@ package com.android.server.backup.restore; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import android.app.backup.BackupAgent; import android.app.backup.BackupAnnotations.BackupDestination; import android.app.backup.RestoreSet; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.os.UserManager; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; Loading Loading @@ -57,8 +60,8 @@ public class ActiveRestoreSessionTest { private ApplicationInfo mTestApp; @Mock private UserBackupManagerService mBackupManagerService; @Mock private BackupEligibilityRules mBackupEligibilityRules; @Mock private Context mContext; @Mock private PackageManager mPackageManager; @Mock private PackageManagerInternal mPackageManagerInternal; @Mock private TransportManager mTransportManager; @Mock private UserManager mUserManager; Loading @@ -76,11 +79,18 @@ public class ActiveRestoreSessionTest { @Before public void setUp() { MockitoAnnotations.initMocks(/* testClass */ this); when(mBackupEligibilityRules.isAppEligibleForRestore(any())).thenReturn(true); when(mBackupManagerService.getEligibilityRulesForOperation(anyInt())) .thenReturn(mBackupEligibilityRules); when(mBackupManagerService.getTransportManager()).thenReturn(mTransportManager); when(mBackupManagerService.getContext()).thenReturn(mContext); when(mBackupManagerService.getEligibilityRulesForOperation(anyInt())) .thenAnswer( invocation -> { return new BackupEligibilityRules( mPackageManager, mPackageManagerInternal, 0, mContext, invocation.getArgument(0)); }); when(mContext.getSystemService(eq(UserManager.class))).thenReturn(mUserManager); when(LocalServices.getService(PackageManagerInternal.class)) .thenReturn(mPackageManagerInternal); Loading @@ -90,14 +100,19 @@ public class ActiveRestoreSessionTest { mBackupManagerService, /* packageName */ null, /* transportName */ "", mBackupEligibilityRules); new BackupEligibilityRules( mPackageManager, mPackageManagerInternal, 0, mContext, BackupDestination.CLOUD)); mTestApp = new ApplicationInfo(); mTestApp.packageName = TEST_APP_NAME; } @Test @EnableFlags({Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS}) public void testGetBackupEligibilityRules_skipRestoreFlagOn_skipsLaunchedAppRestore() { mFlagsRule.enableFlags(Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS); RestoreSet restoreSet = new RestoreSet( /* name */ null, Loading @@ -114,8 +129,8 @@ public class ActiveRestoreSessionTest { } @Test @DisableFlags({Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS}) public void testGetBackupEligibilityRules_skipRestoreFlagOff_allowsAppRestore() { mFlagsRule.disableFlags(Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS); RestoreSet restoreSet = new RestoreSet( /* name */ null, Loading @@ -130,4 +145,21 @@ public class ActiveRestoreSessionTest { assertThat(eligibilityRules.isAppEligibleForRestore(mTestApp)).isTrue(); } @Test @EnableFlags({Flags.FLAG_ENABLE_CROSS_PLATFORM_TRANSFER}) public void testGetBackupEligibilityRules_crossPlatformTransfer_hasCorrectDestination() { RestoreSet restoreSet = new RestoreSet( /* name= */ null, /* device= */ "D2D", /* token= */ 1, BackupAgent.FLAG_CROSS_PLATFORM_DATA_TRANSFER_IOS); BackupEligibilityRules eligibilityRules = mRestoreSession.getBackupEligibilityRules(restoreSet); assertThat(eligibilityRules.getBackupDestination()) .isEqualTo(BackupDestination.CROSS_PLATFORM_TRANSFER); } } Loading
packages/LocalTransport/src/com/android/localtransport/LocalTransport.java +7 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.localtransport; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.backup.BackupAgent; import android.app.backup.BackupAgent.BackupTransportFlags; import android.app.backup.BackupAnnotations; import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; Loading Loading @@ -662,8 +663,13 @@ public class LocalTransport extends BackupTransport { mParameters.isDeviceTransfer() ? DEVICE_NAME_FOR_D2D_RESTORE_SET : DEFAULT_DEVICE_NAME_FOR_RESTORE_SET; @BackupTransportFlags int transportFlags = 0; if (Flags.enableCrossPlatformTransfer() && mParameters.isCrossPlatformTransferIos()) { transportFlags |= BackupAgent.FLAG_CROSS_PLATFORM_DATA_TRANSFER_IOS; } for (int i = 0; i < available.length; i++) { available[i] = new RestoreSet("Local disk image", deviceName, existing[i]); available[i] = new RestoreSet("Local disk image", deviceName, existing[i], transportFlags); } return available; } Loading
services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java +6 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,12 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device) ? BackupDestination.DEVICE_TRANSFER : BackupDestination.CLOUD; if (Flags.enableCrossPlatformTransfer() && ((restoreSet.backupTransportFlags & BackupAgent.FLAG_CROSS_PLATFORM_DATA_TRANSFER_IOS) != 0)) { backupDestination = BackupDestination.CROSS_PLATFORM_TRANSFER; } if (!Flags.enableSkippingRestoreLaunchedApps()) { return mBackupManagerService.getEligibilityRulesForOperation(backupDestination); Loading
services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java +8 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.app.ApplicationThreadConstants; import android.app.IBackupAgent; import android.app.backup.BackupAgent; import android.app.backup.BackupAnnotations; import android.app.backup.BackupAnnotations.BackupDestination; import android.app.backup.BackupManagerMonitor; import android.app.backup.FullBackup; import android.app.backup.IBackupManagerMonitor; Loading Loading @@ -800,11 +801,16 @@ public class FullRestoreEngine extends RestoreEngine { } private boolean isRestorableFile(FileMetadata info) { if (mBackupEligibilityRules.getBackupDestination() == BackupAnnotations.BackupDestination.DEVICE_TRANSFER) { if (mBackupEligibilityRules.getBackupDestination() == BackupDestination.DEVICE_TRANSFER) { // Everything is eligible for device-to-device migration. return true; } else if (Flags.enableCrossPlatformTransfer() && mBackupEligibilityRules.getBackupDestination() == BackupDestination.CROSS_PLATFORM_TRANSFER) { // Everything is eligible for cross platform transfers. return true; } if (FullBackup.CACHE_TREE_TOKEN.equals(info.domain)) { if (DEBUG) { Slog.i(TAG, "Dropping cache file path " + info.path); Loading
services/tests/mockingservicestests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java +40 −8 Original line number Diff line number Diff line Loading @@ -18,17 +18,20 @@ package com.android.server.backup.restore; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import android.app.backup.BackupAgent; import android.app.backup.BackupAnnotations.BackupDestination; import android.app.backup.RestoreSet; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.os.UserManager; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; Loading Loading @@ -57,8 +60,8 @@ public class ActiveRestoreSessionTest { private ApplicationInfo mTestApp; @Mock private UserBackupManagerService mBackupManagerService; @Mock private BackupEligibilityRules mBackupEligibilityRules; @Mock private Context mContext; @Mock private PackageManager mPackageManager; @Mock private PackageManagerInternal mPackageManagerInternal; @Mock private TransportManager mTransportManager; @Mock private UserManager mUserManager; Loading @@ -76,11 +79,18 @@ public class ActiveRestoreSessionTest { @Before public void setUp() { MockitoAnnotations.initMocks(/* testClass */ this); when(mBackupEligibilityRules.isAppEligibleForRestore(any())).thenReturn(true); when(mBackupManagerService.getEligibilityRulesForOperation(anyInt())) .thenReturn(mBackupEligibilityRules); when(mBackupManagerService.getTransportManager()).thenReturn(mTransportManager); when(mBackupManagerService.getContext()).thenReturn(mContext); when(mBackupManagerService.getEligibilityRulesForOperation(anyInt())) .thenAnswer( invocation -> { return new BackupEligibilityRules( mPackageManager, mPackageManagerInternal, 0, mContext, invocation.getArgument(0)); }); when(mContext.getSystemService(eq(UserManager.class))).thenReturn(mUserManager); when(LocalServices.getService(PackageManagerInternal.class)) .thenReturn(mPackageManagerInternal); Loading @@ -90,14 +100,19 @@ public class ActiveRestoreSessionTest { mBackupManagerService, /* packageName */ null, /* transportName */ "", mBackupEligibilityRules); new BackupEligibilityRules( mPackageManager, mPackageManagerInternal, 0, mContext, BackupDestination.CLOUD)); mTestApp = new ApplicationInfo(); mTestApp.packageName = TEST_APP_NAME; } @Test @EnableFlags({Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS}) public void testGetBackupEligibilityRules_skipRestoreFlagOn_skipsLaunchedAppRestore() { mFlagsRule.enableFlags(Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS); RestoreSet restoreSet = new RestoreSet( /* name */ null, Loading @@ -114,8 +129,8 @@ public class ActiveRestoreSessionTest { } @Test @DisableFlags({Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS}) public void testGetBackupEligibilityRules_skipRestoreFlagOff_allowsAppRestore() { mFlagsRule.disableFlags(Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS); RestoreSet restoreSet = new RestoreSet( /* name */ null, Loading @@ -130,4 +145,21 @@ public class ActiveRestoreSessionTest { assertThat(eligibilityRules.isAppEligibleForRestore(mTestApp)).isTrue(); } @Test @EnableFlags({Flags.FLAG_ENABLE_CROSS_PLATFORM_TRANSFER}) public void testGetBackupEligibilityRules_crossPlatformTransfer_hasCorrectDestination() { RestoreSet restoreSet = new RestoreSet( /* name= */ null, /* device= */ "D2D", /* token= */ 1, BackupAgent.FLAG_CROSS_PLATFORM_DATA_TRANSFER_IOS); BackupEligibilityRules eligibilityRules = mRestoreSession.getBackupEligibilityRules(restoreSet); assertThat(eligibilityRules.getBackupDestination()) .isEqualTo(BackupDestination.CROSS_PLATFORM_TRANSFER); } }