From 9d6ca3d6136d9ee3bd903a3030f74ddc60426044 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sun, 2 Jan 2022 18:57:13 +0100 Subject: [PATCH] Add mechanism to populate datastore with default data --- .../mm20/launcher2/preferences/DataStore.kt | 18 +++++++++++-- .../de/mm20/launcher2/preferences/Defaults.kt | 20 +++++++++++++++ .../migrations/FactorySettingsMigration.kt | 25 +++++++++++++++++++ preferences/src/main/proto/settings.proto | 9 ++++--- 4 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt create mode 100644 preferences/src/main/java/de/mm20/launcher2/preferences/migrations/FactorySettingsMigration.kt diff --git a/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt b/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt index d460449b..6f9ceee0 100644 --- a/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt +++ b/preferences/src/main/java/de/mm20/launcher2/preferences/DataStore.kt @@ -1,12 +1,26 @@ package de.mm20.launcher2.preferences import android.content.Context +import android.util.Log import androidx.datastore.core.DataStore +import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler import androidx.datastore.dataStore +import de.mm20.launcher2.crashreporter.CrashReporter +import de.mm20.launcher2.preferences.migrations.FactorySettingsMigration typealias LauncherDataStore = DataStore val Context.dataStore: LauncherDataStore by dataStore( fileName = "settings.pb", - serializer = SettingsSerializer -) \ No newline at end of file + serializer = SettingsSerializer, + produceMigrations = { + listOf(FactorySettingsMigration(it)) + }, + corruptionHandler = ReplaceFileCorruptionHandler { + CrashReporter.logException(it) + Log.d("MM20", "corruptionHandler") + Settings.getDefaultInstance() + } +) + +internal const val SchemaVersion = 1 \ No newline at end of file diff --git a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt new file mode 100644 index 00000000..f243a087 --- /dev/null +++ b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt @@ -0,0 +1,20 @@ +package de.mm20.launcher2.preferences + +import android.content.Context + +fun createFactorySettings(context: Context): Settings { + return Settings.newBuilder() + .setAppearance(Settings.AppearanceSettings + .newBuilder() + .setTheme(Settings.AppearanceSettings.Theme.System) + .setColorScheme(Settings.AppearanceSettings.ColorScheme.Default) + .build() + ) + .setWeather(Settings.WeatherSettings + .newBuilder() + .setProvider(Settings.WeatherSettings.WeatherProvider.MetNo) + .setImperialUnits(context.resources.getBoolean(R.bool.default_imperialUnits)) + .build() + ) + .build() +} \ No newline at end of file diff --git a/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/FactorySettingsMigration.kt b/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/FactorySettingsMigration.kt new file mode 100644 index 00000000..a5d63e72 --- /dev/null +++ b/preferences/src/main/java/de/mm20/launcher2/preferences/migrations/FactorySettingsMigration.kt @@ -0,0 +1,25 @@ +package de.mm20.launcher2.preferences.migrations + +import android.content.Context +import android.util.Log +import androidx.datastore.core.DataMigration +import de.mm20.launcher2.preferences.SchemaVersion +import de.mm20.launcher2.preferences.Settings +import de.mm20.launcher2.preferences.createFactorySettings + +class FactorySettingsMigration(private val context: Context): DataMigration { + override suspend fun cleanUp() { + + } + + override suspend fun migrate(currentData: Settings): Settings { + Log.d("MM20", "Initializing user settings…") + Log.d("MM20", "Done") + val defaults = createFactorySettings(context) + return defaults.toBuilder().setVersion(SchemaVersion).build() + } + + override suspend fun shouldMigrate(currentData: Settings): Boolean { + return currentData.version == 0 + } +} \ No newline at end of file diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto index fba61172..52271239 100644 --- a/preferences/src/main/proto/settings.proto +++ b/preferences/src/main/proto/settings.proto @@ -4,6 +4,7 @@ option java_package = "de.mm20.launcher2.preferences"; option java_multiple_files = true; message Settings { + uint32 version = 1; message AppearanceSettings { enum Theme { Light = 0; @@ -42,7 +43,7 @@ message Settings { } ClockStyle clock_style = 8; } - AppearanceSettings appearance = 1; + AppearanceSettings appearance = 2; message SearchSettings { bool show_favorites = 1; @@ -69,7 +70,7 @@ message Settings { bool gdrive = 18; bool gdrive_mobile_data = 19; } - SearchSettings search = 2; + SearchSettings search = 3; message BadgeSettings { bool notification_badges = 1; @@ -78,7 +79,7 @@ message Settings { bool profile_badges = 4; bool shortcut_badges = 5; } - BadgeSettings badges = 3; + BadgeSettings badges = 4; message WeatherSettings { enum WeatherProvider { @@ -90,6 +91,6 @@ message Settings { WeatherProvider provider = 1; bool imperial_units = 2; } - WeatherSettings weather = 4; + WeatherSettings weather = 5; } \ No newline at end of file