Merge "Add delayed restore logging to WallpaperBackupAgent" into udc-dev
This commit is contained in:
@@ -111,6 +111,7 @@ public class WallpaperBackupAgent extends BackupAgent {
|
|||||||
|
|
||||||
private WallpaperManager mWallpaperManager;
|
private WallpaperManager mWallpaperManager;
|
||||||
private WallpaperEventLogger mEventLogger;
|
private WallpaperEventLogger mEventLogger;
|
||||||
|
private BackupManager mBackupManager;
|
||||||
|
|
||||||
private boolean mSystemHasLiveComponent;
|
private boolean mSystemHasLiveComponent;
|
||||||
private boolean mLockHasLiveComponent;
|
private boolean mLockHasLiveComponent;
|
||||||
@@ -129,8 +130,8 @@ public class WallpaperBackupAgent extends BackupAgent {
|
|||||||
Slog.v(TAG, "quota file " + mQuotaFile.getPath() + " exists=" + mQuotaExceeded);
|
Slog.v(TAG, "quota file " + mQuotaFile.getPath() + " exists=" + mQuotaExceeded);
|
||||||
}
|
}
|
||||||
|
|
||||||
BackupManager backupManager = new BackupManager(getApplicationContext());
|
mBackupManager = new BackupManager(getBaseContext());
|
||||||
mEventLogger = new WallpaperEventLogger(backupManager, /* wallpaperAgent */ this);
|
mEventLogger = new WallpaperEventLogger(mBackupManager, /* wallpaperAgent */ this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -564,21 +565,44 @@ public class WallpaperBackupAgent extends BackupAgent {
|
|||||||
if (!isDeviceInRestore()) {
|
if (!isDeviceInRestore()) {
|
||||||
// We don't want to reapply the wallpaper outside a restore.
|
// We don't want to reapply the wallpaper outside a restore.
|
||||||
unregister();
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (componentName.getPackageName().equals(packageName)) {
|
if (componentName.getPackageName().equals(packageName)) {
|
||||||
Slog.d(TAG, "Applying component " + componentName);
|
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) {
|
if (applyToLock) {
|
||||||
try {
|
try {
|
||||||
mWallpaperManager.clear(FLAG_LOCK);
|
mWallpaperManager.clear(FLAG_LOCK);
|
||||||
|
logger.onLockLiveWallpaperRestored(componentName);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Slog.w(TAG, "Failed to apply live wallpaper to lock screen: " + 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.
|
// We're only expecting to restore the wallpaper component once.
|
||||||
unregister();
|
unregister();
|
||||||
|
mBackupManager.reportDelayedRestoreResult(logger.getBackupRestoreLogger());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -599,4 +623,9 @@ public class WallpaperBackupAgent extends BackupAgent {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
void setBackupManagerForTesting(BackupManager backupManager) {
|
||||||
|
mBackupManager = backupManager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -61,6 +61,10 @@ public class WallpaperEventLogger {
|
|||||||
static final String ERROR_NO_WALLPAPER = "no_wallpaper";
|
static final String ERROR_NO_WALLPAPER = "no_wallpaper";
|
||||||
@BackupRestoreError
|
@BackupRestoreError
|
||||||
static final String ERROR_QUOTA_EXCEEDED = "quota_exceeded";
|
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;
|
private final BackupRestoreEventLogger mLogger;
|
||||||
|
|
||||||
@@ -70,6 +74,14 @@ public class WallpaperEventLogger {
|
|||||||
mLogger = backupManager.getBackupRestoreEventLogger(/* backupAgent */ wallpaperAgent);
|
mLogger = backupManager.getBackupRestoreEventLogger(/* backupAgent */ wallpaperAgent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WallpaperEventLogger(BackupRestoreEventLogger logger) {
|
||||||
|
mLogger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
BackupRestoreEventLogger getBackupRestoreLogger() {
|
||||||
|
return mLogger;
|
||||||
|
}
|
||||||
|
|
||||||
void onSystemImageWallpaperBackedUp() {
|
void onSystemImageWallpaperBackedUp() {
|
||||||
logBackupSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null);
|
logBackupSuccessInternal(WALLPAPER_IMG_SYSTEM, /* liveComponentWallpaperInfo */ null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.app.WallpaperInfo;
|
import android.app.WallpaperInfo;
|
||||||
import android.app.WallpaperManager;
|
import android.app.WallpaperManager;
|
||||||
import android.app.backup.BackupAnnotations;
|
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.BackupRestoreEventLogger.DataTypeResult;
|
||||||
import android.app.backup.FullBackupDataOutput;
|
import android.app.backup.FullBackupDataOutput;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
@@ -101,6 +103,8 @@ public class WallpaperBackupAgentTest {
|
|||||||
private WallpaperManager mWallpaperManager;
|
private WallpaperManager mWallpaperManager;
|
||||||
@Mock
|
@Mock
|
||||||
private Context mMockContext;
|
private Context mMockContext;
|
||||||
|
@Mock
|
||||||
|
private BackupManager mBackupManager;
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
|
public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
|
||||||
@@ -714,6 +718,80 @@ public class WallpaperBackupAgentTest {
|
|||||||
assertThat(lock.getErrors()).containsKey(RuntimeException.class.getName());
|
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) {
|
private void mockCurrentWallpaperIds(int systemWallpaperId, int lockWallpaperId) {
|
||||||
when(mWallpaperManager.getWallpaperId(eq(FLAG_SYSTEM))).thenReturn(systemWallpaperId);
|
when(mWallpaperManager.getWallpaperId(eq(FLAG_SYSTEM))).thenReturn(systemWallpaperId);
|
||||||
when(mWallpaperManager.getWallpaperId(eq(FLAG_LOCK))).thenReturn(lockWallpaperId);
|
when(mWallpaperManager.getWallpaperId(eq(FLAG_LOCK))).thenReturn(lockWallpaperId);
|
||||||
|
|||||||
Reference in New Issue
Block a user