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

Commit 8a5d660c authored by Patrick Baumann's avatar Patrick Baumann Committed by Android (Google) Code Review
Browse files

Merge "Fix the overrides file corruption due to shutdown"

parents 5c846c1d 7b720288
Loading
Loading
Loading
Loading
+39 −7
Original line number Diff line number Diff line
@@ -81,8 +81,11 @@ final class CompatConfig {
    private final OverrideValidatorImpl mOverrideValidator;
    private final AndroidBuildClassifier mAndroidBuildClassifier;
    private Context mContext;
    @GuardedBy("mOverridesFile")
    private final Object mOverridesFileLock = new Object();
    @GuardedBy("mOverridesFileLock")
    private File mOverridesFile;
    @GuardedBy("mOverridesFileLock")
    private File mBackupOverridesFile;

    @VisibleForTesting
    CompatConfig(AndroidBuildClassifier androidBuildClassifier, Context context) {
@@ -550,8 +553,15 @@ final class CompatConfig {

        loadOverrides(staticOverridesFile);

        synchronized (mOverridesFileLock) {
            mOverridesFile = dynamicOverridesFile;
        loadOverrides(dynamicOverridesFile);
            mBackupOverridesFile = makeBackupFile(dynamicOverridesFile);
            if (mBackupOverridesFile.exists()) {
                mOverridesFile.delete();
                mBackupOverridesFile.renameTo(mOverridesFile);
            }
            loadOverrides(mOverridesFile);
        }

        if (staticOverridesFile.exists()) {
            // Only save overrides if there is a static overrides file.
@@ -559,6 +569,10 @@ final class CompatConfig {
        }
    }

    private File makeBackupFile(File overridesFile) {
        return new File(overridesFile.getPath() + ".bak");
    }

    private void loadOverrides(File overridesFile) {
        if (!overridesFile.exists()) {
            // Overrides file doesn't exist.
@@ -591,10 +605,11 @@ final class CompatConfig {
     * Persist compat framework overrides to /data/misc/appcompat/compat_framework_overrides.xml
     */
    void saveOverrides() {
        if (mOverridesFile == null) {
        synchronized (mOverridesFileLock) {
            if (mOverridesFile == null || mBackupOverridesFile == null) {
                return;
            }
        synchronized (mOverridesFile) {

            Overrides overrides = new Overrides();
            List<ChangeOverrides> changeOverridesList = overrides.getChangeOverrides();
            for (CompatChange c : mChanges.values()) {
@@ -603,6 +618,20 @@ final class CompatConfig {
                    changeOverridesList.add(changeOverrides);
                }
            }

            // Rename the file to the backup.
            if (mOverridesFile.exists()) {
                if (mBackupOverridesFile.exists()) {
                    mOverridesFile.delete();
                } else {
                    if (!mOverridesFile.renameTo(mBackupOverridesFile)) {
                        Slog.e(TAG, "Couldn't rename file " + mOverridesFile
                                + " to " + mBackupOverridesFile);
                        return;
                    }
                }
            }

            // Create the file if it doesn't already exist
            try {
                mOverridesFile.createNewFile();
@@ -616,6 +645,9 @@ final class CompatConfig {
            } catch (IOException e) {
                Slog.e(TAG, e.toString());
            }

            // Remove the backup if the write succeeds.
            mBackupOverridesFile.delete();
        }
    }