APIs to obtain SharedPreferences paths.
Needed for apps that want to migrate SharedPreferences from CE to DE
storage. Note that a device will only ever enter a CE mode with a
factory reset, so apps should only be using these APIs when they
want to migrate files to a consistent location on non-FBE devices
for simplicity.
Bug: 25503089
Change-Id: Ic846215da1617d116a048e036415ac7ad523b770
diff --git a/api/current.txt b/api/current.txt
index bb6b52c..007ed13 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7823,6 +7823,7 @@
method public abstract android.content.res.Resources getResources();
method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
method public final java.lang.String getString(int);
method public final java.lang.String getString(int, java.lang.Object...);
method public abstract java.lang.Object getSystemService(java.lang.String);
@@ -8007,6 +8008,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -28468,6 +28470,7 @@
method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
method public android.preference.Preference findPreference(java.lang.CharSequence);
method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public static java.lang.String getDefaultSharedPreferencesName(android.content.Context);
method public android.content.SharedPreferences getSharedPreferences();
method public int getSharedPreferencesMode();
method public java.lang.String getSharedPreferencesName();
@@ -36272,6 +36275,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
diff --git a/api/system-current.txt b/api/system-current.txt
index ad722f4..1a05551 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -8068,6 +8068,7 @@
method public abstract android.content.res.Resources getResources();
method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
method public final java.lang.String getString(int);
method public final java.lang.String getString(int, java.lang.Object...);
method public abstract java.lang.Object getSystemService(java.lang.String);
@@ -8261,6 +8262,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -30461,6 +30463,7 @@
method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
method public android.preference.Preference findPreference(java.lang.CharSequence);
method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public static java.lang.String getDefaultSharedPreferencesName(android.content.Context);
method public android.content.SharedPreferences getSharedPreferences();
method public int getSharedPreferencesMode();
method public java.lang.String getSharedPreferencesName();
@@ -38599,6 +38602,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
diff --git a/api/test-current.txt b/api/test-current.txt
index 1cf9a53..7be966e 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -7823,6 +7823,7 @@
method public abstract android.content.res.Resources getResources();
method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
method public final java.lang.String getString(int);
method public final java.lang.String getString(int, java.lang.Object...);
method public abstract java.lang.Object getSystemService(java.lang.String);
@@ -8007,6 +8008,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -28468,6 +28470,7 @@
method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
method public android.preference.Preference findPreference(java.lang.CharSequence);
method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public static java.lang.String getDefaultSharedPreferencesName(android.content.Context);
method public android.content.SharedPreferences getSharedPreferences();
method public int getSharedPreferencesMode();
method public java.lang.String getSharedPreferencesName();
@@ -36274,6 +36277,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 23c4198..a703c53 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -321,11 +321,6 @@
}
@Override
- public File getSharedPrefsFile(String name) {
- return makeFilename(getPreferencesDir(), name + ".xml");
- }
-
- @Override
public SharedPreferences getSharedPreferences(String name, int mode) {
// At least one application in the world actually passes in a null
// name. This happened to work because when we generated the file name
@@ -337,7 +332,7 @@
}
}
- final File file = getSharedPrefsFile(name);
+ final File file = getSharedPreferencesPath(name);
return getSharedPreferences(file, mode);
}
@@ -571,6 +566,11 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ return makeFilename(getPreferencesDir(), name + ".xml");
+ }
+
+ @Override
public String[] fileList() {
final String[] list = getFilesDir().list();
return (list != null) ? list : EMPTY_STRING_ARRAY;
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 6cc5497..4c7e853 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -606,13 +606,13 @@
public abstract String getPackageCodePath();
/**
- * {@hide}
- * Return the full path to the shared prefs file for the given prefs group name.
- *
- * <p>Note: this is not generally useful for applications, since they should
- * not be directly accessing the file system.
+ * @hide
+ * @deprecated use {@link #getSharedPreferencesPath(String)}
*/
- public abstract File getSharedPrefsFile(String name);
+ @Deprecated
+ public File getSharedPrefsFile(String name) {
+ return getSharedPreferencesPath(name);
+ }
/**
* Retrieve and hold the contents of the preferences file 'name', returning
@@ -654,6 +654,7 @@
* @return The single {@link SharedPreferences} instance that can be used
* to retrieve and modify the preference values.
*
+ * @see #getSharedPreferencesPath(String)
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
@@ -739,6 +740,20 @@
public abstract File getFileStreamPath(String name);
/**
+ * Returns the absolute path on the filesystem where a file created with
+ * {@link #getSharedPreferences(String, int)} is stored.
+ * <p>
+ * The returned path may change over time if the calling app is moved to an
+ * adopted storage device, so only relative paths should be persisted.
+ *
+ * @param name The name of the shared preferences for which you would like
+ * to get a path.
+ * @return An absolute path to the given file.
+ * @see #getSharedPreferences(String, int)
+ */
+ public abstract File getSharedPreferencesPath(String name);
+
+ /**
* Returns the absolute path to the directory on the filesystem where files
* created with {@link #openFileOutput} are stored.
* <p>
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index a345aae..f5e9159 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -160,12 +160,6 @@
return mBase.getPackageCodePath();
}
- /** @hide */
- @Override
- public File getSharedPrefsFile(String name) {
- return mBase.getSharedPrefsFile(name);
- }
-
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
@@ -199,6 +193,11 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ return mBase.getSharedPreferencesPath(name);
+ }
+
+ @Override
public String[] fileList() {
return mBase.fileList();
}
diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java
index 4e4b1c9..fda6326 100644
--- a/core/java/android/preference/PreferenceManager.java
+++ b/core/java/android/preference/PreferenceManager.java
@@ -371,7 +371,13 @@
getDefaultSharedPreferencesMode());
}
- private static String getDefaultSharedPreferencesName(Context context) {
+ /**
+ * Returns the name used for storing default shared preferences.
+ *
+ * @see #getDefaultSharedPreferences(Context)
+ * @see Context#getSharedPreferencesPath(String)
+ */
+ public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java
index c967c2b..225edf8 100644
--- a/test-runner/src/android/test/mock/MockContext.java
+++ b/test-runner/src/android/test/mock/MockContext.java
@@ -130,12 +130,6 @@
throw new UnsupportedOperationException();
}
- /** @hide */
- @Override
- public File getSharedPrefsFile(String name) {
- throw new UnsupportedOperationException();
- }
-
@Override
public String getPackageCodePath() {
throw new UnsupportedOperationException();
@@ -172,6 +166,11 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public String[] fileList() {
throw new UnsupportedOperationException();
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index ff15f3b..9214759 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -1365,6 +1365,12 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ // pass
+ return null;
+ }
+
+ @Override
public File getFilesDir() {
// pass
return null;
@@ -1424,12 +1430,6 @@
}
@Override
- public File getSharedPrefsFile(String name) {
- // pass
- return null;
- }
-
- @Override
public SharedPreferences getSharedPreferences(String arg0, int arg1) {
if (mSharedPreferences == null) {
mSharedPreferences = new BridgeSharedPreferences();