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

Commit 13701559 authored by Svet Ganov's avatar Svet Ganov
Browse files

Ensure default and system set bits grandfathered

We added the notion of a default and whether the system set
the setting. This is used for resetting the internal state and we need
to make sure this value is updated for the existing settings, otherwise
we would delete system set settings while they should stay unmodified.

Test: manual

bug:35317326

Change-Id: Iaffde2e7acab53653fd38e669a644e654cc7cd7d
parent 3b264fa2
Loading
Loading
Loading
Loading
+38 −1
Original line number Original line Diff line number Diff line
@@ -2737,7 +2737,7 @@ public class SettingsProvider extends ContentProvider {
        }
        }


        private final class UpgradeController {
        private final class UpgradeController {
            private static final int SETTINGS_VERSION = 141;
            private static final int SETTINGS_VERSION = 142;


            private final int mUserId;
            private final int mUserId;


@@ -3262,6 +3262,26 @@ public class SettingsProvider extends ContentProvider {
                    currentVersion = 141;
                    currentVersion = 141;
                }
                }


                if (currentVersion == 141) {
                    // Version 141: We added the notion of a default and whether the system set
                    // the setting. This is used for resetting the internal state and we need
                    // to make sure this value is updated for the existing settings, otherwise
                    // we would delete system set settings while they should stay unmodified.
                    SettingsState globalSettings = getGlobalSettingsLocked();
                    ensureLegacyDefaultValueAndSystemSetUpdatedLocked(globalSettings);
                    globalSettings.persistSyncLocked();

                    SettingsState secureSettings = getSecureSettingsLocked(mUserId);
                    ensureLegacyDefaultValueAndSystemSetUpdatedLocked(secureSettings);
                    secureSettings.persistSyncLocked();

                    SettingsState systemSettings = getSystemSettingsLocked(mUserId);
                    ensureLegacyDefaultValueAndSystemSetUpdatedLocked(systemSettings);
                    systemSettings.persistSyncLocked();

                    currentVersion = 142;
                }

                if (currentVersion != newVersion) {
                if (currentVersion != newVersion) {
                    Slog.wtf("SettingsProvider", "warning: upgrading settings database to version "
                    Slog.wtf("SettingsProvider", "warning: upgrading settings database to version "
                            + newVersion + " left it at "
                            + newVersion + " left it at "
@@ -3277,5 +3297,22 @@ public class SettingsProvider extends ContentProvider {
                return currentVersion;
                return currentVersion;
            }
            }
        }
        }

        private void ensureLegacyDefaultValueAndSystemSetUpdatedLocked(SettingsState settings) {
            List<String> names = settings.getSettingNamesLocked();
            final int nameCount = names.size();
            for (int i = 0; i < nameCount; i++) {
                String name = names.get(i);
                Setting setting = settings.getSettingLocked(name);
                if (setting.getDefaultValue() == null) {
                    boolean systemSet = SettingsState.isSystemPackage(getContext(),
                            setting.getPackageName());
                    if (systemSet) {
                        settings.insertSettingLocked(name, setting.getValue(),
                                setting.getTag(), true, setting.getPackageName());
                    }
                }
            }
        }
    }
    }
}
}