Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd4fd2e2 authored by Ruslan Tkhakokhov's avatar Ruslan Tkhakokhov Committed by Android (Google) Code Review
Browse files

Merge "[Multi-user] Support permission backup for multi-user"

parents 95902c56 1583c8b9
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -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:
+25 −18
Original line number Diff line number Diff line
@@ -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
     */