summaryrefslogtreecommitdiffstats
path: root/core/java/android/app/backup/FullBackup.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/app/backup/FullBackup.java')
-rw-r--r--core/java/android/app/backup/FullBackup.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/app/backup/FullBackup.java b/core/java/android/app/backup/FullBackup.java
index 7718a36..0335e28 100644
--- a/core/java/android/app/backup/FullBackup.java
+++ b/core/java/android/app/backup/FullBackup.java
@@ -21,6 +21,8 @@ import android.content.pm.PackageManager;
import android.content.res.XmlResourceParser;
import android.os.*;
import android.os.Process;
+import android.os.storage.StorageManager;
+import android.os.storage.StorageVolume;
import android.system.ErrnoException;
import android.system.Os;
import android.text.TextUtils;
@@ -207,6 +209,8 @@ public class FullBackup {
final int mFullBackupContent;
final PackageManager mPackageManager;
+ final StorageManager mStorageManager;
+ final StorageVolume[] mVolumes;
final String mPackageName;
/**
@@ -230,6 +234,15 @@ public class FullBackup {
} else {
return null;
}
+ } else if (domainToken.startsWith(FullBackup.SHARED_PREFIX)) {
+ int slash = domainToken.indexOf('/');
+ int i = Integer.parseInt(domainToken.substring(slash + 1));
+
+ if (i < mVolumes.length) {
+ return mVolumes[i].getPath();
+ } else {
+ Log.e(TAG, "Could not find volume for " + domainToken);
+ }
} else if (domainToken.equals(FullBackup.NO_BACKUP_TREE_TOKEN)) {
return NOBACKUP_DIR.getCanonicalPath();
}
@@ -263,6 +276,8 @@ public class FullBackup {
SHAREDPREF_DIR = context.getSharedPrefsFile("foo").getParentFile();
CACHE_DIR = context.getCacheDir();
NOBACKUP_DIR = context.getNoBackupFilesDir();
+ mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
+ mVolumes = mStorageManager.getVolumeList();
if (android.os.Process.myUid() != Process.SYSTEM_UID) {
EXTERNAL_DIR = context.getExternalFilesDir(null);
} else {