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

Commit e5cabb4a authored by Joël Stemmer's avatar Joël Stemmer Committed by Android (Google) Code Review
Browse files

Merge "Fix formatting in backup and restore sources and tests" into main

parents 59be1c58 28b6de63
Loading
Loading
Loading
Loading
+97 −62
Original line number Diff line number Diff line
@@ -53,9 +53,7 @@ import com.android.server.backup.utils.BackupEligibilityRules;
import java.util.List;
import java.util.function.BiFunction;

/**
 * Restore session.
 */
/** Restore session. */
public class ActiveRestoreSession extends IRestoreSession.Stub {
    private static final String TAG = "RestoreSession";
    private static final String DEVICE_NAME_FOR_D2D_SET = "D2D";
@@ -88,11 +86,13 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
    }

    // --- Binder interface ---
    public synchronized int getAvailableRestoreSets(IRestoreObserver observer,
            IBackupManagerMonitor monitor) {
        mBackupManagerService.getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.BACKUP,
                "getAvailableRestoreSets");
    @Override
    public synchronized int getAvailableRestoreSets(
            IRestoreObserver observer, IBackupManagerMonitor monitor) {
        mBackupManagerService
                .getContext()
                .enforceCallingOrSelfPermission(
                        android.Manifest.permission.BACKUP, "getAvailableRestoreSets");
        if (observer == null) {
            throw new IllegalArgumentException("Observer must not be null");
        }
@@ -126,13 +126,21 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

            // Prevent lambda from leaking 'this'
            TransportManager transportManager = mTransportManager;
            OnTaskFinishedListener listener = caller -> {
            OnTaskFinishedListener listener =
                    caller -> {
                        transportManager.disposeOfTransportClient(transportConnection, caller);
                        wakelock.release();
                    };
            Message msg = mBackupManagerService.getBackupHandler().obtainMessage(
            Message msg =
                    mBackupManagerService
                            .getBackupHandler()
                            .obtainMessage(
                                    MSG_RUN_GET_RESTORE_SETS,
                    new RestoreGetSetsParams(transportConnection, this, observer, monitor,
                                    new RestoreGetSetsParams(
                                            transportConnection,
                                            this,
                                            observer,
                                            monitor,
                                            listener));
            mBackupManagerService.getBackupHandler().sendMessage(msg);
            return 0;
@@ -144,14 +152,15 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
        }
    }

    public synchronized int restoreAll(long token, IRestoreObserver observer,
            IBackupManagerMonitor monitor) {
        mBackupManagerService.getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.BACKUP,
                "performRestore");
    @Override
    public synchronized int restoreAll(
            long token, IRestoreObserver observer, IBackupManagerMonitor monitor) {
        mBackupManagerService
                .getContext()
                .enforceCallingOrSelfPermission(
                        android.Manifest.permission.BACKUP, "performRestore");

        Slog.d(TAG, "restoreAll token=" + Long.toHexString(token)
                    + " observer=" + observer);
        Slog.d(TAG, "restoreAll token=" + Long.toHexString(token) + " observer=" + observer);

        if (mEnded) {
            throw new IllegalStateException("Restore session already ended");
@@ -205,11 +214,16 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
    }

    // Restores of more than a single package are treated as 'system' restores
    public synchronized int restorePackages(long token, @Nullable IRestoreObserver observer,
            @NonNull String[] packages, @Nullable IBackupManagerMonitor monitor) {
        mBackupManagerService.getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.BACKUP,
                "performRestore");
    @Override
    public synchronized int restorePackages(
            long token,
            @Nullable IRestoreObserver observer,
            @NonNull String[] packages,
            @Nullable IBackupManagerMonitor monitor) {
        mBackupManagerService
                .getContext()
                .enforceCallingOrSelfPermission(
                        android.Manifest.permission.BACKUP, "performRestore");

        StringBuilder b = new StringBuilder(128);
        b.append("restorePackages token=");
@@ -301,17 +315,21 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
    BackupEligibilityRules getBackupEligibilityRules(RestoreSet restoreSet) {
        // TODO(b/182986784): Remove device name comparison once a designated field for operation
        //  type is added to RestoreSet object.
        int backupDestination = DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device)
                ? BackupDestination.DEVICE_TRANSFER : BackupDestination.CLOUD;
        int backupDestination =
                DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device)
                        ? BackupDestination.DEVICE_TRANSFER
                        : BackupDestination.CLOUD;

        if (!Flags.enableSkippingRestoreLaunchedApps()) {
            return mBackupManagerService.getEligibilityRulesForOperation(backupDestination);
        }

        boolean skipRestoreForLaunchedApps = (restoreSet.backupTransportFlags
                & BackupAgent.FLAG_SKIP_RESTORE_FOR_LAUNCHED_APPS) != 0;
        boolean skipRestoreForLaunchedApps =
                (restoreSet.backupTransportFlags & BackupAgent.FLAG_SKIP_RESTORE_FOR_LAUNCHED_APPS)
                        != 0;

        return new BackupEligibilityRules(mBackupManagerService.getPackageManager(),
        return new BackupEligibilityRules(
                mBackupManagerService.getPackageManager(),
                LocalServices.getService(PackageManagerInternal.class),
                mUserId,
                mBackupManagerService.getContext(),
@@ -319,10 +337,12 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
                skipRestoreForLaunchedApps);
    }

    public synchronized int restorePackage(String packageName, IRestoreObserver observer,
            IBackupManagerMonitor monitor) {
        Slog.d(TAG, "restorePackage pkg=" + packageName + " obs=" + observer
                    + "monitor=" + monitor);
    @Override
    public synchronized int restorePackage(
            String packageName, IRestoreObserver observer, IBackupManagerMonitor monitor) {
        Slog.d(
                TAG,
                "restorePackage pkg=" + packageName + " obs=" + observer + "monitor=" + monitor);

        if (mEnded) {
            throw new IllegalStateException("Restore session already ended");
@@ -335,16 +355,22 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

        if (mPackageName != null) {
            if (!mPackageName.equals(packageName)) {
                Slog.e(TAG, "Ignoring attempt to restore pkg=" + packageName
                        + " on session for package " + mPackageName);
                Slog.e(
                        TAG,
                        "Ignoring attempt to restore pkg="
                                + packageName
                                + " on session for package "
                                + mPackageName);
                return -1;
            }
        }

        final PackageInfo app;
        try {
            app = mBackupManagerService.getPackageManager().getPackageInfoAsUser(
                    packageName, 0, mUserId);
            app =
                    mBackupManagerService
                            .getPackageManager()
                            .getPackageInfoAsUser(packageName, 0, mUserId);
        } catch (NameNotFoundException nnf) {
            Slog.w(TAG, "Asked to restore nonexistent pkg " + packageName);
            return -1;
@@ -352,13 +378,21 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

        // If the caller is not privileged and is not coming from the target
        // app's uid, throw a permission exception back to the caller.
        int perm = mBackupManagerService.getContext().checkPermission(
        int perm =
                mBackupManagerService
                        .getContext()
                        .checkPermission(
                                android.Manifest.permission.BACKUP,
                Binder.getCallingPid(), Binder.getCallingUid());
        if ((perm == PackageManager.PERMISSION_DENIED) &&
                (app.applicationInfo.uid != Binder.getCallingUid())) {
            Slog.w(TAG, "restorePackage: bad packageName=" + packageName
                    + " or calling uid=" + Binder.getCallingUid());
                                Binder.getCallingPid(),
                                Binder.getCallingUid());
        if ((perm == PackageManager.PERMISSION_DENIED)
                && (app.applicationInfo.uid != Binder.getCallingUid())) {
            Slog.w(
                    TAG,
                    "restorePackage: bad packageName="
                            + packageName
                            + " or calling uid="
                            + Binder.getCallingUid());
            throw new SecurityException("No permission to restore other packages");
        }

@@ -373,8 +407,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
            // Check whether there is data for it in the current dataset, falling back
            // to the ancestral dataset if not.
            long token = mBackupManagerService.getAvailableRestoreToken(packageName);
            Slog.d(TAG, "restorePackage pkg=" + packageName
                        + " token=" + Long.toHexString(token));
            Slog.d(TAG, "restorePackage pkg=" + packageName + " token=" + Long.toHexString(token));

            // If we didn't come up with a place to look -- no ancestral dataset and
            // the app has never been backed up from this device -- there's nothing
@@ -404,12 +437,11 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
        mRestoreSets = restoreSets;
    }

    /**
     * Returns 0 if operation sent or -1 otherwise.
     */
    /** Returns 0 if operation sent or -1 otherwise. */
    private int sendRestoreToHandlerLocked(
            BiFunction<TransportConnection, OnTaskFinishedListener,
                    RestoreParams> restoreParamsBuilder, String callerLogString) {
            BiFunction<TransportConnection, OnTaskFinishedListener, RestoreParams>
                    restoreParamsBuilder,
            String callerLogString) {
        TransportConnection transportConnection =
                mTransportManager.getTransportClient(mTransportName, callerLogString);
        if (transportConnection == null) {
@@ -429,7 +461,8 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

        // Prevent lambda from leaking 'this'
        TransportManager transportManager = mTransportManager;
        OnTaskFinishedListener listener = caller -> {
        OnTaskFinishedListener listener =
                caller -> {
                    transportManager.disposeOfTransportClient(transportConnection, caller);
                    wakelock.release();
                };
@@ -462,6 +495,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
        }
    }

    @Override
    public synchronized void endRestoreSession() {
        Slog.d(TAG, "endRestoreSession");

@@ -474,7 +508,8 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
            throw new IllegalStateException("Restore session already ended");
        }

        mBackupManagerService.getBackupHandler().post(
                new EndRestoreRunnable(mBackupManagerService, this));
        mBackupManagerService
                .getBackupHandler()
                .post(new EndRestoreRunnable(mBackupManagerService, this));
    }
}