summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java34
-rw-r--r--packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java68
-rw-r--r--packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java143
-rw-r--r--packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java287
4 files changed, 497 insertions, 35 deletions
diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
index 6aca2fdc0f7f..496f4f6c6680 100644
--- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
+++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
@@ -365,6 +365,11 @@ public class WallpaperBackupAgent extends BackupAgent {
final int sysWhich = FLAG_SYSTEM | (lockImageStage.exists() ? 0 : FLAG_LOCK);
try {
+ // First parse the live component name so that we know for logging if we care about
+ // logging errors with the image restore.
+ ComponentName wpService = parseWallpaperComponent(infoStage, "wp");
+ mSystemHasLiveComponent = wpService != null;
+
// It is valid for the imagery to be absent; it means that we were not permitted
// to back up the original image on the source device, or there was no user-supplied
// wallpaper image present.
@@ -372,10 +377,10 @@ public class WallpaperBackupAgent extends BackupAgent {
restoreFromStage(lockImageStage, infoStage, "kwp", FLAG_LOCK);
// And reset to the wallpaper service we should be using
- ComponentName wpService = parseWallpaperComponent(infoStage, "wp");
updateWallpaperComponent(wpService, !lockImageStage.exists());
} catch (Exception e) {
Slog.e(TAG, "Unable to restore wallpaper: " + e.getMessage());
+ mEventLogger.onRestoreException(e);
} finally {
Slog.v(TAG, "Restore finished; clearing backup bookkeeping");
infoStage.delete();
@@ -399,12 +404,15 @@ public class WallpaperBackupAgent extends BackupAgent {
// We have a live wallpaper and no static lock image,
// allow live wallpaper to show "through" on lock screen.
mWallpaperManager.clear(FLAG_LOCK);
+ mEventLogger.onLockLiveWallpaperRestored(wpService);
}
+ mEventLogger.onSystemLiveWallpaperRestored(wpService);
} else {
// If we've restored a live wallpaper, but the component doesn't exist,
// we should log it as an error so we can easily identify the problem
// in reports from users
if (wpService != null) {
+ // TODO(b/268471749): Handle delayed case
applyComponentAtInstall(wpService, applyToLock);
Slog.w(TAG, "Wallpaper service " + wpService + " isn't available. "
+ " Will try to apply later");
@@ -424,13 +432,37 @@ public class WallpaperBackupAgent extends BackupAgent {
try (FileInputStream in = new FileInputStream(stage)) {
mWallpaperManager.setStream(in, cropHint.isEmpty() ? null : cropHint, true,
which);
+
+ // And log the success
+ if ((which & FLAG_SYSTEM) > 0) {
+ mEventLogger.onSystemImageWallpaperRestored();
+ } else {
+ mEventLogger.onLockImageWallpaperRestored();
+ }
}
+ } else {
+ logRestoreError(which, ERROR_NO_METADATA);
}
} else {
Slog.d(TAG, "Restore data doesn't exist for file " + stage.getPath());
+ logRestoreErrorIfNoLiveComponent(which, ERROR_NO_WALLPAPER);
+ }
+ }
+
+ private void logRestoreErrorIfNoLiveComponent(int which, String error) {
+ if (mSystemHasLiveComponent) {
+ return;
}
+ logRestoreError(which, error);
}
+ private void logRestoreError(int which, String error) {
+ if ((which & FLAG_SYSTEM) == FLAG_SYSTEM) {
+ mEventLogger.onSystemImageWallpaperRestoreFailed(error);
+ } else if ((which & FLAG_LOCK) == FLAG_LOCK) {
+ mEventLogger.onLockImageWallpaperRestoreFailed(error);
+ }
+ }
private Rect parseCropHint(File wallpaperInfo, String sectionTag) {
Rect cropHint = new Rect();
try (FileInputStream stream = new FileInputStream(wallpaperInfo)) {
diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java
index 64944b3ff54f..47c45ac7e775 100644
--- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java
+++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java
@@ -22,6 +22,7 @@ import android.app.backup.BackupManager;
import android.app.backup.BackupRestoreEventLogger;
import android.app.backup.BackupRestoreEventLogger.BackupRestoreDataType;
import android.app.backup.BackupRestoreEventLogger.BackupRestoreError;
+import android.content.ComponentName;
import com.android.internal.annotations.VisibleForTesting;
@@ -101,6 +102,39 @@ public class WallpaperEventLogger {
logBackupFailureInternal(WALLPAPER_LIVE_LOCK, error);
}
+ void onSystemImageWallpaperRestored() {
+ logRestoreSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null);
+ }
+
+ void onLockImageWallpaperRestored() {
+ logRestoreSuccessInternal(WALLPAPER_IMG_LOCK, /* liveComponentWallpaperInfo */ null);
+ }
+
+ void onSystemLiveWallpaperRestored(ComponentName wpService) {
+ logRestoreSuccessInternal(WALLPAPER_LIVE_SYSTEM, wpService);
+ }
+
+ void onLockLiveWallpaperRestored(ComponentName wpService) {
+ logRestoreSuccessInternal(WALLPAPER_LIVE_LOCK, wpService);
+ }
+
+ void onSystemImageWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_IMG_SYSTEM, error);
+ }
+
+ void onLockImageWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_IMG_LOCK, error);
+ }
+
+ void onSystemLiveWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_LIVE_SYSTEM, error);
+ }
+
+ void onLockLiveWallpaperRestoreFailed(@BackupRestoreError String error) {
+ logRestoreFailureInternal(WALLPAPER_LIVE_LOCK, error);
+ }
+
+
/**
* Called when the whole backup flow is interrupted by an exception.
@@ -117,6 +151,20 @@ public class WallpaperEventLogger {
}
}
+ /**
+ * Called when the whole restore flow is interrupted by an exception.
+ */
+ void onRestoreException(Exception exception) {
+ String error = exception.getClass().getName();
+ if (!mProcessedDataTypes.contains(WALLPAPER_IMG_SYSTEM) && !mProcessedDataTypes.contains(
+ WALLPAPER_LIVE_SYSTEM)) {
+ mLogger.logItemsRestoreFailed(WALLPAPER_IMG_SYSTEM, /* count */ 1, error);
+ }
+ if (!mProcessedDataTypes.contains(WALLPAPER_IMG_LOCK) && !mProcessedDataTypes.contains(
+ WALLPAPER_LIVE_LOCK)) {
+ mLogger.logItemsRestoreFailed(WALLPAPER_IMG_LOCK, /* count */ 1, error);
+ }
+ }
private void logBackupSuccessInternal(@BackupRestoreDataType String which,
@Nullable WallpaperInfo liveComponentWallpaperInfo) {
mLogger.logItemsBackedUp(which, /* count */ 1);
@@ -130,10 +178,30 @@ public class WallpaperEventLogger {
mProcessedDataTypes.add(which);
}
+ private void logRestoreSuccessInternal(@BackupRestoreDataType String which,
+ @Nullable ComponentName liveComponentWallpaperInfo) {
+ mLogger.logItemsRestored(which, /* count */ 1);
+ logRestoredLiveWallpaperNameIfPresent(which, liveComponentWallpaperInfo);
+ mProcessedDataTypes.add(which);
+ }
+
+ private void logRestoreFailureInternal(@BackupRestoreDataType String which,
+ @BackupRestoreError String error) {
+ mLogger.logItemsRestoreFailed(which, /* count */ 1, error);
+ mProcessedDataTypes.add(which);
+ }
+
private void logLiveWallpaperNameIfPresent(@BackupRestoreDataType String wallpaperType,
WallpaperInfo wallpaperInfo) {
if (wallpaperInfo != null) {
mLogger.logBackupMetadata(wallpaperType, wallpaperInfo.getComponent().getClassName());
}
}
+
+ private void logRestoredLiveWallpaperNameIfPresent(@BackupRestoreDataType String wallpaperType,
+ ComponentName wpService) {
+ if (wpService != null) {
+ mLogger.logRestoreMetadata(wallpaperType, wpService.getClassName());
+ }
+ }
}
diff --git a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java
index 89459f6e6772..58f6477ed082 100644
--- a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java
+++ b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java
@@ -24,6 +24,7 @@ import static com.android.wallpaperbackup.WallpaperBackupAgent.LOCK_WALLPAPER_ST
import static com.android.wallpaperbackup.WallpaperBackupAgent.SYSTEM_WALLPAPER_STAGE;
import static com.android.wallpaperbackup.WallpaperBackupAgent.WALLPAPER_INFO_STAGE;
import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_INELIGIBLE;
+import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_METADATA;
import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_NO_WALLPAPER;
import static com.android.wallpaperbackup.WallpaperEventLogger.ERROR_QUOTA_EXCEEDED;
import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_LOCK;
@@ -34,6 +35,8 @@ import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_SY
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
@@ -55,12 +58,14 @@ import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
import android.os.UserHandle;
import android.service.wallpaper.WallpaperService;
+import android.util.Xml;
import androidx.test.InstrumentationRegistry;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.content.PackageMonitor;
+import com.android.modules.utils.TypedXmlSerializer;
import com.android.wallpaperbackup.utils.ContextWithServiceOverrides;
import org.junit.After;
@@ -592,6 +597,123 @@ public class WallpaperBackupAgentTest {
assertThat(result.getSuccessCount()).isEqualTo(1);
}
+ @Test
+ public void testOnRestore_systemWallpaperImgSuccess_logsSuccess() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testOnRestore_lockWallpaperImgSuccess_logsSuccess() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(LOCK_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void testOnRestore_systemWallpaperImgMissingAndNoLive_logsFailure() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(LOCK_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(ERROR_NO_WALLPAPER);
+
+ }
+
+ @Test
+ public void testOnRestore_lockWallpaperImgMissingAndNoLive_logsFailure() throws Exception {
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(ERROR_NO_WALLPAPER);
+ }
+
+ @Test
+ public void testOnRestore_wallpaperInfoMissing_logsFailure() throws Exception {
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult result = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(ERROR_NO_METADATA);
+ }
+
+ @Test
+ public void testOnRestore_imgMissingButWallpaperInfoHasLive_doesNotLogImg() throws Exception {
+ mockRestoredLiveWallpaperFile();
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult system = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ DataTypeResult lock = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(system).isNull();
+ assertThat(lock).isNull();
+ }
+
+ @Test
+ public void testOnRestore_throwsException_logsErrors() throws Exception {
+ when(mWallpaperManager.setStream(any(), any(), anyBoolean(), anyInt())).thenThrow(
+ new RuntimeException());
+ mockStagedWallpaperFile(SYSTEM_WALLPAPER_STAGE);
+ mockStagedWallpaperFile(WALLPAPER_INFO_STAGE);
+ mWallpaperBackupAgent.onCreate(USER_HANDLE, BackupAnnotations.BackupDestination.CLOUD,
+ BackupAnnotations.OperationType.RESTORE);
+
+ mWallpaperBackupAgent.onRestoreFinished();
+
+ DataTypeResult system = getLoggingResult(WALLPAPER_IMG_SYSTEM,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ DataTypeResult lock = getLoggingResult(WALLPAPER_IMG_LOCK,
+ mWallpaperBackupAgent.getBackupRestoreEventLogger().getLoggingResults());
+ assertThat(system).isNotNull();
+ assertThat(system.getFailCount()).isEqualTo(1);
+ assertThat(system.getErrors()).containsKey(RuntimeException.class.getName());
+ assertThat(lock).isNotNull();
+ assertThat(lock.getFailCount()).isEqualTo(1);
+ assertThat(lock.getErrors()).containsKey(RuntimeException.class.getName());
+ }
+
private void mockCurrentWallpaperIds(int systemWallpaperId, int lockWallpaperId) {
when(mWallpaperManager.getWallpaperId(eq(FLAG_SYSTEM))).thenReturn(systemWallpaperId);
when(mWallpaperManager.getWallpaperId(eq(FLAG_LOCK))).thenReturn(lockWallpaperId);
@@ -636,6 +758,27 @@ public class WallpaperBackupAgentTest {
ParcelFileDescriptor.open(fakeLockWallpaperFile, MODE_READ_ONLY));
}
+ private void mockStagedWallpaperFile(String location) throws Exception {
+ File wallpaperFile = new File(mContext.getFilesDir(), location);
+ wallpaperFile.createNewFile();
+ }
+
+ private void mockRestoredLiveWallpaperFile() throws Exception {
+ File wallpaperFile = new File(mContext.getFilesDir(), WALLPAPER_INFO_STAGE);
+ wallpaperFile.createNewFile();
+ FileOutputStream fstream = new FileOutputStream(wallpaperFile, false);
+ TypedXmlSerializer out = Xml.resolveSerializer(fstream);
+ out.startDocument(null, true);
+ out.startTag(null, "wp");
+ out.attribute(null, "component",
+ getFakeWallpaperInfo().getComponent().flattenToShortString());
+ out.endTag(null, "wp");
+ out.endDocument();
+ fstream.flush();
+ FileUtils.sync(fstream);
+ fstream.close();
+ }
+
private WallpaperInfo getFakeWallpaperInfo() throws Exception {
Context context = InstrumentationRegistry.getTargetContext();
Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);
diff --git a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java
index 3816a3ccc1eb..383bf2f68217 100644
--- a/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java
+++ b/packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperEventLoggerTest.java
@@ -21,16 +21,14 @@ import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_SYS
import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_LOCK;
import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_SYSTEM;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.WallpaperInfo;
+import android.app.backup.BackupAnnotations;
import android.app.backup.BackupManager;
import android.app.backup.BackupRestoreEventLogger;
import android.content.Context;
@@ -42,8 +40,6 @@ import android.service.wallpaper.WallpaperService;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
-import com.android.wallpaperbackup.utils.TestWallpaperService;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -55,8 +51,7 @@ import java.util.List;
@RunWith(AndroidJUnit4.class)
public class WallpaperEventLoggerTest {
- @Mock
- private BackupRestoreEventLogger mMockLogger;
+ private BackupRestoreEventLogger mEventLogger;
@Mock
private BackupManager mMockBackupManager;
@@ -73,8 +68,8 @@ public class WallpaperEventLoggerTest {
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mMockLogger);
- when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mMockLogger);
+ when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mEventLogger);
+ when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mEventLogger);
mWallpaperInfo = getWallpaperInfo();
mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent);
@@ -82,115 +77,339 @@ public class WallpaperEventLoggerTest {
@Test
public void onSystemImgWallpaperBackedUp_logsSuccess() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_IMG_SYSTEM), eq(1));
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onLockImgWallpaperBackedUp_logsSuccess() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onLockImageWallpaperBackedUp();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_IMG_LOCK), eq(1));
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onSystemLiveWallpaperBackedUp_logsSuccess() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_LIVE_SYSTEM), eq(1));
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onLockLiveWallpaperBackedUp_logsSuccess() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onLockLiveWallpaperBackedUp(mWallpaperInfo);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
- verify(mMockLogger).logItemsBackedUp(eq(WALLPAPER_LIVE_LOCK), eq(1));
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
@Test
public void onImgWallpaperBackedUp_nullInfo_doesNotLogMetadata() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
- verify(mMockLogger, never()).logBackupMetadata(eq(WALLPAPER_IMG_SYSTEM), anyString());
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNull();
}
@Test
public void onLiveWallpaperBackedUp_logsMetadata() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
- verify(mMockLogger).logBackupMetadata(eq(WALLPAPER_LIVE_SYSTEM),
- eq(TestWallpaperService.class.getName()));
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNotNull();
}
@Test
public void onSystemImgWallpaperBackupFailed_logsFail() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onSystemImageWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_IMG_SYSTEM), eq(1),
- eq(WALLPAPER_ERROR));
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onLockImgWallpaperBackupFailed_logsFail() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onLockImageWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_IMG_LOCK), eq(1),
- eq(WALLPAPER_ERROR));
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onSystemLiveWallpaperBackupFailed_logsFail() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onSystemLiveWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_LIVE_SYSTEM), eq(1),
- eq(WALLPAPER_ERROR));
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onLockLiveWallpaperBackupFailed_logsFail() {
+ setUpLoggerForBackup();
+
mWallpaperEventLogger.onLockLiveWallpaperBackupFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_LIVE_LOCK), eq(1),
- eq(WALLPAPER_ERROR));
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
}
@Test
public void onWallpaperBackupException_someProcessed_doesNotLogErrorForProcessedType() {
+ setUpLoggerForBackup();
mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
mWallpaperEventLogger.onBackupException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
- verify(mMockLogger, never()).logItemsBackupFailed(eq(WALLPAPER_IMG_SYSTEM), anyInt(),
- anyString());
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(0);
}
@Test
public void onWallpaperBackupException_someProcessed_logsErrorForUnprocessedType() {
+ setUpLoggerForBackup();
mWallpaperEventLogger.onSystemImageWallpaperBackedUp();
mWallpaperEventLogger.onBackupException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
- verify(mMockLogger).logItemsBackupFailed(eq(WALLPAPER_IMG_LOCK), eq(1),
- eq(Exception.class.getName()));
-
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
}
@Test
- public void onWallpaperBackupException_liveTypeProcessed_doesNotLogErrorForSameImgType() {
+ public void onWallpaperBackupException_liveTypeProcessed_doesNotLogForSameImgType() {
+ setUpLoggerForBackup();
mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo);
mWallpaperEventLogger.onBackupException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNull();
+ }
+
+ @Test
+ public void onSystemImgWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onLockImgWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockImageWallpaperRestored();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
- verify(mMockLogger, never()).logItemsBackupFailed(eq(WALLPAPER_IMG_SYSTEM), anyInt(),
- anyString());
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
}
+ @Test
+ public void onSystemLiveWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onLockLiveWallpaperRestored_logsSuccess() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockLiveWallpaperRestored(mWallpaperInfo.getComponent());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getSuccessCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onImgWallpaperRestored_nullInfo_doesNotLogMetadata() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNull();
+ }
+
+
+ @Test
+ public void onLiveWallpaperRestored_logsMetadata() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getMetadataHash()).isNotNull();
+ }
+
+
+ @Test
+ public void onSystemImgWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemImageWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+ @Test
+ public void onLockImgWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockImageWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+
+ @Test
+ public void onSystemLiveWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onSystemLiveWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+ @Test
+ public void onLockLiveWallpaperRestoreFailed_logsFail() {
+ setUpLoggerForRestore();
+
+ mWallpaperEventLogger.onLockLiveWallpaperRestoreFailed(WALLPAPER_ERROR);
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR);
+ }
+
+
+ @Test
+ public void onWallpaperRestoreException_someProcessed_doesNotLogErrorForProcessedType() {
+ setUpLoggerForRestore();
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+
+ mWallpaperEventLogger.onRestoreException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(0);
+ }
+
+
+ @Test
+ public void onWallpaperRestoreException_someProcessed_logsErrorForUnprocessedType() {
+ setUpLoggerForRestore();
+ mWallpaperEventLogger.onSystemImageWallpaperRestored();
+
+ mWallpaperEventLogger.onRestoreException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK);
+
+ assertThat(result).isNotNull();
+ assertThat(result.getFailCount()).isEqualTo(1);
+ }
+
+ @Test
+ public void onWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType() {
+ setUpLoggerForRestore();
+ mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent());
+
+ mWallpaperEventLogger.onRestoreException(new Exception());
+ BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM);
+
+ assertThat(result).isNull();
+ }
+
+ private BackupRestoreEventLogger.DataTypeResult getLogsForType(String dataType) {
+ for (BackupRestoreEventLogger.DataTypeResult result : mEventLogger.getLoggingResults()) {
+ if ((result.getDataType()).equals(dataType)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ private void setUpLoggerForBackup() {
+ mEventLogger = new BackupRestoreEventLogger(BackupAnnotations.OperationType.BACKUP);
+ createEventLogger();
+ }
+
+ private void setUpLoggerForRestore() {
+ mEventLogger = new BackupRestoreEventLogger(BackupAnnotations.OperationType.RESTORE);
+ createEventLogger();
+ }
+
+ private void createEventLogger() {
+ when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mEventLogger);
+ when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mEventLogger);
+
+ mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent);
+ }
+
+
private WallpaperInfo getWallpaperInfo() throws Exception {
Context context = InstrumentationRegistry.getTargetContext();
Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);