Merge "[Multi-user] Change more BackupManager AIDL methods to accept userId in methods"
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
index e3748f1..3defdc5 100644
--- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
+++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java
@@ -247,7 +247,7 @@
}
try {
- mBmgr.dataChanged(pkg);
+ mBmgr.dataChangedForUser(userId, pkg);
} catch (RemoteException e) {
System.err.println(e.toString());
System.err.println(BMGR_NOT_RUNNING_ERR);
@@ -264,7 +264,8 @@
}
if (allPkgs.size() > 0) {
try {
- mBmgr.fullTransportBackup(allPkgs.toArray(new String[allPkgs.size()]));
+ mBmgr.fullTransportBackupForUser(
+ userId, allPkgs.toArray(new String[allPkgs.size()]));
} catch (RemoteException e) {
System.err.println(e.toString());
System.err.println(BMGR_NOT_RUNNING_ERR);
@@ -393,7 +394,7 @@
installedPackages.stream().map(p -> p.packageName).toArray(String[]::new);
String[] filteredPackages = {};
try {
- filteredPackages = mBmgr.filterAppsEligibleForBackup(packages);
+ filteredPackages = mBmgr.filterAppsEligibleForBackupForUser(userId, packages);
} catch (RemoteException e) {
System.err.println(e.toString());
System.err.println(BMGR_NOT_RUNNING_ERR);
@@ -498,11 +499,11 @@
}
if ("-c".equals(which)) {
- doTransportByComponent();
+ doTransportByComponent(userId);
return;
}
- String old = mBmgr.selectBackupTransport(which);
+ String old = mBmgr.selectBackupTransportForUser(userId, which);
if (old == null) {
System.out.println("Unknown transport '" + which
+ "' specified; no changes made.");
@@ -516,7 +517,7 @@
}
}
- private void doTransportByComponent() {
+ private void doTransportByComponent(@UserIdInt int userId) {
String which = nextArg();
if (which == null) {
showUsage();
@@ -526,7 +527,9 @@
final CountDownLatch latch = new CountDownLatch(1);
try {
- mBmgr.selectBackupTransportAsync(ComponentName.unflattenFromString(which),
+ mBmgr.selectBackupTransportAsyncForUser(
+ userId,
+ ComponentName.unflattenFromString(which),
new ISelectBackupTransportCallback.Stub() {
@Override
public void onSuccess(String transportName) {
@@ -567,7 +570,7 @@
}
try {
- mBmgr.clearBackupData(transport, pkg);
+ mBmgr.clearBackupDataForUser(userId, transport, pkg);
System.out.println("Wiped backup data for " + pkg + " on " + transport);
} catch (RemoteException e) {
System.err.println(e.toString());
@@ -599,7 +602,8 @@
InitObserver observer = new InitObserver();
try {
System.out.println("Initializing transports: " + transports);
- mBmgr.initializeTransports(transports.toArray(new String[transports.size()]), observer);
+ mBmgr.initializeTransportsForUser(
+ userId, transports.toArray(new String[transports.size()]), observer);
observer.waitForCompletion(30*1000L);
System.out.println("Initialization result: " + observer.result);
} catch (RemoteException e) {
@@ -611,13 +615,13 @@
private void doList(@UserIdInt int userId) {
String arg = nextArg(); // sets, transports, packages set#
if ("transports".equals(arg)) {
- doListTransports();
+ doListTransports(userId);
return;
}
// The rest of the 'list' options work with a restore session on the current transport
try {
- mRestore = mBmgr.beginRestoreSession(null, null);
+ mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null);
if (mRestore == null) {
System.err.println(BMGR_NOT_RUNNING_ERR);
return;
@@ -634,19 +638,19 @@
}
}
- private void doListTransports() {
+ private void doListTransports(@UserIdInt int userId) {
String arg = nextArg();
try {
if ("-c".equals(arg)) {
- for (ComponentName transport : mBmgr.listAllTransportComponents()) {
+ for (ComponentName transport : mBmgr.listAllTransportComponentsForUser(userId)) {
System.out.println(transport.flattenToShortString());
}
return;
}
- String current = mBmgr.getCurrentTransport();
- String[] transports = mBmgr.listAllTransports();
+ String current = mBmgr.getCurrentTransportForUser(userId);
+ String[] transports = mBmgr.listAllTransportsForUser(userId);
if (transports == null || transports.length == 0) {
System.out.println("No transports available.");
return;
@@ -756,7 +760,7 @@
filter.add(arg);
}
- doRestoreAll(token, filter);
+ doRestoreAll(userId, token, filter);
} catch (NumberFormatException e) {
showUsage();
return;
@@ -769,12 +773,12 @@
System.err.println("'restore <token> <package>'.");
}
- private void doRestoreAll(long token, HashSet<String> filter) {
+ private void doRestoreAll(@UserIdInt int userId, long token, HashSet<String> filter) {
RestoreObserver observer = new RestoreObserver();
try {
boolean didRestore = false;
- mRestore = mBmgr.beginRestoreSession(null, null);
+ mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null);
if (mRestore == null) {
System.err.println(BMGR_NOT_RUNNING_ERR);
return;
diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java
index c6086f1..a6f6d06 100644
--- a/core/java/android/app/backup/BackupManager.java
+++ b/core/java/android/app/backup/BackupManager.java
@@ -335,7 +335,8 @@
if (sService != null) {
try {
// All packages, current transport
- IRestoreSession binder = sService.beginRestoreSession(null, null);
+ IRestoreSession binder =
+ sService.beginRestoreSessionForUser(mContext.getUserId(), null, null);
if (binder != null) {
session = new RestoreSession(mContext, binder);
}
@@ -465,7 +466,7 @@
checkServiceBinder();
if (sService != null) {
try {
- return sService.getCurrentTransportComponent();
+ return sService.getCurrentTransportComponentForUser(mContext.getUserId());
} catch (RemoteException e) {
Log.e(TAG, "getCurrentTransportComponent() couldn't connect");
}
@@ -530,7 +531,8 @@
checkServiceBinder();
if (sService != null) {
try {
- sService.updateTransportAttributes(
+ sService.updateTransportAttributesForUser(
+ mContext.getUserId(),
transportComponent,
name,
configurationIntent,
@@ -590,7 +592,8 @@
try {
SelectTransportListenerWrapper wrapper = listener == null ?
null : new SelectTransportListenerWrapper(mContext, listener);
- sService.selectBackupTransportAsync(transport, wrapper);
+ sService.selectBackupTransportAsyncForUser(
+ mContext.getUserId(), transport, wrapper);
} catch (RemoteException e) {
Log.e(TAG, "selectBackupTransportAsync() couldn't connect");
}
@@ -637,7 +640,7 @@
checkServiceBinder();
if (sService != null) {
try {
- return sService.getAvailableRestoreToken(packageName);
+ return sService.getAvailableRestoreTokenForUser(mContext.getUserId(), packageName);
} catch (RemoteException e) {
Log.e(TAG, "getAvailableRestoreToken() couldn't connect");
}
@@ -659,7 +662,7 @@
checkServiceBinder();
if (sService != null) {
try {
- return sService.isAppEligibleForBackup(packageName);
+ return sService.isAppEligibleForBackupForUser(mContext.getUserId(), packageName);
} catch (RemoteException e) {
Log.e(TAG, "isAppEligibleForBackup(pkg) couldn't connect");
}
@@ -760,7 +763,7 @@
public Intent getConfigurationIntent(String transportName) {
if (sService != null) {
try {
- return sService.getConfigurationIntent(transportName);
+ return sService.getConfigurationIntentForUser(mContext.getUserId(), transportName);
} catch (RemoteException e) {
Log.e(TAG, "getConfigurationIntent() couldn't connect");
}
@@ -781,7 +784,7 @@
public String getDestinationString(String transportName) {
if (sService != null) {
try {
- return sService.getDestinationString(transportName);
+ return sService.getDestinationStringForUser(mContext.getUserId(), transportName);
} catch (RemoteException e) {
Log.e(TAG, "getDestinationString() couldn't connect");
}
@@ -802,7 +805,7 @@
public Intent getDataManagementIntent(String transportName) {
if (sService != null) {
try {
- return sService.getDataManagementIntent(transportName);
+ return sService.getDataManagementIntentForUser(mContext.getUserId(), transportName);
} catch (RemoteException e) {
Log.e(TAG, "getDataManagementIntent() couldn't connect");
}
@@ -825,7 +828,7 @@
public String getDataManagementLabel(String transportName) {
if (sService != null) {
try {
- return sService.getDataManagementLabel(transportName);
+ return sService.getDataManagementLabelForUser(mContext.getUserId(), transportName);
} catch (RemoteException e) {
Log.e(TAG, "getDataManagementLabel() couldn't connect");
}
diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
index f1e6b06..19de19a 100644
--- a/core/java/android/app/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -43,6 +43,15 @@
* Any application can invoke this method for its own package, but
* only callers who hold the android.permission.BACKUP permission
* may invoke it for arbitrary packages.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the caller has made changes to its data.
+ */
+ void dataChangedForUser(int userId, String packageName);
+
+ /**
+ * {@link android.app.backup.IBackupManager.dataChangedForUser} for the calling user id.
*/
void dataChanged(String packageName);
@@ -53,6 +62,15 @@
* Any application can invoke this method for its own package, but
* only callers who hold the android.permission.BACKUP permission
* may invoke it for arbitrary packages.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which backup data should be erased.
+ */
+ void clearBackupDataForUser(int userId, String transportName, String packageName);
+
+ /**
+ * {@link android.app.backup.IBackupManager.clearBackupDataForUser} for the calling user id.
*/
void clearBackupData(String transportName, String packageName);
@@ -62,24 +80,59 @@
* operations.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the given transports should be initialized.
*/
- void initializeTransports(in String[] transportNames, IBackupObserver observer);
+ void initializeTransportsForUser(int userId, in String[] transportNames,
+ IBackupObserver observer);
/**
* Notifies the Backup Manager Service that an agent has become available. This
* method is only invoked by the Activity Manager.
+ *
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which an agent has become available.
+ */
+ void agentConnectedForUser(int userId, String packageName, IBinder agent);
+
+ /**
+ * {@link android.app.backup.IBackupManager.agentConnected} for the calling user id.
*/
void agentConnected(String packageName, IBinder agent);
/**
* Notify the Backup Manager Service that an agent has unexpectedly gone away.
* This method is only invoked by the Activity Manager.
+ *
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which an agent has unexpectedly gone away.
+ */
+ void agentDisconnectedForUser(int userId, String packageName);
+
+ /**
+ * {@link android.app.backup.IBackupManager.agentDisconnected} for the calling user id.
*/
void agentDisconnected(String packageName);
/**
* Notify the Backup Manager Service that an application being installed will
* need a data-restore pass. This method is only invoked by the Package Manager.
+ *
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the application will need a data-restore pass.
+ */
+ void restoreAtInstallForUser(int userId, String packageName, int token);
+
+ /**
+ * {@link android.app.backup.IBackupManager.restoreAtInstallForUser} for the calling user id.
*/
void restoreAtInstall(String packageName, int token);
@@ -112,10 +165,18 @@
* is made generally available for launch.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which automatic restore should be enabled/disabled.
* @param doAutoRestore When true, enables the automatic app-data restore facility. When
* false, this facility will be disabled.
*/
+ void setAutoRestoreForUser(int userId, boolean doAutoRestore);
+
+ /**
+ * {@link android.app.backup.IBackupManager.setAutoRestoreForUser} for the calling user id.
+ */
void setAutoRestore(boolean doAutoRestore);
/**
@@ -220,9 +281,13 @@
* Perform a full-dataset backup of the given applications via the currently active
* transport.
*
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the full-dataset backup should be performed.
* @param packageNames The package names of the apps whose data are to be backed up.
*/
- void fullTransportBackup(in String[] packageNames);
+ void fullTransportBackupForUser(int userId, in String[] packageNames);
/**
* Restore device content from the data stream passed through the given socket. The
@@ -250,6 +315,18 @@
* backup dataset being used for restore.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the requested backup/restore operation can proceed.
+ */
+ void acknowledgeFullBackupOrRestoreForUser(int userId, int token, boolean allow,
+ in String curPassword, in String encryptionPassword,
+ IFullBackupRestoreObserver observer);
+
+ /**
+ * {@link android.app.backup.IBackupManager.acknowledgeFullBackupOrRestoreForUser} for the
+ * calling user id.
*/
void acknowledgeFullBackupOrRestore(int token, boolean allow,
in String curPassword, in String encryptionPassword,
@@ -260,7 +337,10 @@
* specified transport has not been bound at least once (for registration), this call will be
* ignored. Only the host process of the transport can change its description, otherwise a
* {@link SecurityException} will be thrown.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which the attributes of the transport should be updated.
* @param transportComponent The identity of the transport being described.
* @param name A {@link String} with the new name for the transport. This is NOT for
* identification. MUST NOT be {@code null}.
@@ -279,13 +359,23 @@
* @throws SecurityException If the UID of the calling process differs from the package UID of
* {@code transportComponent} or if the caller does NOT have BACKUP permission.
*/
- void updateTransportAttributes(in ComponentName transportComponent, in String name,
+ void updateTransportAttributesForUser(int userId, in ComponentName transportComponent,
+ in String name,
in Intent configurationIntent, in String currentDestinationString,
in Intent dataManagementIntent, in String dataManagementLabel);
/**
* Identify the currently selected transport. Callers must hold the
* android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the currently selected transport should be identified.
+ */
+ String getCurrentTransportForUser(int userId);
+
+ /**
+ * {@link android.app.backup.IBackupManager.getCurrentTransportForUser} for the calling user id.
*/
String getCurrentTransport();
@@ -293,16 +383,35 @@
* Returns the {@link ComponentName} of the host service of the selected transport or {@code
* null} if no transport selected or if the transport selected is not registered. Callers must
* hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the currently selected transport should be identified.
*/
- ComponentName getCurrentTransportComponent();
+ ComponentName getCurrentTransportComponentForUser(int userId);
/**
* Request a list of all available backup transports' names. Callers must
* hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which all available backup transports' names should be listed.
+ */
+ String[] listAllTransportsForUser(int userId);
+
+ /**
+ * {@link android.app.backup.IBackupManager.listAllTransportsForUser} for the calling user id.
*/
String[] listAllTransports();
- ComponentName[] listAllTransportComponents();
+ /**
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which all available backup transports should be listed.
+ */
+ ComponentName[] listAllTransportComponentsForUser(int userId);
/**
* Retrieve the list of whitelisted transport components. Callers do </i>not</i> need
@@ -315,13 +424,22 @@
/**
* Specify the current backup transport. Callers must hold the
* android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which the transport should be selected.
* @param transport The name of the transport to select. This should be one
* of {@link BackupManager.TRANSPORT_GOOGLE} or {@link BackupManager.TRANSPORT_ADB}.
* @return The name of the previously selected transport. If the given transport
* name is not one of the currently available transports, no change is made to
* the current transport setting and the method returns null.
*/
+ String selectBackupTransportForUser(int userId, String transport);
+
+ /**
+ * {@link android.app.backup.IBackupManager.selectBackupTransportForUser} for the calling user
+ * id.
+ */
String selectBackupTransport(String transport);
/**
@@ -330,43 +448,85 @@
* which is in a separate process.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which the transport should be selected.
* @param transport ComponentName of the service hosting the transport. This is different from
* the transport's name that is returned by {@link BackupTransport#name()}.
* @param listener A listener object to get a callback on the transport being selected.
*/
- void selectBackupTransportAsync(in ComponentName transport, ISelectBackupTransportCallback listener);
+ void selectBackupTransportAsyncForUser(int userId, in ComponentName transport,
+ ISelectBackupTransportCallback listener);
/**
* Get the configuration Intent, if any, from the given transport. Callers must
* hold the android.permission.BACKUP permission in order to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which the configuration Intent should be reported.
* @param transport The name of the transport to query.
* @return An Intent to use with Activity#startActivity() to bring up the configuration
* UI supplied by the transport. If the transport has no configuration UI, it should
* return {@code null} here.
*/
+ Intent getConfigurationIntentForUser(int userId, String transport);
+
+ /**
+ * {@link android.app.backup.IBackupManager.getConfigurationIntentForUser} for the calling user
+ * id.
+ */
Intent getConfigurationIntent(String transport);
/**
* Get the destination string supplied by the given transport. Callers must
* hold the android.permission.BACKUP permission in order to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which the transport destination string should be reported.
* @param transport The name of the transport to query.
* @return A string describing the current backup destination. This string is used
* verbatim by the Settings UI as the summary text of the "configure..." item.
*/
+ String getDestinationStringForUser(int userId, String transport);
+
+ /**
+ * {@link android.app.backup.IBackupManager.getDestinationStringForUser} for the calling user
+ * id.
+ */
String getDestinationString(String transport);
/**
* Get the manage-data UI intent, if any, from the given transport. Callers must
* hold the android.permission.BACKUP permission in order to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the manage-data UI intent should be reported.
+ */
+ Intent getDataManagementIntentForUser(int userId, String transport);
+
+ /**
+ * {@link android.app.backup.IBackupManager.getDataManagementIntentForUser} for the calling user
+ * id.
*/
Intent getDataManagementIntent(String transport);
/**
* Get the manage-data menu label, if any, from the given transport. Callers must
* hold the android.permission.BACKUP permission in order to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
+ *
+ * @param userId User id for which the manage-data menu label should be reported.
+ */
+ String getDataManagementLabelForUser(int userId, String transport);
+
+ /**
+ * {@link android.app.backup.IBackupManager.getDataManagementLabelForUser} for the calling user
+ * id.
*/
String getDataManagementLabel(String transport);
@@ -381,7 +541,10 @@
* package. In that case, the restore session returned is suitable for supporting
* the BackupManager.requestRestore() functionality via RestoreSession.restorePackage()
* without requiring the app to hold any special permission.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which a restore session should be begun.
* @param packageName The name of the single package for which a restore will
* be requested. May be null, in which case all packages in the restore
* set can be restored.
@@ -389,7 +552,7 @@
* May be null, in which case the current active transport is used.
* @return An interface to the restore session, or null on error.
*/
- IRestoreSession beginRestoreSession(String packageName, String transportID);
+ IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID);
/**
* Notify the backup manager that a BackupAgent has completed the operation
@@ -427,13 +590,16 @@
* restored from if we were to install it right now.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which this operation should be performed.
* @param packageName The name of the package whose most-suitable dataset we
* wish to look up
* @return The dataset token from which a restore should be attempted, or zero if
* no suitable data is available.
*/
- long getAvailableRestoreToken(String packageName);
+ long getAvailableRestoreTokenForUser(int userId, String packageName);
/**
* Ask the framework whether this app is eligible for backup.
@@ -442,21 +608,27 @@
* {@link #filterAppsEligibleForBackup(String[])} to save resources.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which this operation should be performed.
* @param packageName The name of the package.
* @return Whether this app is eligible for backup.
*/
- boolean isAppEligibleForBackup(String packageName);
+ boolean isAppEligibleForBackupForUser(int userId, String packageName);
/**
* Filter the packages that are eligible for backup and return the result.
*
* <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ * If {@code userId} is different from the calling user id, then the caller must hold the
+ * android.permission.INTERACT_ACROSS_USERS_FULL permission.
*
+ * @param userId User id for which the filter should be performed.
* @param packages The list of packages to filter.
* @return The packages eligible for backup.
*/
- String[] filterAppsEligibleForBackup(in String[] packages);
+ String[] filterAppsEligibleForBackupForUser(int userId, in String[] packages);
/**
* Request an immediate backup, providing an observer to which results of the backup operation
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 59b72f9..eb10a04 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -284,7 +284,7 @@
}
@Override
- public void dataChanged(String packageName) throws RemoteException {
+ public void dataChangedForUser(int userId, String packageName) throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.dataChanged(packageName);
@@ -292,8 +292,13 @@
}
@Override
- public void initializeTransports(String[] transportNames, IBackupObserver observer)
- throws RemoteException {
+ public void dataChanged(String packageName) throws RemoteException {
+ dataChangedForUser(binderGetCallingUserId(), packageName);
+ }
+
+ @Override
+ public void initializeTransportsForUser(
+ int userId, String[] transportNames, IBackupObserver observer) throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.initializeTransports(transportNames, observer);
@@ -301,7 +306,7 @@
}
@Override
- public void clearBackupData(String transportName, String packageName)
+ public void clearBackupDataForUser(int userId, String transportName, String packageName)
throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
@@ -310,7 +315,14 @@
}
@Override
- public void agentConnected(String packageName, IBinder agent) throws RemoteException {
+ public void clearBackupData(String transportName, String packageName)
+ throws RemoteException {
+ clearBackupDataForUser(binderGetCallingUserId(), transportName, packageName);
+ }
+
+ @Override
+ public void agentConnectedForUser(int userId, String packageName, IBinder agent)
+ throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.agentConnected(packageName, agent);
@@ -318,7 +330,12 @@
}
@Override
- public void agentDisconnected(String packageName) throws RemoteException {
+ public void agentConnected(String packageName, IBinder agent) throws RemoteException {
+ agentConnectedForUser(binderGetCallingUserId(), packageName, agent);
+ }
+
+ @Override
+ public void agentDisconnectedForUser(int userId, String packageName) throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.agentDisconnected(packageName);
@@ -326,7 +343,13 @@
}
@Override
- public void restoreAtInstall(String packageName, int token) throws RemoteException {
+ public void agentDisconnected(String packageName) throws RemoteException {
+ agentDisconnectedForUser(binderGetCallingUserId(), packageName);
+ }
+
+ @Override
+ public void restoreAtInstallForUser(int userId, String packageName, int token)
+ throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.restoreAtInstall(packageName, token);
@@ -334,6 +357,11 @@
}
@Override
+ public void restoreAtInstall(String packageName, int token) throws RemoteException {
+ restoreAtInstallForUser(binderGetCallingUserId(), packageName, token);
+ }
+
+ @Override
public void setBackupEnabledForUser(@UserIdInt int userId, boolean isEnabled)
throws RemoteException {
BackupManagerService svc = mService;
@@ -348,7 +376,7 @@
}
@Override
- public void setAutoRestore(boolean doAutoRestore) throws RemoteException {
+ public void setAutoRestoreForUser(int userId, boolean doAutoRestore) throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.setAutoRestore(doAutoRestore);
@@ -356,6 +384,11 @@
}
@Override
+ public void setAutoRestore(boolean doAutoRestore) throws RemoteException {
+ setAutoRestoreForUser(binderGetCallingUserId(), doAutoRestore);
+ }
+
+ @Override
public void setBackupProvisioned(boolean isProvisioned) throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
@@ -411,7 +444,8 @@
}
@Override
- public void fullTransportBackup(String[] packageNames) throws RemoteException {
+ public void fullTransportBackupForUser(int userId, String[] packageNames)
+ throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.fullTransportBackup(packageNames);
@@ -427,9 +461,14 @@
}
@Override
- public void acknowledgeFullBackupOrRestore(int token, boolean allow, String curPassword,
- String encryptionPassword, IFullBackupRestoreObserver observer)
- throws RemoteException {
+ public void acknowledgeFullBackupOrRestoreForUser(
+ int userId,
+ int token,
+ boolean allow,
+ String curPassword,
+ String encryptionPassword,
+ IFullBackupRestoreObserver observer)
+ throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
svc.acknowledgeAdbBackupOrRestore(token, allow,
@@ -438,30 +477,50 @@
}
@Override
- public String getCurrentTransport() throws RemoteException {
+ public void acknowledgeFullBackupOrRestore(int token, boolean allow, String curPassword,
+ String encryptionPassword, IFullBackupRestoreObserver observer)
+ throws RemoteException {
+ BackupManagerService svc = mService;
+ acknowledgeFullBackupOrRestoreForUser(
+ binderGetCallingUserId(), token, allow, curPassword, encryptionPassword, observer);
+ }
+
+
+ @Override
+ public String getCurrentTransportForUser(int userId) throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.getCurrentTransport() : null;
}
+ @Override
+ public String getCurrentTransport() throws RemoteException {
+ return getCurrentTransportForUser(binderGetCallingUserId());
+ }
+
/**
* Returns the {@link ComponentName} of the host service of the selected transport or
* {@code null} if no transport selected or if the transport selected is not registered.
*/
@Override
@Nullable
- public ComponentName getCurrentTransportComponent() {
+ public ComponentName getCurrentTransportComponentForUser(int userId) {
BackupManagerService svc = mService;
return (svc != null) ? svc.getCurrentTransportComponent() : null;
}
@Override
- public String[] listAllTransports() throws RemoteException {
+ public String[] listAllTransportsForUser(int userId) throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.listAllTransports() : null;
}
@Override
- public ComponentName[] listAllTransportComponents() throws RemoteException {
+ public String[] listAllTransports() throws RemoteException {
+ return listAllTransportsForUser(binderGetCallingUserId());
+ }
+
+ @Override
+ public ComponentName[] listAllTransportComponentsForUser(int userId) throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.listAllTransportComponents() : null;
}
@@ -473,7 +532,8 @@
}
@Override
- public void updateTransportAttributes(
+ public void updateTransportAttributesForUser(
+ int userId,
ComponentName transportComponent,
String name,
@Nullable Intent configurationIntent,
@@ -493,13 +553,19 @@
}
@Override
- public String selectBackupTransport(String transport) throws RemoteException {
+ public String selectBackupTransportForUser(int userId, String transport)
+ throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.selectBackupTransport(transport) : null;
}
@Override
- public void selectBackupTransportAsync(ComponentName transport,
+ public String selectBackupTransport(String transport) throws RemoteException {
+ return selectBackupTransportForUser(binderGetCallingUserId(), transport);
+ }
+
+ @Override
+ public void selectBackupTransportAsyncForUser(int userId, ComponentName transport,
ISelectBackupTransportCallback listener) throws RemoteException {
BackupManagerService svc = mService;
if (svc != null) {
@@ -516,32 +582,58 @@
}
@Override
- public Intent getConfigurationIntent(String transport) throws RemoteException {
+ public Intent getConfigurationIntentForUser(int userId, String transport)
+ throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.getConfigurationIntent(transport) : null;
}
@Override
- public String getDestinationString(String transport) throws RemoteException {
+ public Intent getConfigurationIntent(String transport)
+ throws RemoteException {
+ return getConfigurationIntentForUser(binderGetCallingUserId(), transport);
+ }
+
+ @Override
+ public String getDestinationStringForUser(int userId, String transport) throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.getDestinationString(transport) : null;
}
@Override
- public Intent getDataManagementIntent(String transport) throws RemoteException {
+ public String getDestinationString(String transport) throws RemoteException {
+ return getDestinationStringForUser(binderGetCallingUserId(), transport);
+ }
+
+ @Override
+ public Intent getDataManagementIntentForUser(int userId, String transport)
+ throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.getDataManagementIntent(transport) : null;
}
@Override
- public String getDataManagementLabel(String transport) throws RemoteException {
+ public Intent getDataManagementIntent(String transport)
+ throws RemoteException {
+ return getDataManagementIntentForUser(binderGetCallingUserId(), transport);
+ }
+
+ @Override
+ public String getDataManagementLabelForUser(int userId, String transport)
+ throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.getDataManagementLabel(transport) : null;
}
@Override
- public IRestoreSession beginRestoreSession(String packageName, String transportID)
+ public String getDataManagementLabel(String transport)
throws RemoteException {
+ return getDataManagementLabelForUser(binderGetCallingUserId(), transport);
+ }
+
+ @Override
+ public IRestoreSession beginRestoreSessionForUser(
+ int userId, String packageName, String transportID) throws RemoteException {
BackupManagerService svc = mService;
return (svc != null) ? svc.beginRestoreSession(packageName, transportID) : null;
}
@@ -555,19 +647,19 @@
}
@Override
- public long getAvailableRestoreToken(String packageName) {
+ public long getAvailableRestoreTokenForUser(int userId, String packageName) {
BackupManagerService svc = mService;
return (svc != null) ? svc.getAvailableRestoreToken(packageName) : 0;
}
@Override
- public boolean isAppEligibleForBackup(String packageName) {
+ public boolean isAppEligibleForBackupForUser(int userId, String packageName) {
BackupManagerService svc = mService;
return (svc != null) ? svc.isAppEligibleForBackup(packageName) : false;
}
@Override
- public String[] filterAppsEligibleForBackup(String[] packages) {
+ public String[] filterAppsEligibleForBackupForUser(int userId, String[] packages) {
BackupManagerService svc = mService;
return (svc != null) ? svc.filterAppsEligibleForBackup(packages) : null;
}
diff --git a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
index ff31435..5615dff 100644
--- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
@@ -302,6 +302,15 @@
}
@Test
+ public void dataChangedForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.dataChangedForUser(mUserId, PACKAGE_NAME);
+
+ verify(mBackupManagerServiceMock).dataChanged(PACKAGE_NAME);
+ }
+
+ @Test
public void dataChanged_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.dataChanged(PACKAGE_NAME);
@@ -315,6 +324,15 @@
}
@Test
+ public void clearBackupDataForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.clearBackupDataForUser(mUserId, TRANSPORT_NAME, PACKAGE_NAME);
+
+ verify(mBackupManagerServiceMock).clearBackupData(TRANSPORT_NAME, PACKAGE_NAME);
+ }
+
+ @Test
public void clearBackupData_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.clearBackupData(TRANSPORT_NAME, PACKAGE_NAME);
@@ -328,6 +346,15 @@
}
@Test
+ public void agentConnectedForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.agentConnectedForUser(mUserId, PACKAGE_NAME, mAgentMock);
+
+ verify(mBackupManagerServiceMock).agentConnected(PACKAGE_NAME, mAgentMock);
+ }
+
+ @Test
public void agentConnected_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.agentConnected(PACKAGE_NAME, mAgentMock);
@@ -341,6 +368,15 @@
}
@Test
+ public void agentDisconnectedForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.agentDisconnectedForUser(mUserId, PACKAGE_NAME);
+
+ verify(mBackupManagerServiceMock).agentDisconnected(PACKAGE_NAME);
+ }
+
+ @Test
public void agentDisconnected_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.agentDisconnected(PACKAGE_NAME);
@@ -354,6 +390,15 @@
}
@Test
+ public void restoreAtInstallForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.restoreAtInstallForUser(mUserId, PACKAGE_NAME, 123);
+
+ verify(mBackupManagerServiceMock).restoreAtInstall(PACKAGE_NAME, 123);
+ }
+
+ @Test
public void restoreAtInstall_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.restoreAtInstall(PACKAGE_NAME, 123);
@@ -392,6 +437,15 @@
}
@Test
+ public void setAutoRestoreForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.setAutoRestoreForUser(mUserId, true);
+
+ verify(mBackupManagerServiceMock).setAutoRestore(true);
+ }
+
+ @Test
public void setAutoRestore_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.setAutoRestore(true);
@@ -507,14 +561,14 @@
@Test
public void fullTransportBackup_calledBeforeInitialize_ignored() throws RemoteException {
- mTrampoline.fullTransportBackup(PACKAGE_NAMES);
+ mTrampoline.fullTransportBackupForUser(mUserId, PACKAGE_NAMES);
verifyNoMoreInteractions(mBackupManagerServiceMock);
}
@Test
- public void fullTransportBackup_forwarded() throws RemoteException {
+ public void fullTransportBackupForUser_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- mTrampoline.fullTransportBackup(PACKAGE_NAMES);
+ mTrampoline.fullTransportBackupForUser(mUserId, PACKAGE_NAMES);
verify(mBackupManagerServiceMock).fullTransportBackup(PACKAGE_NAMES);
}
@@ -540,6 +594,22 @@
}
@Test
+ public void acknowledgeFullBackupOrRestoreForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.acknowledgeFullBackupOrRestoreForUser(
+ mUserId,
+ 123,
+ true,
+ CURRENT_PASSWORD,
+ ENCRYPTION_PASSWORD,
+ mFullBackupRestoreObserverMock);
+
+ verify(mBackupManagerServiceMock).acknowledgeAdbBackupOrRestore(123, true, CURRENT_PASSWORD,
+ ENCRYPTION_PASSWORD, mFullBackupRestoreObserverMock);
+ }
+
+ @Test
public void acknowledgeFullBackupOrRestore_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.acknowledgeFullBackupOrRestore(123, true, CURRENT_PASSWORD, ENCRYPTION_PASSWORD,
@@ -555,6 +625,16 @@
}
@Test
+ public void getCurrentTransportForUser_forwarded() throws RemoteException {
+ when(mBackupManagerServiceMock.getCurrentTransport()).thenReturn(TRANSPORT_NAME);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ assertEquals(TRANSPORT_NAME, mTrampoline.getCurrentTransportForUser(mUserId));
+
+ verify(mBackupManagerServiceMock).getCurrentTransport();
+ }
+
+ @Test
public void getCurrentTransport_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getCurrentTransport()).thenReturn(TRANSPORT_NAME);
@@ -571,6 +651,16 @@
}
@Test
+ public void listAllTransportsForUser_forwarded() throws RemoteException {
+ when(mBackupManagerServiceMock.listAllTransports()).thenReturn(TRANSPORTS);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ assertEquals(TRANSPORTS, mTrampoline.listAllTransportsForUser(mUserId));
+ verify(mBackupManagerServiceMock).listAllTransports();
+ }
+
+
+ @Test
public void listAllTransports_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.listAllTransports()).thenReturn(TRANSPORTS);
@@ -580,18 +670,19 @@
}
@Test
- public void listAllTransportComponents_calledBeforeInitialize_ignored() throws RemoteException {
- assertNull(mTrampoline.listAllTransportComponents());
+ public void listAllTransportComponentsForUser_calledBeforeInitialize_ignored()
+ throws RemoteException {
+ assertNull(mTrampoline.listAllTransportComponentsForUser(mUserId));
verifyNoMoreInteractions(mBackupManagerServiceMock);
}
@Test
- public void listAllTransportComponents_forwarded() throws RemoteException {
+ public void listAllTransportComponentsForUser_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.listAllTransportComponents()).thenReturn(
TRANSPORT_COMPONENTS);
-
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- assertEquals(TRANSPORT_COMPONENTS, mTrampoline.listAllTransportComponents());
+
+ assertEquals(TRANSPORT_COMPONENTS, mTrampoline.listAllTransportComponentsForUser(mUserId));
verify(mBackupManagerServiceMock).listAllTransportComponents();
}
@@ -611,19 +702,34 @@
}
@Test
- public void describeTransport_calledBeforeInitialize_ignored() throws RemoteException {
- mTrampoline.updateTransportAttributes(TRANSPORT_COMPONENT_NAME, TRANSPORT_NAME, null,
- "Transport Destination", null, "Data Management");
+ public void updateTransportAttributesForUser_calledBeforeInitialize_ignored()
+ throws RemoteException {
+ mTrampoline.updateTransportAttributesForUser(
+ mUserId,
+ TRANSPORT_COMPONENT_NAME,
+ TRANSPORT_NAME,
+ null,
+ "Transport Destination",
+ null,
+ "Data Management");
+
verifyNoMoreInteractions(mBackupManagerServiceMock);
}
@Test
- public void describeTransport_forwarded() throws RemoteException {
+ public void updateTransportAttributesForUser_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getTransportWhitelist()).thenReturn(TRANSPORTS);
-
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- mTrampoline.updateTransportAttributes(TRANSPORT_COMPONENT_NAME, TRANSPORT_NAME, null,
- "Transport Destination", null, "Data Management");
+
+ mTrampoline.updateTransportAttributesForUser(
+ mUserId,
+ TRANSPORT_COMPONENT_NAME,
+ TRANSPORT_NAME,
+ null,
+ "Transport Destination",
+ null,
+ "Data Management");
+
verify(mBackupManagerServiceMock).updateTransportAttributes(TRANSPORT_COMPONENT_NAME,
TRANSPORT_NAME, null, "Transport Destination", null, "Data Management");
}
@@ -635,6 +741,15 @@
}
@Test
+ public void selectBackupTransportForUser_forwarded() throws RemoteException {
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ mTrampoline.selectBackupTransportForUser(mUserId, TRANSPORT_NAME);
+
+ verify(mBackupManagerServiceMock).selectBackupTransport(TRANSPORT_NAME);
+ }
+
+ @Test
public void selectBackupTransport_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
mTrampoline.selectBackupTransport(TRANSPORT_NAME);
@@ -642,9 +757,12 @@
}
@Test
- public void selectBackupTransportAsync_calledBeforeInitialize_ignored() throws Exception {
+ public void selectBackupTransportAsyncForUser_calledBeforeInitialize_ignored()
+ throws Exception {
LinkedBlockingQueue<Integer> q = new LinkedBlockingQueue();
- mTrampoline.selectBackupTransportAsync(
+
+ mTrampoline.selectBackupTransportAsyncForUser(
+ mUserId,
TRANSPORT_COMPONENT_NAME,
new ISelectBackupTransportCallback() {
@Override
@@ -662,6 +780,7 @@
return null;
}
});
+
verifyNoMoreInteractions(mBackupManagerServiceMock);
Integer errorCode = q.poll(5, TimeUnit.SECONDS);
assertNotNull(errorCode);
@@ -669,17 +788,19 @@
}
@Test
- public void selectBackupTransportAsync_calledBeforeInitialize_ignored_nullListener()
+ public void selectBackupTransportAsyncForUser_calledBeforeInitialize_ignored_nullListener()
throws Exception {
- mTrampoline.selectBackupTransportAsync(TRANSPORT_COMPONENT_NAME, null);
+ mTrampoline.selectBackupTransportAsyncForUser(mUserId, TRANSPORT_COMPONENT_NAME, null);
+
verifyNoMoreInteractions(mBackupManagerServiceMock);
// No crash.
}
@Test
- public void selectBackupTransportAsync_calledBeforeInitialize_ignored_listenerThrowException()
+ public void selectBackupTransportAsyncForUser_calledBeforeInitialize_ignored_listenerThrows()
throws Exception {
- mTrampoline.selectBackupTransportAsync(
+ mTrampoline.selectBackupTransportAsyncForUser(
+ mUserId,
TRANSPORT_COMPONENT_NAME,
new ISelectBackupTransportCallback() {
@Override
@@ -697,14 +818,17 @@
return null;
}
});
+
verifyNoMoreInteractions(mBackupManagerServiceMock);
// No crash.
}
@Test
- public void selectBackupTransportAsync_forwarded() throws RemoteException {
+ public void selectBackupTransportAsyncForUser_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- mTrampoline.selectBackupTransportAsync(TRANSPORT_COMPONENT_NAME, null);
+
+ mTrampoline.selectBackupTransportAsyncForUser(mUserId, TRANSPORT_COMPONENT_NAME, null);
+
verify(mBackupManagerServiceMock).selectBackupTransportAsync(TRANSPORT_COMPONENT_NAME,
null);
}
@@ -716,6 +840,19 @@
}
@Test
+ public void getConfigurationIntentForUser_forwarded() throws RemoteException {
+ Intent configurationIntentStub = new Intent();
+ when(mBackupManagerServiceMock.getConfigurationIntent(TRANSPORT_NAME)).thenReturn(
+ configurationIntentStub);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ assertEquals(
+ configurationIntentStub,
+ mTrampoline.getConfigurationIntentForUser(mUserId, TRANSPORT_NAME));
+ verify(mBackupManagerServiceMock).getConfigurationIntent(TRANSPORT_NAME);
+ }
+
+ @Test
public void getConfigurationIntent_forwarded() throws RemoteException {
Intent configurationIntentStub = new Intent();
when(mBackupManagerServiceMock.getConfigurationIntent(TRANSPORT_NAME)).thenReturn(
@@ -733,6 +870,18 @@
}
@Test
+ public void getDestinationStringForUser_forwarded() throws RemoteException {
+ when(mBackupManagerServiceMock.getDestinationString(TRANSPORT_NAME)).thenReturn(
+ DESTINATION_STRING);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ assertEquals(
+ DESTINATION_STRING,
+ mTrampoline.getDestinationStringForUser(mUserId, TRANSPORT_NAME));
+ verify(mBackupManagerServiceMock).getDestinationString(TRANSPORT_NAME);
+ }
+
+ @Test
public void getDestinationString_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getDestinationString(TRANSPORT_NAME)).thenReturn(
DESTINATION_STRING);
@@ -749,6 +898,19 @@
}
@Test
+ public void getDataManagementIntentForUser_forwarded() throws RemoteException {
+ Intent dataManagementIntent = new Intent();
+ when(mBackupManagerServiceMock.getDataManagementIntent(TRANSPORT_NAME)).thenReturn(
+ dataManagementIntent);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ assertEquals(
+ dataManagementIntent,
+ mTrampoline.getDataManagementIntentForUser(mUserId, TRANSPORT_NAME));
+ verify(mBackupManagerServiceMock).getDataManagementIntent(TRANSPORT_NAME);
+ }
+
+ @Test
public void getDataManagementIntent_forwarded() throws RemoteException {
Intent dataManagementIntent = new Intent();
when(mBackupManagerServiceMock.getDataManagementIntent(TRANSPORT_NAME)).thenReturn(
@@ -766,6 +928,18 @@
}
@Test
+ public void getDataManagementLabelForUser_forwarded() throws RemoteException {
+ when(mBackupManagerServiceMock.getDataManagementLabel(TRANSPORT_NAME)).thenReturn(
+ DATA_MANAGEMENT_LABEL);
+ mTrampoline.initializeService(UserHandle.USER_SYSTEM);
+
+ assertEquals(
+ DATA_MANAGEMENT_LABEL,
+ mTrampoline.getDataManagementLabelForUser(mUserId, TRANSPORT_NAME));
+ verify(mBackupManagerServiceMock).getDataManagementLabel(TRANSPORT_NAME);
+ }
+
+ @Test
public void getDataManagementLabel_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getDataManagementLabel(TRANSPORT_NAME)).thenReturn(
DATA_MANAGEMENT_LABEL);
@@ -777,14 +951,16 @@
@Test
public void beginRestoreSession_calledBeforeInitialize_ignored() throws RemoteException {
- mTrampoline.beginRestoreSession(PACKAGE_NAME, TRANSPORT_NAME);
+ mTrampoline.beginRestoreSessionForUser(mUserId, PACKAGE_NAME, TRANSPORT_NAME);
verifyNoMoreInteractions(mBackupManagerServiceMock);
}
@Test
- public void beginRestoreSession_forwarded() throws RemoteException {
+ public void beginRestoreSessionForUser_forwarded() throws RemoteException {
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- mTrampoline.beginRestoreSession(PACKAGE_NAME, TRANSPORT_NAME);
+
+ mTrampoline.beginRestoreSessionForUser(mUserId, PACKAGE_NAME, TRANSPORT_NAME);
+
verify(mBackupManagerServiceMock).beginRestoreSession(PACKAGE_NAME, TRANSPORT_NAME);
}
@@ -802,32 +978,34 @@
}
@Test
- public void getAvailableRestoreToken_calledBeforeInitialize_ignored() throws RemoteException {
- assertEquals(0, mTrampoline.getAvailableRestoreToken(PACKAGE_NAME));
+ public void getAvailableRestoreTokenForUser_calledBeforeInitialize_ignored()
+ throws RemoteException {
+ assertEquals(0, mTrampoline.getAvailableRestoreTokenForUser(mUserId, PACKAGE_NAME));
verifyNoMoreInteractions(mBackupManagerServiceMock);
}
@Test
- public void getAvailableRestoreToken_forwarded() throws RemoteException {
+ public void getAvailableRestoreTokenForUser_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.getAvailableRestoreToken(PACKAGE_NAME)).thenReturn(123L);
-
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- assertEquals(123, mTrampoline.getAvailableRestoreToken(PACKAGE_NAME));
+
+ assertEquals(123, mTrampoline.getAvailableRestoreTokenForUser(mUserId, PACKAGE_NAME));
verify(mBackupManagerServiceMock).getAvailableRestoreToken(PACKAGE_NAME);
}
@Test
- public void isAppEligibleForBackup_calledBeforeInitialize_ignored() throws RemoteException {
- assertFalse(mTrampoline.isAppEligibleForBackup(PACKAGE_NAME));
+ public void isAppEligibleForBackupForUser_calledBeforeInitialize_ignored()
+ throws RemoteException {
+ assertFalse(mTrampoline.isAppEligibleForBackupForUser(mUserId, PACKAGE_NAME));
verifyNoMoreInteractions(mBackupManagerServiceMock);
}
@Test
- public void isAppEligibleForBackup_forwarded() throws RemoteException {
+ public void isAppEligibleForBackupForUser_forwarded() throws RemoteException {
when(mBackupManagerServiceMock.isAppEligibleForBackup(PACKAGE_NAME)).thenReturn(true);
-
mTrampoline.initializeService(UserHandle.USER_SYSTEM);
- assertTrue(mTrampoline.isAppEligibleForBackup(PACKAGE_NAME));
+
+ assertTrue(mTrampoline.isAppEligibleForBackupForUser(mUserId, PACKAGE_NAME));
verify(mBackupManagerServiceMock).isAppEligibleForBackup(PACKAGE_NAME);
}