Loading core/java/android/app/backup/BackupRestoreEventLogger.java +25 −38 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ public class BackupRestoreEventLogger { /** * Operation types for which this logger can be used. * * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef({ Loading Loading @@ -87,6 +89,8 @@ public class BackupRestoreEventLogger { * {@link OperationType}. Attempts to use logging methods that don't match * the specified operation type will be rejected (e.g. use backup methods * for a restore logger and vice versa). * * @hide */ public BackupRestoreEventLogger(@OperationType int operationType) { mOperationType = operationType; Loading @@ -111,11 +115,9 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being backed. * @param count number of items of the given type that have been successfully backed up. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsBackedUp(@NonNull @BackupRestoreDataType String dataType, int count) { return logSuccess(OperationType.BACKUP, dataType, count); public void logItemsBackedUp(@NonNull @BackupRestoreDataType String dataType, int count) { logSuccess(OperationType.BACKUP, dataType, count); } /** Loading @@ -130,12 +132,10 @@ public class BackupRestoreEventLogger { * @param dataType the type of data being backed. * @param count number of items of the given type that have failed to back up. * @param error optional, the error that has caused the failure. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsBackupFailed(@NonNull @BackupRestoreDataType String dataType, int count, public void logItemsBackupFailed(@NonNull @BackupRestoreDataType String dataType, int count, @Nullable @BackupRestoreError String error) { return logFailure(OperationType.BACKUP, dataType, count, error); logFailure(OperationType.BACKUP, dataType, count, error); } /** Loading @@ -151,12 +151,10 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being backed up. * @param metaData the metadata associated with the data type. * * @return boolean, indicating whether the log has been accepted. */ public boolean logBackupMetaData(@NonNull @BackupRestoreDataType String dataType, public void logBackupMetaData(@NonNull @BackupRestoreDataType String dataType, @NonNull String metaData) { return logMetaData(OperationType.BACKUP, dataType, metaData); logMetaData(OperationType.BACKUP, dataType, metaData); } /** Loading @@ -172,11 +170,9 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being restored. * @param count number of items of the given type that have been successfully restored. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsRestored(@NonNull @BackupRestoreDataType String dataType, int count) { return logSuccess(OperationType.RESTORE, dataType, count); public void logItemsRestored(@NonNull @BackupRestoreDataType String dataType, int count) { logSuccess(OperationType.RESTORE, dataType, count); } /** Loading @@ -193,12 +189,10 @@ public class BackupRestoreEventLogger { * @param dataType the type of data being restored. * @param count number of items of the given type that have failed to restore. * @param error optional, the error that has caused the failure. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsRestoreFailed(@NonNull @BackupRestoreDataType String dataType, int count, public void logItemsRestoreFailed(@NonNull @BackupRestoreDataType String dataType, int count, @Nullable @BackupRestoreError String error) { return logFailure(OperationType.RESTORE, dataType, count, error); logFailure(OperationType.RESTORE, dataType, count, error); } /** Loading @@ -216,12 +210,10 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being restored. * @param metadata the metadata associated with the data type. * * @return boolean, indicating whether the log has been accepted. */ public boolean logRestoreMetadata(@NonNull @BackupRestoreDataType String dataType, public void logRestoreMetadata(@NonNull @BackupRestoreDataType String dataType, @NonNull String metadata) { return logMetaData(OperationType.RESTORE, dataType, metadata); logMetaData(OperationType.RESTORE, dataType, metadata); } /** Loading @@ -240,52 +232,47 @@ public class BackupRestoreEventLogger { * * @hide */ public @OperationType int getOperationType() { @OperationType public int getOperationType() { return mOperationType; } private boolean logSuccess(@OperationType int operationType, private void logSuccess(@OperationType int operationType, @BackupRestoreDataType String dataType, int count) { DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); if (dataTypeResult == null) { return false; return; } dataTypeResult.mSuccessCount += count; mResults.put(dataType, dataTypeResult); return true; } private boolean logFailure(@OperationType int operationType, private void logFailure(@OperationType int operationType, @NonNull @BackupRestoreDataType String dataType, int count, @Nullable @BackupRestoreError String error) { DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); if (dataTypeResult == null) { return false; return; } dataTypeResult.mFailCount += count; if (error != null) { dataTypeResult.mErrors.merge(error, count, Integer::sum); } return true; } private boolean logMetaData(@OperationType int operationType, private void logMetaData(@OperationType int operationType, @NonNull @BackupRestoreDataType String dataType, @NonNull String metaData) { if (mHashDigest == null) { return false; return; } DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); if (dataTypeResult == null) { return false; return; } dataTypeResult.mMetadataHash = getMetaDataHash(metaData); return true; } /** Loading core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java +28 −22 Original line number Diff line number Diff line Loading @@ -63,18 +63,22 @@ public class BackupRestoreEventLoggerTest { public void testBackupLogger_rejectsRestoreLogs() { mLogger = new BackupRestoreEventLogger(BACKUP); assertThat(mLogger.logItemsRestored(DATA_TYPE_1, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsRestoreFailed(DATA_TYPE_1, /* count */ 5, ERROR_1)).isFalse(); assertThat(mLogger.logRestoreMetadata(DATA_TYPE_1, /* metadata */ "metadata")).isFalse(); mLogger.logItemsRestored(DATA_TYPE_1, /* count */ 5); mLogger.logItemsRestoreFailed(DATA_TYPE_1, /* count */ 5, ERROR_1); mLogger.logRestoreMetadata(DATA_TYPE_1, /* metadata */ "metadata"); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_1)).isEqualTo(Optional.empty()); } @Test public void testRestoreLogger_rejectsBackupLogs() { mLogger = new BackupRestoreEventLogger(RESTORE); assertThat(mLogger.logItemsBackedUp(DATA_TYPE_1, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsBackupFailed(DATA_TYPE_1, /* count */ 5, ERROR_1)).isFalse(); assertThat(mLogger.logBackupMetaData(DATA_TYPE_1, /* metadata */ "metadata")).isFalse(); mLogger.logItemsBackedUp(DATA_TYPE_1, /* count */ 5); mLogger.logItemsBackupFailed(DATA_TYPE_1, /* count */ 5, ERROR_1); mLogger.logBackupMetaData(DATA_TYPE_1, /* metadata */ "metadata"); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_1)).isEqualTo(Optional.empty()); } @Test Loading @@ -83,16 +87,17 @@ public class BackupRestoreEventLoggerTest { for (int i = 0; i < DATA_TYPES_ALLOWED; i++) { String dataType = DATA_TYPE_1 + i; assertThat(mLogger.logItemsBackedUp(dataType, /* count */ 5)).isTrue(); assertThat(mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null)) .isTrue(); assertThat(mLogger.logBackupMetaData(dataType, METADATA_1)).isTrue(); mLogger.logItemsBackedUp(dataType, /* count */ 5); mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null); mLogger.logBackupMetaData(dataType, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo( Optional.empty()); } assertThat(mLogger.logItemsBackedUp(DATA_TYPE_2, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsBackupFailed(DATA_TYPE_2, /* count */ 5, /* error */ null)) .isFalse(); assertThat(mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1)).isFalse(); mLogger.logItemsBackedUp(DATA_TYPE_2, /* count */ 5); mLogger.logItemsBackupFailed(DATA_TYPE_2, /* count */ 5, /* error */ null); mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty()); } Loading @@ -102,16 +107,17 @@ public class BackupRestoreEventLoggerTest { for (int i = 0; i < DATA_TYPES_ALLOWED; i++) { String dataType = DATA_TYPE_1 + i; assertThat(mLogger.logItemsRestored(dataType, /* count */ 5)).isTrue(); assertThat(mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null)) .isTrue(); assertThat(mLogger.logRestoreMetadata(dataType, METADATA_1)).isTrue(); mLogger.logItemsRestored(dataType, /* count */ 5); mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null); mLogger.logRestoreMetadata(dataType, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo( Optional.empty()); } assertThat(mLogger.logItemsRestored(DATA_TYPE_2, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsRestoreFailed(DATA_TYPE_2, /* count */ 5, /* error */ null)) .isFalse(); assertThat(mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1)).isFalse(); mLogger.logItemsRestored(DATA_TYPE_2, /* count */ 5); mLogger.logItemsRestoreFailed(DATA_TYPE_2, /* count */ 5, /* error */ null); mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty()); } Loading Loading
core/java/android/app/backup/BackupRestoreEventLogger.java +25 −38 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ public class BackupRestoreEventLogger { /** * Operation types for which this logger can be used. * * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef({ Loading Loading @@ -87,6 +89,8 @@ public class BackupRestoreEventLogger { * {@link OperationType}. Attempts to use logging methods that don't match * the specified operation type will be rejected (e.g. use backup methods * for a restore logger and vice versa). * * @hide */ public BackupRestoreEventLogger(@OperationType int operationType) { mOperationType = operationType; Loading @@ -111,11 +115,9 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being backed. * @param count number of items of the given type that have been successfully backed up. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsBackedUp(@NonNull @BackupRestoreDataType String dataType, int count) { return logSuccess(OperationType.BACKUP, dataType, count); public void logItemsBackedUp(@NonNull @BackupRestoreDataType String dataType, int count) { logSuccess(OperationType.BACKUP, dataType, count); } /** Loading @@ -130,12 +132,10 @@ public class BackupRestoreEventLogger { * @param dataType the type of data being backed. * @param count number of items of the given type that have failed to back up. * @param error optional, the error that has caused the failure. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsBackupFailed(@NonNull @BackupRestoreDataType String dataType, int count, public void logItemsBackupFailed(@NonNull @BackupRestoreDataType String dataType, int count, @Nullable @BackupRestoreError String error) { return logFailure(OperationType.BACKUP, dataType, count, error); logFailure(OperationType.BACKUP, dataType, count, error); } /** Loading @@ -151,12 +151,10 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being backed up. * @param metaData the metadata associated with the data type. * * @return boolean, indicating whether the log has been accepted. */ public boolean logBackupMetaData(@NonNull @BackupRestoreDataType String dataType, public void logBackupMetaData(@NonNull @BackupRestoreDataType String dataType, @NonNull String metaData) { return logMetaData(OperationType.BACKUP, dataType, metaData); logMetaData(OperationType.BACKUP, dataType, metaData); } /** Loading @@ -172,11 +170,9 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being restored. * @param count number of items of the given type that have been successfully restored. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsRestored(@NonNull @BackupRestoreDataType String dataType, int count) { return logSuccess(OperationType.RESTORE, dataType, count); public void logItemsRestored(@NonNull @BackupRestoreDataType String dataType, int count) { logSuccess(OperationType.RESTORE, dataType, count); } /** Loading @@ -193,12 +189,10 @@ public class BackupRestoreEventLogger { * @param dataType the type of data being restored. * @param count number of items of the given type that have failed to restore. * @param error optional, the error that has caused the failure. * * @return boolean, indicating whether the log has been accepted. */ public boolean logItemsRestoreFailed(@NonNull @BackupRestoreDataType String dataType, int count, public void logItemsRestoreFailed(@NonNull @BackupRestoreDataType String dataType, int count, @Nullable @BackupRestoreError String error) { return logFailure(OperationType.RESTORE, dataType, count, error); logFailure(OperationType.RESTORE, dataType, count, error); } /** Loading @@ -216,12 +210,10 @@ public class BackupRestoreEventLogger { * * @param dataType the type of data being restored. * @param metadata the metadata associated with the data type. * * @return boolean, indicating whether the log has been accepted. */ public boolean logRestoreMetadata(@NonNull @BackupRestoreDataType String dataType, public void logRestoreMetadata(@NonNull @BackupRestoreDataType String dataType, @NonNull String metadata) { return logMetaData(OperationType.RESTORE, dataType, metadata); logMetaData(OperationType.RESTORE, dataType, metadata); } /** Loading @@ -240,52 +232,47 @@ public class BackupRestoreEventLogger { * * @hide */ public @OperationType int getOperationType() { @OperationType public int getOperationType() { return mOperationType; } private boolean logSuccess(@OperationType int operationType, private void logSuccess(@OperationType int operationType, @BackupRestoreDataType String dataType, int count) { DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); if (dataTypeResult == null) { return false; return; } dataTypeResult.mSuccessCount += count; mResults.put(dataType, dataTypeResult); return true; } private boolean logFailure(@OperationType int operationType, private void logFailure(@OperationType int operationType, @NonNull @BackupRestoreDataType String dataType, int count, @Nullable @BackupRestoreError String error) { DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); if (dataTypeResult == null) { return false; return; } dataTypeResult.mFailCount += count; if (error != null) { dataTypeResult.mErrors.merge(error, count, Integer::sum); } return true; } private boolean logMetaData(@OperationType int operationType, private void logMetaData(@OperationType int operationType, @NonNull @BackupRestoreDataType String dataType, @NonNull String metaData) { if (mHashDigest == null) { return false; return; } DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType); if (dataTypeResult == null) { return false; return; } dataTypeResult.mMetadataHash = getMetaDataHash(metaData); return true; } /** Loading
core/tests/coretests/src/android/app/backup/BackupRestoreEventLoggerTest.java +28 −22 Original line number Diff line number Diff line Loading @@ -63,18 +63,22 @@ public class BackupRestoreEventLoggerTest { public void testBackupLogger_rejectsRestoreLogs() { mLogger = new BackupRestoreEventLogger(BACKUP); assertThat(mLogger.logItemsRestored(DATA_TYPE_1, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsRestoreFailed(DATA_TYPE_1, /* count */ 5, ERROR_1)).isFalse(); assertThat(mLogger.logRestoreMetadata(DATA_TYPE_1, /* metadata */ "metadata")).isFalse(); mLogger.logItemsRestored(DATA_TYPE_1, /* count */ 5); mLogger.logItemsRestoreFailed(DATA_TYPE_1, /* count */ 5, ERROR_1); mLogger.logRestoreMetadata(DATA_TYPE_1, /* metadata */ "metadata"); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_1)).isEqualTo(Optional.empty()); } @Test public void testRestoreLogger_rejectsBackupLogs() { mLogger = new BackupRestoreEventLogger(RESTORE); assertThat(mLogger.logItemsBackedUp(DATA_TYPE_1, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsBackupFailed(DATA_TYPE_1, /* count */ 5, ERROR_1)).isFalse(); assertThat(mLogger.logBackupMetaData(DATA_TYPE_1, /* metadata */ "metadata")).isFalse(); mLogger.logItemsBackedUp(DATA_TYPE_1, /* count */ 5); mLogger.logItemsBackupFailed(DATA_TYPE_1, /* count */ 5, ERROR_1); mLogger.logBackupMetaData(DATA_TYPE_1, /* metadata */ "metadata"); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_1)).isEqualTo(Optional.empty()); } @Test Loading @@ -83,16 +87,17 @@ public class BackupRestoreEventLoggerTest { for (int i = 0; i < DATA_TYPES_ALLOWED; i++) { String dataType = DATA_TYPE_1 + i; assertThat(mLogger.logItemsBackedUp(dataType, /* count */ 5)).isTrue(); assertThat(mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null)) .isTrue(); assertThat(mLogger.logBackupMetaData(dataType, METADATA_1)).isTrue(); mLogger.logItemsBackedUp(dataType, /* count */ 5); mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null); mLogger.logBackupMetaData(dataType, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo( Optional.empty()); } assertThat(mLogger.logItemsBackedUp(DATA_TYPE_2, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsBackupFailed(DATA_TYPE_2, /* count */ 5, /* error */ null)) .isFalse(); assertThat(mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1)).isFalse(); mLogger.logItemsBackedUp(DATA_TYPE_2, /* count */ 5); mLogger.logItemsBackupFailed(DATA_TYPE_2, /* count */ 5, /* error */ null); mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty()); } Loading @@ -102,16 +107,17 @@ public class BackupRestoreEventLoggerTest { for (int i = 0; i < DATA_TYPES_ALLOWED; i++) { String dataType = DATA_TYPE_1 + i; assertThat(mLogger.logItemsRestored(dataType, /* count */ 5)).isTrue(); assertThat(mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null)) .isTrue(); assertThat(mLogger.logRestoreMetadata(dataType, METADATA_1)).isTrue(); mLogger.logItemsRestored(dataType, /* count */ 5); mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null); mLogger.logRestoreMetadata(dataType, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo( Optional.empty()); } assertThat(mLogger.logItemsRestored(DATA_TYPE_2, /* count */ 5)).isFalse(); assertThat(mLogger.logItemsRestoreFailed(DATA_TYPE_2, /* count */ 5, /* error */ null)) .isFalse(); assertThat(mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1)).isFalse(); mLogger.logItemsRestored(DATA_TYPE_2, /* count */ 5); mLogger.logItemsRestoreFailed(DATA_TYPE_2, /* count */ 5, /* error */ null); mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1); assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty()); } Loading