diff options
author | Chandan Nath <nathch@google.com> | 2018-11-16 18:19:28 +0000 |
---|---|---|
committer | Chandan Nath <nathch@google.com> | 2018-11-21 13:52:34 +0000 |
commit | 57bf7bad03df4623d5864cb9b802817f2850c319 (patch) | |
tree | 853cc47397b1dd27651d2cce5048effe6bae4a9e /cmds/bmgr | |
parent | 2252fcc415633e9af7675f78f97096be70334204 (diff) |
add option --user to Bmgr.java
Bug: 118480337
Test: 1) atest RunFrameworksServicesRoboTests
2) atest BmgrTest
3) atest CtsBackupTestCases
4) atest CtsBackupHostTestCases
5) atest GtsBackupTestCases
6) atest GtsBackupHostTestCases
UsageStatsRestoreHostSideTest fails. I verified locally that this test
fails without this change too.
7) flashed device and ran:adb shell bmgr --user 10 backupnow --all
Logs and output are as expected since backupservice isnt active for user 10
log: Bmgr : Running backupnow for user:10
output: Error: Could not access the Backup Manager. Is the system running
8) flashed device and ran:adb shell bmgr backupnow --all
log: Bmgr : Running backupnow for user:0
output:
Running incremental backup for all packages.
Package @pm@ with result: Success
....
Backup finished with result: Success
Change-Id: Icfebe26f36276ea687d15c9f9c361c409313ae9d
Diffstat (limited to 'cmds/bmgr')
-rw-r--r-- | cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java | 125 |
1 files changed, 79 insertions, 46 deletions
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java index a826ec7c717e..3723fce9d4f0 100644 --- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java @@ -17,6 +17,7 @@ package com.android.commands.bmgr; import android.annotation.IntDef; +import android.annotation.UserIdInt; import android.app.backup.BackupManager; import android.app.backup.BackupManagerMonitor; import android.app.backup.BackupProgress; @@ -29,6 +30,7 @@ import android.app.backup.IRestoreSession; import android.app.backup.ISelectBackupTransportCallback; import android.app.backup.RestoreSet; import android.content.ComponentName; +import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.os.Bundle; @@ -37,8 +39,10 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.util.ArraySet; +import android.util.Slog; import com.android.internal.annotations.GuardedBy; +import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -49,20 +53,34 @@ import java.util.List; import java.util.Set; import java.util.concurrent.CountDownLatch; -public final class Bmgr { - IBackupManager mBmgr; - IRestoreSession mRestore; +/** + * Adb shell command for {@link android.app.backup.IBackupManager}. + */ +public class Bmgr { + public static final String TAG = "Bmgr"; + + private final IBackupManager mBmgr; + private IRestoreSession mRestore; - static final String BMGR_NOT_RUNNING_ERR = + private static final String BMGR_NOT_RUNNING_ERR = "Error: Could not access the Backup Manager. Is the system running?"; - static final String TRANSPORT_NOT_RUNNING_ERR = + private static final String TRANSPORT_NOT_RUNNING_ERR = "Error: Could not access the backup transport. Is the system running?"; - static final String PM_NOT_RUNNING_ERR = + private static final String PM_NOT_RUNNING_ERR = "Error: Could not access the Package Manager. Is the system running?"; private String[] mArgs; private int mNextArg; + @VisibleForTesting + Bmgr(IBackupManager bmgr) { + mBmgr = bmgr; + } + + Bmgr() { + mBmgr = IBackupManager.Stub.asInterface(ServiceManager.getService(Context.BACKUP_SERVICE)); + } + public static void main(String[] args) { try { new Bmgr().run(args); @@ -78,71 +96,73 @@ public final class Bmgr { return; } - if (!isBmgrActive()) { + mArgs = args; + mNextArg = 0; + int userId = parseUserId(); + String op = nextArg(); + Slog.v(TAG, "Running " + op + " for user:" + userId); + + if (!isBmgrActive(userId)) { return; } - mArgs = args; - String op = args[0]; - mNextArg = 1; - if ("enabled".equals(op)) { - doEnabled(); + doEnabled(userId); return; } if ("enable".equals(op)) { - doEnable(); + doEnable(userId); return; } if ("run".equals(op)) { - doRun(); + doRun(userId); return; } if ("backup".equals(op)) { - doBackup(); + doBackup(userId); return; } if ("init".equals(op)) { - doInit(); + doInit(userId); return; } if ("list".equals(op)) { - doList(); + doList(userId); return; } if ("restore".equals(op)) { - doRestore(); + doRestore(userId); return; } if ("transport".equals(op)) { - doTransport(); + doTransport(userId); return; } if ("wipe".equals(op)) { - doWipe(); + doWipe(userId); return; } if ("fullbackup".equals(op)) { - doFullTransportBackup(); + doFullTransportBackup(userId); return; } if ("backupnow".equals(op)) { - doBackupNow(); + doBackupNow(userId); return; } if ("cancel".equals(op)) { - doCancel(); + doCancel(userId); return; } @@ -155,15 +175,14 @@ public final class Bmgr { showUsage(); } - private boolean isBmgrActive() { - mBmgr = IBackupManager.Stub.asInterface(ServiceManager.getService("backup")); + boolean isBmgrActive(@UserIdInt int userId) { if (mBmgr == null) { System.err.println(BMGR_NOT_RUNNING_ERR); return false; } try { - if (!mBmgr.isBackupServiceActive(UserHandle.USER_SYSTEM)) { + if (!mBmgr.isBackupServiceActive(userId)) { System.err.println(BMGR_NOT_RUNNING_ERR); return false; } @@ -180,7 +199,7 @@ public final class Bmgr { return enabled ? "enabled" : "disabled"; } - private void doEnabled() { + private void doEnabled(@UserIdInt int userId) { try { boolean isEnabled = mBmgr.isBackupEnabled(); System.out.println("Backup Manager currently " @@ -191,7 +210,7 @@ public final class Bmgr { } } - private void doEnable() { + private void doEnable(@UserIdInt int userId) { String arg = nextArg(); if (arg == null) { showUsage(); @@ -211,7 +230,7 @@ public final class Bmgr { } } - private void doRun() { + void doRun(@UserIdInt int userId) { try { mBmgr.backupNow(); } catch (RemoteException e) { @@ -220,7 +239,7 @@ public final class Bmgr { } } - private void doBackup() { + private void doBackup(@UserIdInt int userId) { String pkg = nextArg(); if (pkg == null) { showUsage(); @@ -235,7 +254,7 @@ public final class Bmgr { } } - private void doFullTransportBackup() { + private void doFullTransportBackup(@UserIdInt int userId) { System.out.println("Performing full transport backup"); String pkg; @@ -354,8 +373,8 @@ public final class Bmgr { } } - private void backupNowAllPackages(boolean nonIncrementalBackup, @Monitor int monitorState) { - int userId = UserHandle.USER_SYSTEM; + private void backupNowAllPackages(@UserIdInt int userId, boolean nonIncrementalBackup, + @Monitor int monitorState) { IPackageManager mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); if (mPm == null) { @@ -379,11 +398,13 @@ public final class Bmgr { System.err.println(e.toString()); System.err.println(BMGR_NOT_RUNNING_ERR); } - backupNowPackages(Arrays.asList(filteredPackages), nonIncrementalBackup, monitorState); + backupNowPackages(userId, Arrays.asList(filteredPackages), nonIncrementalBackup, + monitorState); } } private void backupNowPackages( + @UserIdInt int userId, List<String> packages, boolean nonIncrementalBackup, @Monitor int monitorState) { int flags = 0; if (nonIncrementalBackup) { @@ -412,7 +433,7 @@ public final class Bmgr { } } - private void doBackupNow() { + private void doBackupNow(@UserIdInt int userId) { String pkg; boolean backupAll = false; boolean nonIncrementalBackup = false; @@ -439,20 +460,20 @@ public final class Bmgr { if (allPkgs.size() == 0) { System.out.println("Running " + (nonIncrementalBackup ? "non-" : "") + "incremental backup for all packages."); - backupNowAllPackages(nonIncrementalBackup, monitor); + backupNowAllPackages(userId, nonIncrementalBackup, monitor); } else { System.err.println("Provide only '--all' flag or list of packages."); } } else if (allPkgs.size() > 0) { System.out.println("Running " + (nonIncrementalBackup ? "non-" : "") + "incremental backup for " + allPkgs.size() +" requested packages."); - backupNowPackages(allPkgs, nonIncrementalBackup, monitor); + backupNowPackages(userId, allPkgs, nonIncrementalBackup, monitor); } else { System.err.println("Provide '--all' flag or list of packages."); } } - private void doCancel() { + private void doCancel(@UserIdInt int userId) { String arg = nextArg(); if ("backups".equals(arg)) { try { @@ -467,7 +488,7 @@ public final class Bmgr { System.err.println("Unknown command."); } - private void doTransport() { + private void doTransport(@UserIdInt int userId) { try { String which = nextArg(); if (which == null) { @@ -531,7 +552,7 @@ public final class Bmgr { } } - private void doWipe() { + private void doWipe(@UserIdInt int userId) { String transport = nextArg(); if (transport == null) { showUsage(); @@ -563,7 +584,7 @@ public final class Bmgr { } } - private void doInit() { + private void doInit(@UserIdInt int userId) { ArraySet<String> transports = new ArraySet<>(); String transport; while ((transport = nextArg()) != null) { @@ -586,7 +607,7 @@ public final class Bmgr { } } - private void doList() { + private void doList(@UserIdInt int userId) { String arg = nextArg(); // sets, transports, packages set# if ("transports".equals(arg)) { doListTransports(); @@ -603,8 +624,6 @@ public final class Bmgr { if ("sets".equals(arg)) { doListRestoreSets(); - } else if ("transports".equals(arg)) { - doListTransports(); } mRestore.endRestoreSession(); @@ -717,7 +736,7 @@ public final class Bmgr { } } - private void doRestore() { + private void doRestore(@UserIdInt int userId) { String arg = nextArg(); if (arg == null) { showUsage(); @@ -830,8 +849,18 @@ public final class Bmgr { return arg; } + private int parseUserId() { + String arg = nextArg(); + if ("--user".equals(arg)) { + return UserHandle.parseUserArg(nextArg()); + } else { + mNextArg--; + return UserHandle.USER_SYSTEM; + } + } + private static void showUsage() { - System.err.println("usage: bmgr [backup|restore|list|transport|run]"); + System.err.println("usage: bmgr [--user <userId>] [backup|restore|list|transport|run]"); System.err.println(" bmgr backup PACKAGE"); System.err.println(" bmgr enable BOOL"); System.err.println(" bmgr enabled"); @@ -847,6 +876,10 @@ public final class Bmgr { System.err.println(" bmgr cancel backups"); System.err.println(" bmgr init TRANSPORT..."); System.err.println(""); + System.err.println("The '--user' option specifies the user on which the operation is run."); + System.err.println("It must be the first argument before the operation."); + System.err.println("The default value is 0 which is the system user."); + System.err.println(""); System.err.println("The 'backup' command schedules a backup pass for the named package."); System.err.println("Note that the backup pass will effectively be a no-op if the package"); System.err.println("does not actually have changed data to store."); |