Loading services/core/java/com/android/server/compat/CompatConfig.java +39 −7 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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. Loading @@ -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. Loading Loading @@ -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()) { Loading @@ -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(); Loading @@ -616,6 +645,9 @@ final class CompatConfig { } catch (IOException e) { Slog.e(TAG, e.toString()); } // Remove the backup if the write succeeds. mBackupOverridesFile.delete(); } } Loading Loading
services/core/java/com/android/server/compat/CompatConfig.java +39 −7 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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. Loading @@ -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. Loading Loading @@ -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()) { Loading @@ -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(); Loading @@ -616,6 +645,9 @@ final class CompatConfig { } catch (IOException e) { Slog.e(TAG, e.toString()); } // Remove the backup if the write succeeds. mBackupOverridesFile.delete(); } } Loading