Remove legacy data store

This commit is contained in:
MM20 2024-07-27 01:03:19 +02:00
parent 3f31cc130d
commit f635a4dc33
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
37 changed files with 2 additions and 1439 deletions

1
.gitignore vendored
View File

@ -260,6 +260,7 @@ obj/
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/runConfigurations.xml
# OS-specific files
.DS_Store?

View File

@ -2,7 +2,6 @@ package de.mm20.launcher2.ui.base
import androidx.compose.runtime.*
import de.mm20.launcher2.preferences.IconShape
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.ui.CardStyle
import de.mm20.launcher2.preferences.ui.GridSettings
import de.mm20.launcher2.preferences.ui.UiSettings

View File

@ -15,7 +15,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.preferences.GestureAction
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.BottomSheetDialog
import de.mm20.launcher2.ui.component.MissingPermissionBanner

View File

@ -15,7 +15,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.SurfaceShape
import de.mm20.launcher2.preferences.ui.CardStyle
import de.mm20.launcher2.ui.R

View File

@ -29,7 +29,6 @@ import de.mm20.launcher2.icons.LauncherIcon
import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.BaseLayout
import de.mm20.launcher2.preferences.GestureAction
import de.mm20.launcher2.preferences.LegacySettings.LayoutSettings.Layout
import de.mm20.launcher2.search.SavableSearchable
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.common.SearchablePicker

View File

@ -26,7 +26,6 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.pager.HorizontalPagerIndicator
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.SearchBarColors
import de.mm20.launcher2.preferences.SearchBarStyle
import de.mm20.launcher2.preferences.SystemBarColors

View File

@ -13,7 +13,6 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.ScreenOrientation
import de.mm20.launcher2.preferences.SearchBarColors
import de.mm20.launcher2.preferences.SearchBarStyle

View File

@ -10,8 +10,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.core.content.ContextCompat
import androidx.datastore.core.DataStore
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.ui.UiSettings
import de.mm20.launcher2.themes.CorePalette
import de.mm20.launcher2.themes.DefaultDarkColorScheme
@ -22,9 +20,7 @@ import de.mm20.launcher2.themes.Theme
import de.mm20.launcher2.themes.get
import de.mm20.launcher2.themes.merge
import de.mm20.launcher2.ui.locals.LocalWallpaperColors
import kotlinx.coroutines.flow.map
import org.koin.androidx.compose.inject
import org.koin.core.component.inject
@Composable
fun lightColorSchemeOf(theme: Theme): ColorScheme {
@ -113,44 +109,3 @@ fun systemCorePalette(): CorePalette<Int> {
)
}
}
fun CustomColorScheme(colors: LegacySettings.AppearanceSettings.CustomColors.Scheme): ColorScheme {
return ColorScheme(
primary = Color(colors.primary),
onPrimary = Color(colors.onPrimary),
primaryContainer = Color(colors.primaryContainer),
onPrimaryContainer = Color(colors.onPrimaryContainer),
secondary = Color(colors.secondary),
onSecondary = Color(colors.onSecondary),
secondaryContainer = Color(colors.secondaryContainer),
onSecondaryContainer = Color(colors.onSecondaryContainer),
tertiary = Color(colors.tertiary),
onTertiary = Color(colors.onTertiary),
tertiaryContainer = Color(colors.tertiaryContainer),
onTertiaryContainer = Color(colors.onTertiaryContainer),
background = Color(colors.background),
onBackground = Color(colors.onBackground),
surface = Color(colors.surface),
onSurface = Color(colors.onSurface),
surfaceVariant = Color(colors.surfaceVariant),
onSurfaceVariant = Color(colors.onSurfaceVariant),
outline = Color(colors.outline),
inverseSurface = Color(colors.inverseSurface),
inverseOnSurface = Color(colors.inverseOnSurface),
inversePrimary = Color(colors.inversePrimary),
surfaceTint = Color(colors.surfaceTint),
error = Color(colors.error),
onError = Color(colors.onError),
errorContainer = Color(colors.errorContainer),
onErrorContainer = Color(colors.onErrorContainer),
outlineVariant = Color(colors.outlineVariant),
scrim = Color(colors.scrim),
surfaceBright = Color(colors.surfaceBright),
surfaceDim = Color(colors.surfaceDim),
surfaceContainer = Color(colors.surfaceContainer),
surfaceContainerHigh = Color(colors.surfaceContainerHigh),
surfaceContainerHighest = Color(colors.surfaceContainerHighest),
surfaceContainerLow = Color(colors.surfaceContainerLow),
surfaceContainerLowest = Color(colors.surfaceContainerLowest),
)
}

View File

@ -2,7 +2,6 @@ plugins {
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.plugin.serialization) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.protobuf) apply false
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.dokka) apply true

View File

@ -1,9 +1,6 @@
import com.google.protobuf.gradle.*
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.protobuf)
alias(libs.plugins.kotlin.plugin.serialization)
}
@ -37,32 +34,12 @@ android {
namespace = "de.mm20.launcher2.preferences"
}
protobuf {
protoc {
artifact = libs.protobuf.protoc.get().toString()
}
// Generates the java Protobuf-lite code for the Protobufs in this project. See
// https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
// for more information.
generateProtoTasks {
all().forEach { task ->
task.plugins {
create("java") {
option("lite")
}
}
}
}
}
dependencies {
implementation(libs.kotlin.stdlib)
implementation(libs.kotlinx.serialization.json)
implementation(libs.androidx.core)
implementation(libs.androidx.appcompat)
api(libs.androidx.datastore)
api(libs.protobuf.javalite)
implementation(libs.koin.android)
implementation(project(":core:ktx"))

View File

@ -1,221 +0,0 @@
package de.mm20.launcher2.preferences
import android.content.Context
import androidx.core.graphics.blue
import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.LegacySettings.SearchBarSettings.SearchBarColors
import de.mm20.launcher2.preferences.ktx.toSettingsColorsScheme
import scheme.Scheme
import java.util.UUID
fun createFactorySettings(context: Context): LegacySettings {
return LegacySettings.newBuilder()
.setAppearance(
LegacySettings.AppearanceSettings
.newBuilder()
.setTheme(LegacySettings.AppearanceSettings.Theme.System)
.setDimWallpaper(false)
.setBlurWallpaper(true)
.setBlurWallpaperRadius(32)
.setThemeId(UUID(0L, 0L).toString())
.setFont(LegacySettings.AppearanceSettings.Font.Outfit)
.build()
)
.setWeather(
LegacySettings.WeatherSettings
.newBuilder()
.setProvider(LegacySettings.WeatherSettings.WeatherProvider.MetNo)
.setImperialUnits(context.resources.getBoolean(R.bool.default_imperialUnits))
.build()
)
.setMusicWidget(
LegacySettings.MusicWidgetSettings
.newBuilder()
.build()
)
.setCalendarWidget(
LegacySettings.CalendarWidgetSettings
.newBuilder()
.setHideAlldayEvents(false)
)
.setClockWidget(
LegacySettings.ClockWidgetSettings
.newBuilder()
.setLayout(LegacySettings.ClockWidgetSettings.ClockWidgetLayout.Vertical)
.setClockStyle(LegacySettings.ClockWidgetSettings.ClockStyle.DigitalClock1)
.setColor(LegacySettings.ClockWidgetSettings.ClockWidgetColors.Auto)
.setAlarmPart(true)
.setBatteryPart(true)
.setMusicPart(true)
.setDatePart(true)
.setFavoritesPart(false)
.setFillHeight(true)
.setAlignment(LegacySettings.ClockWidgetSettings.ClockWidgetAlignment.Bottom)
.build()
)
.setFavorites(
LegacySettings.FavoritesSettings
.newBuilder()
.setEnabled(true)
.setFrequentlyUsed(true)
.setFrequentlyUsedRows(1)
.setEditButton(true)
)
.setFileSearch(
LegacySettings.FilesSearchSettings
.newBuilder()
.setLocalFiles(true)
.setNextcloud(false)
.setGdrive(false)
.setOnedrive(false)
.setNextcloud(false)
)
.setContactsSearch(
LegacySettings.ContactsSearchSettings
.newBuilder()
.setEnabled(true)
)
.setCalendarSearch(
LegacySettings.CalendarSearchSettings
.newBuilder()
.setEnabled(true)
)
.setAppShortcutSearch(
LegacySettings.AppShortcutSearchSettings
.newBuilder()
.setEnabled(true)
)
.setCalculatorSearch(
LegacySettings.CalculatorSearchSettings
.newBuilder()
.setEnabled(true)
)
.setUnitConverterSearch(
LegacySettings.UnitConverterSearchSettings
.newBuilder()
.setEnabled(true)
.setCurrencies(true)
)
.setWikipediaSearch(
LegacySettings.WikipediaSearchSettings
.newBuilder()
.setEnabled(false)
.setImages(false)
.setCustomUrl("")
)
.setWebsiteSearch(
LegacySettings.WebsiteSearchSettings
.newBuilder()
.setEnabled(false)
)
.setWebSearch(
LegacySettings.WebSearchSettings
.newBuilder()
.setEnabled(true)
)
.setBadges(
LegacySettings.BadgeSettings
.newBuilder()
.setNotifications(true)
.setCloudFiles(true)
.setShortcuts(true)
.setSuspendedApps(true)
)
.setGrid(
LegacySettings.GridSettings.newBuilder()
.setColumnCount(context.resources.getInteger(R.integer.config_columnCount))
.setIconSize(48)
.setShowLabels(true)
.build()
)
.setSearchBar(
LegacySettings.SearchBarSettings.newBuilder()
.setSearchBarStyle(LegacySettings.SearchBarSettings.SearchBarStyle.Transparent)
.setAutoFocus(true)
.setLaunchOnEnter(true)
.setColor(SearchBarColors.Auto)
.setHiddenItemsButton(true)
.build()
)
.setIcons(
LegacySettings.IconSettings.newBuilder()
.setAdaptify(true)
.setShape(LegacySettings.IconSettings.IconShape.PlatformDefault)
.setThemedIcons(false)
.setIconPack("")
.setIconPackThemed(true)
)
.setEasterEgg(false)
.setSystemBars(
LegacySettings.SystemBarsSettings.newBuilder()
.setNavBarColor(LegacySettings.SystemBarsSettings.SystemBarColors.Auto)
.setStatusBarColor(LegacySettings.SystemBarsSettings.SystemBarColors.Auto)
.setHideStatusBar(false)
.setHideNavBar(false)
)
.setCards(
LegacySettings.CardSettings.newBuilder()
.setBorderWidth(0)
.setRadius(12)
.setOpacity(1f)
)
.setWidgets(
LegacySettings.WidgetSettings.newBuilder()
.setEditButton(true)
)
.setLayout(
LegacySettings.LayoutSettings.newBuilder()
.setBaseLayout(LegacySettings.LayoutSettings.Layout.PullDown)
.setBottomSearchBar(false)
.setReverseSearchResults(false)
.setFixedRotation(false)
)
.setGestures(
LegacySettings.GestureSettings.newBuilder()
.setDoubleTap(
if (isAtLeastApiLevel(28)) {
LegacySettings.GestureSettings.GestureAction.LockScreen
} else {
LegacySettings.GestureSettings.GestureAction.None
})
.setLongPress(LegacySettings.GestureSettings.GestureAction.None)
.setSwipeDown(LegacySettings.GestureSettings.GestureAction.OpenNotificationDrawer)
.setSwipeLeft(LegacySettings.GestureSettings.GestureAction.None)
.setSwipeRight(LegacySettings.GestureSettings.GestureAction.None)
)
.setResultOrdering(
LegacySettings.SearchResultOrderingSettings.newBuilder()
.setOrdering(LegacySettings.SearchResultOrderingSettings.Ordering.Weighted)
.setWeightFactor(LegacySettings.SearchResultOrderingSettings.WeightFactor.Default)
)
.setAnimations(
LegacySettings.AnimationSettings.newBuilder()
.setCharging(true)
)
.build()
}
internal val DefaultCustomColorsBase: LegacySettings.AppearanceSettings.CustomColors.BaseColors
get() {
val scheme = Scheme.light(0xFFACE330.toInt())
return LegacySettings.AppearanceSettings.CustomColors.BaseColors.newBuilder()
.setAccent1(scheme.primary)
.setAccent2(scheme.secondary)
.setAccent3(scheme.tertiary)
.setNeutral1(scheme.surface)
.setNeutral2(scheme.surfaceVariant)
.setError(scheme.error)
.build()
}
internal val DefaultLightCustomColorScheme: LegacySettings.AppearanceSettings.CustomColors.Scheme
get() {
val scheme = Scheme.light(0xFFACE330.toInt())
return scheme.toSettingsColorsScheme()
}
internal val DefaultDarkCustomColorScheme: LegacySettings.AppearanceSettings.CustomColors.Scheme
get() {
val scheme = Scheme.dark(0xFFACE330.toInt())
return scheme.toSettingsColorsScheme()
}

View File

@ -1,20 +1,17 @@
package de.mm20.launcher2.preferences
import android.content.Context
import de.mm20.launcher2.preferences.migrations.Migration1
import de.mm20.launcher2.preferences.migrations.Migration2
import de.mm20.launcher2.preferences.migrations.Migration3
import de.mm20.launcher2.settings.BaseSettings
internal class LauncherDataStore(
private val context: Context,
legacyDataStore: LegacyDataStore,
): BaseSettings<LauncherSettingsData>(
context,
fileName = "settings.json",
serializer = LauncherSettingsDataSerializer,
migrations = listOf(
Migration1(legacyDataStore),
Migration2(),
Migration3(),
),

View File

@ -1,52 +1,5 @@
package de.mm20.launcher2.preferences
import android.content.Context
import androidx.datastore.core.CorruptionException
import androidx.datastore.core.DataMigration
import androidx.datastore.core.DataStore
import androidx.datastore.core.Serializer
import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.dataStore
import com.google.protobuf.InvalidProtocolBufferException
import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.preferences.migrations.*
import java.io.InputStream
import java.io.OutputStream
internal typealias LegacyDataStore = DataStore<LegacySettings>
internal val Context.legacyDataStore: LegacyDataStore by dataStore(
fileName = "settings.pb",
serializer = LegacySettingsSerializer,
produceMigrations = {
getMigrations(it)
},
corruptionHandler = ReplaceFileCorruptionHandler {
CrashReporter.logException(it)
LegacySettings.getDefaultInstance()
}
)
internal const val SchemaVersion = 18
internal fun getMigrations(context: Context): List<DataMigration<LegacySettings>> {
return listOf()
}
object LegacySettingsSerializer : Serializer<LegacySettings> {
override val defaultValue: LegacySettings = LegacySettings.getDefaultInstance()
override suspend fun readFrom(input: InputStream): LegacySettings {
try {
return LegacySettings.parseFrom(input)
} catch (e: InvalidProtocolBufferException) {
throw CorruptionException("Cannot read proto.", e)
}
}
override suspend fun writeTo(t: LegacySettings, output: OutputStream) {
t.writeTo(output)
}
}

View File

@ -27,8 +27,7 @@ import org.koin.core.qualifier.named
import org.koin.dsl.module
val preferencesModule = module {
single { androidContext().legacyDataStore }
single { LauncherDataStore(androidContext(), get()) }
single { LauncherDataStore(androidContext()) }
factory<Backupable>(named<LauncherDataStore>()) { get<LauncherDataStore>() }
factory { MediaSettings(get()) }
factory { ContactSearchSettings(get()) }

View File

@ -1,46 +0,0 @@
package de.mm20.launcher2.preferences.ktx
import de.mm20.launcher2.preferences.LegacySettings
import scheme.Scheme
fun Scheme.toSettingsColorsScheme(): LegacySettings.AppearanceSettings.CustomColors.Scheme {
val scheme = this
return LegacySettings.AppearanceSettings.CustomColors.Scheme.newBuilder()
.setPrimary(scheme.primary)
.setSurfaceTint(scheme.primary)
.setOnPrimary(scheme.onPrimary)
.setPrimaryContainer(scheme.primaryContainer)
.setOnPrimaryContainer(scheme.onPrimaryContainer)
.setSecondary(scheme.secondary)
.setOnSecondary(scheme.onSecondary)
.setSecondaryContainer(scheme.secondaryContainer)
.setOnSecondaryContainer(scheme.onSecondaryContainer)
.setTertiary(scheme.tertiary)
.setOnTertiary(scheme.onTertiary)
.setTertiaryContainer(scheme.tertiaryContainer)
.setOnTertiaryContainer(scheme.onTertiaryContainer)
.setError(scheme.error)
.setOnError(scheme.onError)
.setErrorContainer(scheme.errorContainer)
.setOnErrorContainer(scheme.onErrorContainer)
.setBackground(scheme.background)
.setOnBackground(scheme.onBackground)
.setSurface(scheme.surface)
.setOnSurface(scheme.onSurface)
.setSurfaceVariant(scheme.surfaceVariant)
.setOnSurfaceVariant(scheme.onSurfaceVariant)
.setOutline(scheme.outline)
.setOutlineVariant(scheme.outlineVariant)
.setInverseSurface(scheme.inverseSurface)
.setInverseOnSurface(scheme.inverseOnSurface)
.setInversePrimary(scheme.inversePrimary)
.setScrim(scheme.scrim)
.setSurfaceDim(scheme.surfaceDim)
.setSurfaceBright(scheme.surfaceBright)
.setSurfaceContainerLowest(scheme.surfaceContainerLowest)
.setSurfaceContainerLow(scheme.surfaceContainerLow)
.setSurfaceContainer(scheme.surfaceContainer)
.setSurfaceContainerHigh(scheme.surfaceContainerHigh)
.setSurfaceContainerHighest(scheme.surfaceContainerHighest)
.build()
}

View File

@ -1,25 +0,0 @@
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.LegacySettings
import de.mm20.launcher2.preferences.createFactorySettings
class FactorySettingsMigration(private val context: Context): DataMigration<LegacySettings> {
override suspend fun cleanUp() {
}
override suspend fun migrate(currentData: LegacySettings): LegacySettings {
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: LegacySettings): Boolean {
return currentData.version == 0
}
}

View File

@ -1,254 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import androidx.datastore.core.DataMigration
import de.mm20.launcher2.preferences.BaseLayout
import de.mm20.launcher2.preferences.ClockWidgetAlignment
import de.mm20.launcher2.preferences.ClockWidgetColors
import de.mm20.launcher2.preferences.ClockWidgetStyle
import de.mm20.launcher2.preferences.ColorScheme
import de.mm20.launcher2.preferences.Font
import de.mm20.launcher2.preferences.GestureAction
import de.mm20.launcher2.preferences.IconShape
import de.mm20.launcher2.preferences.LauncherSettingsData
import de.mm20.launcher2.preferences.LegacyDataStore
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.ScreenOrientation
import de.mm20.launcher2.preferences.SearchBarColors
import de.mm20.launcher2.preferences.SearchBarStyle
import de.mm20.launcher2.preferences.SearchResultOrder
import de.mm20.launcher2.preferences.SurfaceShape
import de.mm20.launcher2.preferences.SystemBarColors
import de.mm20.launcher2.preferences.ThemeDescriptor
import de.mm20.launcher2.preferences.WeightFactor
import kotlinx.coroutines.flow.first
import java.util.UUID
class Migration1(
private val legacyDataStore: LegacyDataStore,
) : DataMigration<LauncherSettingsData> {
override suspend fun cleanUp() {
}
override suspend fun shouldMigrate(currentData: LauncherSettingsData): Boolean {
return legacyDataStore.data.first().version > 0 && currentData.schemaVersion < 1
}
override suspend fun migrate(currentData: LauncherSettingsData): LauncherSettingsData {
val legacyData = legacyDataStore.data.first()
return currentData.copy(
schemaVersion = 1,
uiBaseLayout = when (legacyData.layout.baseLayout) {
LegacySettings.LayoutSettings.Layout.Pager -> BaseLayout.PullDown
LegacySettings.LayoutSettings.Layout.PagerReversed -> BaseLayout.PagerReversed
else -> BaseLayout.PullDown
},
gridColumnCount = legacyData.grid.columnCount,
animationsCharging = legacyData.animations.charging,
badgesCloudFiles = legacyData.badges.cloudFiles,
badgesNotifications = legacyData.badges.notifications,
badgesShortcuts = legacyData.badges.shortcuts,
badgesSuspendedApps = legacyData.badges.suspendedApps,
calculatorEnabled = legacyData.calculatorSearch.enabled,
calendarSearchEnabled = legacyData.calendarSearch.enabled,
clockWidgetAlarmPart = legacyData.clockWidget.alarmPart,
clockWidgetBatteryPart = legacyData.clockWidget.batteryPart,
clockWidgetDatePart = legacyData.clockWidget.datePart,
clockWidgetColors = when (legacyData.clockWidget.color) {
LegacySettings.ClockWidgetSettings.ClockWidgetColors.Light -> ClockWidgetColors.Light
LegacySettings.ClockWidgetSettings.ClockWidgetColors.Dark -> ClockWidgetColors.Dark
else -> ClockWidgetColors.Auto
},
clockWidgetAlignment = when (legacyData.clockWidget.alignment) {
LegacySettings.ClockWidgetSettings.ClockWidgetAlignment.Top -> ClockWidgetAlignment.Top
LegacySettings.ClockWidgetSettings.ClockWidgetAlignment.Center -> ClockWidgetAlignment.Center
else -> ClockWidgetAlignment.Bottom
},
homeScreenDock = legacyData.clockWidget.favoritesPart,
clockWidgetFillHeight = legacyData.clockWidget.fillHeight,
clockWidgetCompact = legacyData.clockWidget.layout == LegacySettings.ClockWidgetSettings.ClockWidgetLayout.Horizontal,
clockWidgetMusicPart = legacyData.clockWidget.musicPart,
_clockWidgetStyle = when (legacyData.clockWidget.clockStyle) {
LegacySettings.ClockWidgetSettings.ClockStyle.DigitalClock1 -> ClockWidgetStyle.Digital1()
LegacySettings.ClockWidgetSettings.ClockStyle.DigitalClock2 -> ClockWidgetStyle.Digital2
LegacySettings.ClockWidgetSettings.ClockStyle.OrbitClock -> ClockWidgetStyle.Orbit
LegacySettings.ClockWidgetSettings.ClockStyle.BinaryClock -> ClockWidgetStyle.Binary
LegacySettings.ClockWidgetSettings.ClockStyle.AnalogClock -> ClockWidgetStyle.Analog
LegacySettings.ClockWidgetSettings.ClockStyle.EmptyClock -> ClockWidgetStyle.Empty
LegacySettings.ClockWidgetSettings.ClockStyle.DigitalClock1_MDY -> ClockWidgetStyle.Digital1(
variant = ClockWidgetStyle.Digital1.Variant.MDY
)
LegacySettings.ClockWidgetSettings.ClockStyle.DigitalClock1_Outlined -> ClockWidgetStyle.Digital1(
outlined = true
)
LegacySettings.ClockWidgetSettings.ClockStyle.DigitalClock1_OnePlus -> ClockWidgetStyle.Digital1(
variant = ClockWidgetStyle.Digital1.Variant.Default
)
else -> ClockWidgetStyle.Digital1()
},
contactSearchEnabled = legacyData.contactsSearch.enabled,
easterEgg = legacyData.easterEgg,
favoritesEditButton = legacyData.favorites.editButton,
favoritesEnabled = legacyData.favorites.enabled,
favoritesFrequentlyUsed = legacyData.favorites.frequentlyUsed,
favoritesFrequentlyUsedRows = legacyData.favorites.frequentlyUsedRows,
rankingWeightFactor = when (legacyData.resultOrdering.weightFactor) {
LegacySettings.SearchResultOrderingSettings.WeightFactor.Low -> WeightFactor.Low
LegacySettings.SearchResultOrderingSettings.WeightFactor.High -> WeightFactor.High
else -> WeightFactor.Default
},
fileSearchProviders = buildSet {
if (legacyData.fileSearch.localFiles) add("local")
if (legacyData.fileSearch.nextcloud) add("nextcloud")
if (legacyData.fileSearch.gdrive) add("gdrive")
if (legacyData.fileSearch.onedrive) add("onedrive")
},
gesturesDoubleTap = makeGestureSettings(
legacyData.gestures.doubleTap,
legacyData.gestures.doubleTapApp
),
gesturesSwipeDown = makeGestureSettings(
legacyData.gestures.swipeDown,
legacyData.gestures.swipeDownApp
),
gesturesSwipeLeft = makeGestureSettings(
legacyData.gestures.swipeLeft,
legacyData.gestures.swipeLeftApp
),
gesturesSwipeRight = makeGestureSettings(
legacyData.gestures.swipeRight,
legacyData.gestures.swipeRightApp
),
gesturesLongPress = makeGestureSettings(
legacyData.gestures.longPress,
legacyData.gestures.longPressApp
),
gesturesHomeButton = makeGestureSettings(
legacyData.gestures.homeButton,
legacyData.gestures.homeButtonApp
),
gridIconSize = legacyData.grid.iconSize,
gridLabels = legacyData.grid.showLabels,
mediaAllowList = legacyData.musicWidget.allowListList.toSet(),
mediaDenyList = legacyData.musicWidget.denyListList.toSet(),
hiddenItemsShowButton = legacyData.searchBar.hiddenItemsButton,
iconsAdaptify = legacyData.icons.adaptify,
iconsForceThemed = legacyData.icons.forceThemed,
iconsPack = legacyData.icons.iconPack.takeIf { it.isNotBlank() },
iconsPackThemed = legacyData.icons.iconPackThemed,
iconsShape = when (legacyData.icons.shape) {
LegacySettings.IconSettings.IconShape.Circle -> IconShape.Circle
LegacySettings.IconSettings.IconShape.Square -> IconShape.Square
LegacySettings.IconSettings.IconShape.Squircle -> IconShape.Squircle
LegacySettings.IconSettings.IconShape.RoundedSquare -> IconShape.RoundedSquare
LegacySettings.IconSettings.IconShape.EasterEgg -> IconShape.EasterEgg
LegacySettings.IconSettings.IconShape.Hexagon -> IconShape.Hexagon
LegacySettings.IconSettings.IconShape.Triangle -> IconShape.Triangle
LegacySettings.IconSettings.IconShape.Pentagon -> IconShape.Pentagon
LegacySettings.IconSettings.IconShape.Teardrop -> IconShape.Teardrop
LegacySettings.IconSettings.IconShape.Pebble -> IconShape.Pebble
else -> IconShape.PlatformDefault
},
iconsThemed = legacyData.icons.themedIcons,
searchBarBottom = legacyData.layout.bottomSearchBar,
searchBarColors = when (legacyData.systemBars.statusBarColor) {
LegacySettings.SystemBarsSettings.SystemBarColors.Light -> SearchBarColors.Light
LegacySettings.SystemBarsSettings.SystemBarColors.Dark -> SearchBarColors.Dark
else -> SearchBarColors.Auto
},
searchBarFixed = legacyData.layout.bottomSearchBar,
searchBarKeyboard = legacyData.searchBar.autoFocus,
searchBarStyle = when (legacyData.searchBar.searchBarStyle) {
LegacySettings.SearchBarSettings.SearchBarStyle.Hidden -> SearchBarStyle.Hidden
LegacySettings.SearchBarSettings.SearchBarStyle.Solid -> SearchBarStyle.Solid
else -> SearchBarStyle.Transparent
},
searchLaunchOnEnter = legacyData.searchBar.launchOnEnter,
searchResultOrder = when (legacyData.resultOrdering.ordering) {
LegacySettings.SearchResultOrderingSettings.Ordering.Alphabetic -> SearchResultOrder.Alphabetical
LegacySettings.SearchResultOrderingSettings.Ordering.LaunchCount -> SearchResultOrder.LaunchCount
else -> SearchResultOrder.Weighted
},
searchResultsReversed = legacyData.layout.reverseSearchResults,
shortcutSearchEnabled = legacyData.appShortcutSearch.enabled,
stateTagsMultiline = legacyData.ui.searchTagsMultiline,
surfacesBorderWidth = legacyData.cards.borderWidth,
surfacesOpacity = legacyData.cards.opacity,
surfacesRadius = legacyData.cards.radius,
surfacesShape = when (legacyData.cards.shape) {
LegacySettings.CardSettings.Shape.Cut -> SurfaceShape.Cut
else -> SurfaceShape.Rounded
},
systemBarsHideNav = legacyData.systemBars.hideNavBar,
systemBarsHideStatus = legacyData.systemBars.hideStatusBar,
systemBarsNavColors = when (legacyData.systemBars.navBarColor) {
LegacySettings.SystemBarsSettings.SystemBarColors.Light -> SystemBarColors.Light
LegacySettings.SystemBarsSettings.SystemBarColors.Dark -> SystemBarColors.Dark
else -> SystemBarColors.Auto
},
systemBarsStatusColors = when (legacyData.systemBars.statusBarColor) {
LegacySettings.SystemBarsSettings.SystemBarColors.Light -> SystemBarColors.Light
LegacySettings.SystemBarsSettings.SystemBarColors.Dark -> SystemBarColors.Dark
else -> SystemBarColors.Auto
},
uiColorScheme = when (legacyData.appearance.theme) {
LegacySettings.AppearanceSettings.Theme.Light -> ColorScheme.Light
LegacySettings.AppearanceSettings.Theme.Dark -> ColorScheme.Dark
else -> ColorScheme.System
},
uiFont = when (legacyData.appearance.font) {
LegacySettings.AppearanceSettings.Font.SystemDefault -> Font.System
else -> Font.Outfit
},
uiOrientation = when (legacyData.layout.fixedRotation) {
true -> ScreenOrientation.Portrait
else -> ScreenOrientation.Auto
},
uiTheme = when (legacyData.appearance.themeId) {
UUID(0L, 0L).toString() -> ThemeDescriptor.Default
UUID(0L, 1L).toString() -> ThemeDescriptor.BlackAndWhite
else -> ThemeDescriptor.Custom(legacyData.appearance.themeId)
},
unitConverterCurrencies = legacyData.unitConverterSearch.currencies,
unitConverterEnabled = legacyData.unitConverterSearch.enabled,
wallpaperBlur = legacyData.appearance.blurWallpaper,
weatherImperialUnits = legacyData.weather.imperialUnits,
wallpaperBlurRadius = legacyData.appearance.blurWallpaperRadius,
wallpaperDim = legacyData.appearance.dimWallpaper,
weatherProvider = when (legacyData.weather.provider) {
LegacySettings.WeatherSettings.WeatherProvider.MetNo -> "metno"
LegacySettings.WeatherSettings.WeatherProvider.OpenWeatherMap -> "owm"
LegacySettings.WeatherSettings.WeatherProvider.Here -> "here"
LegacySettings.WeatherSettings.WeatherProvider.BrightSky -> "dwd"
else -> "metno"
},
websiteSearchEnabled = legacyData.websiteSearch.enabled,
widgetsEditButton = legacyData.widgets.editButton,
wikipediaCustomUrl = legacyData.wikipediaSearch.customUrl.takeIf { it.isNotBlank() },
wikipediaSearchEnabled = legacyData.wikipediaSearch.enabled,
wikipediaSearchImages = legacyData.wikipediaSearch.images,
)
}
private fun makeGestureSettings(
gesture: LegacySettings.GestureSettings.GestureAction,
key: String
): GestureAction {
return when (gesture) {
LegacySettings.GestureSettings.GestureAction.OpenSearch -> GestureAction.Search
LegacySettings.GestureSettings.GestureAction.OpenNotificationDrawer -> GestureAction.Notifications
LegacySettings.GestureSettings.GestureAction.LockScreen -> GestureAction.ScreenLock
LegacySettings.GestureSettings.GestureAction.OpenQuickSettings -> GestureAction.QuickSettings
LegacySettings.GestureSettings.GestureAction.OpenRecents -> GestureAction.Recents
LegacySettings.GestureSettings.GestureAction.OpenPowerDialog -> GestureAction.PowerMenu
LegacySettings.GestureSettings.GestureAction.LaunchApp -> GestureAction.Launch(
key
)
else -> GestureAction.NoAction
}
}
}

View File

@ -1,22 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_10_11: VersionedMigration(10, 11) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setAppearance(
builder.appearance.toBuilder()
.setCustomColors(
builder.appearance.customColors.toBuilder()
.setLightScheme(
builder.appearance.customColors.lightScheme.toBuilder()
.setSurfaceTint(builder.appearance.customColors.lightScheme.primary)
)
.setDarkScheme(
builder.appearance.customColors.darkScheme.toBuilder()
.setSurfaceTint(builder.appearance.customColors.darkScheme.primary)
)
)
)
}
}

View File

@ -1,53 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.LegacySettings.GestureSettings
import de.mm20.launcher2.preferences.LegacySettings.LayoutSettings
class Migration_11_12: VersionedMigration(11, 12) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
val oldLayout = builder.appearance.layout
when(oldLayout) {
LayoutSettings.Layout.Pager -> {
builder.setLayout(
LayoutSettings.newBuilder()
.setBaseLayout(LayoutSettings.Layout.Pager)
.setBottomSearchBar(true)
.setReverseSearchResults(true)
)
}
LayoutSettings.Layout.PagerReversed -> {
builder.setLayout(
LayoutSettings.newBuilder()
.setBaseLayout(LayoutSettings.Layout.PagerReversed)
.setBottomSearchBar(true)
.setReverseSearchResults(true)
)
}
else -> {
builder.setLayout(
LayoutSettings.newBuilder()
.setBaseLayout(LayoutSettings.Layout.PullDown)
.setBottomSearchBar(false)
.setReverseSearchResults(false)
)
.setGestures(
GestureSettings.newBuilder()
.setDoubleTap(
if (isAtLeastApiLevel(28)) {
GestureSettings.GestureAction.LockScreen
} else {
GestureSettings.GestureAction.None
}
)
.setLongPress(GestureSettings.GestureAction.None)
.setSwipeDown(GestureSettings.GestureAction.OpenNotificationDrawer)
.setSwipeLeft(GestureSettings.GestureAction.None)
.setSwipeRight(GestureSettings.GestureAction.None)
)
}
}
return builder
}
}

View File

@ -1,20 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.LegacySettings.SearchResultOrderingSettings.WeightFactor
class Migration_12_13: VersionedMigration(12, 13) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder
.setClockWidget(
builder.clockWidget.toBuilder()
.setDatePart(true)
.build()
)
.setResultOrdering(
builder.resultOrdering.toBuilder()
.setWeightFactor(WeightFactor.Default)
.build()
)
}
}

View File

@ -1,13 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_13_14 : VersionedMigration(13, 14) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder
.setIcons(
builder.icons.toBuilder()
.setIconPackThemed(true)
)
}
}

View File

@ -1,12 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_14_15: VersionedMigration(14, 15) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setSearchBar(
builder.searchBar.toBuilder()
.setHiddenItemsButton(true)
)
}
}

View File

@ -1,51 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
import de.mm20.launcher2.preferences.LegacySettings.AppearanceSettings.CustomColors.Scheme
import palettes.TonalPalette
class Migration_15_16 : VersionedMigration(15, 16) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setAppearance(
builder.appearance.toBuilder()
.setCustomColors(
builder.appearance.customColors.toBuilder()
.setLightScheme(
migrateColorScheme(
builder.appearance.customColors.lightScheme,
false,
builder.appearance.customColors.advancedMode
)
)
.setDarkScheme(
migrateColorScheme(
builder.appearance.customColors.darkScheme,
true,
builder.appearance.customColors.advancedMode
)
)
)
)
}
fun migrateColorScheme(colorScheme: Scheme, dark: Boolean, advancedMode: Boolean): Scheme {
val oldSurface = colorScheme.surface
val oldSurfaceVariant = colorScheme.surfaceVariant
val neutralPalette = TonalPalette.fromInt(oldSurface)
val neutralVariantPalette = TonalPalette.fromInt(oldSurfaceVariant)
return colorScheme.toBuilder().apply {
if (!advancedMode) {
surface = neutralPalette.tone(if (dark) 6 else 98)
}
surfaceDim = neutralPalette.tone(if (dark) 6 else 87)
surfaceBright = neutralPalette.tone(if (dark) 24 else 98)
surfaceContainerLowest = neutralVariantPalette.tone(if (dark) 4 else 100)
surfaceContainerLow = neutralVariantPalette.tone(if (dark) 10 else 96)
surfaceContainer = neutralVariantPalette.tone(if (dark) 12 else 94)
surfaceContainerHigh = neutralVariantPalette.tone(if (dark) 17 else 92)
surfaceContainerHighest = neutralVariantPalette.tone(if (dark) 22 else 90)
}.build()
}
}

View File

@ -1,23 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
import java.util.UUID
class Migration_16_17: VersionedMigration(16, 17) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setAppearance(
builder.appearance.toBuilder()
.setThemeId(
when(builder.appearance.colorScheme) {
LegacySettings.AppearanceSettings.ColorScheme.BlackAndWhite -> UUID(0L, 1L)
LegacySettings.AppearanceSettings.ColorScheme.Custom -> UUID(1L, 1L)
else -> UUID(0L, 0L)
}.toString()
)
)
.setAnimations(
builder.animations.toBuilder()
.setCharging(true)
)
}
}

View File

@ -1,15 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_17_18 : VersionedMigration(17, 18) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder
.setAppearance(builder.appearance.toBuilder()
.setBlurWallpaperRadius(32)
)
.setClockWidget(builder.clockWidget.toBuilder()
.setAlignment(LegacySettings.ClockWidgetSettings.ClockWidgetAlignment.Bottom)
)
}
}

View File

@ -1,15 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_1_2: VersionedMigration(1, 2) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setSystemBars(
builder.systemBars.toBuilder()
.setHideNavBar(false)
.setHideStatusBar(false)
)
.setSearchBar(builder.searchBar.toBuilder().setAutoFocus(false))
}
}

View File

@ -1,14 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_2_3: VersionedMigration(2, 3) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setClockWidget(
builder.clockWidget.toBuilder()
.setAlarmPart(true)
.setBatteryPart(true)
.setMusicPart(true)
)
}
}

View File

@ -1,12 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_3_4: VersionedMigration(3, 4) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setAppShortcutSearch(
LegacySettings.AppShortcutSearchSettings.newBuilder()
.setEnabled(true)
)
}
}

View File

@ -1,13 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_4_5: VersionedMigration(4, 5) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setGrid(
builder.grid.toBuilder()
.setIconSize(48)
.build()
)
}
}

View File

@ -1,24 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.DefaultCustomColorsBase
import de.mm20.launcher2.preferences.DefaultDarkCustomColorScheme
import de.mm20.launcher2.preferences.DefaultLightCustomColorScheme
import de.mm20.launcher2.preferences.LegacySettings
class Migration_5_6: VersionedMigration(5, 6) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setAppearance(
builder.appearance.toBuilder()
.setCustomColors(
LegacySettings.AppearanceSettings.CustomColors.newBuilder()
.setAdvancedMode(false)
.setBaseColors(DefaultCustomColorsBase)
.setLightScheme(DefaultLightCustomColorScheme)
.setDarkScheme(DefaultDarkCustomColorScheme)
)
).setUnitConverterSearch(
builder.unitConverterSearch.toBuilder()
.setCurrencies(true)
)
}
}

View File

@ -1,12 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_6_7 : VersionedMigration(6, 7) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setIcons(
builder.icons.toBuilder()
.setAdaptify(true)
)
}
}

View File

@ -1,13 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_7_8: VersionedMigration(7, 8) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder.setAppearance(
builder.appearance.toBuilder()
.setBlurWallpaper(true)
)
}
}

View File

@ -1,18 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_8_9: VersionedMigration(8, 9) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder
.setClockWidget(
builder.clockWidget.toBuilder()
.setFillHeight(true)
)
.setGrid(
builder.grid.toBuilder()
.setShowLabels(true)
)
}
}

View File

@ -1,19 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import de.mm20.launcher2.preferences.LegacySettings
class Migration_9_10 : VersionedMigration(9, 10) {
override suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder {
return builder
.setFavorites(
builder.favorites.toBuilder()
.setFrequentlyUsed(true)
.setFrequentlyUsedRows(1)
.setEditButton(true)
)
.setWidgets(
LegacySettings.WidgetSettings.newBuilder()
.setEditButton(true)
)
}
}

View File

@ -1,25 +0,0 @@
package de.mm20.launcher2.preferences.migrations
import androidx.datastore.core.DataMigration
import de.mm20.launcher2.preferences.SchemaVersion
import de.mm20.launcher2.preferences.LegacySettings
abstract class VersionedMigration(
private val fromVersion: Int,
private val toVersion: Int
) : DataMigration<LegacySettings> {
abstract suspend fun applyMigrations(builder: LegacySettings.Builder): LegacySettings.Builder
final override suspend fun migrate(currentData: LegacySettings): LegacySettings {
val builder = currentData.toBuilder()
applyMigrations(builder)
builder.version = toVersion
return builder.build()
}
override suspend fun cleanUp() {}
override suspend fun shouldMigrate(currentData: LegacySettings): Boolean {
return currentData.version <= fromVersion && SchemaVersion >= toVersion
}
}

View File

@ -1,386 +0,0 @@
syntax = "proto3";
option java_package = "de.mm20.launcher2.preferences";
option java_multiple_files = true;
message LegacySettings {
uint32 version = 1;
message AppearanceSettings {
enum Theme {
Light = 0;
Dark = 1;
System = 2;
}
Theme theme = 1;
enum ColorScheme {
Default = 0;
BlackAndWhite = 1;
DebugMaterialYouCompat = 2;
Custom = 3;
EasterEgg = 4;
}
ColorScheme color_scheme = 6 [deprecated = true];
message CustomColors {
bool advanced_mode = 1;
message BaseColors {
uint32 accent1 = 1;
uint32 accent2 = 2;
uint32 accent3 = 3;
uint32 neutral1 = 4;
uint32 neutral2 = 5;
uint32 error = 6;
}
BaseColors base_colors = 2;
message Scheme {
uint32 primary = 1;
uint32 on_primary = 2;
uint32 primary_container = 3;
uint32 on_primary_container = 4;
uint32 secondary = 5;
uint32 on_secondary = 6;
uint32 secondary_container = 7;
uint32 on_secondary_container = 8;
uint32 tertiary = 9;
uint32 on_tertiary = 10;
uint32 tertiary_container = 11;
uint32 on_tertiary_container = 12;
uint32 background = 13;
uint32 on_background = 14;
uint32 surface = 15;
uint32 on_surface = 16;
uint32 surface_variant = 17;
uint32 on_surface_variant = 18;
uint32 outline = 19;
uint32 inverse_surface = 20;
uint32 inverse_on_surface = 21;
uint32 inverse_primary = 22;
uint32 error = 23;
uint32 on_error = 24;
uint32 error_container = 25;
uint32 on_error_container = 26;
uint32 outline_variant = 27;
uint32 scrim = 28;
uint32 surface_tint = 29;
uint32 surface_dim = 30;
uint32 surface_bright = 31;
uint32 surface_container_lowest = 32;
uint32 surface_container_low = 33;
uint32 surface_container = 34;
uint32 surface_container_high = 35;
uint32 surface_container_highest = 36;
}
Scheme light_scheme = 3;
Scheme dark_scheme = 4;
}
CustomColors custom_colors = 8 [deprecated = true];
bool dim_wallpaper = 7;
/**
* Deprecated, use layout instead
*/
LayoutSettings.Layout layout = 9 [deprecated = true];
enum Font {
Outfit = 0;
SystemDefault = 1;
}
Font font = 10;
bool blur_wallpaper = 11;
// UUID of the selected theme
string theme_id = 12;
uint32 blur_wallpaper_radius = 13;
}
AppearanceSettings appearance = 2;
message WeatherSettings {
enum WeatherProvider {
MetNo = 0;
OpenWeatherMap = 1;
Here = 2;
BrightSky = 3;
}
WeatherProvider provider = 1;
bool imperial_units = 2;
reserved 3;
}
WeatherSettings weather = 5;
message MusicWidgetSettings {
reserved 1;
repeated string allow_list = 2;
repeated string deny_list = 3;
}
MusicWidgetSettings music_widget = 6;
message ClockWidgetSettings {
enum ClockWidgetLayout {
Vertical = 0;
Horizontal = 1;
}
ClockWidgetLayout layout = 1;
enum ClockStyle {
DigitalClock1 = 0;
DigitalClock2 = 1;
OrbitClock = 5;
BinaryClock = 2;
AnalogClock = 3;
EmptyClock = 4;
DigitalClock1_MDY = 6;
DigitalClock1_Outlined = 7;
DigitalClock1_OnePlus = 8;
}
ClockStyle clock_style = 2;
bool date_part = 3;
bool music_part = 4;
bool battery_part = 5;
bool alarm_part = 6;
bool favorites_part = 7;
bool fill_height = 8;
enum ClockWidgetColors {
Auto = 0;
Light = 1;
Dark = 2;
}
ClockWidgetColors color = 9;
enum ClockWidgetAlignment {
Bottom = 0;
Center = 1;
Top = 2;
}
ClockWidgetAlignment alignment = 10;
}
ClockWidgetSettings clock_widget = 7;
message FavoritesSettings {
bool enabled = 1;
bool frequently_used = 2;
int32 frequently_used_rows = 3;
bool edit_button = 4;
}
FavoritesSettings favorites = 8;
message FilesSearchSettings {
bool local_files = 1;
bool gdrive = 2;
bool onedrive = 3;
bool nextcloud = 4;
bool owncloud = 5;
}
FilesSearchSettings file_search = 9 [deprecated = true];
message ContactsSearchSettings {
bool enabled = 1;
}
ContactsSearchSettings contacts_search = 10;
message CalendarSearchSettings {
bool enabled = 1;
}
CalendarSearchSettings calendar_search = 11;
message CalculatorSearchSettings {
bool enabled = 1;
}
CalculatorSearchSettings calculator_search = 12;
message UnitConverterSearchSettings {
bool enabled = 1;
bool currencies = 2;
}
UnitConverterSearchSettings unit_converter_search = 13;
message WikipediaSearchSettings {
bool enabled = 1;
bool images = 2;
string custom_url = 3;
}
WikipediaSearchSettings wikipedia_search = 14;
message WebsiteSearchSettings {
bool enabled = 1;
}
WebsiteSearchSettings website_search = 15;
message WebSearchSettings {
bool enabled = 1;
}
WebSearchSettings web_search = 16;
message CalendarWidgetSettings {
bool hide_allday_events = 1;
repeated int64 exclude_calendars = 2;
}
CalendarWidgetSettings calendar_widget = 17;
message BadgeSettings {
bool notifications = 1;
bool suspended_apps = 2;
bool cloud_files = 3;
bool shortcuts = 4;
}
BadgeSettings badges = 18 [deprecated = true];
message GridSettings {
uint32 column_count = 1;
uint32 icon_size = 2;
bool show_labels = 3;
}
GridSettings grid = 19;
message SearchBarSettings {
enum SearchBarStyle {
Transparent = 0;
Solid = 1;
Hidden = 2;
}
SearchBarStyle search_bar_style = 1;
bool auto_focus = 2;
enum SearchBarColors {
Auto = 0;
Light = 1;
Dark = 2;
}
SearchBarColors color = 3;
bool launch_on_enter = 4;
bool hidden_items_button = 5;
}
SearchBarSettings search_bar = 20;
message IconSettings {
enum IconShape {
PlatformDefault = 0;
Circle = 1;
Square = 2;
RoundedSquare = 3;
Triangle = 4;
Squircle = 5;
Hexagon = 6;
Pentagon = 7;
EasterEgg = 8;
Teardrop = 9;
Pebble = 10;
}
IconShape shape = 1;
bool themed_icons = 2;
string icon_pack = 3;
reserved 4;
bool adaptify = 5;
bool force_themed = 6;
bool icon_pack_themed = 7;
}
IconSettings icons = 21;
bool easter_egg = 22;
message SystemBarsSettings {
enum SystemBarColors {
// Light icons
Auto = 0;
// Dark icons
Dark = 1;
// Wallpaper based
Light = 2;
}
SystemBarColors statusBarColor = 1;
SystemBarColors navBarColor = 2;
bool hideStatusBar = 3;
bool hideNavBar = 4;
}
SystemBarsSettings system_bars = 23;
message CardSettings {
float opacity = 1;
uint32 radius = 2;
uint32 border_width = 3;
Shape shape = 4;
enum Shape {
Rounded = 0;
Cut = 1;
}
}
CardSettings cards = 24;
message AppShortcutSearchSettings {
bool enabled = 1;
}
AppShortcutSearchSettings app_shortcut_search = 25;
message WidgetSettings {
bool edit_button = 1;
}
WidgetSettings widgets = 26;
message LayoutSettings {
enum Layout {
PullDown = 0;
Pager = 1;
PagerReversed = 2;
}
Layout base_layout = 1;
bool bottom_search_bar = 2;
bool reverse_search_results = 3;
bool fixed_search_bar = 4;
bool fixed_rotation = 5;
}
LayoutSettings layout = 27;
message GestureSettings {
enum GestureAction {
None = 0;
OpenSearch = 1;
OpenNotificationDrawer = 2;
LockScreen = 3;
OpenQuickSettings = 4;
OpenRecents = 5;
OpenPowerDialog = 6;
LaunchApp = 7;
}
GestureAction swipe_down = 1;
GestureAction swipe_left = 2;
GestureAction swipe_right = 3;
GestureAction double_tap = 4;
GestureAction long_press = 5;
string swipe_down_app = 6;
string swipe_left_app = 7;
string swipe_right_app = 8;
string double_tap_app = 9;
string long_press_app = 10;
GestureAction home_button = 11;
string home_button_app = 12;
}
GestureSettings gestures = 28;
message SearchResultOrderingSettings {
enum Ordering {
Alphabetic = 0;
LaunchCount = 1;
Weighted = 2;
}
Ordering ordering = 1;
enum WeightFactor {
Low = 0;
Default = 1;
High = 2;
}
WeightFactor weight_factor = 2;
}
SearchResultOrderingSettings result_ordering = 29;
/**
* Persistent UI state that does not have a corresponding setting.
*/
message UiState {
bool search_tags_multiline = 1;
bool widget_tags_multiline = 2;
}
UiState ui = 30;
message AnimationSettings {
bool charging = 1;
}
AnimationSettings animations = 31;
}

View File

@ -11,7 +11,6 @@ pluginSdk = "2.1.0-SNAPSHOT"
gradle = "8.1.2"
android-gradle-plugin = "8.2.2"
protobuf-gradle-plugin = "0.9.4"
ksp-gradle-plugin = "2.0.0-1.0.21"
kotlin = "2.0.0"
@ -37,7 +36,6 @@ androidx-constraint-layout = "1.1.0-alpha13"
accompanist = "0.33.2-alpha"
coil = "2.3.0"
koin = "3.2.0"
protobuf = "3.14.0"
retrofit = "2.9.0"
junit = "4.13.2"
junitVersion = "1.1.5"
@ -128,9 +126,6 @@ google-apiclient = { group = "com.google.api-client", name = "google-api-client"
google-drive = { group = "com.google.apis", name = "google-api-services-drive", version = "v3-rev20221219-2.0.0" }
google-oauth2 = { group = "com.google.apis", name = "google-api-services-oauth2", version = "v2-rev20200213-2.0.0" }
protobuf-protoc = { group = "com.google.protobuf", name = "protoc", version.ref = "protobuf" }
protobuf-javalite = { group = "com.google.protobuf", name = "protobuf-javalite", version.ref = "protobuf" }
koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" }
koin-androidxcompose = { group = "io.insert-koin", name = "koin-androidx-compose", version.ref = "koin" }
@ -150,7 +145,6 @@ tests = ["junit"]
[plugins]
android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" }
android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
protobuf = { id = "com.google.protobuf", version.ref = "protobuf-gradle-plugin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp-gradle-plugin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }