Loading services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +27 −11 Original line number Diff line number Diff line Loading @@ -3242,10 +3242,10 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter skip = true; } // Do we have a transport to fetch data for us? IBackupTransport transport = mTransportManager.getCurrentTransportBinder(); if (transport == null) { if (DEBUG) Slog.w(TAG, "No transport"); TransportClient transportClient = mTransportManager.getCurrentTransportClient("BMS.restoreAtInstall()"); if (transportClient == null) { if (DEBUG) Slog.w(TAG, "No transport client"); skip = true; } Loading @@ -3262,16 +3262,26 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter // The eventual message back into the Package Manager to run the post-install // steps for 'token' will be issued from the restore handling code. // This can throw and so *must* happen before the wakelock is acquired String dirName = transport.transportDirName(); mWakelock.acquire(); OnTaskFinishedListener listener = caller -> { mTransportManager.disposeOfTransportClient(transportClient, caller); mWakelock.release(); }; if (MORE_DEBUG) { Slog.d(TAG, "Restore at install of " + packageName); } Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE); msg.obj = new RestoreParams(transport, dirName, null, null, restoreSet, packageName, token); msg.obj = RestoreParams.createForRestoreAtInstall( transportClient, /* observer */ null, /* monitor */ null, restoreSet, packageName, token, listener); mBackupHandler.sendMessage(msg); } catch (Exception e) { // Calling into the transport broke; back off and proceed with the installation. Loading @@ -3281,8 +3291,14 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter } if (skip) { // Auto-restore disabled or no way to attempt a restore; just tell the Package // Manager to proceed with the post-install handling for this package. // Auto-restore disabled or no way to attempt a restore if (transportClient != null) { mTransportManager.disposeOfTransportClient( transportClient, "BMS.restoreAtInstall()"); } // Tell the PackageManager to proceed with the post-install handling for this package. if (DEBUG) Slog.v(TAG, "Finishing install immediately"); try { mPackageManagerBinder.finishPackageInstall(token, false); Loading services/backup/java/com/android/server/backup/TransportManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,12 @@ public class TransportManager { } } public boolean isTransportRegistered(String transportName) { synchronized (mTransportLock) { return getRegisteredTransportEntryLocked(transportName) != null; } } /** * Returns a {@link TransportClient} for the current transport or null if not found. * Loading services/backup/java/com/android/server/backup/internal/BackupHandler.java +18 −7 Original line number Diff line number Diff line Loading @@ -189,7 +189,7 @@ public class BackupHandler extends Handler { } task.execute(); } catch (ClassCastException e) { Slog.e(TAG, "Invalid backup task in flight, obj=" + msg.obj); Slog.e(TAG, "Invalid backup/restore task in flight, obj=" + msg.obj); } break; } Loading Loading @@ -229,10 +229,18 @@ public class BackupHandler extends Handler { RestoreParams params = (RestoreParams) msg.obj; Slog.d(TAG, "MSG_RUN_RESTORE observer=" + params.observer); PerformUnifiedRestoreTask task = new PerformUnifiedRestoreTask(backupManagerService, params.transport, params.observer, params.monitor, params.token, params.pkgInfo, params.pmToken, params.isSystemRestore, params.filterSet); PerformUnifiedRestoreTask task = new PerformUnifiedRestoreTask( backupManagerService, params.transportClient, params.observer, params.monitor, params.token, params.packageInfo, params.pmToken, params.isSystemRestore, params.filterSet, params.listener); synchronized (backupManagerService.getPendingRestores()) { if (backupManagerService.isRestoreInProgress()) { Loading Loading @@ -299,8 +307,11 @@ public class BackupHandler extends Handler { // Like other async operations, this is entered with the wakelock held RestoreSet[] sets = null; RestoreGetSetsParams params = (RestoreGetSetsParams) msg.obj; String callerLogString = "BH/MSG_RUN_GET_RESTORE_SETS"; try { sets = params.transport.getAvailableRestoreSets(); IBackupTransport transport = params.transportClient.connectOrThrow(callerLogString); sets = transport.getAvailableRestoreSets(); // cache the result in the active session synchronized (params.session) { params.session.mRestoreSets = sets; Loading @@ -325,7 +336,7 @@ public class BackupHandler extends Handler { removeMessages(MSG_RESTORE_SESSION_TIMEOUT); sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, TIMEOUT_RESTORE_INTERVAL); backupManagerService.getWakelock().release(); params.listener.onFinished(callerLogString); } break; } Loading services/backup/java/com/android/server/backup/internal/PerformBackupTask.java +2 −2 Original line number Diff line number Diff line Loading @@ -907,7 +907,7 @@ public class PerformBackupTask implements BackupRestoreTask { mStatus = BackupTransport.TRANSPORT_OK; long size = 0; try { TransportUtils.checkTransport(transport); TransportUtils.checkTransportNotNull(transport); size = mBackupDataName.length(); if (size > 0) { if (mStatus == BackupTransport.TRANSPORT_OK) { Loading Loading @@ -997,7 +997,7 @@ public class PerformBackupTask implements BackupRestoreTask { } if (mAgentBinder != null) { try { TransportUtils.checkTransport(transport); TransportUtils.checkTransportNotNull(transport); long quota = transport.getBackupQuota(mCurrentPackage.packageName, false); mAgentBinder.doQuotaExceeded(size, quota); } catch (Exception e) { Loading services/backup/java/com/android/server/backup/params/RestoreGetSetsParams.java +12 −8 Original line number Diff line number Diff line Loading @@ -20,20 +20,24 @@ import android.app.backup.IBackupManagerMonitor; import android.app.backup.IRestoreObserver; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.restore.ActiveRestoreSession; import com.android.server.backup.transport.TransportClient; public class RestoreGetSetsParams { public final TransportClient transportClient; public final ActiveRestoreSession session; public final IRestoreObserver observer; public final IBackupManagerMonitor monitor; public final OnTaskFinishedListener listener; public IBackupTransport transport; public ActiveRestoreSession session; public IRestoreObserver observer; public IBackupManagerMonitor monitor; public RestoreGetSetsParams(IBackupTransport _transport, ActiveRestoreSession _session, IRestoreObserver _observer, IBackupManagerMonitor _monitor) { transport = _transport; public RestoreGetSetsParams(TransportClient _transportClient, ActiveRestoreSession _session, IRestoreObserver _observer, IBackupManagerMonitor _monitor, OnTaskFinishedListener _listener) { transportClient = _transportClient; session = _session; observer = _observer; monitor = _monitor; listener = _listener; } } Loading
services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +27 −11 Original line number Diff line number Diff line Loading @@ -3242,10 +3242,10 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter skip = true; } // Do we have a transport to fetch data for us? IBackupTransport transport = mTransportManager.getCurrentTransportBinder(); if (transport == null) { if (DEBUG) Slog.w(TAG, "No transport"); TransportClient transportClient = mTransportManager.getCurrentTransportClient("BMS.restoreAtInstall()"); if (transportClient == null) { if (DEBUG) Slog.w(TAG, "No transport client"); skip = true; } Loading @@ -3262,16 +3262,26 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter // The eventual message back into the Package Manager to run the post-install // steps for 'token' will be issued from the restore handling code. // This can throw and so *must* happen before the wakelock is acquired String dirName = transport.transportDirName(); mWakelock.acquire(); OnTaskFinishedListener listener = caller -> { mTransportManager.disposeOfTransportClient(transportClient, caller); mWakelock.release(); }; if (MORE_DEBUG) { Slog.d(TAG, "Restore at install of " + packageName); } Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE); msg.obj = new RestoreParams(transport, dirName, null, null, restoreSet, packageName, token); msg.obj = RestoreParams.createForRestoreAtInstall( transportClient, /* observer */ null, /* monitor */ null, restoreSet, packageName, token, listener); mBackupHandler.sendMessage(msg); } catch (Exception e) { // Calling into the transport broke; back off and proceed with the installation. Loading @@ -3281,8 +3291,14 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter } if (skip) { // Auto-restore disabled or no way to attempt a restore; just tell the Package // Manager to proceed with the post-install handling for this package. // Auto-restore disabled or no way to attempt a restore if (transportClient != null) { mTransportManager.disposeOfTransportClient( transportClient, "BMS.restoreAtInstall()"); } // Tell the PackageManager to proceed with the post-install handling for this package. if (DEBUG) Slog.v(TAG, "Finishing install immediately"); try { mPackageManagerBinder.finishPackageInstall(token, false); Loading
services/backup/java/com/android/server/backup/TransportManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -308,6 +308,12 @@ public class TransportManager { } } public boolean isTransportRegistered(String transportName) { synchronized (mTransportLock) { return getRegisteredTransportEntryLocked(transportName) != null; } } /** * Returns a {@link TransportClient} for the current transport or null if not found. * Loading
services/backup/java/com/android/server/backup/internal/BackupHandler.java +18 −7 Original line number Diff line number Diff line Loading @@ -189,7 +189,7 @@ public class BackupHandler extends Handler { } task.execute(); } catch (ClassCastException e) { Slog.e(TAG, "Invalid backup task in flight, obj=" + msg.obj); Slog.e(TAG, "Invalid backup/restore task in flight, obj=" + msg.obj); } break; } Loading Loading @@ -229,10 +229,18 @@ public class BackupHandler extends Handler { RestoreParams params = (RestoreParams) msg.obj; Slog.d(TAG, "MSG_RUN_RESTORE observer=" + params.observer); PerformUnifiedRestoreTask task = new PerformUnifiedRestoreTask(backupManagerService, params.transport, params.observer, params.monitor, params.token, params.pkgInfo, params.pmToken, params.isSystemRestore, params.filterSet); PerformUnifiedRestoreTask task = new PerformUnifiedRestoreTask( backupManagerService, params.transportClient, params.observer, params.monitor, params.token, params.packageInfo, params.pmToken, params.isSystemRestore, params.filterSet, params.listener); synchronized (backupManagerService.getPendingRestores()) { if (backupManagerService.isRestoreInProgress()) { Loading Loading @@ -299,8 +307,11 @@ public class BackupHandler extends Handler { // Like other async operations, this is entered with the wakelock held RestoreSet[] sets = null; RestoreGetSetsParams params = (RestoreGetSetsParams) msg.obj; String callerLogString = "BH/MSG_RUN_GET_RESTORE_SETS"; try { sets = params.transport.getAvailableRestoreSets(); IBackupTransport transport = params.transportClient.connectOrThrow(callerLogString); sets = transport.getAvailableRestoreSets(); // cache the result in the active session synchronized (params.session) { params.session.mRestoreSets = sets; Loading @@ -325,7 +336,7 @@ public class BackupHandler extends Handler { removeMessages(MSG_RESTORE_SESSION_TIMEOUT); sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, TIMEOUT_RESTORE_INTERVAL); backupManagerService.getWakelock().release(); params.listener.onFinished(callerLogString); } break; } Loading
services/backup/java/com/android/server/backup/internal/PerformBackupTask.java +2 −2 Original line number Diff line number Diff line Loading @@ -907,7 +907,7 @@ public class PerformBackupTask implements BackupRestoreTask { mStatus = BackupTransport.TRANSPORT_OK; long size = 0; try { TransportUtils.checkTransport(transport); TransportUtils.checkTransportNotNull(transport); size = mBackupDataName.length(); if (size > 0) { if (mStatus == BackupTransport.TRANSPORT_OK) { Loading Loading @@ -997,7 +997,7 @@ public class PerformBackupTask implements BackupRestoreTask { } if (mAgentBinder != null) { try { TransportUtils.checkTransport(transport); TransportUtils.checkTransportNotNull(transport); long quota = transport.getBackupQuota(mCurrentPackage.packageName, false); mAgentBinder.doQuotaExceeded(size, quota); } catch (Exception e) { Loading
services/backup/java/com/android/server/backup/params/RestoreGetSetsParams.java +12 −8 Original line number Diff line number Diff line Loading @@ -20,20 +20,24 @@ import android.app.backup.IBackupManagerMonitor; import android.app.backup.IRestoreObserver; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.restore.ActiveRestoreSession; import com.android.server.backup.transport.TransportClient; public class RestoreGetSetsParams { public final TransportClient transportClient; public final ActiveRestoreSession session; public final IRestoreObserver observer; public final IBackupManagerMonitor monitor; public final OnTaskFinishedListener listener; public IBackupTransport transport; public ActiveRestoreSession session; public IRestoreObserver observer; public IBackupManagerMonitor monitor; public RestoreGetSetsParams(IBackupTransport _transport, ActiveRestoreSession _session, IRestoreObserver _observer, IBackupManagerMonitor _monitor) { transport = _transport; public RestoreGetSetsParams(TransportClient _transportClient, ActiveRestoreSession _session, IRestoreObserver _observer, IBackupManagerMonitor _monitor, OnTaskFinishedListener _listener) { transportClient = _transportClient; session = _session; observer = _observer; monitor = _monitor; listener = _listener; } }