diff options
| author | 2017-07-21 05:03:15 +0000 | |
|---|---|---|
| committer | 2017-07-21 05:03:15 +0000 | |
| commit | 6b4f0bb6fee89b7df85759389583eeabe6f645c5 (patch) | |
| tree | 18dd1b5ba83f80d4dd3bffb83090621255d39fc9 | |
| parent | f8469ccf17a7ff257c3251af377095d6e004aa6e (diff) | |
| parent | 74bf71b23c5deca47166d6627361f26ee5d62a7c (diff) | |
Merge "Handle an edge case that can reset settings provider data" into oc-dr1-dev
3 files changed, 23 insertions, 10 deletions
diff --git a/core/java/android/util/AtomicFile.java b/core/java/android/util/AtomicFile.java index 2f1abe9a4c8d..0122e49eb462 100644 --- a/core/java/android/util/AtomicFile.java +++ b/core/java/android/util/AtomicFile.java @@ -202,6 +202,15 @@ public class AtomicFile { } /** + * @hide + * Checks if the original or backup file exists. + * @return whether the original or backup file exists. + */ + public boolean exists() { + return mBaseName.exists() || mBackupName.exists(); + } + + /** * Gets the last modified time of the atomic file. * {@hide} * diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index f5d7dd8d9acd..ad2ec0b90135 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -2597,7 +2597,7 @@ public class SettingsProvider extends ContentProvider { synchronized (mLock) { final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM); File globalFile = getSettingsFile(key); - if (globalFile.exists()) { + if (SettingsState.stateFileExists(globalFile)) { return; } @@ -2634,7 +2634,7 @@ public class SettingsProvider extends ContentProvider { // Every user has secure settings and if no file we need to migrate. final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); File secureFile = getSettingsFile(secureKey); - if (secureFile.exists()) { + if (SettingsState.stateFileExists(secureFile)) { return; } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java index 5f4b2391a763..d3ac11a7942e 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -689,17 +689,11 @@ final class SettingsState { private void readStateSyncLocked() { FileInputStream in; - if (!mStatePersistFile.exists()) { - Slog.i(LOG_TAG, "No settings state " + mStatePersistFile); - addHistoricalOperationLocked(HISTORICAL_OPERATION_INITIALIZE, null); - return; - } try { in = new AtomicFile(mStatePersistFile).openRead(); } catch (FileNotFoundException fnfe) { - String message = "No settings state " + mStatePersistFile; - Slog.wtf(LOG_TAG, message); - Slog.i(LOG_TAG, message); + Slog.i(LOG_TAG, "No settings state " + mStatePersistFile); + addHistoricalOperationLocked(HISTORICAL_OPERATION_INITIALIZE, null); return; } try { @@ -715,6 +709,16 @@ final class SettingsState { } } + /** + * Uses AtomicFile to check if the file or its backup exists. + * @param file The file to check for existence + * @return whether the original or backup exist + */ + public static boolean stateFileExists(File file) { + AtomicFile stateFile = new AtomicFile(file); + return stateFile.exists(); + } + private void parseStateLocked(XmlPullParser parser) throws IOException, XmlPullParserException { final int outerDepth = parser.getDepth(); |