Loading packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java +32 −3 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ public class WallpaperBackupAgent extends BackupAgent { private WallpaperManager mWallpaperManager; private WallpaperEventLogger mEventLogger; private BackupManager mBackupManager; private boolean mSystemHasLiveComponent; private boolean mLockHasLiveComponent; Loading @@ -129,8 +130,8 @@ public class WallpaperBackupAgent extends BackupAgent { Slog.v(TAG, "quota file " + mQuotaFile.getPath() + " exists=" + mQuotaExceeded); } BackupManager backupManager = new BackupManager(getApplicationContext()); mEventLogger = new WallpaperEventLogger(backupManager, /* wallpaperAgent */ this); mBackupManager = new BackupManager(getBaseContext()); mEventLogger = new WallpaperEventLogger(mBackupManager, /* wallpaperAgent */ this); } @Override Loading Loading @@ -564,21 +565,44 @@ public class WallpaperBackupAgent extends BackupAgent { if (!isDeviceInRestore()) { // We don't want to reapply the wallpaper outside a restore. unregister(); // We have finished restore and not succeeded, so let's log that as an error. WallpaperEventLogger logger = new WallpaperEventLogger( mBackupManager.getDelayedRestoreLogger()); logger.onSystemLiveWallpaperRestoreFailed( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); if (applyToLock) { logger.onLockLiveWallpaperRestoreFailed( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); } mBackupManager.reportDelayedRestoreResult(logger.getBackupRestoreLogger()); return; } if (componentName.getPackageName().equals(packageName)) { Slog.d(TAG, "Applying component " + componentName); mWallpaperManager.setWallpaperComponent(componentName); boolean sysResult = mWallpaperManager.setWallpaperComponent(componentName); WallpaperEventLogger logger = new WallpaperEventLogger( mBackupManager.getDelayedRestoreLogger()); if (sysResult) { logger.onSystemLiveWallpaperRestored(componentName); } else { logger.onSystemLiveWallpaperRestoreFailed( WallpaperEventLogger.ERROR_SET_COMPONENT_EXCEPTION); } if (applyToLock) { try { mWallpaperManager.clear(FLAG_LOCK); logger.onLockLiveWallpaperRestored(componentName); } catch (IOException e) { Slog.w(TAG, "Failed to apply live wallpaper to lock screen: " + e); logger.onLockLiveWallpaperRestoreFailed(e.getClass().getName()); } } // We're only expecting to restore the wallpaper component once. unregister(); mBackupManager.reportDelayedRestoreResult(logger.getBackupRestoreLogger()); } } }; Loading @@ -599,4 +623,9 @@ public class WallpaperBackupAgent extends BackupAgent { return false; } } @VisibleForTesting void setBackupManagerForTesting(BackupManager backupManager) { mBackupManager = backupManager; } } No newline at end of file packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java +12 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,10 @@ public class WallpaperEventLogger { static final String ERROR_NO_WALLPAPER = "no_wallpaper"; @BackupRestoreError static final String ERROR_QUOTA_EXCEEDED = "quota_exceeded"; @BackupRestoreError static final String ERROR_SET_COMPONENT_EXCEPTION = "exception_in_set_component"; @BackupRestoreError static final String ERROR_LIVE_PACKAGE_NOT_INSTALLED = "live_pkg_not_installed_in_restore"; private final BackupRestoreEventLogger mLogger; Loading @@ -70,6 +74,14 @@ public class WallpaperEventLogger { mLogger = backupManager.getBackupRestoreEventLogger(/* backupAgent */ wallpaperAgent); } WallpaperEventLogger(BackupRestoreEventLogger logger) { mLogger = logger; } BackupRestoreEventLogger getBackupRestoreLogger() { return mLogger; } void onSystemImageWallpaperBackedUp() { logBackupSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null); } Loading packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java +78 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ import static org.mockito.Mockito.when; import android.app.WallpaperInfo; import android.app.WallpaperManager; import android.app.backup.BackupAnnotations; import android.app.backup.BackupManager; import android.app.backup.BackupRestoreEventLogger; import android.app.backup.BackupRestoreEventLogger.DataTypeResult; import android.app.backup.FullBackupDataOutput; import android.content.ComponentName; Loading Loading @@ -101,6 +103,8 @@ public class WallpaperBackupAgentTest { private WallpaperManager mWallpaperManager; @Mock private Context mMockContext; @Mock private BackupManager mBackupManager; @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder(); Loading Loading @@ -714,6 +718,80 @@ public class WallpaperBackupAgentTest { assertThat(lock.getErrors()).containsKey(RuntimeException.class.getName()); } @Test public void testUpdateWallpaperComponent_delayedRestore_logsSuccess() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = true; when(mWallpaperManager.setWallpaperComponent(any())).thenReturn(true); BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, /* applyToLock */ true); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); DataTypeResult lock = getLoggingResult(WALLPAPER_LIVE_LOCK, logger.getLoggingResults()); assertThat(system).isNotNull(); assertThat(system.getSuccessCount()).isEqualTo(1); assertThat(lock).isNotNull(); assertThat(lock.getSuccessCount()).isEqualTo(1); } @Test public void testUpdateWallpaperComponent_delayedRestoreFails_logsFailure() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = true; when(mWallpaperManager.setWallpaperComponent(any())).thenReturn(false); BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, /* applyToLock */ true); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); assertThat(system).isNotNull(); assertThat(system.getFailCount()).isEqualTo(1); assertThat(system.getErrors()).containsKey( WallpaperEventLogger.ERROR_SET_COMPONENT_EXCEPTION); } @Test public void testUpdateWallpaperComponent_delayedRestore_packageNotInstalled_logsFailure() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = false; BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, /* applyToLock */ true); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); DataTypeResult lock = getLoggingResult(WALLPAPER_LIVE_LOCK, logger.getLoggingResults()); assertThat(system).isNotNull(); assertThat(system.getFailCount()).isEqualTo(1); assertThat(system.getErrors()).containsKey( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); assertThat(lock).isNotNull(); assertThat(lock.getFailCount()).isEqualTo(1); assertThat(lock.getErrors()).containsKey( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); } private void mockCurrentWallpaperIds(int systemWallpaperId, int lockWallpaperId) { when(mWallpaperManager.getWallpaperId(eq(FLAG_SYSTEM))).thenReturn(systemWallpaperId); when(mWallpaperManager.getWallpaperId(eq(FLAG_LOCK))).thenReturn(lockWallpaperId); Loading Loading
packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java +32 −3 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ public class WallpaperBackupAgent extends BackupAgent { private WallpaperManager mWallpaperManager; private WallpaperEventLogger mEventLogger; private BackupManager mBackupManager; private boolean mSystemHasLiveComponent; private boolean mLockHasLiveComponent; Loading @@ -129,8 +130,8 @@ public class WallpaperBackupAgent extends BackupAgent { Slog.v(TAG, "quota file " + mQuotaFile.getPath() + " exists=" + mQuotaExceeded); } BackupManager backupManager = new BackupManager(getApplicationContext()); mEventLogger = new WallpaperEventLogger(backupManager, /* wallpaperAgent */ this); mBackupManager = new BackupManager(getBaseContext()); mEventLogger = new WallpaperEventLogger(mBackupManager, /* wallpaperAgent */ this); } @Override Loading Loading @@ -564,21 +565,44 @@ public class WallpaperBackupAgent extends BackupAgent { if (!isDeviceInRestore()) { // We don't want to reapply the wallpaper outside a restore. unregister(); // We have finished restore and not succeeded, so let's log that as an error. WallpaperEventLogger logger = new WallpaperEventLogger( mBackupManager.getDelayedRestoreLogger()); logger.onSystemLiveWallpaperRestoreFailed( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); if (applyToLock) { logger.onLockLiveWallpaperRestoreFailed( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); } mBackupManager.reportDelayedRestoreResult(logger.getBackupRestoreLogger()); return; } if (componentName.getPackageName().equals(packageName)) { Slog.d(TAG, "Applying component " + componentName); mWallpaperManager.setWallpaperComponent(componentName); boolean sysResult = mWallpaperManager.setWallpaperComponent(componentName); WallpaperEventLogger logger = new WallpaperEventLogger( mBackupManager.getDelayedRestoreLogger()); if (sysResult) { logger.onSystemLiveWallpaperRestored(componentName); } else { logger.onSystemLiveWallpaperRestoreFailed( WallpaperEventLogger.ERROR_SET_COMPONENT_EXCEPTION); } if (applyToLock) { try { mWallpaperManager.clear(FLAG_LOCK); logger.onLockLiveWallpaperRestored(componentName); } catch (IOException e) { Slog.w(TAG, "Failed to apply live wallpaper to lock screen: " + e); logger.onLockLiveWallpaperRestoreFailed(e.getClass().getName()); } } // We're only expecting to restore the wallpaper component once. unregister(); mBackupManager.reportDelayedRestoreResult(logger.getBackupRestoreLogger()); } } }; Loading @@ -599,4 +623,9 @@ public class WallpaperBackupAgent extends BackupAgent { return false; } } @VisibleForTesting void setBackupManagerForTesting(BackupManager backupManager) { mBackupManager = backupManager; } } No newline at end of file
packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperEventLogger.java +12 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,10 @@ public class WallpaperEventLogger { static final String ERROR_NO_WALLPAPER = "no_wallpaper"; @BackupRestoreError static final String ERROR_QUOTA_EXCEEDED = "quota_exceeded"; @BackupRestoreError static final String ERROR_SET_COMPONENT_EXCEPTION = "exception_in_set_component"; @BackupRestoreError static final String ERROR_LIVE_PACKAGE_NOT_INSTALLED = "live_pkg_not_installed_in_restore"; private final BackupRestoreEventLogger mLogger; Loading @@ -70,6 +74,14 @@ public class WallpaperEventLogger { mLogger = backupManager.getBackupRestoreEventLogger(/* backupAgent */ wallpaperAgent); } WallpaperEventLogger(BackupRestoreEventLogger logger) { mLogger = logger; } BackupRestoreEventLogger getBackupRestoreLogger() { return mLogger; } void onSystemImageWallpaperBackedUp() { logBackupSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null); } Loading
packages/WallpaperBackup/test/src/com/android/wallpaperbackup/WallpaperBackupAgentTest.java +78 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ import static org.mockito.Mockito.when; import android.app.WallpaperInfo; import android.app.WallpaperManager; import android.app.backup.BackupAnnotations; import android.app.backup.BackupManager; import android.app.backup.BackupRestoreEventLogger; import android.app.backup.BackupRestoreEventLogger.DataTypeResult; import android.app.backup.FullBackupDataOutput; import android.content.ComponentName; Loading Loading @@ -101,6 +103,8 @@ public class WallpaperBackupAgentTest { private WallpaperManager mWallpaperManager; @Mock private Context mMockContext; @Mock private BackupManager mBackupManager; @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder(); Loading Loading @@ -714,6 +718,80 @@ public class WallpaperBackupAgentTest { assertThat(lock.getErrors()).containsKey(RuntimeException.class.getName()); } @Test public void testUpdateWallpaperComponent_delayedRestore_logsSuccess() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = true; when(mWallpaperManager.setWallpaperComponent(any())).thenReturn(true); BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, /* applyToLock */ true); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); DataTypeResult lock = getLoggingResult(WALLPAPER_LIVE_LOCK, logger.getLoggingResults()); assertThat(system).isNotNull(); assertThat(system.getSuccessCount()).isEqualTo(1); assertThat(lock).isNotNull(); assertThat(lock.getSuccessCount()).isEqualTo(1); } @Test public void testUpdateWallpaperComponent_delayedRestoreFails_logsFailure() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = true; when(mWallpaperManager.setWallpaperComponent(any())).thenReturn(false); BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, /* applyToLock */ true); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); assertThat(system).isNotNull(); assertThat(system.getFailCount()).isEqualTo(1); assertThat(system.getErrors()).containsKey( WallpaperEventLogger.ERROR_SET_COMPONENT_EXCEPTION); } @Test public void testUpdateWallpaperComponent_delayedRestore_packageNotInstalled_logsFailure() throws Exception { mWallpaperBackupAgent.mIsDeviceInRestore = false; BackupRestoreEventLogger logger = new BackupRestoreEventLogger( BackupAnnotations.OperationType.RESTORE); when(mBackupManager.getDelayedRestoreLogger()).thenReturn(logger); mWallpaperBackupAgent.setBackupManagerForTesting(mBackupManager); mWallpaperBackupAgent.updateWallpaperComponent(mWallpaperComponent, /* applyToLock */ true); // Imitate wallpaper component installation. mWallpaperBackupAgent.mWallpaperPackageMonitor.onPackageAdded(TEST_WALLPAPER_PACKAGE, /* uid */0); DataTypeResult system = getLoggingResult(WALLPAPER_LIVE_SYSTEM, logger.getLoggingResults()); DataTypeResult lock = getLoggingResult(WALLPAPER_LIVE_LOCK, logger.getLoggingResults()); assertThat(system).isNotNull(); assertThat(system.getFailCount()).isEqualTo(1); assertThat(system.getErrors()).containsKey( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); assertThat(lock).isNotNull(); assertThat(lock.getFailCount()).isEqualTo(1); assertThat(lock.getErrors()).containsKey( WallpaperEventLogger.ERROR_LIVE_PACKAGE_NOT_INSTALLED); } private void mockCurrentWallpaperIds(int systemWallpaperId, int lockWallpaperId) { when(mWallpaperManager.getWallpaperId(eq(FLAG_SYSTEM))).thenReturn(systemWallpaperId); when(mWallpaperManager.getWallpaperId(eq(FLAG_LOCK))).thenReturn(lockWallpaperId); Loading