Loading cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +185 −11 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.commands.bmgr; import android.annotation.IntDef; import android.app.backup.BackupManager; import android.app.backup.BackupManagerMonitor; import android.app.backup.BackupProgress; import android.app.backup.BackupTransport; import android.app.backup.IBackupManager; import android.app.backup.IBackupManagerMonitor; import android.app.backup.IBackupObserver; import android.app.backup.IRestoreObserver; import android.app.backup.IRestoreSession; Loading @@ -28,6 +31,7 @@ import android.app.backup.RestoreSet; import android.content.ComponentName; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; Loading @@ -36,10 +40,13 @@ import android.util.ArraySet; import com.android.internal.annotations.GuardedBy; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.CountDownLatch; public final class Bmgr { Loading Loading @@ -247,7 +254,7 @@ public final class Bmgr { } // IBackupObserver generically usable for any backup/init operation abstract class Observer extends IBackupObserver.Stub { private static abstract class Observer extends IBackupObserver.Stub { private final Object trigger = new Object(); @GuardedBy("trigger") Loading Loading @@ -295,7 +302,7 @@ public final class Bmgr { } } class BackupObserver extends Observer { private static class BackupObserver extends Observer { @Override public void onUpdate(String currentPackage, BackupProgress backupProgress) { super.onUpdate(currentPackage, backupProgress); Loading Loading @@ -347,7 +354,7 @@ public final class Bmgr { } } private void backupNowAllPackages(boolean nonIncrementalBackup) { private void backupNowAllPackages(boolean nonIncrementalBackup, @Monitor int monitorState) { int userId = UserHandle.USER_SYSTEM; IPackageManager mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); Loading @@ -372,20 +379,27 @@ public final class Bmgr { System.err.println(e.toString()); System.err.println(BMGR_NOT_RUNNING_ERR); } backupNowPackages(Arrays.asList(filteredPackages), nonIncrementalBackup); backupNowPackages(Arrays.asList(filteredPackages), nonIncrementalBackup, monitorState); } } private void backupNowPackages(List<String> packages, boolean nonIncrementalBackup) { private void backupNowPackages( List<String> packages, boolean nonIncrementalBackup, @Monitor int monitorState) { int flags = 0; if (nonIncrementalBackup) { flags |= BackupManager.FLAG_NON_INCREMENTAL_BACKUP; } try { BackupObserver observer = new BackupObserver(); // TODO: implement monitor here? int err = mBmgr.requestBackup(packages.toArray(new String[packages.size()]), observer, null, flags); BackupMonitor monitor = (monitorState != Monitor.OFF) ? new BackupMonitor(monitorState == Monitor.VERBOSE) : null; int err = mBmgr.requestBackup( packages.toArray(new String[packages.size()]), observer, monitor, flags); if (err == 0) { // Off and running -- wait for the backup to complete observer.waitForCompletion(); Loading @@ -402,6 +416,7 @@ public final class Bmgr { String pkg; boolean backupAll = false; boolean nonIncrementalBackup = false; @Monitor int monitor = Monitor.OFF; ArrayList<String> allPkgs = new ArrayList<String>(); while ((pkg = nextArg()) != null) { if (pkg.equals("--all")) { Loading @@ -410,6 +425,10 @@ public final class Bmgr { nonIncrementalBackup = true; } else if (pkg.equals("--incremental")) { nonIncrementalBackup = false; } else if (pkg.equals("--monitor")) { monitor = Monitor.NORMAL; } else if (pkg.equals("--monitor-verbose")) { monitor = Monitor.VERBOSE; } else { if (!allPkgs.contains(pkg)) { allPkgs.add(pkg); Loading @@ -420,14 +439,14 @@ public final class Bmgr { if (allPkgs.size() == 0) { System.out.println("Running " + (nonIncrementalBackup ? "non-" : "") + "incremental backup for all packages."); backupNowAllPackages(nonIncrementalBackup); backupNowAllPackages(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); backupNowPackages(allPkgs, nonIncrementalBackup, monitor); } else { System.err.println("Provide '--all' flag or list of packages."); } Loading Loading @@ -824,7 +843,7 @@ public final class Bmgr { System.err.println(" bmgr run"); System.err.println(" bmgr wipe TRANSPORT PACKAGE"); System.err.println(" bmgr fullbackup PACKAGE..."); System.err.println(" bmgr backupnow --all|PACKAGE..."); System.err.println(" bmgr backupnow [--monitor|--monitor-verbose] --all|PACKAGE..."); System.err.println(" bmgr cancel backups"); System.err.println(""); System.err.println("The 'backup' command schedules a backup pass for the named package."); Loading Loading @@ -878,9 +897,164 @@ public final class Bmgr { System.err.println(""); System.err.println("The 'backupnow' command runs an immediate backup for one or more packages."); System.err.println(" --all flag runs backup for all eligible packages."); System.err.println(" --monitor flag prints monitor events."); System.err.println(" --monitor-verbose flag prints monitor events with all keys."); System.err.println("For each package it will run key/value or full data backup "); System.err.println("depending on the package's manifest declarations."); System.err.println("The data is sent via the currently active transport."); System.err.println("The 'cancel backups' command cancels all running backups."); } private static class BackupMonitor extends IBackupManagerMonitor.Stub { private final boolean mVerbose; private BackupMonitor(boolean verbose) { mVerbose = verbose; } @Override public void onEvent(Bundle event) throws RemoteException { StringBuilder out = new StringBuilder(); int id = event.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID); int category = event.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY); out.append("=> Event{").append(eventCategoryToString(category)); out.append(" / ").append(eventIdToString(id)); String packageName = event.getString(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME); if (packageName != null) { out.append(" : package = ").append(packageName); if (event.containsKey(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION)) { long version = event.getLong( BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION); out.append("(v").append(version).append(")"); } } if (mVerbose) { Set<String> remainingKeys = new ArraySet<>(event.keySet()); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_ID); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_VERSION); if (!remainingKeys.isEmpty()) { out.append(", other keys ="); for (String key : remainingKeys) { out.append(" ").append(key); } } } out.append("}"); System.out.println(out.toString()); } } private static String eventCategoryToString(int eventCategory) { switch (eventCategory) { case BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT: return "TRANSPORT"; case BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT: return "AGENT"; case BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY: return "BACKUP_MANAGER_POLICY"; default: return "UNKNOWN_CATEGORY"; } } private static String eventIdToString(int eventId) { switch (eventId) { case BackupManagerMonitor.LOG_EVENT_ID_FULL_BACKUP_CANCEL: return "FULL_BACKUP_CANCEL"; case BackupManagerMonitor.LOG_EVENT_ID_ILLEGAL_KEY: return "ILLEGAL_KEY"; case BackupManagerMonitor.LOG_EVENT_ID_NO_DATA_TO_SEND: return "NO_DATA_TO_SEND"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_INELIGIBLE: return "PACKAGE_INELIGIBLE"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_KEY_VALUE_PARTICIPANT: return "PACKAGE_KEY_VALUE_PARTICIPANT"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_STOPPED: return "PACKAGE_STOPPED"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_NOT_FOUND: return "PACKAGE_NOT_FOUND"; case BackupManagerMonitor.LOG_EVENT_ID_BACKUP_DISABLED: return "BACKUP_DISABLED"; case BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED: return "DEVICE_NOT_PROVISIONED"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_TRANSPORT_NOT_PRESENT: return "PACKAGE_TRANSPORT_NOT_PRESENT"; case BackupManagerMonitor.LOG_EVENT_ID_ERROR_PREFLIGHT: return "ERROR_PREFLIGHT"; case BackupManagerMonitor.LOG_EVENT_ID_QUOTA_HIT_PREFLIGHT: return "QUOTA_HIT_PREFLIGHT"; case BackupManagerMonitor.LOG_EVENT_ID_EXCEPTION_FULL_BACKUP: return "EXCEPTION_FULL_BACKUP"; case BackupManagerMonitor.LOG_EVENT_ID_KEY_VALUE_BACKUP_CANCEL: return "KEY_VALUE_BACKUP_CANCEL"; case BackupManagerMonitor.LOG_EVENT_ID_NO_RESTORE_METADATA_AVAILABLE: return "NO_RESTORE_METADATA_AVAILABLE"; case BackupManagerMonitor.LOG_EVENT_ID_NO_PM_METADATA_RECEIVED: return "NO_PM_METADATA_RECEIVED"; case BackupManagerMonitor.LOG_EVENT_ID_PM_AGENT_HAS_NO_METADATA: return "PM_AGENT_HAS_NO_METADATA"; case BackupManagerMonitor.LOG_EVENT_ID_LOST_TRANSPORT: return "LOST_TRANSPORT"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_NOT_PRESENT: return "PACKAGE_NOT_PRESENT"; case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_VERSION_HIGHER: return "RESTORE_VERSION_HIGHER"; case BackupManagerMonitor.LOG_EVENT_ID_APP_HAS_NO_AGENT: return "APP_HAS_NO_AGENT"; case BackupManagerMonitor.LOG_EVENT_ID_SIGNATURE_MISMATCH: return "SIGNATURE_MISMATCH"; case BackupManagerMonitor.LOG_EVENT_ID_CANT_FIND_AGENT: return "CANT_FIND_AGENT"; case BackupManagerMonitor.LOG_EVENT_ID_KEY_VALUE_RESTORE_TIMEOUT: return "KEY_VALUE_RESTORE_TIMEOUT"; case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_ANY_VERSION: return "RESTORE_ANY_VERSION"; case BackupManagerMonitor.LOG_EVENT_ID_VERSIONS_MATCH: return "VERSIONS_MATCH"; case BackupManagerMonitor.LOG_EVENT_ID_VERSION_OF_BACKUP_OLDER: return "VERSION_OF_BACKUP_OLDER"; case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE_SIGNATURE_MISMATCH: return "FULL_RESTORE_SIGNATURE_MISMATCH"; case BackupManagerMonitor.LOG_EVENT_ID_SYSTEM_APP_NO_AGENT: return "SYSTEM_APP_NO_AGENT"; case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE_ALLOW_BACKUP_FALSE: return "FULL_RESTORE_ALLOW_BACKUP_FALSE"; case BackupManagerMonitor.LOG_EVENT_ID_APK_NOT_INSTALLED: return "APK_NOT_INSTALLED"; case BackupManagerMonitor.LOG_EVENT_ID_CANNOT_RESTORE_WITHOUT_APK: return "CANNOT_RESTORE_WITHOUT_APK"; case BackupManagerMonitor.LOG_EVENT_ID_MISSING_SIGNATURE: return "MISSING_SIGNATURE"; case BackupManagerMonitor.LOG_EVENT_ID_EXPECTED_DIFFERENT_PACKAGE: return "EXPECTED_DIFFERENT_PACKAGE"; case BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_VERSION: return "UNKNOWN_VERSION"; case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE_TIMEOUT: return "FULL_RESTORE_TIMEOUT"; case BackupManagerMonitor.LOG_EVENT_ID_CORRUPT_MANIFEST: return "CORRUPT_MANIFEST"; case BackupManagerMonitor.LOG_EVENT_ID_WIDGET_METADATA_MISMATCH: return "WIDGET_METADATA_MISMATCH"; case BackupManagerMonitor.LOG_EVENT_ID_WIDGET_UNKNOWN_VERSION: return "WIDGET_UNKNOWN_VERSION"; case BackupManagerMonitor.LOG_EVENT_ID_NO_PACKAGES: return "NO_PACKAGES"; case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL: return "TRANSPORT_IS_NULL"; default: return "UNKNOWN_ID"; } } @IntDef({Monitor.OFF, Monitor.NORMAL, Monitor.VERBOSE}) @Retention(RetentionPolicy.SOURCE) private @interface Monitor { int OFF = 0; int NORMAL = 1; int VERBOSE = 2; } } Loading
cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +185 −11 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.commands.bmgr; import android.annotation.IntDef; import android.app.backup.BackupManager; import android.app.backup.BackupManagerMonitor; import android.app.backup.BackupProgress; import android.app.backup.BackupTransport; import android.app.backup.IBackupManager; import android.app.backup.IBackupManagerMonitor; import android.app.backup.IBackupObserver; import android.app.backup.IRestoreObserver; import android.app.backup.IRestoreSession; Loading @@ -28,6 +31,7 @@ import android.app.backup.RestoreSet; import android.content.ComponentName; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; Loading @@ -36,10 +40,13 @@ import android.util.ArraySet; import com.android.internal.annotations.GuardedBy; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.CountDownLatch; public final class Bmgr { Loading Loading @@ -247,7 +254,7 @@ public final class Bmgr { } // IBackupObserver generically usable for any backup/init operation abstract class Observer extends IBackupObserver.Stub { private static abstract class Observer extends IBackupObserver.Stub { private final Object trigger = new Object(); @GuardedBy("trigger") Loading Loading @@ -295,7 +302,7 @@ public final class Bmgr { } } class BackupObserver extends Observer { private static class BackupObserver extends Observer { @Override public void onUpdate(String currentPackage, BackupProgress backupProgress) { super.onUpdate(currentPackage, backupProgress); Loading Loading @@ -347,7 +354,7 @@ public final class Bmgr { } } private void backupNowAllPackages(boolean nonIncrementalBackup) { private void backupNowAllPackages(boolean nonIncrementalBackup, @Monitor int monitorState) { int userId = UserHandle.USER_SYSTEM; IPackageManager mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); Loading @@ -372,20 +379,27 @@ public final class Bmgr { System.err.println(e.toString()); System.err.println(BMGR_NOT_RUNNING_ERR); } backupNowPackages(Arrays.asList(filteredPackages), nonIncrementalBackup); backupNowPackages(Arrays.asList(filteredPackages), nonIncrementalBackup, monitorState); } } private void backupNowPackages(List<String> packages, boolean nonIncrementalBackup) { private void backupNowPackages( List<String> packages, boolean nonIncrementalBackup, @Monitor int monitorState) { int flags = 0; if (nonIncrementalBackup) { flags |= BackupManager.FLAG_NON_INCREMENTAL_BACKUP; } try { BackupObserver observer = new BackupObserver(); // TODO: implement monitor here? int err = mBmgr.requestBackup(packages.toArray(new String[packages.size()]), observer, null, flags); BackupMonitor monitor = (monitorState != Monitor.OFF) ? new BackupMonitor(monitorState == Monitor.VERBOSE) : null; int err = mBmgr.requestBackup( packages.toArray(new String[packages.size()]), observer, monitor, flags); if (err == 0) { // Off and running -- wait for the backup to complete observer.waitForCompletion(); Loading @@ -402,6 +416,7 @@ public final class Bmgr { String pkg; boolean backupAll = false; boolean nonIncrementalBackup = false; @Monitor int monitor = Monitor.OFF; ArrayList<String> allPkgs = new ArrayList<String>(); while ((pkg = nextArg()) != null) { if (pkg.equals("--all")) { Loading @@ -410,6 +425,10 @@ public final class Bmgr { nonIncrementalBackup = true; } else if (pkg.equals("--incremental")) { nonIncrementalBackup = false; } else if (pkg.equals("--monitor")) { monitor = Monitor.NORMAL; } else if (pkg.equals("--monitor-verbose")) { monitor = Monitor.VERBOSE; } else { if (!allPkgs.contains(pkg)) { allPkgs.add(pkg); Loading @@ -420,14 +439,14 @@ public final class Bmgr { if (allPkgs.size() == 0) { System.out.println("Running " + (nonIncrementalBackup ? "non-" : "") + "incremental backup for all packages."); backupNowAllPackages(nonIncrementalBackup); backupNowAllPackages(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); backupNowPackages(allPkgs, nonIncrementalBackup, monitor); } else { System.err.println("Provide '--all' flag or list of packages."); } Loading Loading @@ -824,7 +843,7 @@ public final class Bmgr { System.err.println(" bmgr run"); System.err.println(" bmgr wipe TRANSPORT PACKAGE"); System.err.println(" bmgr fullbackup PACKAGE..."); System.err.println(" bmgr backupnow --all|PACKAGE..."); System.err.println(" bmgr backupnow [--monitor|--monitor-verbose] --all|PACKAGE..."); System.err.println(" bmgr cancel backups"); System.err.println(""); System.err.println("The 'backup' command schedules a backup pass for the named package."); Loading Loading @@ -878,9 +897,164 @@ public final class Bmgr { System.err.println(""); System.err.println("The 'backupnow' command runs an immediate backup for one or more packages."); System.err.println(" --all flag runs backup for all eligible packages."); System.err.println(" --monitor flag prints monitor events."); System.err.println(" --monitor-verbose flag prints monitor events with all keys."); System.err.println("For each package it will run key/value or full data backup "); System.err.println("depending on the package's manifest declarations."); System.err.println("The data is sent via the currently active transport."); System.err.println("The 'cancel backups' command cancels all running backups."); } private static class BackupMonitor extends IBackupManagerMonitor.Stub { private final boolean mVerbose; private BackupMonitor(boolean verbose) { mVerbose = verbose; } @Override public void onEvent(Bundle event) throws RemoteException { StringBuilder out = new StringBuilder(); int id = event.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_ID); int category = event.getInt(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY); out.append("=> Event{").append(eventCategoryToString(category)); out.append(" / ").append(eventIdToString(id)); String packageName = event.getString(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME); if (packageName != null) { out.append(" : package = ").append(packageName); if (event.containsKey(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION)) { long version = event.getLong( BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION); out.append("(v").append(version).append(")"); } } if (mVerbose) { Set<String> remainingKeys = new ArraySet<>(event.keySet()); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_ID); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_VERSION); if (!remainingKeys.isEmpty()) { out.append(", other keys ="); for (String key : remainingKeys) { out.append(" ").append(key); } } } out.append("}"); System.out.println(out.toString()); } } private static String eventCategoryToString(int eventCategory) { switch (eventCategory) { case BackupManagerMonitor.LOG_EVENT_CATEGORY_TRANSPORT: return "TRANSPORT"; case BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT: return "AGENT"; case BackupManagerMonitor.LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY: return "BACKUP_MANAGER_POLICY"; default: return "UNKNOWN_CATEGORY"; } } private static String eventIdToString(int eventId) { switch (eventId) { case BackupManagerMonitor.LOG_EVENT_ID_FULL_BACKUP_CANCEL: return "FULL_BACKUP_CANCEL"; case BackupManagerMonitor.LOG_EVENT_ID_ILLEGAL_KEY: return "ILLEGAL_KEY"; case BackupManagerMonitor.LOG_EVENT_ID_NO_DATA_TO_SEND: return "NO_DATA_TO_SEND"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_INELIGIBLE: return "PACKAGE_INELIGIBLE"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_KEY_VALUE_PARTICIPANT: return "PACKAGE_KEY_VALUE_PARTICIPANT"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_STOPPED: return "PACKAGE_STOPPED"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_NOT_FOUND: return "PACKAGE_NOT_FOUND"; case BackupManagerMonitor.LOG_EVENT_ID_BACKUP_DISABLED: return "BACKUP_DISABLED"; case BackupManagerMonitor.LOG_EVENT_ID_DEVICE_NOT_PROVISIONED: return "DEVICE_NOT_PROVISIONED"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_TRANSPORT_NOT_PRESENT: return "PACKAGE_TRANSPORT_NOT_PRESENT"; case BackupManagerMonitor.LOG_EVENT_ID_ERROR_PREFLIGHT: return "ERROR_PREFLIGHT"; case BackupManagerMonitor.LOG_EVENT_ID_QUOTA_HIT_PREFLIGHT: return "QUOTA_HIT_PREFLIGHT"; case BackupManagerMonitor.LOG_EVENT_ID_EXCEPTION_FULL_BACKUP: return "EXCEPTION_FULL_BACKUP"; case BackupManagerMonitor.LOG_EVENT_ID_KEY_VALUE_BACKUP_CANCEL: return "KEY_VALUE_BACKUP_CANCEL"; case BackupManagerMonitor.LOG_EVENT_ID_NO_RESTORE_METADATA_AVAILABLE: return "NO_RESTORE_METADATA_AVAILABLE"; case BackupManagerMonitor.LOG_EVENT_ID_NO_PM_METADATA_RECEIVED: return "NO_PM_METADATA_RECEIVED"; case BackupManagerMonitor.LOG_EVENT_ID_PM_AGENT_HAS_NO_METADATA: return "PM_AGENT_HAS_NO_METADATA"; case BackupManagerMonitor.LOG_EVENT_ID_LOST_TRANSPORT: return "LOST_TRANSPORT"; case BackupManagerMonitor.LOG_EVENT_ID_PACKAGE_NOT_PRESENT: return "PACKAGE_NOT_PRESENT"; case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_VERSION_HIGHER: return "RESTORE_VERSION_HIGHER"; case BackupManagerMonitor.LOG_EVENT_ID_APP_HAS_NO_AGENT: return "APP_HAS_NO_AGENT"; case BackupManagerMonitor.LOG_EVENT_ID_SIGNATURE_MISMATCH: return "SIGNATURE_MISMATCH"; case BackupManagerMonitor.LOG_EVENT_ID_CANT_FIND_AGENT: return "CANT_FIND_AGENT"; case BackupManagerMonitor.LOG_EVENT_ID_KEY_VALUE_RESTORE_TIMEOUT: return "KEY_VALUE_RESTORE_TIMEOUT"; case BackupManagerMonitor.LOG_EVENT_ID_RESTORE_ANY_VERSION: return "RESTORE_ANY_VERSION"; case BackupManagerMonitor.LOG_EVENT_ID_VERSIONS_MATCH: return "VERSIONS_MATCH"; case BackupManagerMonitor.LOG_EVENT_ID_VERSION_OF_BACKUP_OLDER: return "VERSION_OF_BACKUP_OLDER"; case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE_SIGNATURE_MISMATCH: return "FULL_RESTORE_SIGNATURE_MISMATCH"; case BackupManagerMonitor.LOG_EVENT_ID_SYSTEM_APP_NO_AGENT: return "SYSTEM_APP_NO_AGENT"; case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE_ALLOW_BACKUP_FALSE: return "FULL_RESTORE_ALLOW_BACKUP_FALSE"; case BackupManagerMonitor.LOG_EVENT_ID_APK_NOT_INSTALLED: return "APK_NOT_INSTALLED"; case BackupManagerMonitor.LOG_EVENT_ID_CANNOT_RESTORE_WITHOUT_APK: return "CANNOT_RESTORE_WITHOUT_APK"; case BackupManagerMonitor.LOG_EVENT_ID_MISSING_SIGNATURE: return "MISSING_SIGNATURE"; case BackupManagerMonitor.LOG_EVENT_ID_EXPECTED_DIFFERENT_PACKAGE: return "EXPECTED_DIFFERENT_PACKAGE"; case BackupManagerMonitor.LOG_EVENT_ID_UNKNOWN_VERSION: return "UNKNOWN_VERSION"; case BackupManagerMonitor.LOG_EVENT_ID_FULL_RESTORE_TIMEOUT: return "FULL_RESTORE_TIMEOUT"; case BackupManagerMonitor.LOG_EVENT_ID_CORRUPT_MANIFEST: return "CORRUPT_MANIFEST"; case BackupManagerMonitor.LOG_EVENT_ID_WIDGET_METADATA_MISMATCH: return "WIDGET_METADATA_MISMATCH"; case BackupManagerMonitor.LOG_EVENT_ID_WIDGET_UNKNOWN_VERSION: return "WIDGET_UNKNOWN_VERSION"; case BackupManagerMonitor.LOG_EVENT_ID_NO_PACKAGES: return "NO_PACKAGES"; case BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL: return "TRANSPORT_IS_NULL"; default: return "UNKNOWN_ID"; } } @IntDef({Monitor.OFF, Monitor.NORMAL, Monitor.VERBOSE}) @Retention(RetentionPolicy.SOURCE) private @interface Monitor { int OFF = 0; int NORMAL = 1; int VERBOSE = 2; } }