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

Commit 0f0ab473 authored by Kapish Goel's avatar Kapish Goel Committed by Android (Google) Code Review
Browse files

Merge "Revert "Get OperationType from transport"" into sc-dev

parents 342dfd44 47fc6dfc
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.commands.bmgr;
import android.annotation.IntDef;
import android.annotation.UserIdInt;
import android.app.backup.BackupManager;
import android.app.backup.BackupManager.OperationType;
import android.app.backup.BackupManagerMonitor;
import android.app.backup.BackupProgress;
import android.app.backup.BackupTransport;
@@ -666,7 +667,7 @@ public class Bmgr {

        // The rest of the 'list' options work with a restore session on the current transport
        try {
            mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null);
            mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null, OperationType.BACKUP);
            if (mRestore == null) {
                System.err.println(BMGR_ERR_NO_RESTORESESSION_FOR_USER + userId);
                return;
@@ -821,7 +822,7 @@ public class Bmgr {

        try {
            boolean didRestore = false;
            mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null);
            mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null, OperationType.BACKUP);
            if (mRestore == null) {
                System.err.println(BMGR_ERR_NO_RESTORESESSION_FOR_USER + userId);
                return;
+58 −3
Original line number Diff line number Diff line
@@ -361,7 +361,36 @@ public class BackupManager {
            try {
                // All packages, current transport
                IRestoreSession binder =
                        sService.beginRestoreSessionForUser(mContext.getUserId(), null, null);
                        sService.beginRestoreSessionForUser(mContext.getUserId(), null, null,
                                OperationType.BACKUP);
                if (binder != null) {
                    session = new RestoreSession(mContext, binder);
                }
            } catch (RemoteException e) {
                Log.e(TAG, "beginRestoreSession() couldn't connect");
            }
        }
        return session;
    }

    /**
     * Begin the process of restoring data from backup.  See the
     * {@link android.app.backup.RestoreSession} class for documentation on that process.
     *
     * @param operationType Type of the operation, see {@link OperationType}
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.BACKUP)
    public RestoreSession beginRestoreSession(@OperationType int operationType) {
        RestoreSession session = null;
        checkServiceBinder();
        if (sService != null) {
            try {
                // All packages, current transport
                IRestoreSession binder =
                        sService.beginRestoreSessionForUser(mContext.getUserId(), null, null,
                                operationType);
                if (binder != null) {
                    session = new RestoreSession(mContext, binder);
                }
@@ -772,7 +801,7 @@ public class BackupManager {
    @SystemApi
    @RequiresPermission(android.Manifest.permission.BACKUP)
    public int requestBackup(String[] packages, BackupObserver observer) {
        return requestBackup(packages, observer, null, 0);
        return requestBackup(packages, observer, null, 0, OperationType.BACKUP);
    }

    /**
@@ -797,6 +826,31 @@ public class BackupManager {
    @RequiresPermission(android.Manifest.permission.BACKUP)
    public int requestBackup(String[] packages, BackupObserver observer,
            BackupManagerMonitor monitor, int flags) {
        return requestBackup(packages, observer, monitor, flags, OperationType.BACKUP);
    }

    /**
     * Request an immediate backup, providing an observer to which results of the backup operation
     * will be published. The Android backup system will decide for each package whether it will
     * be full app data backup or key/value-pair-based backup.
     *
     * <p>If this method returns {@link BackupManager#SUCCESS}, the OS will attempt to backup all
     * provided packages using the remote transport.
     *
     * @param packages List of package names to backup.
     * @param observer The {@link BackupObserver} to receive callbacks during the backup
     *                 operation. Could be {@code null}.
     * @param monitor  The {@link BackupManagerMonitorWrapper} to receive callbacks of important
     *                 events during the backup operation. Could be {@code null}.
     * @param flags    {@link #FLAG_NON_INCREMENTAL_BACKUP}.
     * @param operationType {@link OperationType}
     * @return {@link BackupManager#SUCCESS} on success; nonzero on error.
     * @throws IllegalArgumentException on null or empty {@code packages} param.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.BACKUP)
    public int requestBackup(String[] packages, BackupObserver observer,
            BackupManagerMonitor monitor, int flags, @OperationType int operationType) {
        checkServiceBinder();
        if (sService != null) {
            try {
@@ -806,7 +860,8 @@ public class BackupManager {
                BackupManagerMonitorWrapper monitorWrapper = monitor == null
                        ? null
                        : new BackupManagerMonitorWrapper(monitor);
                return sService.requestBackup(packages, observerWrapper, monitorWrapper, flags);
                return sService.requestBackup(packages, observerWrapper, monitorWrapper, flags,
                        operationType);
            } catch (RemoteException e) {
                Log.e(TAG, "requestBackup() couldn't connect");
            }
+4 −2
Original line number Diff line number Diff line
@@ -547,9 +547,11 @@ interface IBackupManager {
     *        set can be restored.
     * @param transportID The name of the transport to use for the restore operation.
     *        May be null, in which case the current active transport is used.
     * @param operationType Type of the operation, see {@link BackupManager#OperationType}
     * @return An interface to the restore session, or null on error.
     */
    IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID);
    IRestoreSession beginRestoreSessionForUser(int userId, String packageName, String transportID,
            int operationType);

    /**
     * Notify the backup manager that a BackupAgent has completed the operation
@@ -678,7 +680,7 @@ interface IBackupManager {
     * {@link android.app.backup.IBackupManager.requestBackupForUser} for the calling user id.
     */
    int requestBackup(in String[] packages, IBackupObserver observer, IBackupManagerMonitor monitor,
            int flags);
        int flags, int operationType);

    /**
     * Cancel all running backups. After this call returns, no currently running backups will
+14 −9
Original line number Diff line number Diff line
@@ -1245,9 +1245,10 @@ public class BackupManagerService extends IBackupManager.Stub {

    @Override
    public IRestoreSession beginRestoreSessionForUser(
            int userId, String packageName, String transportID) throws RemoteException {
            int userId, String packageName, String transportID,
            @OperationType int operationType) throws RemoteException {
        return isUserReadyForBackup(userId)
                ? beginRestoreSession(userId, packageName, transportID) : null;
                ? beginRestoreSession(userId, packageName, transportID, operationType) : null;
    }

    /**
@@ -1256,13 +1257,15 @@ public class BackupManagerService extends IBackupManager.Stub {
     */
    @Nullable
    public IRestoreSession beginRestoreSession(
            @UserIdInt int userId, String packageName, String transportName) {
            @UserIdInt int userId, String packageName, String transportName,
            @OperationType int operationType) {
        UserBackupManagerService userBackupManagerService =
                getServiceForUserIfCallerHasPermission(userId, "beginRestoreSession()");

        return userBackupManagerService == null
                ? null
                : userBackupManagerService.beginRestoreSession(packageName, transportName);
                : userBackupManagerService.beginRestoreSession(packageName, transportName,
                        operationType);
    }

    @Override
@@ -1347,15 +1350,15 @@ public class BackupManagerService extends IBackupManager.Stub {
        if (!isUserReadyForBackup(userId)) {
            return BackupManager.ERROR_BACKUP_NOT_ALLOWED;
        }
        return requestBackup(userId, packages, observer, monitor, flags);
        return requestBackup(userId, packages, observer, monitor, flags, OperationType.BACKUP);
    }

    @Override
    public int requestBackup(String[] packages, IBackupObserver observer,
            IBackupManagerMonitor monitor, int flags)
            IBackupManagerMonitor monitor, int flags, @OperationType int operationType)
            throws RemoteException {
        return requestBackup(binderGetCallingUserId(), packages,
                observer, monitor, flags);
                observer, monitor, flags, operationType);
    }

    /**
@@ -1367,13 +1370,15 @@ public class BackupManagerService extends IBackupManager.Stub {
            String[] packages,
            IBackupObserver observer,
            IBackupManagerMonitor monitor,
            int flags) {
            int flags,
            @OperationType int operationType) {
        UserBackupManagerService userBackupManagerService =
                getServiceForUserIfCallerHasPermission(userId, "requestBackup()");

        return userBackupManagerService == null
                ? BackupManager.ERROR_BACKUP_NOT_ALLOWED
                : userBackupManagerService.requestBackup(packages, observer, monitor, flags);
                : userBackupManagerService.requestBackup(packages, observer, monitor, flags,
                        operationType);
    }

    @Override
+15 −36
Original line number Diff line number Diff line
@@ -127,7 +127,6 @@ import com.android.server.backup.params.RestoreParams;
import com.android.server.backup.restore.ActiveRestoreSession;
import com.android.server.backup.restore.PerformUnifiedRestoreTask;
import com.android.server.backup.transport.TransportClient;
import com.android.server.backup.transport.TransportNotAvailableException;
import com.android.server.backup.transport.TransportNotRegisteredException;
import com.android.server.backup.utils.BackupEligibilityRules;
import com.android.server.backup.utils.BackupManagerMonitorUtils;
@@ -1861,10 +1860,19 @@ public class UserBackupManagerService {

    /**
     * Requests a backup for the inputted {@code packages} with a specified {@link
     * IBackupManagerMonitor} and {@link OperationType}.
     * IBackupManagerMonitor}.
     */
    public int requestBackup(String[] packages, IBackupObserver observer,
            IBackupManagerMonitor monitor, int flags) {
        return requestBackup(packages, observer, monitor, flags, OperationType.BACKUP);
    }

    /**
     * Requests a backup for the inputted {@code packages} with a specified {@link
     * IBackupManagerMonitor} and {@link OperationType}.
     */
    public int requestBackup(String[] packages, IBackupObserver observer,
            IBackupManagerMonitor monitor, int flags, @OperationType int operationType) {
        mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "requestBackup");

        if (packages == null || packages.length < 1) {
@@ -1895,16 +1903,13 @@ public class UserBackupManagerService {

        final TransportClient transportClient;
        final String transportDirName;
        int operationType;
        try {
            transportDirName =
                    mTransportManager.getTransportDirName(
                            mTransportManager.getCurrentTransportName());
            transportClient =
                    mTransportManager.getCurrentTransportClientOrThrow("BMS.requestBackup()");
            operationType = getOperationTypeFromTransport(transportClient);
        } catch (TransportNotRegisteredException | TransportNotAvailableException
                | RemoteException e) {
        } catch (TransportNotRegisteredException e) {
            BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED);
            monitor = BackupManagerMonitorUtils.monitorEvent(monitor,
                    BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL,
@@ -4019,13 +4024,15 @@ public class UserBackupManagerService {
    }

    /** Hand off a restore session. */
    public IRestoreSession beginRestoreSession(String packageName, String transport) {
    public IRestoreSession beginRestoreSession(String packageName, String transport,
            @OperationType int operationType) {
        if (DEBUG) {
            Slog.v(
                    TAG,
                    addUserIdToLogMessage(
                            mUserId,
                            "beginRestoreSession: pkg=" + packageName + " transport=" + transport));
                            "beginRestoreSession: pkg=" + packageName + " transport=" + transport
                                + "operationType=" + operationType));
        }

        boolean needPermission = true;
@@ -4066,17 +4073,6 @@ public class UserBackupManagerService {
            }
        }

        int operationType;
        try {
            operationType = getOperationTypeFromTransport(
                    mTransportManager.getTransportClientOrThrow(transport, /* caller */
                            "BMS.beginRestoreSession"));
        } catch (TransportNotAvailableException | TransportNotRegisteredException
                | RemoteException e) {
            Slog.w(TAG, "Failed to get operation type from transport: " + e);
            return null;
        }

        synchronized (this) {
            if (mActiveRestoreSession != null) {
                Slog.i(
@@ -4360,23 +4356,6 @@ public class UserBackupManagerService {
        }
    }

    @VisibleForTesting
    @OperationType int getOperationTypeFromTransport(TransportClient transportClient)
            throws TransportNotAvailableException, RemoteException {
        long oldCallingId = Binder.clearCallingIdentity();
        try {
            IBackupTransport transport = transportClient.connectOrThrow(
                    /* caller */ "BMS.getOperationTypeFromTransport");
            if ((transport.getTransportFlags() & BackupAgent.FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) {
                return OperationType.MIGRATION;
            } else {
                return OperationType.BACKUP;
            }
        } finally {
            Binder.restoreCallingIdentity(oldCallingId);
        }
    }

    private static String addUserIdToLogMessage(int userId, String message) {
        return "[UserID:" + userId + "] " + message;
    }
Loading