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

Commit d1ee43e5 authored by Chandan Nath's avatar Chandan Nath
Browse files

[Multi-user] Change more BackupManager AIDL methods to accept userId in methods

Bug: 120120742

Test: 1) atest RunFrameworksServicesRoboTests
2) atest $(find \
frameworks/base/services/tests/servicestests/src/com/android/server/backup \
-name '*Test.java')
3) atest CtsBackupTestCases
4) atest CtsBackupHostTestCases
5) atest GtsBackupTestCases
6) atest GtsBackupHostTestCases
7) 'adb shell bmgr' enabled/backupnow flow

Change-Id: Ia0641f66dd0a935420f1aee332bb2e21ca03610e
parent 009bd1bf
Loading
Loading
Loading
Loading
+22 −18
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ public class Bmgr {
        }

        try {
            mBmgr.dataChanged(pkg);
            mBmgr.dataChangedForUser(userId, pkg);
        } catch (RemoteException e) {
            System.err.println(e.toString());
            System.err.println(BMGR_NOT_RUNNING_ERR);
@@ -264,7 +264,8 @@ public class Bmgr {
        }
        if (allPkgs.size() > 0) {
            try {
                mBmgr.fullTransportBackup(allPkgs.toArray(new String[allPkgs.size()]));
                mBmgr.fullTransportBackupForUser(
                        userId, allPkgs.toArray(new String[allPkgs.size()]));
            } catch (RemoteException e) {
                System.err.println(e.toString());
                System.err.println(BMGR_NOT_RUNNING_ERR);
@@ -393,7 +394,7 @@ public class Bmgr {
                    installedPackages.stream().map(p -> p.packageName).toArray(String[]::new);
            String[] filteredPackages = {};
            try {
                filteredPackages = mBmgr.filterAppsEligibleForBackup(packages);
                filteredPackages = mBmgr.filterAppsEligibleForBackupForUser(userId, packages);
            } catch (RemoteException e) {
                System.err.println(e.toString());
                System.err.println(BMGR_NOT_RUNNING_ERR);
@@ -498,11 +499,11 @@ public class Bmgr {
            }

            if ("-c".equals(which)) {
                doTransportByComponent();
                doTransportByComponent(userId);
                return;
            }

            String old = mBmgr.selectBackupTransport(which);
            String old = mBmgr.selectBackupTransportForUser(userId, which);
            if (old == null) {
                System.out.println("Unknown transport '" + which
                        + "' specified; no changes made.");
@@ -516,7 +517,7 @@ public class Bmgr {
        }
    }

    private void doTransportByComponent() {
    private void doTransportByComponent(@UserIdInt int userId) {
        String which = nextArg();
        if (which == null) {
            showUsage();
@@ -526,7 +527,9 @@ public class Bmgr {
        final CountDownLatch latch = new CountDownLatch(1);

        try {
            mBmgr.selectBackupTransportAsync(ComponentName.unflattenFromString(which),
            mBmgr.selectBackupTransportAsyncForUser(
                    userId,
                    ComponentName.unflattenFromString(which),
                    new ISelectBackupTransportCallback.Stub() {
                        @Override
                        public void onSuccess(String transportName) {
@@ -567,7 +570,7 @@ public class Bmgr {
        }

        try {
            mBmgr.clearBackupData(transport, pkg);
            mBmgr.clearBackupDataForUser(userId, transport, pkg);
            System.out.println("Wiped backup data for " + pkg + " on " + transport);
        } catch (RemoteException e) {
            System.err.println(e.toString());
@@ -599,7 +602,8 @@ public class Bmgr {
        InitObserver observer = new InitObserver();
        try {
            System.out.println("Initializing transports: " + transports);
            mBmgr.initializeTransports(transports.toArray(new String[transports.size()]), observer);
            mBmgr.initializeTransportsForUser(
                    userId, transports.toArray(new String[transports.size()]), observer);
            observer.waitForCompletion(30*1000L);
            System.out.println("Initialization result: " + observer.result);
        } catch (RemoteException e) {
@@ -611,13 +615,13 @@ public class Bmgr {
    private void doList(@UserIdInt int userId) {
        String arg = nextArg();     // sets, transports, packages set#
        if ("transports".equals(arg)) {
            doListTransports();
            doListTransports(userId);
            return;
        }

        // The rest of the 'list' options work with a restore session on the current transport
        try {
            mRestore = mBmgr.beginRestoreSession(null, null);
            mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null);
            if (mRestore == null) {
                System.err.println(BMGR_NOT_RUNNING_ERR);
                return;
@@ -634,19 +638,19 @@ public class Bmgr {
        }
    }

    private void doListTransports() {
    private void doListTransports(@UserIdInt int userId) {
        String arg = nextArg();

        try {
            if ("-c".equals(arg)) {
                for (ComponentName transport : mBmgr.listAllTransportComponents()) {
                for (ComponentName transport : mBmgr.listAllTransportComponentsForUser(userId)) {
                    System.out.println(transport.flattenToShortString());
                }
                return;
            }

            String current = mBmgr.getCurrentTransport();
            String[] transports = mBmgr.listAllTransports();
            String current = mBmgr.getCurrentTransportForUser(userId);
            String[] transports = mBmgr.listAllTransportsForUser(userId);
            if (transports == null || transports.length == 0) {
                System.out.println("No transports available.");
                return;
@@ -756,7 +760,7 @@ public class Bmgr {
                    filter.add(arg);
                }

                doRestoreAll(token, filter);
                doRestoreAll(userId, token, filter);
            } catch (NumberFormatException e) {
                showUsage();
                return;
@@ -769,12 +773,12 @@ public class Bmgr {
        System.err.println("'restore <token> <package>'.");
    }

    private void doRestoreAll(long token, HashSet<String> filter) {
    private void doRestoreAll(@UserIdInt int userId, long token, HashSet<String> filter) {
        RestoreObserver observer = new RestoreObserver();

        try {
            boolean didRestore = false;
            mRestore = mBmgr.beginRestoreSession(null, null);
            mRestore = mBmgr.beginRestoreSessionForUser(userId, null, null);
            if (mRestore == null) {
                System.err.println(BMGR_NOT_RUNNING_ERR);
                return;
+13 −10
Original line number Diff line number Diff line
@@ -335,7 +335,8 @@ public class BackupManager {
        if (sService != null) {
            try {
                // All packages, current transport
                IRestoreSession binder = sService.beginRestoreSession(null, null);
                IRestoreSession binder =
                        sService.beginRestoreSessionForUser(mContext.getUserId(), null, null);
                if (binder != null) {
                    session = new RestoreSession(mContext, binder);
                }
@@ -465,7 +466,7 @@ public class BackupManager {
        checkServiceBinder();
        if (sService != null) {
            try {
                return sService.getCurrentTransportComponent();
                return sService.getCurrentTransportComponentForUser(mContext.getUserId());
            } catch (RemoteException e) {
                Log.e(TAG, "getCurrentTransportComponent() couldn't connect");
            }
@@ -530,7 +531,8 @@ public class BackupManager {
        checkServiceBinder();
        if (sService != null) {
            try {
                sService.updateTransportAttributes(
                sService.updateTransportAttributesForUser(
                        mContext.getUserId(),
                        transportComponent,
                        name,
                        configurationIntent,
@@ -590,7 +592,8 @@ public class BackupManager {
            try {
                SelectTransportListenerWrapper wrapper = listener == null ?
                        null : new SelectTransportListenerWrapper(mContext, listener);
                sService.selectBackupTransportAsync(transport, wrapper);
                sService.selectBackupTransportAsyncForUser(
                        mContext.getUserId(), transport, wrapper);
            } catch (RemoteException e) {
                Log.e(TAG, "selectBackupTransportAsync() couldn't connect");
            }
@@ -637,7 +640,7 @@ public class BackupManager {
        checkServiceBinder();
        if (sService != null) {
            try {
                return sService.getAvailableRestoreToken(packageName);
                return sService.getAvailableRestoreTokenForUser(mContext.getUserId(), packageName);
            } catch (RemoteException e) {
                Log.e(TAG, "getAvailableRestoreToken() couldn't connect");
            }
@@ -659,7 +662,7 @@ public class BackupManager {
        checkServiceBinder();
        if (sService != null) {
            try {
                return sService.isAppEligibleForBackup(packageName);
                return sService.isAppEligibleForBackupForUser(mContext.getUserId(), packageName);
            } catch (RemoteException e) {
                Log.e(TAG, "isAppEligibleForBackup(pkg) couldn't connect");
            }
@@ -760,7 +763,7 @@ public class BackupManager {
    public Intent getConfigurationIntent(String transportName) {
        if (sService != null) {
            try {
                return sService.getConfigurationIntent(transportName);
                return sService.getConfigurationIntentForUser(mContext.getUserId(), transportName);
            } catch (RemoteException e) {
                Log.e(TAG, "getConfigurationIntent() couldn't connect");
            }
@@ -781,7 +784,7 @@ public class BackupManager {
    public String getDestinationString(String transportName) {
        if (sService != null) {
            try {
                return sService.getDestinationString(transportName);
                return sService.getDestinationStringForUser(mContext.getUserId(), transportName);
            } catch (RemoteException e) {
                Log.e(TAG, "getDestinationString() couldn't connect");
            }
@@ -802,7 +805,7 @@ public class BackupManager {
    public Intent getDataManagementIntent(String transportName) {
        if (sService != null) {
            try {
                return sService.getDataManagementIntent(transportName);
                return sService.getDataManagementIntentForUser(mContext.getUserId(), transportName);
            } catch (RemoteException e) {
                Log.e(TAG, "getDataManagementIntent() couldn't connect");
            }
@@ -825,7 +828,7 @@ public class BackupManager {
    public String getDataManagementLabel(String transportName) {
        if (sService != null) {
            try {
                return sService.getDataManagementLabel(transportName);
                return sService.getDataManagementLabelForUser(mContext.getUserId(), transportName);
            } catch (RemoteException e) {
                Log.e(TAG, "getDataManagementLabel() couldn't connect");
            }
+182 −10

File changed.

Preview size limit exceeded, changes collapsed.

+119 −27
Original line number Diff line number Diff line
@@ -274,7 +274,7 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void dataChanged(String packageName) throws RemoteException {
    public void dataChangedForUser(int userId, String packageName) throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.dataChanged(packageName);
@@ -282,8 +282,13 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void initializeTransports(String[] transportNames, IBackupObserver observer)
            throws RemoteException {
    public void dataChanged(String packageName) throws RemoteException {
        dataChangedForUser(binderGetCallingUserId(), packageName);
    }

    @Override
    public void initializeTransportsForUser(
            int userId, String[] transportNames, IBackupObserver observer) throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.initializeTransports(transportNames, observer);
@@ -291,7 +296,7 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void clearBackupData(String transportName, String packageName)
    public void clearBackupDataForUser(int userId, String transportName, String packageName)
            throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
@@ -300,7 +305,14 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void agentConnected(String packageName, IBinder agent) throws RemoteException {
    public void clearBackupData(String transportName, String packageName)
            throws RemoteException {
        clearBackupDataForUser(binderGetCallingUserId(), transportName, packageName);
    }

    @Override
    public void agentConnectedForUser(int userId, String packageName, IBinder agent)
            throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.agentConnected(packageName, agent);
@@ -308,7 +320,12 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void agentDisconnected(String packageName) throws RemoteException {
    public void agentConnected(String packageName, IBinder agent) throws RemoteException {
        agentConnectedForUser(binderGetCallingUserId(), packageName, agent);
    }

    @Override
    public void agentDisconnectedForUser(int userId, String packageName) throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.agentDisconnected(packageName);
@@ -316,13 +333,24 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void restoreAtInstall(String packageName, int token) throws RemoteException {
    public void agentDisconnected(String packageName) throws RemoteException {
        agentDisconnectedForUser(binderGetCallingUserId(), packageName);
    }

    @Override
    public void restoreAtInstallForUser(int userId, String packageName, int token)
            throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.restoreAtInstall(packageName, token);
        }
    }

    @Override
    public void restoreAtInstall(String packageName, int token) throws RemoteException {
        restoreAtInstallForUser(binderGetCallingUserId(), packageName, token);
    }

    @Override
    public void setBackupEnabledForUser(@UserIdInt int userId, boolean isEnabled)
            throws RemoteException {
@@ -338,13 +366,18 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void setAutoRestore(boolean doAutoRestore) throws RemoteException {
    public void setAutoRestoreForUser(int userId, boolean doAutoRestore) throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.setAutoRestore(doAutoRestore);
        }
    }

    @Override
    public void setAutoRestore(boolean doAutoRestore) throws RemoteException {
        setAutoRestoreForUser(binderGetCallingUserId(), doAutoRestore);
    }

    @Override
    public void setBackupProvisioned(boolean isProvisioned) throws RemoteException {
        BackupManagerService svc = mService;
@@ -401,7 +434,8 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void fullTransportBackup(String[] packageNames) throws RemoteException {
    public void fullTransportBackupForUser(int userId, String[] packageNames)
            throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
            svc.fullTransportBackup(packageNames);
@@ -417,8 +451,13 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void acknowledgeFullBackupOrRestore(int token, boolean allow, String curPassword,
            String encryptionPassword, IFullBackupRestoreObserver observer)
    public void acknowledgeFullBackupOrRestoreForUser(
            int userId,
            int token,
            boolean allow,
            String curPassword,
            String encryptionPassword,
            IFullBackupRestoreObserver observer)
            throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
@@ -428,30 +467,50 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public String getCurrentTransport() throws RemoteException {
    public void acknowledgeFullBackupOrRestore(int token, boolean allow, String curPassword,
            String encryptionPassword, IFullBackupRestoreObserver observer)
                    throws RemoteException {
        BackupManagerService svc = mService;
        acknowledgeFullBackupOrRestoreForUser(
                binderGetCallingUserId(), token, allow, curPassword, encryptionPassword, observer);
    }


    @Override
    public String getCurrentTransportForUser(int userId) throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getCurrentTransport() : null;
    }

    @Override
    public String getCurrentTransport() throws RemoteException {
        return getCurrentTransportForUser(binderGetCallingUserId());
    }

    /**
     * Returns the {@link ComponentName} of the host service of the selected transport or
     * {@code null} if no transport selected or if the transport selected is not registered.
     */
    @Override
    @Nullable
    public ComponentName getCurrentTransportComponent() {
    public ComponentName getCurrentTransportComponentForUser(int userId) {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getCurrentTransportComponent() : null;
    }

    @Override
    public String[] listAllTransports() throws RemoteException {
    public String[] listAllTransportsForUser(int userId) throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.listAllTransports() : null;
    }

    @Override
    public ComponentName[] listAllTransportComponents() throws RemoteException {
    public String[] listAllTransports() throws RemoteException {
        return listAllTransportsForUser(binderGetCallingUserId());
    }

    @Override
    public ComponentName[] listAllTransportComponentsForUser(int userId) throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.listAllTransportComponents() : null;
    }
@@ -463,7 +522,8 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public void updateTransportAttributes(
    public void updateTransportAttributesForUser(
            int userId,
            ComponentName transportComponent,
            String name,
            @Nullable Intent configurationIntent,
@@ -483,13 +543,19 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public String selectBackupTransport(String transport) throws RemoteException {
    public String selectBackupTransportForUser(int userId, String transport)
            throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.selectBackupTransport(transport) : null;
    }

    @Override
    public void selectBackupTransportAsync(ComponentName transport,
    public String selectBackupTransport(String transport) throws RemoteException {
        return selectBackupTransportForUser(binderGetCallingUserId(), transport);
    }

    @Override
    public void selectBackupTransportAsyncForUser(int userId, ComponentName transport,
            ISelectBackupTransportCallback listener) throws RemoteException {
        BackupManagerService svc = mService;
        if (svc != null) {
@@ -506,32 +572,58 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public Intent getConfigurationIntent(String transport) throws RemoteException {
    public Intent getConfigurationIntentForUser(int userId, String transport)
            throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getConfigurationIntent(transport) : null;
    }

    @Override
    public String getDestinationString(String transport) throws RemoteException {
    public Intent getConfigurationIntent(String transport)
            throws RemoteException {
        return getConfigurationIntentForUser(binderGetCallingUserId(), transport);
    }

    @Override
    public String getDestinationStringForUser(int userId, String transport) throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getDestinationString(transport) : null;
    }

    @Override
    public Intent getDataManagementIntent(String transport) throws RemoteException {
    public String getDestinationString(String transport) throws RemoteException {
        return getDestinationStringForUser(binderGetCallingUserId(), transport);
    }

    @Override
    public Intent getDataManagementIntentForUser(int userId, String transport)
            throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getDataManagementIntent(transport) : null;
    }

    @Override
    public String getDataManagementLabel(String transport) throws RemoteException {
    public Intent getDataManagementIntent(String transport)
            throws RemoteException {
        return getDataManagementIntentForUser(binderGetCallingUserId(), transport);
    }

    @Override
    public String getDataManagementLabelForUser(int userId, String transport)
            throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getDataManagementLabel(transport) : null;
    }

    @Override
    public IRestoreSession beginRestoreSession(String packageName, String transportID)
    public String getDataManagementLabel(String transport)
            throws RemoteException {
        return getDataManagementLabelForUser(binderGetCallingUserId(), transport);
    }

    @Override
    public IRestoreSession beginRestoreSessionForUser(
            int userId, String packageName, String transportID) throws RemoteException {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.beginRestoreSession(packageName, transportID) : null;
    }
@@ -545,19 +637,19 @@ public class Trampoline extends IBackupManager.Stub {
    }

    @Override
    public long getAvailableRestoreToken(String packageName) {
    public long getAvailableRestoreTokenForUser(int userId, String packageName) {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.getAvailableRestoreToken(packageName) : 0;
    }

    @Override
    public boolean isAppEligibleForBackup(String packageName) {
    public boolean isAppEligibleForBackupForUser(int userId, String packageName) {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.isAppEligibleForBackup(packageName) : false;
    }

    @Override
    public String[] filterAppsEligibleForBackup(String[] packages) {
    public String[] filterAppsEligibleForBackupForUser(int userId, String[] packages) {
        BackupManagerService svc = mService;
        return (svc != null) ? svc.filterAppsEligibleForBackup(packages) : null;
    }
+214 −36

File changed.

Preview size limit exceeded, changes collapsed.