Loading services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +11 −6 Original line number Diff line number Diff line Loading @@ -2389,19 +2389,24 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter if (MORE_DEBUG) Slog.v(TAG, "Found the app - running clear process"); mBackupHandler.removeMessages(MSG_RETRY_CLEAR); synchronized (mQueueLock) { final IBackupTransport transport = mTransportManager.getTransportBinder(transportName); if (transport == null) { // transport is currently unavailable -- make sure to retry TransportClient transportClient = mTransportManager .getTransportClient(transportName, "BMS.clearBackupData()"); if (transportClient == null) { // transport is currently unregistered -- make sure to retry Message msg = mBackupHandler.obtainMessage(MSG_RETRY_CLEAR, new ClearRetryParams(transportName, packageName)); mBackupHandler.sendMessageDelayed(msg, TRANSPORT_RETRY_INTERVAL); return; } long oldId = Binder.clearCallingIdentity(); OnTaskFinishedListener listener = caller -> mTransportManager.disposeOfTransportClient(transportClient, caller); mWakelock.acquire(); Message msg = mBackupHandler.obtainMessage(MSG_RUN_CLEAR, new ClearParams(transport, info)); Message msg = mBackupHandler.obtainMessage( MSG_RUN_CLEAR, new ClearParams(transportClient, info, listener)); mBackupHandler.sendMessage(msg); Binder.restoreCallingIdentity(oldId); } Loading services/backup/java/com/android/server/backup/internal/BackupHandler.java +7 −2 Original line number Diff line number Diff line Loading @@ -268,8 +268,13 @@ public class BackupHandler extends Handler { case MSG_RUN_CLEAR: { ClearParams params = (ClearParams) msg.obj; (new PerformClearTask(backupManagerService, params.transport, params.packageInfo)).run(); Runnable task = new PerformClearTask( backupManagerService, params.transportClient, params.packageInfo, params.listener); task.run(); break; } Loading services/backup/java/com/android/server/backup/internal/PerformClearTask.java +26 −18 Original line number Diff line number Diff line Loading @@ -23,46 +23,54 @@ import android.util.Slog; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.RefactoredBackupManagerService; import com.android.server.backup.transport.TransportClient; import java.io.File; public class PerformClearTask implements Runnable { private RefactoredBackupManagerService backupManagerService; IBackupTransport mTransport; PackageInfo mPackage; private final RefactoredBackupManagerService mBackupManagerService; private final TransportClient mTransportClient; private final PackageInfo mPackage; private final OnTaskFinishedListener mListener; PerformClearTask(RefactoredBackupManagerService backupManagerService, IBackupTransport transport, PackageInfo packageInfo) { this.backupManagerService = backupManagerService; mTransport = transport; TransportClient transportClient, PackageInfo packageInfo, OnTaskFinishedListener listener) { mBackupManagerService = backupManagerService; mTransportClient = transportClient; mPackage = packageInfo; mListener = listener; } public void run() { String callerLogString = "PerformClearTask.run()"; IBackupTransport transport = null; try { // Clear the on-device backup state to ensure a full backup next time File stateDir = new File(backupManagerService.getBaseStateDir(), mTransport.transportDirName()); File stateDir = new File(mBackupManagerService.getBaseStateDir(), mTransportClient.getTransportDirName()); File stateFile = new File(stateDir, mPackage.packageName); stateFile.delete(); transport = mTransportClient.connectOrThrow(callerLogString); // Tell the transport to remove all the persistent storage for the app // TODO - need to handle failures mTransport.clearBackupData(mPackage); transport.clearBackupData(mPackage); } catch (Exception e) { Slog.e(TAG, "Transport threw clearing data for " + mPackage + ": " + e.getMessage()); } finally { if (transport != null) { try { // TODO - need to handle failures mTransport.finishBackup(); transport.finishBackup(); } catch (Exception e) { // Nothing we can do here, alas Slog.e(TAG, "Unable to mark clear operation finished: " + e.getMessage()); } } mListener.onFinished(callerLogString); // Last but not least, release the cpu backupManagerService.getWakelock().release(); mBackupManagerService.getWakelock().release(); } } } services/backup/java/com/android/server/backup/params/ClearParams.java +11 −6 Original line number Diff line number Diff line Loading @@ -18,15 +18,20 @@ package com.android.server.backup.params; import android.content.pm.PackageInfo; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.transport.TransportClient; public class ClearParams { public IBackupTransport transport; public TransportClient transportClient; public PackageInfo packageInfo; public OnTaskFinishedListener listener; public ClearParams(IBackupTransport _transport, PackageInfo _info) { transport = _transport; packageInfo = _info; public ClearParams( TransportClient transportClient, PackageInfo packageInfo, OnTaskFinishedListener listener) { this.transportClient = transportClient; this.packageInfo = packageInfo; this.listener = listener; } } services/backup/java/com/android/server/backup/params/ClearRetryParams.java +3 −4 Original line number Diff line number Diff line Loading @@ -17,12 +17,11 @@ package com.android.server.backup.params; public class ClearRetryParams { public String transportName; public String packageName; public ClearRetryParams(String transport, String pkg) { transportName = transport; packageName = pkg; public ClearRetryParams(String transportName, String packageName) { this.transportName = transportName; this.packageName = packageName; } } Loading
services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +11 −6 Original line number Diff line number Diff line Loading @@ -2389,19 +2389,24 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter if (MORE_DEBUG) Slog.v(TAG, "Found the app - running clear process"); mBackupHandler.removeMessages(MSG_RETRY_CLEAR); synchronized (mQueueLock) { final IBackupTransport transport = mTransportManager.getTransportBinder(transportName); if (transport == null) { // transport is currently unavailable -- make sure to retry TransportClient transportClient = mTransportManager .getTransportClient(transportName, "BMS.clearBackupData()"); if (transportClient == null) { // transport is currently unregistered -- make sure to retry Message msg = mBackupHandler.obtainMessage(MSG_RETRY_CLEAR, new ClearRetryParams(transportName, packageName)); mBackupHandler.sendMessageDelayed(msg, TRANSPORT_RETRY_INTERVAL); return; } long oldId = Binder.clearCallingIdentity(); OnTaskFinishedListener listener = caller -> mTransportManager.disposeOfTransportClient(transportClient, caller); mWakelock.acquire(); Message msg = mBackupHandler.obtainMessage(MSG_RUN_CLEAR, new ClearParams(transport, info)); Message msg = mBackupHandler.obtainMessage( MSG_RUN_CLEAR, new ClearParams(transportClient, info, listener)); mBackupHandler.sendMessage(msg); Binder.restoreCallingIdentity(oldId); } Loading
services/backup/java/com/android/server/backup/internal/BackupHandler.java +7 −2 Original line number Diff line number Diff line Loading @@ -268,8 +268,13 @@ public class BackupHandler extends Handler { case MSG_RUN_CLEAR: { ClearParams params = (ClearParams) msg.obj; (new PerformClearTask(backupManagerService, params.transport, params.packageInfo)).run(); Runnable task = new PerformClearTask( backupManagerService, params.transportClient, params.packageInfo, params.listener); task.run(); break; } Loading
services/backup/java/com/android/server/backup/internal/PerformClearTask.java +26 −18 Original line number Diff line number Diff line Loading @@ -23,46 +23,54 @@ import android.util.Slog; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.RefactoredBackupManagerService; import com.android.server.backup.transport.TransportClient; import java.io.File; public class PerformClearTask implements Runnable { private RefactoredBackupManagerService backupManagerService; IBackupTransport mTransport; PackageInfo mPackage; private final RefactoredBackupManagerService mBackupManagerService; private final TransportClient mTransportClient; private final PackageInfo mPackage; private final OnTaskFinishedListener mListener; PerformClearTask(RefactoredBackupManagerService backupManagerService, IBackupTransport transport, PackageInfo packageInfo) { this.backupManagerService = backupManagerService; mTransport = transport; TransportClient transportClient, PackageInfo packageInfo, OnTaskFinishedListener listener) { mBackupManagerService = backupManagerService; mTransportClient = transportClient; mPackage = packageInfo; mListener = listener; } public void run() { String callerLogString = "PerformClearTask.run()"; IBackupTransport transport = null; try { // Clear the on-device backup state to ensure a full backup next time File stateDir = new File(backupManagerService.getBaseStateDir(), mTransport.transportDirName()); File stateDir = new File(mBackupManagerService.getBaseStateDir(), mTransportClient.getTransportDirName()); File stateFile = new File(stateDir, mPackage.packageName); stateFile.delete(); transport = mTransportClient.connectOrThrow(callerLogString); // Tell the transport to remove all the persistent storage for the app // TODO - need to handle failures mTransport.clearBackupData(mPackage); transport.clearBackupData(mPackage); } catch (Exception e) { Slog.e(TAG, "Transport threw clearing data for " + mPackage + ": " + e.getMessage()); } finally { if (transport != null) { try { // TODO - need to handle failures mTransport.finishBackup(); transport.finishBackup(); } catch (Exception e) { // Nothing we can do here, alas Slog.e(TAG, "Unable to mark clear operation finished: " + e.getMessage()); } } mListener.onFinished(callerLogString); // Last but not least, release the cpu backupManagerService.getWakelock().release(); mBackupManagerService.getWakelock().release(); } } }
services/backup/java/com/android/server/backup/params/ClearParams.java +11 −6 Original line number Diff line number Diff line Loading @@ -18,15 +18,20 @@ package com.android.server.backup.params; import android.content.pm.PackageInfo; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.transport.TransportClient; public class ClearParams { public IBackupTransport transport; public TransportClient transportClient; public PackageInfo packageInfo; public OnTaskFinishedListener listener; public ClearParams(IBackupTransport _transport, PackageInfo _info) { transport = _transport; packageInfo = _info; public ClearParams( TransportClient transportClient, PackageInfo packageInfo, OnTaskFinishedListener listener) { this.transportClient = transportClient; this.packageInfo = packageInfo; this.listener = listener; } }
services/backup/java/com/android/server/backup/params/ClearRetryParams.java +3 −4 Original line number Diff line number Diff line Loading @@ -17,12 +17,11 @@ package com.android.server.backup.params; public class ClearRetryParams { public String transportName; public String packageName; public ClearRetryParams(String transport, String pkg) { transportName = transport; packageName = pkg; public ClearRetryParams(String transportName, String packageName) { this.transportName = transportName; this.packageName = packageName; } }