Merge "Handle an edge case that can reset settings provider data" into oc-dr1-dev
am: 6b4f0bb6fe
Change-Id: Id069c0fd99a3a1b9ebd429c7f44542a2ae068926
This commit is contained in:
@@ -201,6 +201,15 @@ public class AtomicFile {
|
||||
return new FileInputStream(mBaseName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @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}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user