Add mechanism to populate datastore with default data
This commit is contained in:
parent
8969d77231
commit
9d6ca3d613
@ -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
|
||||
@ -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()
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user