summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorRuslan Tkhakokhov <rthakohov@google.com>2019-02-04 22:12:50 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-02-04 22:12:50 +0000
commitdd4fd2e23e82167b1400cfec7879e49afbb9ff6a (patch)
tree2d57d3c5b3ea9847c8838540853584ffc6acfb5a /core/java
parent95902c563bf359c8b7725ca49bbc646d8c153a83 (diff)
parent1583c8b995712709e6a02b09aea33e2de55cd14a (diff)
Merge "[Multi-user] Support permission backup for multi-user"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/com/android/server/backup/PermissionBackupHelper.java11
-rw-r--r--core/java/com/android/server/backup/SystemBackupAgent.java43
2 files changed, 32 insertions, 22 deletions
diff --git a/core/java/com/android/server/backup/PermissionBackupHelper.java b/core/java/com/android/server/backup/PermissionBackupHelper.java
index ff0e63da8289..c0ba18159639 100644
--- a/core/java/com/android/server/backup/PermissionBackupHelper.java
+++ b/core/java/com/android/server/backup/PermissionBackupHelper.java
@@ -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:
diff --git a/core/java/com/android/server/backup/SystemBackupAgent.java b/core/java/com/android/server/backup/SystemBackupAgent.java
index 47e7a0e74563..8878421a8016 100644
--- a/core/java/com/android/server/backup/SystemBackupAgent.java
+++ b/core/java/com/android/server/backup/SystemBackupAgent.java
@@ -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
*/