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

Commit 6b4f0bb6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents f8469ccf 74bf71b2
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
@@ -2597,7 +2597,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;
                }
                }


@@ -2634,7 +2634,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();