diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 44c1b74b..9f2ce7e2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -208,6 +208,7 @@ dependencies { implementation(project(":lib:android")) implementation(project(":lib:kotlin")) implementation(project(":lib:native")) + implementation(project(":lib:snygg")) testImplementation(libs.equalsverifier) testImplementation(libs.kotest.assertions.core) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt index bde9fb40..b302e319 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt @@ -33,6 +33,7 @@ import dev.patrickgold.florisboard.ime.keyboard.KeyboardManager import dev.patrickgold.florisboard.ime.media.emoji.FlorisEmojiCompat import dev.patrickgold.florisboard.ime.nlp.NlpManager import dev.patrickgold.florisboard.ime.text.gestures.GlideTypingManager +import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.ThemeManager import dev.patrickgold.florisboard.lib.cache.CacheManager import dev.patrickgold.florisboard.lib.crashutility.CrashUtility @@ -60,6 +61,7 @@ class FlorisApplication : Application() { System.loadLibrary("fl_native") } catch (_: Exception) { } + FlorisImeTheme.init() } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt index 648b2700..8624026e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt @@ -105,13 +105,13 @@ import dev.patrickgold.florisboard.lib.devtools.flogError import dev.patrickgold.florisboard.lib.devtools.flogInfo import dev.patrickgold.florisboard.lib.devtools.flogWarning import dev.patrickgold.florisboard.lib.observeAsTransformingState -import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface -import dev.patrickgold.florisboard.lib.snygg.ui.shape -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder -import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.ui.SnyggSurface +import org.florisboard.lib.snygg.ui.shape +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggBorder +import org.florisboard.lib.snygg.ui.snyggShadow +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.lib.util.ViewUtils import dev.patrickgold.florisboard.lib.util.debugSummarize import dev.patrickgold.florisboard.lib.util.launchActivity diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/AppPrefs.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/AppPrefs.kt index 2be9d92f..e8023671 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/AppPrefs.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/AppPrefs.kt @@ -49,7 +49,7 @@ import dev.patrickgold.florisboard.ime.theme.extCoreTheme import org.florisboard.lib.android.isOrientationPortrait import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.observeAsTransformingState -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggLevel import dev.patrickgold.florisboard.lib.util.VersionName import dev.patrickgold.jetpref.datastore.JetPref import dev.patrickgold.jetpref.datastore.model.PreferenceMigrationEntry diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt index fbc41578..7e1eb582 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt @@ -23,7 +23,7 @@ import dev.patrickgold.florisboard.ime.text.key.KeyHintMode import dev.patrickgold.florisboard.ime.text.key.UtilityKeyAction import dev.patrickgold.florisboard.ime.theme.ThemeMode import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggLevel import dev.patrickgold.jetpref.datastore.ui.ListPreferenceEntry import dev.patrickgold.jetpref.datastore.ui.listPrefEntries import org.florisboard.lib.kotlin.curlyFormat diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionEditScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionEditScreen.kt index 94ed233e..a4506638 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionEditScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionEditScreen.kt @@ -83,7 +83,7 @@ import dev.patrickgold.florisboard.lib.ext.validate import dev.patrickgold.florisboard.lib.io.FlorisRef import dev.patrickgold.florisboard.lib.io.ZipUtils import dev.patrickgold.florisboard.lib.rememberValidationResult -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetJsonConfig +import org.florisboard.lib.snygg.SnyggStylesheetJsonConfig import dev.patrickgold.florisboard.themeManager import dev.patrickgold.jetpref.datastore.ui.Preference import dev.patrickgold.jetpref.datastore.ui.vectorResource diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt index 9bb232f6..9d9b3513 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt @@ -70,27 +70,27 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.ext.ExtensionValidation import dev.patrickgold.florisboard.lib.rememberValidationResult -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec -import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValueEncoder -import dev.patrickgold.florisboard.lib.snygg.value.SnyggVarValueEncoders +import org.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggPropertySetSpec +import org.florisboard.lib.snygg.value.MaterialYouColor +import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggDefinedVarValue +import org.florisboard.lib.snygg.value.SnyggDpShapeValue +import org.florisboard.lib.snygg.value.SnyggDpSizeValue +import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouValue +import org.florisboard.lib.snygg.value.SnyggPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.value.SnyggSpSizeValue +import org.florisboard.lib.snygg.value.SnyggValue +import org.florisboard.lib.snygg.value.SnyggValueEncoder +import org.florisboard.lib.snygg.value.SnyggVarValueEncoders import dev.patrickgold.florisboard.lib.stripUnicodeCtrlChars import dev.patrickgold.jetpref.material.ui.ExperimentalJetPrefMaterial3Ui import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt index 3283df09..32524e6e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt @@ -94,8 +94,8 @@ import dev.patrickgold.florisboard.lib.compose.FlorisIconButton import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel -import dev.patrickgold.florisboard.lib.snygg.SnyggRule +import org.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggRule import dev.patrickgold.florisboard.lib.util.InputMethodUtils import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog import org.florisboard.lib.kotlin.curlyFormat diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/FineTuneDialog.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/FineTuneDialog.kt index 981399ed..5fe01fbd 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/FineTuneDialog.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/FineTuneDialog.kt @@ -23,7 +23,7 @@ import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.app.florisPreferenceModel import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggLevel import dev.patrickgold.jetpref.datastore.ui.ListPreference import dev.patrickgold.jetpref.datastore.ui.PreferenceLayout import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/SnyggValueIcon.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/SnyggValueIcon.kt index fc73e207..945a0d02 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/SnyggValueIcon.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/SnyggValueIcon.kt @@ -39,15 +39,15 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue +import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggDefinedVarValue +import org.florisboard.lib.snygg.value.SnyggDpSizeValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.value.SnyggSpSizeValue +import org.florisboard.lib.snygg.value.SnyggValue import dev.patrickgold.jetpref.material.ui.checkeredBackground object SnyggValueIcon { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeEditorScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeEditorScreen.kt index 2f81cffe..0af42823 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeEditorScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeEditorScreen.kt @@ -89,15 +89,6 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.ext.ExtensionValidation import dev.patrickgold.florisboard.lib.rememberValidationResult -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetEditor -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec -import dev.patrickgold.florisboard.lib.snygg.SnyggRule -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetEditor -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetJsonConfig -import dev.patrickgold.florisboard.lib.snygg.definedVariablesRule -import dev.patrickgold.florisboard.lib.snygg.isDefinedVariablesRule import dev.patrickgold.florisboard.themeManager import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog @@ -107,6 +98,15 @@ import kotlinx.coroutines.launch import org.florisboard.lib.android.showLongToast import org.florisboard.lib.kotlin.io.readJson import org.florisboard.lib.kotlin.io.subFile +import org.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggPropertySetEditor +import org.florisboard.lib.snygg.SnyggPropertySetSpec +import org.florisboard.lib.snygg.SnyggRule +import org.florisboard.lib.snygg.SnyggStylesheet +import org.florisboard.lib.snygg.SnyggStylesheetEditor +import org.florisboard.lib.snygg.SnyggStylesheetJsonConfig +import org.florisboard.lib.snygg.definedVariablesRule +import org.florisboard.lib.snygg.isDefinedVariablesRule internal val IntListSaver = Saver, ArrayList>( save = { ArrayList(it) }, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeTranslations.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeTranslations.kt index a8ff0458..67ab7669 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeTranslations.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeTranslations.kt @@ -23,27 +23,27 @@ import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.lib.UnicodeCtrlChar import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.Snygg -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel -import dev.patrickgold.florisboard.lib.snygg.SnyggRule -import dev.patrickgold.florisboard.lib.snygg.value.RgbaColor -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCircleShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggExplicitInheritValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentageSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRectangleShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValueEncoder +import org.florisboard.lib.snygg.Snygg +import org.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggRule +import org.florisboard.lib.snygg.value.RgbaColor +import org.florisboard.lib.snygg.value.SnyggCircleShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggDefinedVarValue +import org.florisboard.lib.snygg.value.SnyggDpSizeValue +import org.florisboard.lib.snygg.value.SnyggExplicitInheritValue +import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue +import org.florisboard.lib.snygg.value.SnyggPercentageSizeValue +import org.florisboard.lib.snygg.value.SnyggRectangleShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.value.SnyggSpSizeValue +import org.florisboard.lib.snygg.value.SnyggValue +import org.florisboard.lib.snygg.value.SnyggValueEncoder import kotlin.math.roundToInt @Composable diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt index cf3a1644..3c401888 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt @@ -105,14 +105,14 @@ import dev.patrickgold.florisboard.lib.compose.rippleClickable import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.stringRes import dev.patrickgold.florisboard.lib.observeAsNonNullState -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet -import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder -import dev.patrickgold.florisboard.lib.snygg.ui.snyggClip -import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.SnyggPropertySet +import org.florisboard.lib.snygg.ui.SnyggSurface +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggBorder +import org.florisboard.lib.snygg.ui.snyggClip +import org.florisboard.lib.snygg.ui.snyggShadow +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.lib.util.NetworkUtils import dev.patrickgold.jetpref.datastore.model.observeAsState diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt index c7e935c8..415e90d5 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/MediaInputLayout.kt @@ -57,7 +57,7 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager -import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface +import org.florisboard.lib.snygg.ui.SnyggSurface @SuppressLint("MutableCollectionMutableState") @Composable diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt index e73f98a0..06318cd3 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/EmojiPaletteView.kt @@ -92,11 +92,11 @@ import org.florisboard.lib.android.systemService import dev.patrickgold.florisboard.lib.compose.florisScrollbar import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder -import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggBorder +import org.florisboard.lib.snygg.ui.snyggShadow +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.jetpref.datastore.model.observeAsState import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt index 9e1a6ffc..09240091 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedPanel.kt @@ -39,8 +39,8 @@ import dev.patrickgold.florisboard.ime.keyboard.FlorisImeSizing import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.solidColor @Composable fun RowScope.OneHandedPanel( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt index 526a5b02..84d2a053 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/popup/PopupUi.kt @@ -43,12 +43,12 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.lib.compose.safeTimes -import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder -import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.ui.SnyggSurface +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggBorder +import org.florisboard.lib.snygg.ui.snyggShadow +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize @Composable fun PopupBaseBox( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt index 788497d2..9b755266 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesRow.kt @@ -60,9 +60,9 @@ import org.florisboard.lib.android.AndroidVersion import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.observeAsNonNullState -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.nlpManager import dev.patrickgold.florisboard.subtypeManager import dev.patrickgold.jetpref.datastore.model.observeAsState diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt index 5fc0b2ce..cf8e8810 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt @@ -65,10 +65,10 @@ import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.lib.compose.horizontalTween import dev.patrickgold.florisboard.lib.compose.verticalTween -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder -import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggBorder +import org.florisboard.lib.snygg.ui.snyggShadow +import org.florisboard.lib.snygg.ui.solidColor import dev.patrickgold.jetpref.datastore.model.observeAsState import dev.patrickgold.jetpref.datastore.ui.vectorResource diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt index 1b2a13eb..34cb3040 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionButton.kt @@ -62,11 +62,11 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi -import dev.patrickgold.florisboard.lib.snygg.ui.shape -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBorder -import dev.patrickgold.florisboard.lib.snygg.ui.snyggClip -import dev.patrickgold.florisboard.lib.snygg.ui.snyggShadow -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.shape +import org.florisboard.lib.snygg.ui.snyggBorder +import org.florisboard.lib.snygg.ui.snyggClip +import org.florisboard.lib.snygg.ui.snyggShadow +import org.florisboard.lib.snygg.ui.solidColor private val BackgroundAnimationSpec = tween(durationMillis = 150, easing = FastOutSlowInEasing) private val DebugHelperColor = Color.Red.copy(alpha = 0.5f) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt index 314d9145..acfc6f02 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsEditorPanel.kt @@ -66,11 +66,11 @@ import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.lib.compose.FlorisIconButton import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.snyggClip -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.SnyggPropertySet +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggClip +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.lib.toIntOffset private const val ItemNotFound = -1 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt index c7ef3784..80c90139 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt @@ -39,8 +39,8 @@ import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.florisboard.lib.snygg.ui.SnyggButton -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.SnyggButton +import org.florisboard.lib.snygg.ui.snyggBackground import dev.patrickgold.jetpref.datastore.model.observeAsState @Composable diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt index 810c677a..66dd5798 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt @@ -34,7 +34,7 @@ import dev.patrickgold.florisboard.ime.smartbar.SmartbarLayout import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.keyboardManager -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.snyggBackground import dev.patrickgold.jetpref.datastore.model.observeAsState internal val ToggleOverflowPanelAction = QuickAction.InsertKey(TextKeyData.TOGGLE_ACTIONS_OVERFLOW) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt index 9555656c..d5d2448e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/TextInputLayout.kt @@ -42,7 +42,7 @@ import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyboardLayout import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import dev.patrickgold.florisboard.keyboardManager -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.solidColor import dev.patrickgold.jetpref.datastore.model.observeAsState @Composable diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt index 199fa112..a4c3d685 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt @@ -91,10 +91,10 @@ import dev.patrickgold.florisboard.lib.compose.safeTimes import dev.patrickgold.florisboard.lib.devtools.LogTopic import dev.patrickgold.florisboard.lib.devtools.flogDebug import dev.patrickgold.florisboard.lib.observeAsTransformingState -import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface -import dev.patrickgold.florisboard.lib.snygg.ui.snyggBackground -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.ui.spSize +import org.florisboard.lib.snygg.ui.SnyggSurface +import org.florisboard.lib.snygg.ui.snyggBackground +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.spSize import dev.patrickgold.florisboard.lib.toIntOffset import dev.patrickgold.jetpref.datastore.model.observeAsState import kotlinx.coroutines.channels.Channel diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt index 6cb70b32..a85fe476 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeTheme.kt @@ -29,9 +29,14 @@ import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.TextStyle +import dev.patrickgold.florisboard.ime.input.InputShiftState +import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.lib.observeAsNonNullState -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet +import org.florisboard.lib.snygg.SnyggStylesheet import dev.patrickgold.florisboard.themeManager +import org.florisboard.lib.snygg.Snygg +import org.florisboard.lib.snygg.ui.ProvideSnyggUiDefaults +import org.florisboard.lib.snygg.ui.SnyggUiDefaults private val LocalConfig = staticCompositionLocalOf { error("not init") } private val LocalStyle = staticCompositionLocalOf { error("not init") } @@ -59,6 +64,44 @@ object FlorisImeTheme { fun fallbackContentColor(): Color { return if (config.isNightTheme) Color.White else Color.Black } + + fun init() { + Snygg.init( + stylesheetSpec = FlorisImeUiSpec, + rulePreferredElementSorting = listOf( + FlorisImeUi.Keyboard, + FlorisImeUi.Key, + FlorisImeUi.KeyHint, + FlorisImeUi.KeyPopup, + FlorisImeUi.Smartbar, + FlorisImeUi.SmartbarSharedActionsRow, + FlorisImeUi.SmartbarSharedActionsToggle, + FlorisImeUi.SmartbarExtendedActionsRow, + FlorisImeUi.SmartbarExtendedActionsToggle, + FlorisImeUi.SmartbarActionKey, + FlorisImeUi.SmartbarActionTile, + FlorisImeUi.SmartbarActionsOverflow, + FlorisImeUi.SmartbarActionsOverflowCustomizeButton, + FlorisImeUi.SmartbarActionsEditor, + FlorisImeUi.SmartbarActionsEditorHeader, + FlorisImeUi.SmartbarActionsEditorSubheader, + FlorisImeUi.SmartbarCandidatesRow, + FlorisImeUi.SmartbarCandidateWord, + FlorisImeUi.SmartbarCandidateClip, + FlorisImeUi.SmartbarCandidateSpacer, + ), + rulePlaceholders = mapOf( + "c:delete" to KeyCode.DELETE, + "c:enter" to KeyCode.ENTER, + "c:shift" to KeyCode.SHIFT, + "c:space" to KeyCode.SPACE, + "sh:unshifted" to InputShiftState.UNSHIFTED.value, + "sh:shifted_manual" to InputShiftState.SHIFTED_MANUAL.value, + "sh:shifted_automatic" to InputShiftState.SHIFTED_AUTOMATIC.value, + "sh:caps_lock" to InputShiftState.CAPS_LOCK.value, + ), + ) + } } @Composable @@ -80,7 +123,12 @@ fun FlorisImeTheme(content: @Composable () -> Unit) { LocalStyle provides activeStyle, LocalTextStyle provides TextStyle.Default, ) { - content() + val fallbackContentColor = FlorisImeTheme.fallbackContentColor() + val fallbackSurfaceColor = FlorisImeTheme.fallbackSurfaceColor() + val snyggUiDefaults = remember(fallbackContentColor, fallbackSurfaceColor) { + SnyggUiDefaults(fallbackContentColor, fallbackSurfaceColor) + } + ProvideSnyggUiDefaults(snyggUiDefaults, content) } } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt index 3a218b37..e1f8785c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeThemeBaseStyle.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import dev.patrickgold.florisboard.ime.input.InputShiftState import dev.patrickgold.florisboard.ime.text.key.KeyCode -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet +import org.florisboard.lib.snygg.SnyggStylesheet val FlorisImeThemeBaseStyle = SnyggStylesheet { defines { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt index b0fb4f4e..908ce2ff 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/FlorisImeUiSpec.kt @@ -16,21 +16,21 @@ package dev.patrickgold.florisboard.ime.theme -import dev.patrickgold.florisboard.lib.snygg.Snygg -import dev.patrickgold.florisboard.lib.snygg.SnyggLevel -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpecBuilder -import dev.patrickgold.florisboard.lib.snygg.SnyggSpec -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCircleShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRectangleShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue +import org.florisboard.lib.snygg.Snygg +import org.florisboard.lib.snygg.SnyggLevel +import org.florisboard.lib.snygg.SnyggPropertySetSpecBuilder +import org.florisboard.lib.snygg.SnyggSpec +import org.florisboard.lib.snygg.value.SnyggCircleShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggDpSizeValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouDarkColorValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue +import org.florisboard.lib.snygg.value.SnyggRectangleShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.value.SnyggSpSizeValue fun SnyggPropertySetSpecBuilder.background() { property( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeExtensionComponent.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeExtensionComponent.kt index 83459ec3..d7209784 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeExtensionComponent.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeExtensionComponent.kt @@ -18,7 +18,7 @@ package dev.patrickgold.florisboard.ime.theme import dev.patrickgold.florisboard.lib.ext.ExtensionComponent import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetEditor +import org.florisboard.lib.snygg.SnyggStylesheetEditor import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeManager.kt index 9b61d90f..d30d3977 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeManager.kt @@ -47,11 +47,6 @@ import dev.patrickgold.florisboard.appContext import dev.patrickgold.florisboard.extensionManager import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName import dev.patrickgold.florisboard.lib.io.ZipUtils -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheetJsonConfig -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor -import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue import dev.patrickgold.florisboard.lib.util.ViewUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -59,7 +54,11 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import kotlinx.serialization.decodeFromString +import org.florisboard.lib.snygg.SnyggStylesheet +import org.florisboard.lib.snygg.SnyggStylesheetJsonConfig +import org.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.value.MaterialYouColor +import org.florisboard.lib.snygg.value.SnyggSolidColorValue import kotlin.properties.Delegates /** diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/SystemUi.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/SystemUi.kt index 3664f057..050db359 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/SystemUi.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/SystemUi.kt @@ -30,7 +30,7 @@ import androidx.core.view.WindowInsetsControllerCompat import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import org.florisboard.lib.android.AndroidVersion -import dev.patrickgold.florisboard.lib.snygg.ui.solidColor +import org.florisboard.lib.snygg.ui.solidColor @Composable diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionValidation.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionValidation.kt index e397a732..f7818efb 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionValidation.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionValidation.kt @@ -20,17 +20,17 @@ import androidx.core.text.trimmedLength import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.ime.theme.ThemeExtensionComponent import dev.patrickgold.florisboard.lib.ValidationRule -import dev.patrickgold.florisboard.lib.snygg.SnyggStylesheet -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.SnyggStylesheet +import org.florisboard.lib.snygg.value.SnyggDpShapeValue +import org.florisboard.lib.snygg.value.SnyggPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue import dev.patrickgold.florisboard.lib.validate +import org.florisboard.lib.snygg.value.SnyggVarValue object ExtensionValidation { private val MetaIdRegex = """^[a-z][a-z0-9_]*(\.[a-z0-9][a-z0-9_]*)*${'$'}""".toRegex() private val ComponentIdRegex = """^[a-z][a-z0-9_]*${'$'}""".toRegex() private val ThemeComponentStylesheetPathRegex = """^[^:*<>"']*${'$'}""".toRegex() - val ThemeComponentVariableNameRegex = """^[a-zA-Z0-9-_]+${'$'}""".toRegex() val MetaId = ValidationRule { forKlass = ExtensionMeta::class @@ -148,8 +148,8 @@ object ExtensionValidation { when { str.isBlank() -> resultInvalid(error = R.string.ext__validation__enter_property) str == "-" || str.startsWith("--") -> resultValid() - !ThemeComponentVariableNameRegex.matches(str) -> { - resultInvalid(error = R.string.ext__validation__error_property, "variable_name_regex" to ThemeComponentVariableNameRegex) + !SnyggVarValue.VariableNameRegex.matches(str) -> { + resultInvalid(error = R.string.ext__validation__error_property, "variable_name_regex" to SnyggVarValue.VariableNameRegex) } else -> resultValid(hint = R.string.ext__validation__hint_property) } @@ -163,7 +163,7 @@ object ExtensionValidation { val str = input.trim() when { str.isBlank() -> resultInvalid(error = R.string.ext__validation__enter_color) - dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue.deserialize(str).isFailure -> { + org.florisboard.lib.snygg.value.SnyggSolidColorValue.deserialize(str).isFailure -> { resultInvalid(error = R.string.ext__validation__error_color) } else -> resultValid() diff --git a/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRuleTest.kt b/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRuleTest.kt index a2678978..41d97ce3 100644 --- a/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRuleTest.kt +++ b/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRuleTest.kt @@ -1,4 +1,4 @@ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg import io.kotest.core.spec.style.FunSpec import io.kotest.data.forAll diff --git a/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValueTest.kt b/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValueTest.kt index b8e3dbe0..22b4cb7c 100644 --- a/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValueTest.kt +++ b/app/src/test/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValueTest.kt @@ -1,4 +1,4 @@ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp diff --git a/lib/android/build.gradle.kts b/lib/android/build.gradle.kts index e8c3586e..fbbe1b07 100644 --- a/lib/android/build.gradle.kts +++ b/lib/android/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.agp.library) alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) } val projectMinSdk: String by project diff --git a/lib/android/src/androidTest/java/org/florisboard/lib/android/ExampleInstrumentedTest.kt b/lib/android/src/androidTest/java/org/florisboard/lib/android/ExampleInstrumentedTest.kt deleted file mode 100644 index a3dbf4fb..00000000 --- a/lib/android/src/androidTest/java/org/florisboard/lib/android/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package org.florisboard.lib.android - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("org.florisboard.lib.android.test", appContext.packageName) - } -} diff --git a/lib/android/src/test/java/org/florisboard/lib/android/ExampleUnitTest.kt b/lib/android/src/test/java/org/florisboard/lib/android/ExampleUnitTest.kt deleted file mode 100644 index 0ca11e04..00000000 --- a/lib/android/src/test/java/org/florisboard/lib/android/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.florisboard.lib.android - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/lib/snygg/.gitignore b/lib/snygg/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/lib/snygg/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/lib/snygg/build.gradle.kts b/lib/snygg/build.gradle.kts new file mode 100644 index 00000000..10c5f80c --- /dev/null +++ b/lib/snygg/build.gradle.kts @@ -0,0 +1,53 @@ +plugins { + alias(libs.plugins.agp.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.serialization) +} + +val projectMinSdk: String by project +val projectCompileSdk: String by project + +android { + namespace = "org.florisboard.lib.snygg" + compileSdk = projectCompileSdk.toInt() + + defaultConfig { + minSdk = projectMinSdk.toInt() + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get() + } + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + implementation(project(":lib:android")) + implementation(project(":lib:kotlin")) + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.ui) + implementation(libs.kotlinx.serialization.json) +} diff --git a/lib/snygg/consumer-rules.pro b/lib/snygg/consumer-rules.pro new file mode 100644 index 00000000..e69de29b diff --git a/lib/snygg/proguard-rules.pro b/lib/snygg/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/lib/snygg/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/lib/snygg/src/main/AndroidManifest.xml b/lib/snygg/src/main/AndroidManifest.xml new file mode 100644 index 00000000..8bdb7e14 --- /dev/null +++ b/lib/snygg/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/Snygg.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/Snygg.kt similarity index 76% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/Snygg.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/Snygg.kt index 3a0f4b3c..1104a95d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/Snygg.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/Snygg.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg /** * Main object for defining all known Snygg property names. @@ -41,4 +41,14 @@ object Snygg { const val ShadowElevation = "shadow-elevation" const val Shape = "shape" + + fun init( + stylesheetSpec: SnyggSpec, + rulePreferredElementSorting: List, + rulePlaceholders: Map, + ) { + SnyggStylesheetSerializer.GlobalStylesheetSpec = stylesheetSpec + SnyggRule.PreferredElementSorting = rulePreferredElementSorting + SnyggRule.Placeholders = rulePlaceholders + } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggLevel.kt similarity index 96% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggLevel.kt index c0a3f46f..ee48b895 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggLevel.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg /** * SnyggLevel indicates if a rule property is intended to be edited by all users (BASIC) or only by advanced users diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggPropertySet.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggPropertySet.kt similarity index 87% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggPropertySet.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggPropertySet.kt index 207e46cb..1e2fd7ce 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggPropertySet.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggPropertySet.kt @@ -14,28 +14,28 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg import androidx.annotation.FloatRange import androidx.annotation.IntRange import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit -import dev.patrickgold.florisboard.lib.snygg.value.RgbaColor -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCircleShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggImageRefValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggPercentageSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRectangleShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue +import org.florisboard.lib.snygg.value.RgbaColor +import org.florisboard.lib.snygg.value.SnyggCircleShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggCutCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggDefinedVarValue +import org.florisboard.lib.snygg.value.SnyggDpSizeValue +import org.florisboard.lib.snygg.value.SnyggImageRefValue +import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue +import org.florisboard.lib.snygg.value.SnyggPercentageSizeValue +import org.florisboard.lib.snygg.value.SnyggRectangleShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerDpShapeValue +import org.florisboard.lib.snygg.value.SnyggRoundedCornerPercentShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.value.SnyggSpSizeValue +import org.florisboard.lib.snygg.value.SnyggValue class SnyggPropertySet(val properties: Map) { val width = properties[Snygg.Width] ?: SnyggImplicitInheritValue diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggRule.kt similarity index 85% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggRule.kt index 20f1d45f..8b4a234d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggRule.kt @@ -14,12 +14,9 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg import androidx.compose.runtime.saveable.Saver -import dev.patrickgold.florisboard.ime.input.InputShiftState -import dev.patrickgold.florisboard.ime.text.key.KeyCode -import dev.patrickgold.florisboard.ime.theme.FlorisImeUi import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.descriptors.PrimitiveKind @@ -60,39 +57,9 @@ data class SnyggRule( private val RuleValidator = """^(@?)[a-zA-Z0-9-]+(\[(code|group|shiftstate)=(\+|-)?([0-9]+)(\|(\+|-)?([0-9]+))*\])*(:(pressed|focus|disabled))*${'$'}""".toRegex() - val Placeholders = mapOf( - "c:delete" to KeyCode.DELETE, - "c:enter" to KeyCode.ENTER, - "c:shift" to KeyCode.SHIFT, - "c:space" to KeyCode.SPACE, - "sh:unshifted" to InputShiftState.UNSHIFTED.value, - "sh:shifted_manual" to InputShiftState.SHIFTED_MANUAL.value, - "sh:shifted_automatic" to InputShiftState.SHIFTED_AUTOMATIC.value, - "sh:caps_lock" to InputShiftState.CAPS_LOCK.value, - ) + var Placeholders = mapOf() - private val PreferredElementSorting = listOf( - FlorisImeUi.Keyboard, - FlorisImeUi.Key, - FlorisImeUi.KeyHint, - FlorisImeUi.KeyPopup, - FlorisImeUi.Smartbar, - FlorisImeUi.SmartbarSharedActionsRow, - FlorisImeUi.SmartbarSharedActionsToggle, - FlorisImeUi.SmartbarExtendedActionsRow, - FlorisImeUi.SmartbarExtendedActionsToggle, - FlorisImeUi.SmartbarActionKey, - FlorisImeUi.SmartbarActionTile, - FlorisImeUi.SmartbarActionsOverflow, - FlorisImeUi.SmartbarActionsOverflowCustomizeButton, - FlorisImeUi.SmartbarActionsEditor, - FlorisImeUi.SmartbarActionsEditorHeader, - FlorisImeUi.SmartbarActionsEditorSubheader, - FlorisImeUi.SmartbarCandidatesRow, - FlorisImeUi.SmartbarCandidateWord, - FlorisImeUi.SmartbarCandidateClip, - FlorisImeUi.SmartbarCandidateSpacer, - ) + internal var PreferredElementSorting = listOf() val Saver = Saver( save = { it?.toString() ?: "" }, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggSpec.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggSpec.kt similarity index 89% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggSpec.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggSpec.kt index 67a8835f..a15ae9ac 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggSpec.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggSpec.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggExplicitInheritValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValueEncoder +import org.florisboard.lib.snygg.value.SnyggDefinedVarValue +import org.florisboard.lib.snygg.value.SnyggExplicitInheritValue +import org.florisboard.lib.snygg.value.SnyggValueEncoder open class SnyggSpec(init: SnyggSpecBuilder.() -> Unit) { val elements: Map diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggStylesheet.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggStylesheet.kt similarity index 95% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggStylesheet.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggStylesheet.kt index bef60af8..fef257f2 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggStylesheet.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/SnyggStylesheet.kt @@ -14,15 +14,10 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg +package org.florisboard.lib.snygg import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import dev.patrickgold.florisboard.ime.theme.FlorisImeUiSpec -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDefinedVarValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggImplicitInheritValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggVarValueEncoders import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.builtins.MapSerializer @@ -30,6 +25,10 @@ import kotlinx.serialization.builtins.serializer import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.Json +import org.florisboard.lib.snygg.value.SnyggDefinedVarValue +import org.florisboard.lib.snygg.value.SnyggImplicitInheritValue +import org.florisboard.lib.snygg.value.SnyggValue +import org.florisboard.lib.snygg.value.SnyggVarValueEncoders val SnyggStylesheetJsonConfig = Json @@ -251,6 +250,10 @@ class SnyggStylesheetSerializer : KSerializer { override val descriptor = ruleMapSerializer.descriptor + companion object { + var GlobalStylesheetSpec: SnyggSpec? = null + } + override fun serialize(encoder: Encoder, value: SnyggStylesheet) { val rawRuleMap = value.rules.mapValues { (_, propertySet) -> propertySet.properties.mapValues { (_, snyggValue) -> @@ -264,8 +267,8 @@ class SnyggStylesheetSerializer : KSerializer { val rawRuleMap = ruleMapSerializer.deserialize(decoder) val ruleMap = mutableMapOf() for ((rule, rawProperties) in rawRuleMap) { - // FIXME: hardcoding which spec to use, the selection should happen dynamically - val stylesheetSpec = FlorisImeUiSpec + val stylesheetSpec = GlobalStylesheetSpec ?: + throw IllegalStateException("No global stylesheet spec defined") if (rule.isDefinedVariablesRule()) { val parsedProperties = rawProperties.mapValues { (_, rawValue) -> SnyggVarValueEncoders.firstNotNullOfOrNull { it.deserialize(rawValue).getOrNull() } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggButton.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggButton.kt similarity index 82% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggButton.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggButton.kt index 94b5e7bc..6c6f5f3a 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggButton.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggButton.kt @@ -14,24 +14,23 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.ui +package org.florisboard.lib.snygg.ui import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material.Button -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Icon -import androidx.compose.material.Text +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp -import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet +import org.florisboard.lib.snygg.SnyggPropertySet @Composable fun SnyggButton( @@ -44,6 +43,7 @@ fun SnyggButton( contentPadding: PaddingValues = ButtonDefaults.ContentPadding, ) { val context = LocalContext.current + val uiDefaults = LocalSnyggUiDefaults.current val border = remember (style) { BorderStroke(style.borderWidth.dpSize(default = 0.dp), style.borderColor.solidColor(context)) } @@ -51,7 +51,7 @@ fun SnyggButton( Button( modifier = modifier, enabled = enabled, - elevation = ButtonDefaults.elevation( + elevation = ButtonDefaults.buttonElevation( defaultElevation = elevation, pressedElevation = elevation, disabledElevation = elevation, @@ -61,8 +61,8 @@ fun SnyggButton( shape = style.shape.shape(), border = border, colors = ButtonDefaults.buttonColors( - backgroundColor = style.background.solidColor(context, default = FlorisImeTheme.fallbackContentColor()), - contentColor = style.foreground.solidColor(context, default = FlorisImeTheme.fallbackSurfaceColor()), + containerColor = style.background.solidColor(context, default = uiDefaults.fallbackContentColor), + contentColor = style.foreground.solidColor(context, default = uiDefaults.fallbackSurfaceColor), ), contentPadding = contentPadding, onClick = onClick, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggModifiers.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggModifiers.kt similarity index 85% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggModifiers.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggModifiers.kt index 174b7cec..41361969 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggModifiers.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggModifiers.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.ui +package org.florisboard.lib.snygg.ui import android.content.Context import androidx.compose.foundation.background @@ -30,14 +30,13 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.takeOrElse -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet -import dev.patrickgold.florisboard.lib.snygg.value.SnyggDpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouLightColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggMaterialYouValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggShapeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSolidColorValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggSpSizeValue -import dev.patrickgold.florisboard.lib.snygg.value.SnyggValue +import org.florisboard.lib.snygg.SnyggPropertySet +import org.florisboard.lib.snygg.value.SnyggDpSizeValue +import org.florisboard.lib.snygg.value.SnyggMaterialYouValue +import org.florisboard.lib.snygg.value.SnyggShapeValue +import org.florisboard.lib.snygg.value.SnyggSolidColorValue +import org.florisboard.lib.snygg.value.SnyggSpSizeValue +import org.florisboard.lib.snygg.value.SnyggValue fun Modifier.snyggBackground( context: Context, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggSurface.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggSurface.kt similarity index 82% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggSurface.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggSurface.kt index 1d949e23..335e3e2c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/ui/SnyggSurface.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggSurface.kt @@ -14,22 +14,21 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.ui +package org.florisboard.lib.snygg.ui import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding -import androidx.compose.material.LocalAbsoluteElevation -import androidx.compose.material.LocalContentColor +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.takeOrElse -import dev.patrickgold.florisboard.ime.theme.FlorisImeTheme -import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySet +import org.florisboard.lib.snygg.SnyggPropertySet val NoContentPadding = PaddingValues(all = 0.dp) @@ -43,12 +42,13 @@ fun SnyggSurface( content: @Composable BoxScope.() -> Unit, ) { val context = LocalContext.current + val uiDefaults = LocalSnyggUiDefaults.current val elevationDp = style.shadowElevation.dpSize().takeOrElse { 0.dp }.coerceAtLeast(0.dp) - val contentColor = style.foreground.solidColor(context, default = FlorisImeTheme.fallbackContentColor()) - val absoluteElevation = LocalAbsoluteElevation.current + elevationDp + val contentColor = style.foreground.solidColor(context, default = uiDefaults.fallbackContentColor) + val absoluteElevation = LocalAbsoluteTonalElevation.current + elevationDp CompositionLocalProvider( LocalContentColor provides contentColor, - LocalAbsoluteElevation provides absoluteElevation, + LocalAbsoluteTonalElevation provides absoluteElevation, ) { Box( modifier = modifier diff --git a/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggUiDefaults.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggUiDefaults.kt new file mode 100644 index 00000000..efa9e194 --- /dev/null +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggUiDefaults.kt @@ -0,0 +1,27 @@ +package org.florisboard.lib.snygg.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color + +data class SnyggUiDefaults( + val fallbackContentColor: Color, + val fallbackSurfaceColor: Color, +) + +internal val LocalSnyggUiDefaults = staticCompositionLocalOf { + SnyggUiDefaults( + fallbackContentColor = Color.Black, + fallbackSurfaceColor = Color.White, + ) +} + +@Composable fun ProvideSnyggUiDefaults( + defaults: SnyggUiDefaults, + content: @Composable () -> Unit, +) { + CompositionLocalProvider(LocalSnyggUiDefaults provides defaults) { + content() + } +} diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggAppearanceValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggAppearanceValue.kt similarity index 99% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggAppearanceValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggAppearanceValue.kt index ff9ca692..a1dd0dcf 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggAppearanceValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggAppearanceValue.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import androidx.compose.ui.graphics.Color import kotlin.math.roundToInt diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggIdToValueMap.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggIdToValueMap.kt similarity index 96% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggIdToValueMap.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggIdToValueMap.kt index acf1f949..a47df770 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggIdToValueMap.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggIdToValueMap.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value @Suppress("UNCHECKED_CAST") @JvmInline diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt similarity index 95% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt index f6fe5726..7eae722c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt @@ -14,17 +14,17 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import android.content.Context import androidx.compose.material3.ColorScheme import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.ui.graphics.Color -import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.ColorName -import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.ColorNameId -import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.darkColorName -import dev.patrickgold.florisboard.lib.snygg.value.MaterialYouColor.lightColorName +import org.florisboard.lib.snygg.value.MaterialYouColor.ColorName +import org.florisboard.lib.snygg.value.MaterialYouColor.ColorNameId +import org.florisboard.lib.snygg.value.MaterialYouColor.darkColorName +import org.florisboard.lib.snygg.value.MaterialYouColor.lightColorName sealed interface SnyggMaterialYouValue : SnyggValue { val colorName: String diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggRefValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggRefValue.kt similarity index 97% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggRefValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggRefValue.kt index 89d40f6e..a4d48b04 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggRefValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggRefValue.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value private const val RelPath = "relPath" private const val ImageFunction = "image" diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggShapeValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggShapeValue.kt similarity index 99% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggShapeValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggShapeValue.kt index 8c53e1c0..565cb967 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggShapeValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggShapeValue.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CutCornerShape diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggSizeValue.kt similarity index 98% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggSizeValue.kt index 1076a471..bed556e6 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggSizeValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggSizeValue.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValue.kt similarity index 98% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValue.kt index ca626157..79061a77 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValue.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import org.florisboard.lib.android.AndroidVersion diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueEncoder.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValueEncoder.kt similarity index 97% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueEncoder.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValueEncoder.kt index c2e6719c..d231d725 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueEncoder.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValueEncoder.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value /** * SnyggValueEncoder is responsible for the representation of a [SnyggValue] specification and for providing methods diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValueSpec.kt similarity index 99% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValueSpec.kt index 29b79136..e9c445b4 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggValueSpec.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value +package org.florisboard.lib.snygg.value import org.florisboard.lib.kotlin.toStringWithoutDotZero diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggVarValue.kt b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggVarValue.kt similarity index 86% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggVarValue.kt rename to lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggVarValue.kt index c1508849..20b5daab 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggVarValue.kt +++ b/lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/value/SnyggVarValue.kt @@ -14,18 +14,20 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.snygg.value - -import dev.patrickgold.florisboard.lib.ext.ExtensionValidation +package org.florisboard.lib.snygg.value private const val VarKey = "varKey" -sealed interface SnyggVarValue : SnyggValue +sealed interface SnyggVarValue : SnyggValue { + companion object { + val VariableNameRegex = """^[a-zA-Z0-9-_]+${'$'}""".toRegex() + } +} data class SnyggDefinedVarValue(val key: String) : SnyggVarValue { companion object : SnyggValueEncoder { override val spec = SnyggValueSpec { - function(name = "var") { string(id = VarKey, regex = ExtensionValidation.ThemeComponentVariableNameRegex) } + function(name = "var") { string(id = VarKey, regex = SnyggVarValue.VariableNameRegex) } } override fun defaultValue() = SnyggDefinedVarValue("") diff --git a/settings.gradle.kts b/settings.gradle.kts index e6fb50f2..6f150abb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -38,3 +38,4 @@ include(":benchmark") include(":lib:android") include(":lib:kotlin") include(":lib:native") +include(":lib:snygg")