Add android.backup.BackupManager
Also tweak the dataChanged() api to have the client supply a package name. We
don't necessarily TRUST this, but we use it to narrow the set of packages requesting
a backup pass, no longer blithely scheduling a pass for all packages associated
with the caller's uid.
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index de14c33..0f95318 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -164,7 +164,7 @@
// ----- IBackupManager binder interface -----
- public void dataChanged() throws RemoteException {
+ public void dataChanged(String packageName) throws RemoteException {
// Record that we need a backup pass for the caller. Since multiple callers
// may share a uid, we need to note all candidates within that uid and schedule
// a backup pass for each of them.
@@ -173,10 +173,14 @@
if (targets != null) {
synchronized (mQueueLock) {
// Note that this client has made data changes that need to be backed up
- // !!! add them to the set of pending packages
for (ServiceInfo service : targets) {
- if (mPendingBackups.add(service)) {
- // !!! TODO: write to the pending-backup journal file in case of crash
+ // validate the caller-supplied package name against the known set of
+ // packages associated with this uid
+ if (service.packageName.equals(packageName)) {
+ // add the caller to the set of pending backups
+ if (mPendingBackups.add(service)) {
+ // !!! TODO: write to the pending-backup journal file in case of crash
+ }
}
}