Merge "[Multi-user] Support permission backup for multi-user"
This commit is contained in:
committed by
Android (Google) Code Review
commit
dd4fd2e23e
@@ -19,7 +19,6 @@ package com.android.server.backup;
|
||||
import android.app.AppGlobals;
|
||||
import android.app.backup.BlobBackupHelper;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Slog;
|
||||
|
||||
public class PermissionBackupHelper extends BlobBackupHelper {
|
||||
@@ -32,8 +31,12 @@ public class PermissionBackupHelper extends BlobBackupHelper {
|
||||
// key under which the permission-grant state blob is committed to backup
|
||||
private static final String KEY_PERMISSIONS = "permissions";
|
||||
|
||||
public PermissionBackupHelper() {
|
||||
private final int mUserId;
|
||||
|
||||
public PermissionBackupHelper(int userId) {
|
||||
super(STATE_VERSION, KEY_PERMISSIONS);
|
||||
|
||||
mUserId = userId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -45,7 +48,7 @@ public class PermissionBackupHelper extends BlobBackupHelper {
|
||||
try {
|
||||
switch (key) {
|
||||
case KEY_PERMISSIONS:
|
||||
return pm.getPermissionGrantBackup(UserHandle.USER_SYSTEM);
|
||||
return pm.getPermissionGrantBackup(mUserId);
|
||||
|
||||
default:
|
||||
Slog.w(TAG, "Unexpected backup key " + key);
|
||||
@@ -65,7 +68,7 @@ public class PermissionBackupHelper extends BlobBackupHelper {
|
||||
try {
|
||||
switch (key) {
|
||||
case KEY_PERMISSIONS:
|
||||
pm.restorePermissionGrants(payload, UserHandle.USER_SYSTEM);
|
||||
pm.restorePermissionGrants(payload, mUserId);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -19,7 +19,7 @@ package com.android.server.backup;
|
||||
import android.app.IWallpaperManager;
|
||||
import android.app.backup.BackupAgentHelper;
|
||||
import android.app.backup.BackupDataInput;
|
||||
import android.app.backup.BackupDataOutput;
|
||||
import android.app.backup.BackupHelper;
|
||||
import android.app.backup.FullBackup;
|
||||
import android.app.backup.FullBackupDataOutput;
|
||||
import android.app.backup.WallpaperBackupHelper;
|
||||
@@ -31,8 +31,11 @@ import android.os.ServiceManager;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.google.android.collect.Sets;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Backup agent for various system-managed data. Wallpapers are now handled by a
|
||||
@@ -77,20 +80,25 @@ public class SystemBackupAgent extends BackupAgentHelper {
|
||||
// Use old keys to keep legacy data compatibility and avoid writing two wallpapers
|
||||
private static final String WALLPAPER_IMAGE_KEY = WallpaperBackupHelper.WALLPAPER_IMAGE_KEY;
|
||||
|
||||
private WallpaperBackupHelper mWallpaperHelper = null;
|
||||
private static final Set<String> sEligibleForMultiUser = Sets.newArraySet(
|
||||
PERMISSION_HELPER);
|
||||
|
||||
private int mUserId = UserHandle.USER_SYSTEM;
|
||||
|
||||
@Override
|
||||
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
|
||||
ParcelFileDescriptor newState) throws IOException {
|
||||
public void onCreate(UserHandle user) {
|
||||
super.onCreate(user);
|
||||
|
||||
mUserId = user.getIdentifier();
|
||||
|
||||
addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this));
|
||||
addHelper(PREFERRED_HELPER, new PreferredActivityBackupHelper());
|
||||
addHelper(NOTIFICATION_HELPER, new NotificationBackupHelper(this));
|
||||
addHelper(PERMISSION_HELPER, new PermissionBackupHelper());
|
||||
addHelper(PERMISSION_HELPER, new PermissionBackupHelper(mUserId));
|
||||
addHelper(USAGE_STATS_HELPER, new UsageStatsBackupHelper(this));
|
||||
addHelper(SHORTCUT_MANAGER_HELPER, new ShortcutBackupHelper());
|
||||
addHelper(ACCOUNT_MANAGER_HELPER, new AccountManagerBackupHelper());
|
||||
addHelper(SLICES_HELPER, new SliceBackupHelper(this));
|
||||
super.onBackup(oldState, data, newState);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,26 +111,25 @@ public class SystemBackupAgent extends BackupAgentHelper {
|
||||
throws IOException {
|
||||
// Slot in a restore helper for the older wallpaper backup schema to support restore
|
||||
// from devices still generating data in that format.
|
||||
mWallpaperHelper = new WallpaperBackupHelper(this,
|
||||
new String[] { WALLPAPER_IMAGE_KEY} );
|
||||
addHelper(WALLPAPER_HELPER, mWallpaperHelper);
|
||||
addHelper(WALLPAPER_HELPER, new WallpaperBackupHelper(this,
|
||||
new String[] { WALLPAPER_IMAGE_KEY}));
|
||||
|
||||
// On restore, we also support a long-ago wallpaper data schema "system_files"
|
||||
addHelper("system_files", new WallpaperBackupHelper(this,
|
||||
new String[] { WALLPAPER_IMAGE_KEY} ));
|
||||
|
||||
addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this));
|
||||
addHelper(PREFERRED_HELPER, new PreferredActivityBackupHelper());
|
||||
addHelper(NOTIFICATION_HELPER, new NotificationBackupHelper(this));
|
||||
addHelper(PERMISSION_HELPER, new PermissionBackupHelper());
|
||||
addHelper(USAGE_STATS_HELPER, new UsageStatsBackupHelper(this));
|
||||
addHelper(SHORTCUT_MANAGER_HELPER, new ShortcutBackupHelper());
|
||||
addHelper(ACCOUNT_MANAGER_HELPER, new AccountManagerBackupHelper());
|
||||
addHelper(SLICES_HELPER, new SliceBackupHelper(this));
|
||||
|
||||
super.onRestore(data, appVersionCode, newState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addHelper(String keyPrefix, BackupHelper helper) {
|
||||
if (mUserId != UserHandle.USER_SYSTEM && !sEligibleForMultiUser.contains(keyPrefix)) {
|
||||
return;
|
||||
}
|
||||
|
||||
super.addHelper(keyPrefix, helper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Support for 'adb restore' of legacy archives
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user