Add mechanism to populate datastore with default data

This commit is contained in:
MM20 2022-01-02 18:57:13 +01:00
parent 8969d77231
commit 9d6ca3d613
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
4 changed files with 66 additions and 6 deletions

View File

@ -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<Settings>
val Context.dataStore: LauncherDataStore by dataStore(
fileName = "settings.pb",
serializer = SettingsSerializer
)
serializer = SettingsSerializer,
produceMigrations = {
listOf(FactorySettingsMigration(it))
},
corruptionHandler = ReplaceFileCorruptionHandler {
CrashReporter.logException(it)
Log.d("MM20", "corruptionHandler")
Settings.getDefaultInstance()
}
)
internal const val SchemaVersion = 1

View File

@ -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()
}

View File

@ -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<Settings> {
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
}
}

View File

@ -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;
}