Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc923bbc authored by Amith Yamasani's avatar Amith Yamasani Committed by android-build-merger
Browse files

Merge "Handle an edge case that can reset settings provider data" into oc-dr1-dev

am: 6b4f0bb6

Change-Id: I9c71705f57c65fc99da831f9ee382168f131937e
parents 1e43a74a 6b4f0bb6
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -201,6 +201,15 @@ public class AtomicFile {
        return new FileInputStream(mBaseName);
        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.
     * Gets the last modified time of the atomic file.
     * {@hide}
     * {@hide}
+2 −2
Original line number Original line Diff line number Diff line
@@ -2594,7 +2594,7 @@ public class SettingsProvider extends ContentProvider {
            synchronized (mLock) {
            synchronized (mLock) {
                final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
                final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
                File globalFile = getSettingsFile(key);
                File globalFile = getSettingsFile(key);
                if (globalFile.exists()) {
                if (SettingsState.stateFileExists(globalFile)) {
                    return;
                    return;
                }
                }


@@ -2631,7 +2631,7 @@ public class SettingsProvider extends ContentProvider {
            // Every user has secure settings and if no file we need to migrate.
            // Every user has secure settings and if no file we need to migrate.
            final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId);
            final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId);
            File secureFile = getSettingsFile(secureKey);
            File secureFile = getSettingsFile(secureKey);
            if (secureFile.exists()) {
            if (SettingsState.stateFileExists(secureFile)) {
                return;
                return;
            }
            }


+12 −8
Original line number Original line Diff line number Diff line
@@ -689,17 +689,11 @@ final class SettingsState {


    private void readStateSyncLocked() {
    private void readStateSyncLocked() {
        FileInputStream in;
        FileInputStream in;
        if (!mStatePersistFile.exists()) {
            Slog.i(LOG_TAG, "No settings state " + mStatePersistFile);
            addHistoricalOperationLocked(HISTORICAL_OPERATION_INITIALIZE, null);
            return;
        }
        try {
        try {
            in = new AtomicFile(mStatePersistFile).openRead();
            in = new AtomicFile(mStatePersistFile).openRead();
        } catch (FileNotFoundException fnfe) {
        } catch (FileNotFoundException fnfe) {
            String message = "No settings state " + mStatePersistFile;
            Slog.i(LOG_TAG, "No settings state " + mStatePersistFile);
            Slog.wtf(LOG_TAG, message);
            addHistoricalOperationLocked(HISTORICAL_OPERATION_INITIALIZE, null);
            Slog.i(LOG_TAG, message);
            return;
            return;
        }
        }
        try {
        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)
    private void parseStateLocked(XmlPullParser parser)
            throws IOException, XmlPullParserException {
            throws IOException, XmlPullParserException {
        final int outerDepth = parser.getDepth();
        final int outerDepth = parser.getDepth();