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
|
package de.mm20.launcher2.preferences
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
import androidx.datastore.core.DataStore
|
import androidx.datastore.core.DataStore
|
||||||
|
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
|
||||||
import androidx.datastore.dataStore
|
import androidx.datastore.dataStore
|
||||||
|
import de.mm20.launcher2.crashreporter.CrashReporter
|
||||||
|
import de.mm20.launcher2.preferences.migrations.FactorySettingsMigration
|
||||||
|
|
||||||
typealias LauncherDataStore = DataStore<Settings>
|
typealias LauncherDataStore = DataStore<Settings>
|
||||||
|
|
||||||
val Context.dataStore: LauncherDataStore by dataStore(
|
val Context.dataStore: LauncherDataStore by dataStore(
|
||||||
fileName = "settings.pb",
|
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;
|
option java_multiple_files = true;
|
||||||
|
|
||||||
message Settings {
|
message Settings {
|
||||||
|
uint32 version = 1;
|
||||||
message AppearanceSettings {
|
message AppearanceSettings {
|
||||||
enum Theme {
|
enum Theme {
|
||||||
Light = 0;
|
Light = 0;
|
||||||
@ -42,7 +43,7 @@ message Settings {
|
|||||||
}
|
}
|
||||||
ClockStyle clock_style = 8;
|
ClockStyle clock_style = 8;
|
||||||
}
|
}
|
||||||
AppearanceSettings appearance = 1;
|
AppearanceSettings appearance = 2;
|
||||||
|
|
||||||
message SearchSettings {
|
message SearchSettings {
|
||||||
bool show_favorites = 1;
|
bool show_favorites = 1;
|
||||||
@ -69,7 +70,7 @@ message Settings {
|
|||||||
bool gdrive = 18;
|
bool gdrive = 18;
|
||||||
bool gdrive_mobile_data = 19;
|
bool gdrive_mobile_data = 19;
|
||||||
}
|
}
|
||||||
SearchSettings search = 2;
|
SearchSettings search = 3;
|
||||||
|
|
||||||
message BadgeSettings {
|
message BadgeSettings {
|
||||||
bool notification_badges = 1;
|
bool notification_badges = 1;
|
||||||
@ -78,7 +79,7 @@ message Settings {
|
|||||||
bool profile_badges = 4;
|
bool profile_badges = 4;
|
||||||
bool shortcut_badges = 5;
|
bool shortcut_badges = 5;
|
||||||
}
|
}
|
||||||
BadgeSettings badges = 3;
|
BadgeSettings badges = 4;
|
||||||
|
|
||||||
message WeatherSettings {
|
message WeatherSettings {
|
||||||
enum WeatherProvider {
|
enum WeatherProvider {
|
||||||
@ -90,6 +91,6 @@ message Settings {
|
|||||||
WeatherProvider provider = 1;
|
WeatherProvider provider = 1;
|
||||||
bool imperial_units = 2;
|
bool imperial_units = 2;
|
||||||
}
|
}
|
||||||
WeatherSettings weather = 4;
|
WeatherSettings weather = 5;
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user