Loading core/java/android/app/IBackupAgent.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -206,4 +206,9 @@ oneway interface IBackupAgent { */ void getLoggerResults( in AndroidFuture<List<BackupRestoreEventLogger.DataTypeResult>> resultsFuture); /** * Clears the logs accumulated by the BackupAgent during a backup or restore operation. */ void clearBackupRestoreEventLogger(); } core/java/android/app/backup/BackupAgent.java +26 −0 Original line number Diff line number Diff line Loading @@ -1050,6 +1050,18 @@ public abstract class BackupAgent extends ContextWrapper { public void onRestoreFinished() { } /** * Clears all pending logs currently stored in the agent's event logger. * * @hide */ @VisibleForTesting public final void clearBackupRestoreEventLogger() { if (mLogger != null) { mLogger.clearData(); } } // ----- Core implementation ----- /** @hide */ Loading Loading @@ -1339,6 +1351,20 @@ public abstract class BackupAgent extends ContextWrapper { in.complete(Collections.emptyList()); } } @Override public void clearBackupRestoreEventLogger() { final long ident = Binder.clearCallingIdentity(); try { BackupAgent.this.clearBackupRestoreEventLogger(); } catch (Exception e) { Log.d(TAG, "clearBackupRestoreEventLogger (" + BackupAgent.this.getClass().getName() + ") threw", e); throw e; } finally { Binder.restoreCallingIdentity(ident); } } } static class FailRunnable implements Runnable { Loading core/java/android/app/backup/BackupRestoreEventLogger.java +11 −1 Original line number Diff line number Diff line Loading @@ -19,11 +19,11 @@ package android.app.backup; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.app.backup.BackupAnnotations.OperationType; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.util.ArrayMap; import android.app.backup.BackupAnnotations.OperationType; import android.util.Slog; import java.lang.annotation.Retention; Loading Loading @@ -229,6 +229,16 @@ public class BackupRestoreEventLogger { return mOperationType; } /** * Clears data logged. This method should only be used by B&R code in Android Framework. * * @hide */ public void clearData() { mResults.clear(); } private void logSuccess(@OperationType int operationType, @BackupRestoreDataType String dataType, int count) { DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); Loading core/tests/coretests/src/android/app/backup/BackupAgentTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,30 @@ public class BackupAgentTest { .isEqualTo(DATA_TYPE_BACKED_UP); } @Test public void testClearLogger_clearsPendingLogs() throws Exception { BackupAgent agent = new TestFullBackupAgent(); agent.onCreate(USER_HANDLE, BackupDestination.CLOUD, OperationType.BACKUP); agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0)); agent.clearBackupRestoreEventLogger(); assertThat(agent.getBackupRestoreEventLogger().getLoggingResults().size()).isEqualTo(0); } @Test public void testClearLoggerBetweenBackups_restartsSuccessCount() throws Exception { BackupAgent agent = new TestFullBackupAgent(); agent.onCreate(USER_HANDLE, BackupDestination.CLOUD, OperationType.BACKUP); agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0)); agent.clearBackupRestoreEventLogger(); agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0)); assertThat(agent.getBackupRestoreEventLogger().getLoggingResults().get( 0).getSuccessCount()).isEqualTo(1); } private BackupAgent getAgentForBackupDestination(@BackupDestination int backupDestination) { BackupAgent agent = new TestFullBackupAgent(); agent.onCreate(USER_HANDLE, backupDestination); Loading core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,19 @@ public class BackupRestoreEventLoggerTest { .isEqualTo(secondTypeErrorOneCount); } @Test public void testClearData_clearsAllResults() { mLogger = new BackupRestoreEventLogger(BACKUP); mLogger.logItemsBackedUp(DATA_TYPE_1, 5); mLogger.logItemsBackedUp(DATA_TYPE_2, 4); mLogger.logItemsBackupFailed(DATA_TYPE_2, 1, ERROR_1); assertThat(mLogger.getLoggingResults()).isNotEmpty(); mLogger.clearData(); assertThat(mLogger.getLoggingResults()).isEmpty(); } private static DataTypeResult getResultForDataType( BackupRestoreEventLogger logger, @BackupRestoreDataType String dataType) { Optional<DataTypeResult> result = getResultForDataTypeIfPresent(logger, dataType); Loading Loading
core/java/android/app/IBackupAgent.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -206,4 +206,9 @@ oneway interface IBackupAgent { */ void getLoggerResults( in AndroidFuture<List<BackupRestoreEventLogger.DataTypeResult>> resultsFuture); /** * Clears the logs accumulated by the BackupAgent during a backup or restore operation. */ void clearBackupRestoreEventLogger(); }
core/java/android/app/backup/BackupAgent.java +26 −0 Original line number Diff line number Diff line Loading @@ -1050,6 +1050,18 @@ public abstract class BackupAgent extends ContextWrapper { public void onRestoreFinished() { } /** * Clears all pending logs currently stored in the agent's event logger. * * @hide */ @VisibleForTesting public final void clearBackupRestoreEventLogger() { if (mLogger != null) { mLogger.clearData(); } } // ----- Core implementation ----- /** @hide */ Loading Loading @@ -1339,6 +1351,20 @@ public abstract class BackupAgent extends ContextWrapper { in.complete(Collections.emptyList()); } } @Override public void clearBackupRestoreEventLogger() { final long ident = Binder.clearCallingIdentity(); try { BackupAgent.this.clearBackupRestoreEventLogger(); } catch (Exception e) { Log.d(TAG, "clearBackupRestoreEventLogger (" + BackupAgent.this.getClass().getName() + ") threw", e); throw e; } finally { Binder.restoreCallingIdentity(ident); } } } static class FailRunnable implements Runnable { Loading
core/java/android/app/backup/BackupRestoreEventLogger.java +11 −1 Original line number Diff line number Diff line Loading @@ -19,11 +19,11 @@ package android.app.backup; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.app.backup.BackupAnnotations.OperationType; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.util.ArrayMap; import android.app.backup.BackupAnnotations.OperationType; import android.util.Slog; import java.lang.annotation.Retention; Loading Loading @@ -229,6 +229,16 @@ public class BackupRestoreEventLogger { return mOperationType; } /** * Clears data logged. This method should only be used by B&R code in Android Framework. * * @hide */ public void clearData() { mResults.clear(); } private void logSuccess(@OperationType int operationType, @BackupRestoreDataType String dataType, int count) { DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); Loading
core/tests/coretests/src/android/app/backup/BackupAgentTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,30 @@ public class BackupAgentTest { .isEqualTo(DATA_TYPE_BACKED_UP); } @Test public void testClearLogger_clearsPendingLogs() throws Exception { BackupAgent agent = new TestFullBackupAgent(); agent.onCreate(USER_HANDLE, BackupDestination.CLOUD, OperationType.BACKUP); agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0)); agent.clearBackupRestoreEventLogger(); assertThat(agent.getBackupRestoreEventLogger().getLoggingResults().size()).isEqualTo(0); } @Test public void testClearLoggerBetweenBackups_restartsSuccessCount() throws Exception { BackupAgent agent = new TestFullBackupAgent(); agent.onCreate(USER_HANDLE, BackupDestination.CLOUD, OperationType.BACKUP); agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0)); agent.clearBackupRestoreEventLogger(); agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0)); assertThat(agent.getBackupRestoreEventLogger().getLoggingResults().get( 0).getSuccessCount()).isEqualTo(1); } private BackupAgent getAgentForBackupDestination(@BackupDestination int backupDestination) { BackupAgent agent = new TestFullBackupAgent(); agent.onCreate(USER_HANDLE, backupDestination); Loading
core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,19 @@ public class BackupRestoreEventLoggerTest { .isEqualTo(secondTypeErrorOneCount); } @Test public void testClearData_clearsAllResults() { mLogger = new BackupRestoreEventLogger(BACKUP); mLogger.logItemsBackedUp(DATA_TYPE_1, 5); mLogger.logItemsBackedUp(DATA_TYPE_2, 4); mLogger.logItemsBackupFailed(DATA_TYPE_2, 1, ERROR_1); assertThat(mLogger.getLoggingResults()).isNotEmpty(); mLogger.clearData(); assertThat(mLogger.getLoggingResults()).isEmpty(); } private static DataTypeResult getResultForDataType( BackupRestoreEventLogger logger, @BackupRestoreDataType String dataType) { Optional<DataTypeResult> result = getResultForDataTypeIfPresent(logger, dataType); Loading