Loading cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +2 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.commands.bmgr; import android.annotation.IntDef; import android.annotation.UserIdInt; import android.app.backup.BackupManager; import android.app.backup.BackupManager.OperationType; import android.app.backup.BackupManagerMonitor; import android.app.backup.BackupProgress; import android.app.backup.BackupTransport; Loading Loading @@ -667,7 +666,7 @@ public class Bmgr { // The rest of the 'list' options work with a restore session on the current transport try { mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null, OperationType.BACKUP); mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null); if (mRestore == null) { System.err.println(BMGR_ERR_NO_RESTORESESSION_FOR_USER + userId); return; Loading Loading @@ -822,7 +821,7 @@ public class Bmgr { try { boolean didRestore = false; mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null, OperationType.BACKUP); mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null); if (mRestore == null) { System.err.println(BMGR_ERR_NO_RESTORESESSION_FOR_USER + userId); return; Loading core/java/android/app/backup/BackupManager.java +3 −58 Original line number Diff line number Diff line Loading @@ -361,36 +361,7 @@ public class BackupManager { try { // All packages, current transport IRestoreSession binder = sService.beginRestoreSessionForUser(mContext.getUserId(), null, null, OperationType.BACKUP); if (binder != null) { session = new RestoreSession(mContext, binder); } } catch (RemoteException e) { Log.e(TAG, "beginRestoreSession() couldn't connect"); } } return session; } /** * Begin the process of restoring data from backup. See the * {@link android.app.backup.RestoreSession} class for documentation on that process. * * @param operationType Type of the operation, see {@link OperationType} * * @hide */ @RequiresPermission(android.Manifest.permission.BACKUP) public RestoreSession beginRestoreSession(@OperationType int operationType) { RestoreSession session = null; checkServiceBinder(); if (sService != null) { try { // All packages, current transport IRestoreSession binder = sService.beginRestoreSessionForUser(mContext.getUserId(), null, null, operationType); sService.beginRestoreSessionForUser(mContext.getUserId(), null, null); if (binder != null) { session = new RestoreSession(mContext, binder); } Loading Loading @@ -801,7 +772,7 @@ public class BackupManager { @SystemApi @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer) { return requestBackup(packages, observer, null, 0, OperationType.BACKUP); return requestBackup(packages, observer, null, 0); } /** Loading @@ -826,31 +797,6 @@ public class BackupManager { @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer, BackupManagerMonitor monitor, int flags) { return requestBackup(packages, observer, monitor, flags, OperationType.BACKUP); } /** * Request an immediate backup, providing an observer to which results of the backup operation * will be published. The Android backup system will decide for each package whether it will * be full app data backup or key/value-pair-based backup. * * <p>If this method returns {@link BackupManager#SUCCESS}, the OS will attempt to backup all * provided packages using the remote transport. * * @param packages List of package names to backup. * @param observer The {@link BackupObserver} to receive callbacks during the backup * operation. Could be {@code null}. * @param monitor The {@link BackupManagerMonitorWrapper} to receive callbacks of important * events during the backup operation. Could be {@code null}. * @param flags {@link #FLAG_NON_INCREMENTAL_BACKUP}. * @param operationType {@link OperationType} * @return {@link BackupManager#SUCCESS} on success; nonzero on error. * @throws IllegalArgumentException on null or empty {@code packages} param. * @hide */ @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer, BackupManagerMonitor monitor, int flags, @OperationType int operationType) { checkServiceBinder(); if (sService != null) { try { Loading @@ -860,8 +806,7 @@ public class BackupManager { BackupManagerMonitorWrapper monitorWrapper = monitor == null ? null : new BackupManagerMonitorWrapper(monitor); return sService.requestBackup(packages, observerWrapper, monitorWrapper, flags, operationType); return sService.requestBackup(packages, observerWrapper, monitorWrapper, flags); } catch (RemoteException e) { Log.e(TAG, "requestBackup() couldn't connect"); } Loading core/java/android/app/backup/IBackupManager.aidl +2 −4 Original line number Diff line number Diff line Loading @@ -547,11 +547,9 @@ interface IBackupManager { * set can be restored. * @param transportID The name of the transport to use for the restore operation. * May be null, in which case the current active transport is used. * @param operationType Type of the operation, see {@link BackupManager#OperationType} * @return An interface to the restore session, or null on error. */ IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID, int operationType); IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID); /** * Notify the backup manager that a BackupAgent has completed the operation Loading Loading @@ -680,7 +678,7 @@ interface IBackupManager { * {@link android.app.backup.IBackupManager.requestBackupForUser} for the calling user id. */ int requestBackup(in String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, int operationType); int flags); /** * Cancel all running backups. After this call returns, no currently running backups will Loading services/backup/java/com/android/server/backup/BackupManagerService.java +9 −14 Original line number Diff line number Diff line Loading @@ -1245,10 +1245,9 @@ public class BackupManagerService extends IBackupManager.Stub { @Override public IRestoreSession beginRestoreSessionForUser( int userId, String packageName, String transportID, @OperationType int operationType) throws RemoteException { int userId, String packageName, String transportID) throws RemoteException { return isUserReadyForBackup(userId) ? beginRestoreSession(userId, packageName, transportID, operationType) : null; ? beginRestoreSession(userId, packageName, transportID) : null; } /** Loading @@ -1257,15 +1256,13 @@ public class BackupManagerService extends IBackupManager.Stub { */ @Nullable public IRestoreSession beginRestoreSession( @UserIdInt int userId, String packageName, String transportName, @OperationType int operationType) { @UserIdInt int userId, String packageName, String transportName) { UserBackupManagerService userBackupManagerService = getServiceForUserIfCallerHasPermission(userId, "beginRestoreSession()"); return userBackupManagerService == null ? null : userBackupManagerService.beginRestoreSession(packageName, transportName, operationType); : userBackupManagerService.beginRestoreSession(packageName, transportName); } @Override Loading Loading @@ -1350,15 +1347,15 @@ public class BackupManagerService extends IBackupManager.Stub { if (!isUserReadyForBackup(userId)) { return BackupManager.ERROR_BACKUP_NOT_ALLOWED; } return requestBackup(userId, packages, observer, monitor, flags, OperationType.BACKUP); return requestBackup(userId, packages, observer, monitor, flags); } @Override public int requestBackup(String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, @OperationType int operationType) IBackupManagerMonitor monitor, int flags) throws RemoteException { return requestBackup(binderGetCallingUserId(), packages, observer, monitor, flags, operationType); observer, monitor, flags); } /** Loading @@ -1370,15 +1367,13 @@ public class BackupManagerService extends IBackupManager.Stub { String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, @OperationType int operationType) { int flags) { UserBackupManagerService userBackupManagerService = getServiceForUserIfCallerHasPermission(userId, "requestBackup()"); return userBackupManagerService == null ? BackupManager.ERROR_BACKUP_NOT_ALLOWED : userBackupManagerService.requestBackup(packages, observer, monitor, flags, operationType); : userBackupManagerService.requestBackup(packages, observer, monitor, flags); } @Override Loading services/backup/java/com/android/server/backup/UserBackupManagerService.java +36 −15 Original line number Diff line number Diff line Loading @@ -127,6 +127,7 @@ import com.android.server.backup.params.RestoreParams; import com.android.server.backup.restore.ActiveRestoreSession; import com.android.server.backup.restore.PerformUnifiedRestoreTask; import com.android.server.backup.transport.TransportClient; import com.android.server.backup.transport.TransportNotAvailableException; import com.android.server.backup.transport.TransportNotRegisteredException; import com.android.server.backup.utils.BackupEligibilityRules; import com.android.server.backup.utils.BackupManagerMonitorUtils; Loading Loading @@ -1858,21 +1859,12 @@ public class UserBackupManagerService { return requestBackup(packages, observer, null, flags); } /** * Requests a backup for the inputted {@code packages} with a specified {@link * IBackupManagerMonitor}. */ public int requestBackup(String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags) { return requestBackup(packages, observer, monitor, flags, OperationType.BACKUP); } /** * Requests a backup for the inputted {@code packages} with a specified {@link * IBackupManagerMonitor} and {@link OperationType}. */ public int requestBackup(String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, @OperationType int operationType) { IBackupManagerMonitor monitor, int flags) { mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "requestBackup"); if (packages == null || packages.length < 1) { Loading Loading @@ -1903,13 +1895,16 @@ public class UserBackupManagerService { final TransportClient transportClient; final String transportDirName; int operationType; try { transportDirName = mTransportManager.getTransportDirName( mTransportManager.getCurrentTransportName()); transportClient = mTransportManager.getCurrentTransportClientOrThrow("BMS.requestBackup()"); } catch (TransportNotRegisteredException e) { operationType = getOperationTypeFromTransport(transportClient); } catch (TransportNotRegisteredException | TransportNotAvailableException | RemoteException e) { BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED); monitor = BackupManagerMonitorUtils.monitorEvent(monitor, BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL, Loading Loading @@ -4024,15 +4019,13 @@ public class UserBackupManagerService { } /** Hand off a restore session. */ public IRestoreSession beginRestoreSession(String packageName, String transport, @OperationType int operationType) { public IRestoreSession beginRestoreSession(String packageName, String transport) { if (DEBUG) { Slog.v( TAG, addUserIdToLogMessage( mUserId, "beginRestoreSession: pkg=" + packageName + " transport=" + transport + "operationType=" + operationType)); "beginRestoreSession: pkg=" + packageName + " transport=" + transport)); } boolean needPermission = true; Loading Loading @@ -4073,6 +4066,17 @@ public class UserBackupManagerService { } } int operationType; try { operationType = getOperationTypeFromTransport( mTransportManager.getTransportClientOrThrow(transport, /* caller */ "BMS.beginRestoreSession")); } catch (TransportNotAvailableException | TransportNotRegisteredException | RemoteException e) { Slog.w(TAG, "Failed to get operation type from transport: " + e); return null; } synchronized (this) { if (mActiveRestoreSession != null) { Slog.i( Loading Loading @@ -4356,6 +4360,23 @@ public class UserBackupManagerService { } } @VisibleForTesting @OperationType int getOperationTypeFromTransport(TransportClient transportClient) throws TransportNotAvailableException, RemoteException { long oldCallingId = Binder.clearCallingIdentity(); try { IBackupTransport transport = transportClient.connectOrThrow( /* caller */ "BMS.getOperationTypeFromTransport"); if ((transport.getTransportFlags() & BackupAgent.FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { return OperationType.MIGRATION; } else { return OperationType.BACKUP; } } finally { Binder.restoreCallingIdentity(oldCallingId); } } private static String addUserIdToLogMessage(int userId, String message) { return "[UserID:" + userId + "] " + message; } Loading Loading
cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +2 −3 Original line number Diff line number Diff line Loading @@ -19,7 +19,6 @@ package com.android.commands.bmgr; import android.annotation.IntDef; import android.annotation.UserIdInt; import android.app.backup.BackupManager; import android.app.backup.BackupManager.OperationType; import android.app.backup.BackupManagerMonitor; import android.app.backup.BackupProgress; import android.app.backup.BackupTransport; Loading Loading @@ -667,7 +666,7 @@ public class Bmgr { // The rest of the 'list' options work with a restore session on the current transport try { mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null, OperationType.BACKUP); mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null); if (mRestore == null) { System.err.println(BMGR_ERR_NO_RESTORESESSION_FOR_USER + userId); return; Loading Loading @@ -822,7 +821,7 @@ public class Bmgr { try { boolean didRestore = false; mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null, OperationType.BACKUP); mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null); if (mRestore == null) { System.err.println(BMGR_ERR_NO_RESTORESESSION_FOR_USER + userId); return; Loading
core/java/android/app/backup/BackupManager.java +3 −58 Original line number Diff line number Diff line Loading @@ -361,36 +361,7 @@ public class BackupManager { try { // All packages, current transport IRestoreSession binder = sService.beginRestoreSessionForUser(mContext.getUserId(), null, null, OperationType.BACKUP); if (binder != null) { session = new RestoreSession(mContext, binder); } } catch (RemoteException e) { Log.e(TAG, "beginRestoreSession() couldn't connect"); } } return session; } /** * Begin the process of restoring data from backup. See the * {@link android.app.backup.RestoreSession} class for documentation on that process. * * @param operationType Type of the operation, see {@link OperationType} * * @hide */ @RequiresPermission(android.Manifest.permission.BACKUP) public RestoreSession beginRestoreSession(@OperationType int operationType) { RestoreSession session = null; checkServiceBinder(); if (sService != null) { try { // All packages, current transport IRestoreSession binder = sService.beginRestoreSessionForUser(mContext.getUserId(), null, null, operationType); sService.beginRestoreSessionForUser(mContext.getUserId(), null, null); if (binder != null) { session = new RestoreSession(mContext, binder); } Loading Loading @@ -801,7 +772,7 @@ public class BackupManager { @SystemApi @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer) { return requestBackup(packages, observer, null, 0, OperationType.BACKUP); return requestBackup(packages, observer, null, 0); } /** Loading @@ -826,31 +797,6 @@ public class BackupManager { @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer, BackupManagerMonitor monitor, int flags) { return requestBackup(packages, observer, monitor, flags, OperationType.BACKUP); } /** * Request an immediate backup, providing an observer to which results of the backup operation * will be published. The Android backup system will decide for each package whether it will * be full app data backup or key/value-pair-based backup. * * <p>If this method returns {@link BackupManager#SUCCESS}, the OS will attempt to backup all * provided packages using the remote transport. * * @param packages List of package names to backup. * @param observer The {@link BackupObserver} to receive callbacks during the backup * operation. Could be {@code null}. * @param monitor The {@link BackupManagerMonitorWrapper} to receive callbacks of important * events during the backup operation. Could be {@code null}. * @param flags {@link #FLAG_NON_INCREMENTAL_BACKUP}. * @param operationType {@link OperationType} * @return {@link BackupManager#SUCCESS} on success; nonzero on error. * @throws IllegalArgumentException on null or empty {@code packages} param. * @hide */ @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[] packages, BackupObserver observer, BackupManagerMonitor monitor, int flags, @OperationType int operationType) { checkServiceBinder(); if (sService != null) { try { Loading @@ -860,8 +806,7 @@ public class BackupManager { BackupManagerMonitorWrapper monitorWrapper = monitor == null ? null : new BackupManagerMonitorWrapper(monitor); return sService.requestBackup(packages, observerWrapper, monitorWrapper, flags, operationType); return sService.requestBackup(packages, observerWrapper, monitorWrapper, flags); } catch (RemoteException e) { Log.e(TAG, "requestBackup() couldn't connect"); } Loading
core/java/android/app/backup/IBackupManager.aidl +2 −4 Original line number Diff line number Diff line Loading @@ -547,11 +547,9 @@ interface IBackupManager { * set can be restored. * @param transportID The name of the transport to use for the restore operation. * May be null, in which case the current active transport is used. * @param operationType Type of the operation, see {@link BackupManager#OperationType} * @return An interface to the restore session, or null on error. */ IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID, int operationType); IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID); /** * Notify the backup manager that a BackupAgent has completed the operation Loading Loading @@ -680,7 +678,7 @@ interface IBackupManager { * {@link android.app.backup.IBackupManager.requestBackupForUser} for the calling user id. */ int requestBackup(in String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, int operationType); int flags); /** * Cancel all running backups. After this call returns, no currently running backups will Loading
services/backup/java/com/android/server/backup/BackupManagerService.java +9 −14 Original line number Diff line number Diff line Loading @@ -1245,10 +1245,9 @@ public class BackupManagerService extends IBackupManager.Stub { @Override public IRestoreSession beginRestoreSessionForUser( int userId, String packageName, String transportID, @OperationType int operationType) throws RemoteException { int userId, String packageName, String transportID) throws RemoteException { return isUserReadyForBackup(userId) ? beginRestoreSession(userId, packageName, transportID, operationType) : null; ? beginRestoreSession(userId, packageName, transportID) : null; } /** Loading @@ -1257,15 +1256,13 @@ public class BackupManagerService extends IBackupManager.Stub { */ @Nullable public IRestoreSession beginRestoreSession( @UserIdInt int userId, String packageName, String transportName, @OperationType int operationType) { @UserIdInt int userId, String packageName, String transportName) { UserBackupManagerService userBackupManagerService = getServiceForUserIfCallerHasPermission(userId, "beginRestoreSession()"); return userBackupManagerService == null ? null : userBackupManagerService.beginRestoreSession(packageName, transportName, operationType); : userBackupManagerService.beginRestoreSession(packageName, transportName); } @Override Loading Loading @@ -1350,15 +1347,15 @@ public class BackupManagerService extends IBackupManager.Stub { if (!isUserReadyForBackup(userId)) { return BackupManager.ERROR_BACKUP_NOT_ALLOWED; } return requestBackup(userId, packages, observer, monitor, flags, OperationType.BACKUP); return requestBackup(userId, packages, observer, monitor, flags); } @Override public int requestBackup(String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, @OperationType int operationType) IBackupManagerMonitor monitor, int flags) throws RemoteException { return requestBackup(binderGetCallingUserId(), packages, observer, monitor, flags, operationType); observer, monitor, flags); } /** Loading @@ -1370,15 +1367,13 @@ public class BackupManagerService extends IBackupManager.Stub { String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, @OperationType int operationType) { int flags) { UserBackupManagerService userBackupManagerService = getServiceForUserIfCallerHasPermission(userId, "requestBackup()"); return userBackupManagerService == null ? BackupManager.ERROR_BACKUP_NOT_ALLOWED : userBackupManagerService.requestBackup(packages, observer, monitor, flags, operationType); : userBackupManagerService.requestBackup(packages, observer, monitor, flags); } @Override Loading
services/backup/java/com/android/server/backup/UserBackupManagerService.java +36 −15 Original line number Diff line number Diff line Loading @@ -127,6 +127,7 @@ import com.android.server.backup.params.RestoreParams; import com.android.server.backup.restore.ActiveRestoreSession; import com.android.server.backup.restore.PerformUnifiedRestoreTask; import com.android.server.backup.transport.TransportClient; import com.android.server.backup.transport.TransportNotAvailableException; import com.android.server.backup.transport.TransportNotRegisteredException; import com.android.server.backup.utils.BackupEligibilityRules; import com.android.server.backup.utils.BackupManagerMonitorUtils; Loading Loading @@ -1858,21 +1859,12 @@ public class UserBackupManagerService { return requestBackup(packages, observer, null, flags); } /** * Requests a backup for the inputted {@code packages} with a specified {@link * IBackupManagerMonitor}. */ public int requestBackup(String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags) { return requestBackup(packages, observer, monitor, flags, OperationType.BACKUP); } /** * Requests a backup for the inputted {@code packages} with a specified {@link * IBackupManagerMonitor} and {@link OperationType}. */ public int requestBackup(String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor, int flags, @OperationType int operationType) { IBackupManagerMonitor monitor, int flags) { mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "requestBackup"); if (packages == null || packages.length < 1) { Loading Loading @@ -1903,13 +1895,16 @@ public class UserBackupManagerService { final TransportClient transportClient; final String transportDirName; int operationType; try { transportDirName = mTransportManager.getTransportDirName( mTransportManager.getCurrentTransportName()); transportClient = mTransportManager.getCurrentTransportClientOrThrow("BMS.requestBackup()"); } catch (TransportNotRegisteredException e) { operationType = getOperationTypeFromTransport(transportClient); } catch (TransportNotRegisteredException | TransportNotAvailableException | RemoteException e) { BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED); monitor = BackupManagerMonitorUtils.monitorEvent(monitor, BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL, Loading Loading @@ -4024,15 +4019,13 @@ public class UserBackupManagerService { } /** Hand off a restore session. */ public IRestoreSession beginRestoreSession(String packageName, String transport, @OperationType int operationType) { public IRestoreSession beginRestoreSession(String packageName, String transport) { if (DEBUG) { Slog.v( TAG, addUserIdToLogMessage( mUserId, "beginRestoreSession: pkg=" + packageName + " transport=" + transport + "operationType=" + operationType)); "beginRestoreSession: pkg=" + packageName + " transport=" + transport)); } boolean needPermission = true; Loading Loading @@ -4073,6 +4066,17 @@ public class UserBackupManagerService { } } int operationType; try { operationType = getOperationTypeFromTransport( mTransportManager.getTransportClientOrThrow(transport, /* caller */ "BMS.beginRestoreSession")); } catch (TransportNotAvailableException | TransportNotRegisteredException | RemoteException e) { Slog.w(TAG, "Failed to get operation type from transport: " + e); return null; } synchronized (this) { if (mActiveRestoreSession != null) { Slog.i( Loading Loading @@ -4356,6 +4360,23 @@ public class UserBackupManagerService { } } @VisibleForTesting @OperationType int getOperationTypeFromTransport(TransportClient transportClient) throws TransportNotAvailableException, RemoteException { long oldCallingId = Binder.clearCallingIdentity(); try { IBackupTransport transport = transportClient.connectOrThrow( /* caller */ "BMS.getOperationTypeFromTransport"); if ((transport.getTransportFlags() & BackupAgent.FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { return OperationType.MIGRATION; } else { return OperationType.BACKUP; } } finally { Binder.restoreCallingIdentity(oldCallingId); } } private static String addUserIdToLogMessage(int userId, String message) { return "[UserID:" + userId + "] " + message; } Loading