From 624419879560cf77c82062b0139faf1ab11bf9dc Mon Sep 17 00:00:00 2001 From: Patrick Goldinger Date: Fri, 5 Jul 2024 17:56:29 +0200 Subject: [PATCH 1/2] Rework enum display string strategy Preparation for further lib de-entanglement --- .../florisboard/app/EnumDisplayEntries.kt | 597 ++++++++++++++++++ .../app/settings/advanced/AdvancedScreen.kt | 26 +- .../app/settings/gestures/GesturesScreen.kt | 21 +- .../settings/keyboard/InputFeedbackScreen.kt | 7 +- .../app/settings/keyboard/KeyboardScreen.kt | 17 +- .../localization/LocalizationScreen.kt | 4 +- .../app/settings/media/MediaScreen.kt | 3 +- .../app/settings/smartbar/SmartbarScreen.kt | 7 +- .../app/settings/theme/DisplayColorsAs.kt | 24 - .../settings/theme/DisplayKbdAfterDialog.kt | 29 - .../app/settings/theme/FineTuneDialog.kt | 7 +- .../app/settings/theme/ThemeScreen.kt | 3 +- .../app/settings/typing/TypingScreen.kt | 3 +- .../ime/core/DisplayLanguageNamesIn.kt | 23 - .../ime/input/CapitalizationBehavior.kt | 19 - .../ime/input/HapticVibrationMode.kt | 23 - .../ime/input/InputFeedbackActivationMode.kt | 31 - .../florisboard/ime/keyboard/IncognitoMode.kt | 29 - .../florisboard/ime/keyboard/SpaceBarMode.kt | 23 - .../landscapeinput/LandscapeInputUiMode.kt | 23 - .../florisboard/ime/media/emoji/Emoji.kt | 52 -- .../ime/nlp/SpellingLanguageMode.kt | 19 - .../ime/onehanded/OneHandedMode.kt | 23 - .../ime/smartbar/CandidatesDisplayMode.kt | 23 - .../ime/smartbar/ExtendedActionsPlacement.kt | 29 - .../ime/smartbar/IncognitoDisplayMode.kt | 19 - .../ime/smartbar/SmartbarLayout.kt | 31 - .../ime/text/gestures/SwipeAction.kt | 143 ----- .../florisboard/ime/text/key/KeyHintMode.kt | 29 - .../ime/text/key/UtilityKeyAction.kt | 27 - .../florisboard/ime/theme/ThemeMode.kt | 27 - .../florisboard/lib/snygg/SnyggLevel.kt | 29 - app/src/main/res/values/strings.xml | 6 +- 33 files changed, 643 insertions(+), 733 deletions(-) create mode 100644 app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt new file mode 100644 index 00000000..fbc41578 --- /dev/null +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/EnumDisplayEntries.kt @@ -0,0 +1,597 @@ +package dev.patrickgold.florisboard.app + +import androidx.compose.runtime.Composable +import dev.patrickgold.florisboard.R +import dev.patrickgold.florisboard.app.settings.theme.DisplayColorsAs +import dev.patrickgold.florisboard.app.settings.theme.DisplayKbdAfterDialogs +import dev.patrickgold.florisboard.ime.core.DisplayLanguageNamesIn +import dev.patrickgold.florisboard.ime.input.CapitalizationBehavior +import dev.patrickgold.florisboard.ime.input.HapticVibrationMode +import dev.patrickgold.florisboard.ime.input.InputFeedbackActivationMode +import dev.patrickgold.florisboard.ime.keyboard.IncognitoMode +import dev.patrickgold.florisboard.ime.keyboard.SpaceBarMode +import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode +import dev.patrickgold.florisboard.ime.media.emoji.EmojiSkinTone +import dev.patrickgold.florisboard.ime.nlp.SpellingLanguageMode +import dev.patrickgold.florisboard.ime.onehanded.OneHandedMode +import dev.patrickgold.florisboard.ime.smartbar.CandidatesDisplayMode +import dev.patrickgold.florisboard.ime.smartbar.ExtendedActionsPlacement +import dev.patrickgold.florisboard.ime.smartbar.IncognitoDisplayMode +import dev.patrickgold.florisboard.ime.smartbar.SmartbarLayout +import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction +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 dev.patrickgold.jetpref.datastore.ui.ListPreferenceEntry +import dev.patrickgold.jetpref.datastore.ui.listPrefEntries +import org.florisboard.lib.kotlin.curlyFormat +import kotlin.reflect.KClass + +private const val DEFAULT = "" + +private val ENUM_DISPLAY_ENTRIES = mapOf, String>, @Composable () -> List>>( + AppTheme::class to DEFAULT to { + listPrefEntries { + entry( + key = AppTheme.AUTO, + label = stringRes(R.string.settings__system_default), + ) + entry( + key = AppTheme.AUTO_AMOLED, + label = stringRes(R.string.pref__advanced__settings_theme__auto_amoled), + ) + entry( + key = AppTheme.LIGHT, + label = stringRes(R.string.pref__advanced__settings_theme__light), + ) + entry( + key = AppTheme.DARK, + label = stringRes(R.string.pref__advanced__settings_theme__dark), + ) + entry( + key = AppTheme.AMOLED_DARK, + label = stringRes(R.string.pref__advanced__settings_theme__amoled_dark), + ) + } + }, + CandidatesDisplayMode::class to DEFAULT to { + listPrefEntries { + entry( + key = CandidatesDisplayMode.CLASSIC, + label = stringRes(R.string.enum__candidates_display_mode__classic), + ) + entry( + key = CandidatesDisplayMode.DYNAMIC, + label = stringRes(R.string.enum__candidates_display_mode__dynamic), + ) + entry( + key = CandidatesDisplayMode.DYNAMIC_SCROLLABLE, + label = stringRes(R.string.enum__candidates_display_mode__dynamic_scrollable), + ) + } + }, + CapitalizationBehavior::class to DEFAULT to { + listPrefEntries { + entry( + key = CapitalizationBehavior.CAPSLOCK_BY_DOUBLE_TAP, + label = stringRes(R.string.enum__capitalization_behavior__capslock_by_double_tap), + ) + entry( + key = CapitalizationBehavior.CAPSLOCK_BY_CYCLE, + label = stringRes(R.string.enum__capitalization_behavior__capslock_by_cycle), + ) + } + }, + DisplayColorsAs::class to DEFAULT to { + listPrefEntries { + entry( + key = DisplayColorsAs.HEX8, + label = stringRes(R.string.enum__display_colors_as__hex8), + description = stringRes(R.string.general__example_given).curlyFormat("example" to "#4caf50ff"), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = DisplayColorsAs.RGBA, + label = stringRes(R.string.enum__display_colors_as__rgba), + description = stringRes(R.string.general__example_given).curlyFormat("example" to "rgba(76,175,80,1.0)"), + showDescriptionOnlyIfSelected = true, + ) + } + }, + DisplayKbdAfterDialogs::class to DEFAULT to { + listPrefEntries { + entry( + key = DisplayKbdAfterDialogs.ALWAYS, + label = stringRes(R.string.enum__display_kbd_after_dialogs__always), + description = stringRes(R.string.enum__display_kbd_after_dialogs__always__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = DisplayKbdAfterDialogs.NEVER, + label = stringRes(R.string.enum__display_kbd_after_dialogs__never), + description = stringRes(R.string.enum__display_kbd_after_dialogs__never__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = DisplayKbdAfterDialogs.REMEMBER, + label = stringRes(R.string.enum__display_kbd_after_dialogs__remember), + description = stringRes(R.string.enum__display_kbd_after_dialogs__remember__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + DisplayLanguageNamesIn::class to DEFAULT to { + listPrefEntries { + entry( + key = DisplayLanguageNamesIn.SYSTEM_LOCALE, + label = stringRes(R.string.enum__display_language_names_in__system_locale), + description = stringRes(R.string.enum__display_language_names_in__system_locale__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = DisplayLanguageNamesIn.NATIVE_LOCALE, + label = stringRes(R.string.enum__display_language_names_in__native_locale), + description = stringRes(R.string.enum__display_language_names_in__native_locale__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + EmojiSkinTone::class to DEFAULT to { + listPrefEntries { + entry( + key = EmojiSkinTone.DEFAULT, + label = stringRes( + R.string.enum__emoji_skin_tone__default, + "emoji" to "\uD83D\uDC4B" // 👋 + ), + ) + entry( + key = EmojiSkinTone.LIGHT_SKIN_TONE, + label = stringRes( + R.string.enum__emoji_skin_tone__light_skin_tone, + "emoji" to "\uD83D\uDC4B\uD83C\uDFFB" // 👋🏻 + ), + ) + entry( + key = EmojiSkinTone.MEDIUM_LIGHT_SKIN_TONE, + label = stringRes( + R.string.enum__emoji_skin_tone__medium_light_skin_tone, + "emoji" to "\uD83D\uDC4B\uD83C\uDFFC" // 👋🏼 + ), + ) + entry( + key = EmojiSkinTone.MEDIUM_SKIN_TONE, + label = stringRes( + R.string.enum__emoji_skin_tone__medium_skin_tone, + "emoji" to "\uD83D\uDC4B\uD83C\uDFFD" // 👋🏽 + ), + ) + entry( + key = EmojiSkinTone.MEDIUM_DARK_SKIN_TONE, + label = stringRes( + R.string.enum__emoji_skin_tone__medium_dark_skin_tone, + "emoji" to "\uD83D\uDC4B\uD83C\uDFFE" // 👋🏾 + ), + ) + entry( + key = EmojiSkinTone.DARK_SKIN_TONE, + label = stringRes( + R.string.enum__emoji_skin_tone__dark_skin_tone, + "emoji" to "\uD83D\uDC4B\uD83C\uDFFF" // 👋🏿 + ), + ) + } + }, + ExtendedActionsPlacement::class to DEFAULT to { + listPrefEntries { + entry( + key = ExtendedActionsPlacement.ABOVE_CANDIDATES, + label = stringRes(R.string.enum__extended_actions_placement__above_candidates), + description = stringRes(R.string.enum__extended_actions_placement__above_candidates__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = ExtendedActionsPlacement.BELOW_CANDIDATES, + label = stringRes(R.string.enum__extended_actions_placement__below_candidates), + description = stringRes(R.string.enum__extended_actions_placement__below_candidates__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = ExtendedActionsPlacement.OVERLAY_APP_UI, + label = stringRes(R.string.enum__extended_actions_placement__overlay_app_ui), + description = stringRes(R.string.enum__extended_actions_placement__overlay_app_ui__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + HapticVibrationMode::class to DEFAULT to { + listPrefEntries { + entry( + key = HapticVibrationMode.USE_VIBRATOR_DIRECTLY, + label = stringRes(R.string.enum__haptic_vibration_mode__use_vibrator_directly), + description = stringRes(R.string.enum__haptic_vibration_mode__use_vibrator_directly__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = HapticVibrationMode.USE_HAPTIC_FEEDBACK_INTERFACE, + label = stringRes(R.string.enum__haptic_vibration_mode__use_haptic_feedback_interface), + description = stringRes(R.string.enum__haptic_vibration_mode__use_haptic_feedback_interface__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + KeyHintMode::class to DEFAULT to { + listPrefEntries { + entry( + key = KeyHintMode.ACCENT_PRIORITY, + label = stringRes(R.string.enum__key_hint_mode__accent_priority), + description = stringRes(R.string.enum__key_hint_mode__accent_priority__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = KeyHintMode.HINT_PRIORITY, + label = stringRes(R.string.enum__key_hint_mode__hint_priority), + description = stringRes(R.string.enum__key_hint_mode__hint_priority__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = KeyHintMode.SMART_PRIORITY, + label = stringRes(R.string.enum__key_hint_mode__smart_priority), + description = stringRes(R.string.enum__key_hint_mode__smart_priority__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + IncognitoDisplayMode::class to DEFAULT to { + listPrefEntries { + entry( + key = IncognitoDisplayMode.REPLACE_SHARED_ACTIONS_TOGGLE, + label = stringRes(id = R.string.enum__incognito_display_mode__replace_shared_actions_toggle), + ) + entry( + key = IncognitoDisplayMode.DISPLAY_BEHIND_KEYBOARD, + label = stringRes(id = R.string.enum__incognito_display_mode__display_behind_keyboard), + ) + } + }, + IncognitoMode::class to DEFAULT to { + listPrefEntries { + entry( + key = IncognitoMode.FORCE_OFF, + label = stringRes(R.string.enum__incognito_mode__force_off), + description = stringRes(R.string.enum__incognito_mode__force_off__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = IncognitoMode.DYNAMIC_ON_OFF, + label = stringRes(R.string.enum__incognito_mode__dynamic_on_off), + description = stringRes(R.string.enum__incognito_mode__dynamic_on_off__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = IncognitoMode.FORCE_ON, + label = stringRes(R.string.enum__incognito_mode__force_on), + description = stringRes(R.string.enum__incognito_mode__force_on__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + InputFeedbackActivationMode::class to "audio" to { + listPrefEntries { + entry( + key = InputFeedbackActivationMode.RESPECT_SYSTEM_SETTINGS, + label = stringRes(R.string.enum__input_feedback_activation_mode__audio_respect_system_settings), + ) + entry( + key = InputFeedbackActivationMode.IGNORE_SYSTEM_SETTINGS, + label = stringRes(R.string.enum__input_feedback_activation_mode__audio_ignore_system_settings), + ) + } + }, + InputFeedbackActivationMode::class to "haptic" to { + listPrefEntries { + entry( + key = InputFeedbackActivationMode.RESPECT_SYSTEM_SETTINGS, + label = stringRes(R.string.enum__input_feedback_activation_mode__haptic_respect_system_settings), + ) + entry( + key = InputFeedbackActivationMode.IGNORE_SYSTEM_SETTINGS, + label = stringRes(R.string.enum__input_feedback_activation_mode__haptic_ignore_system_settings), + ) + } + }, + LandscapeInputUiMode::class to DEFAULT to { + listPrefEntries { + entry( + key = LandscapeInputUiMode.NEVER_SHOW, + label = stringRes(R.string.enum__landscape_input_ui_mode__never_show), + ) + entry( + key = LandscapeInputUiMode.ALWAYS_SHOW, + label = stringRes(R.string.enum__landscape_input_ui_mode__always_show), + ) + entry( + key = LandscapeInputUiMode.DYNAMICALLY_SHOW, + label = stringRes(R.string.enum__landscape_input_ui_mode__dynamically_show), + ) + } + }, + OneHandedMode::class to DEFAULT to { + listPrefEntries { + entry( + key = OneHandedMode.OFF, + label = stringRes(R.string.enum__one_handed_mode__off), + ) + entry( + key = OneHandedMode.START, + label = stringRes(R.string.enum__one_handed_mode__start), + ) + entry( + key = OneHandedMode.END, + label = stringRes(R.string.enum__one_handed_mode__end), + ) + } + }, + SmartbarLayout::class to DEFAULT to { + listPrefEntries { + entry( + key = SmartbarLayout.SUGGESTIONS_ONLY, + label = stringRes(R.string.enum__smartbar_layout__suggestions_only), + description = stringRes(R.string.enum__smartbar_layout__suggestions_only__description), + ) + entry( + key = SmartbarLayout.ACTIONS_ONLY, + label = stringRes(R.string.enum__smartbar_layout__actions_only), + description = stringRes(R.string.enum__smartbar_layout__actions_only__description), + ) + entry( + key = SmartbarLayout.SUGGESTIONS_ACTIONS_SHARED, + label = stringRes(R.string.enum__smartbar_layout__suggestions_action_shared), + description = stringRes(R.string.enum__smartbar_layout__suggestions_action_shared__description), + ) + entry( + key = SmartbarLayout.SUGGESTIONS_ACTIONS_EXTENDED, + label = stringRes(R.string.enum__smartbar_layout__suggestions_actions_extended), + description = stringRes(R.string.enum__smartbar_layout__suggestions_actions_extended__description), + ) + } + }, + SnyggLevel::class to DEFAULT to { + listPrefEntries { + entry( + key = SnyggLevel.BASIC, + label = stringRes(R.string.enum__snygg_level__basic), + description = stringRes(R.string.enum__snygg_level__basic__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = SnyggLevel.ADVANCED, + label = stringRes(R.string.enum__snygg_level__advanced), + description = stringRes(R.string.enum__snygg_level__advanced__description), + showDescriptionOnlyIfSelected = true, + ) + entry( + key = SnyggLevel.DEVELOPER, + label = stringRes(R.string.enum__snygg_level__developer), + description = stringRes(R.string.enum__snygg_level__developer__description), + showDescriptionOnlyIfSelected = true, + ) + } + }, + SpaceBarMode::class to DEFAULT to { + listPrefEntries { + entry( + key = SpaceBarMode.NOTHING, + label = stringRes(R.string.enum__space_bar_mode__nothing), + ) + entry( + key = SpaceBarMode.CURRENT_LANGUAGE, + label = stringRes(R.string.enum__space_bar_mode__current_language), + ) + entry( + key = SpaceBarMode.SPACE_BAR_KEY, + label = stringRes(R.string.enum__space_bar_mode__space_bar_key), + ) + } + }, + SpellingLanguageMode::class to DEFAULT to { + listPrefEntries { + entry( + key = SpellingLanguageMode.USE_SYSTEM_LANGUAGES, + label = stringRes(R.string.enum__spelling_language_mode__use_system_languages), + ) + entry( + key = SpellingLanguageMode.USE_KEYBOARD_SUBTYPES, + label = stringRes(R.string.enum__spelling_language_mode__use_keyboard_subtypes), + ) + } + }, + SwipeAction::class to "general" to { + listPrefEntries { + entry( + key = SwipeAction.NO_ACTION, + label = stringRes(R.string.enum__swipe_action__no_action), + ) + entry( + key = SwipeAction.CYCLE_TO_PREVIOUS_KEYBOARD_MODE, + label = stringRes(R.string.enum__swipe_action__cycle_to_previous_keyboard_mode), + ) + entry( + key = SwipeAction.CYCLE_TO_NEXT_KEYBOARD_MODE, + label = stringRes(R.string.enum__swipe_action__cycle_to_next_keyboard_mode), + ) + entry( + key = SwipeAction.DELETE_WORD, + label = stringRes(R.string.enum__swipe_action__delete_word), + ) + entry( + key = SwipeAction.HIDE_KEYBOARD, + label = stringRes(R.string.enum__swipe_action__hide_keyboard), + ) + entry( + key = SwipeAction.INSERT_SPACE, + label = stringRes(R.string.enum__swipe_action__insert_space), + ) + entry( + key = SwipeAction.MOVE_CURSOR_UP, + label = stringRes(R.string.enum__swipe_action__move_cursor_up), + ) + entry( + key = SwipeAction.MOVE_CURSOR_DOWN, + label = stringRes(R.string.enum__swipe_action__move_cursor_down), + ) + entry( + key = SwipeAction.MOVE_CURSOR_LEFT, + label = stringRes(R.string.enum__swipe_action__move_cursor_left), + ) + entry( + key = SwipeAction.MOVE_CURSOR_RIGHT, + label = stringRes(R.string.enum__swipe_action__move_cursor_right), + ) + entry( + key = SwipeAction.MOVE_CURSOR_START_OF_LINE, + label = stringRes(R.string.enum__swipe_action__move_cursor_start_of_line), + ) + entry( + key = SwipeAction.MOVE_CURSOR_END_OF_LINE, + label = stringRes(R.string.enum__swipe_action__move_cursor_end_of_line), + ) + entry( + key = SwipeAction.MOVE_CURSOR_START_OF_PAGE, + label = stringRes(R.string.enum__swipe_action__move_cursor_start_of_page), + ) + entry( + key = SwipeAction.MOVE_CURSOR_END_OF_PAGE, + label = stringRes(R.string.enum__swipe_action__move_cursor_end_of_page), + ) + entry( + key = SwipeAction.SHIFT, + label = stringRes(R.string.enum__swipe_action__shift), + ) + entry( + key = SwipeAction.REDO, + label = stringRes(R.string.enum__swipe_action__redo), + ) + entry( + key = SwipeAction.UNDO, + label = stringRes(R.string.enum__swipe_action__undo), + ) + entry( + key = SwipeAction.SWITCH_TO_CLIPBOARD_CONTEXT, + label = stringRes(R.string.enum__swipe_action__switch_to_clipboard_context), + ) + entry( + key = SwipeAction.SHOW_INPUT_METHOD_PICKER, + label = stringRes(R.string.enum__swipe_action__show_input_method_picker), + ) + entry( + key = SwipeAction.SWITCH_TO_PREV_SUBTYPE, + label = stringRes(R.string.enum__swipe_action__switch_to_prev_subtype), + ) + entry( + key = SwipeAction.SWITCH_TO_NEXT_SUBTYPE, + label = stringRes(R.string.enum__swipe_action__switch_to_next_subtype), + ) + entry( + key = SwipeAction.SWITCH_TO_PREV_KEYBOARD, + label = stringRes(R.string.enum__swipe_action__switch_to_prev_keyboard), + ) + entry( + key = SwipeAction.TOGGLE_SMARTBAR_VISIBILITY, + label = stringRes(R.string.enum__swipe_action__toggle_smartbar_visibility), + ) + } + }, + SwipeAction::class to "deleteSwipe" to { + listPrefEntries { + entry( + key = SwipeAction.NO_ACTION, + label = stringRes(R.string.enum__swipe_action__no_action), + ) + entry( + key = SwipeAction.DELETE_CHARACTERS_PRECISELY, + label = stringRes(R.string.enum__swipe_action__delete_characters_precisely), + ) + entry( + key = SwipeAction.DELETE_WORD, + label = stringRes(R.string.enum__swipe_action__delete_word), + ) + entry( + key = SwipeAction.DELETE_WORDS_PRECISELY, + label = stringRes(R.string.enum__swipe_action__delete_words_precisely), + ) + entry( + key = SwipeAction.SELECT_CHARACTERS_PRECISELY, + label = stringRes(R.string.enum__swipe_action__select_characters_precisely), + ) + entry( + key = SwipeAction.SELECT_WORDS_PRECISELY, + label = stringRes(R.string.enum__swipe_action__select_words_precisely), + ) + } + }, + SwipeAction::class to "deleteLongPress" to { + listPrefEntries { + entry( + key = SwipeAction.DELETE_CHARACTER, + label = stringRes(R.string.enum__swipe_action__delete_character), + ) + entry( + key = SwipeAction.DELETE_WORD, + label = stringRes(R.string.enum__swipe_action__delete_word), + ) + } + }, + ThemeMode::class to DEFAULT to { + listPrefEntries { + entry( + key = ThemeMode.ALWAYS_DAY, + label = stringRes(R.string.enum__theme_mode__always_day), + ) + entry( + key = ThemeMode.ALWAYS_NIGHT, + label = stringRes(R.string.enum__theme_mode__always_night), + ) + entry( + key = ThemeMode.FOLLOW_SYSTEM, + label = stringRes(R.string.enum__theme_mode__follow_system), + ) + entry( + key = ThemeMode.FOLLOW_TIME, + label = stringRes(R.string.enum__theme_mode__follow_time), + ) + } + }, + UtilityKeyAction::class to DEFAULT to { + listPrefEntries { + entry( + key = UtilityKeyAction.SWITCH_TO_EMOJIS, + label = stringRes(R.string.enum__utility_key_action__switch_to_emojis), + ) + entry( + key = UtilityKeyAction.SWITCH_LANGUAGE, + label = stringRes(R.string.enum__utility_key_action__switch_language), + ) + entry( + key = UtilityKeyAction.SWITCH_KEYBOARD_APP, + label = stringRes(R.string.enum__utility_key_action__switch_keyboard_app), + ) + entry( + key = UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS, + label = stringRes(R.string.enum__utility_key_action__dynamic_switch_language_emojis), + ) + } + }, +) + +@Composable +fun enumDisplayEntriesOf( + enumClass: KClass, + variant: String = DEFAULT, +): List> { + @Suppress("UNCHECKED_CAST") + return ENUM_DISPLAY_ENTRIES[enumClass to variant]?.invoke() + as List> +} diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/AdvancedScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/AdvancedScreen.kt index 3d793c4f..8fd3000d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/AdvancedScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/advanced/AdvancedScreen.kt @@ -30,6 +30,7 @@ import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.AppTheme import dev.patrickgold.florisboard.app.LocalNavController import dev.patrickgold.florisboard.app.Routes +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.core.DisplayLanguageNamesIn import dev.patrickgold.florisboard.ime.keyboard.IncognitoMode import dev.patrickgold.florisboard.lib.FlorisLocale @@ -56,28 +57,7 @@ fun AdvancedScreen() = FlorisScreen { prefs.advanced.settingsTheme, icon = Icons.Default.Palette, title = stringRes(R.string.pref__advanced__settings_theme__label), - entries = listPrefEntries { - entry( - key = AppTheme.AUTO, - label = stringRes(R.string.settings__system_default), - ) - entry( - key = AppTheme.AUTO_AMOLED, - label = stringRes(R.string.pref__advanced__settings_theme__auto_amoled), - ) - entry( - key = AppTheme.LIGHT, - label = stringRes(R.string.pref__advanced__settings_theme__light), - ) - entry( - key = AppTheme.DARK, - label = stringRes(R.string.pref__advanced__settings_theme__dark), - ) - entry( - key = AppTheme.AMOLED_DARK, - label = stringRes(R.string.pref__advanced__settings_theme__amoled_dark), - ) - }, + entries = enumDisplayEntriesOf(AppTheme::class), ) SwitchPreference( pref = prefs.advanced.useMaterialYou, @@ -165,7 +145,7 @@ fun AdvancedScreen() = FlorisScreen { prefs.advanced.incognitoMode, icon = vectorResource(id = R.drawable.ic_incognito), title = stringRes(R.string.pref__advanced__incognito_mode__label), - entries = IncognitoMode.listEntries(), + entries = enumDisplayEntriesOf(IncognitoMode::class), ) Preference( icon = Icons.Default.Adb, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/gestures/GesturesScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/gestures/GesturesScreen.kt index 39db99f1..a7875281 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/gestures/GesturesScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/gestures/GesturesScreen.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import dev.patrickgold.florisboard.R +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction import dev.patrickgold.florisboard.lib.compose.FlorisInfoCard import dev.patrickgold.florisboard.lib.compose.FlorisScreen @@ -93,25 +94,25 @@ fun GesturesScreen() = FlorisScreen { ListPreference( prefs.gestures.swipeUp, title = stringRes(R.string.pref__gestures__swipe_up__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), enabledIf = { prefs.glide.enabled isEqualTo false }, ) ListPreference( prefs.gestures.swipeDown, title = stringRes(R.string.pref__gestures__swipe_down__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), enabledIf = { prefs.glide.enabled isEqualTo false }, ) ListPreference( prefs.gestures.swipeLeft, title = stringRes(R.string.pref__gestures__swipe_left__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), enabledIf = { prefs.glide.enabled isEqualTo false }, ) ListPreference( prefs.gestures.swipeRight, title = stringRes(R.string.pref__gestures__swipe_right__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), enabledIf = { prefs.glide.enabled isEqualTo false }, ) } @@ -120,22 +121,22 @@ fun GesturesScreen() = FlorisScreen { ListPreference( prefs.gestures.spaceBarSwipeUp, title = stringRes(R.string.pref__gestures__space_bar_swipe_up__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), ) ListPreference( prefs.gestures.spaceBarSwipeLeft, title = stringRes(R.string.pref__gestures__space_bar_swipe_left__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), ) ListPreference( prefs.gestures.spaceBarSwipeRight, title = stringRes(R.string.pref__gestures__space_bar_swipe_right__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), ) ListPreference( prefs.gestures.spaceBarLongPress, title = stringRes(R.string.pref__gestures__space_bar_long_press__label), - entries = SwipeAction.generalListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "general"), ) } @@ -143,12 +144,12 @@ fun GesturesScreen() = FlorisScreen { ListPreference( prefs.gestures.deleteKeySwipeLeft, title = stringRes(R.string.pref__gestures__delete_key_swipe_left__label), - entries = SwipeAction.deleteSwipeListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "deleteSwipe"), ) ListPreference( prefs.gestures.deleteKeyLongPress, title = stringRes(R.string.pref__gestures__delete_key_long_press__label), - entries = SwipeAction.deleteLongPressListEntries(), + entries = enumDisplayEntriesOf(SwipeAction::class, "deleteLongPress"), ) DialogSliderPreference( prefs.gestures.swipeVelocityThreshold, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/InputFeedbackScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/InputFeedbackScreen.kt index 63bbae39..abcb1c0f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/InputFeedbackScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/InputFeedbackScreen.kt @@ -19,6 +19,7 @@ package dev.patrickgold.florisboard.app.settings.keyboard import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import dev.patrickgold.florisboard.R +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.input.InputFeedbackActivationMode import dev.patrickgold.florisboard.ime.input.HapticVibrationMode import org.florisboard.lib.android.AndroidVersion @@ -49,7 +50,7 @@ fun InputFeedbackScreen() = FlorisScreen { switchPref = prefs.inputFeedback.audioEnabled, title = stringRes(R.string.pref__input_feedback__audio_enabled__label), summarySwitchDisabled = stringRes(R.string.pref__input_feedback__audio_enabled__summary_disabled), - entries = InputFeedbackActivationMode.audioListEntries(), + entries = enumDisplayEntriesOf(InputFeedbackActivationMode::class, "audio"), ) DialogSliderPreference( prefs.inputFeedback.audioVolume, @@ -98,13 +99,13 @@ fun InputFeedbackScreen() = FlorisScreen { switchPref = prefs.inputFeedback.hapticEnabled, title = stringRes(R.string.pref__input_feedback__haptic_enabled__label), summarySwitchDisabled = stringRes(R.string.pref__input_feedback__haptic_enabled__summary_disabled), - entries = InputFeedbackActivationMode.hapticListEntries(), + entries = enumDisplayEntriesOf(InputFeedbackActivationMode::class, "haptic") ) ListPreference( prefs.inputFeedback.hapticVibrationMode, title = stringRes(R.string.pref__input_feedback__haptic_vibration_mode__label), enabledIf = { prefs.inputFeedback.hapticEnabled isEqualTo true }, - entries = HapticVibrationMode.listEntries(), + entries = enumDisplayEntriesOf(HapticVibrationMode::class), ) DialogSliderPreference( prefs.inputFeedback.hapticVibrationDuration, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/KeyboardScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/KeyboardScreen.kt index e58e4e85..189cea5b 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/KeyboardScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/keyboard/KeyboardScreen.kt @@ -20,6 +20,7 @@ import androidx.compose.runtime.Composable import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.LocalNavController import dev.patrickgold.florisboard.app.Routes +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.input.CapitalizationBehavior import dev.patrickgold.florisboard.ime.keyboard.SpaceBarMode import dev.patrickgold.florisboard.ime.landscapeinput.LandscapeInputUiMode @@ -55,14 +56,14 @@ fun KeyboardScreen() = FlorisScreen { switchPref = prefs.keyboard.hintedNumberRowEnabled, title = stringRes(R.string.pref__keyboard__hinted_number_row_mode__label), summarySwitchDisabled = stringRes(R.string.state__disabled), - entries = KeyHintMode.listEntries(), + entries = enumDisplayEntriesOf(KeyHintMode::class), ) ListPreference( listPref = prefs.keyboard.hintedSymbolsMode, switchPref = prefs.keyboard.hintedSymbolsEnabled, title = stringRes(R.string.pref__keyboard__hinted_symbols_mode__label), summarySwitchDisabled = stringRes(R.string.state__disabled), - entries = KeyHintMode.listEntries(), + entries = enumDisplayEntriesOf(KeyHintMode::class), ) SwitchPreference( prefs.keyboard.utilityKeyEnabled, @@ -72,18 +73,18 @@ fun KeyboardScreen() = FlorisScreen { ListPreference( prefs.keyboard.utilityKeyAction, title = stringRes(R.string.pref__keyboard__utility_key_action__label), - entries = UtilityKeyAction.listEntries(), + entries = enumDisplayEntriesOf(UtilityKeyAction::class), visibleIf = { prefs.keyboard.utilityKeyEnabled isEqualTo true }, ) ListPreference( prefs.keyboard.spaceBarMode, title = stringRes(R.string.pref__keyboard__space_bar_mode__label), - entries = SpaceBarMode.listEntries(), + entries = enumDisplayEntriesOf(SpaceBarMode::class), ) ListPreference( prefs.keyboard.capitalizationBehavior, title = stringRes(R.string.pref__keyboard__capitalization_behavior__label), - entries = CapitalizationBehavior.listEntries(), + entries = enumDisplayEntriesOf(CapitalizationBehavior::class), ) DialogSliderPreference( primaryPref = prefs.keyboard.fontSizeMultiplierPortrait, @@ -99,14 +100,14 @@ fun KeyboardScreen() = FlorisScreen { ListPreference( listPref = prefs.keyboard.incognitoDisplayMode, title = stringRes(R.string.pref__keyboard__incognito_indicator__label), - entries = IncognitoDisplayMode.listEntries(), + entries = enumDisplayEntriesOf(IncognitoDisplayMode::class), ) PreferenceGroup(title = stringRes(R.string.pref__keyboard__group_layout__label)) { ListPreference( prefs.keyboard.oneHandedMode, title = stringRes(R.string.pref__keyboard__one_handed_mode__label), - entries = OneHandedMode.listEntries(), + entries = enumDisplayEntriesOf(OneHandedMode::class), ) DialogSliderPreference( prefs.keyboard.oneHandedModeScaleFactor, @@ -120,7 +121,7 @@ fun KeyboardScreen() = FlorisScreen { ListPreference( prefs.keyboard.landscapeInputUiMode, title = stringRes(R.string.pref__keyboard__landscape_input_ui_mode__label), - entries = LandscapeInputUiMode.listEntries(), + entries = enumDisplayEntriesOf(LandscapeInputUiMode::class), ) DialogSliderPreference( primaryPref = prefs.keyboard.heightFactorPortrait, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/localization/LocalizationScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/localization/LocalizationScreen.kt index 7356dd56..83d46c08 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/localization/LocalizationScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/localization/LocalizationScreen.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.LocalNavController import dev.patrickgold.florisboard.app.Routes +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.cacheManager import dev.patrickgold.florisboard.ime.core.DisplayLanguageNamesIn import dev.patrickgold.florisboard.ime.keyboard.LayoutType @@ -76,12 +77,11 @@ fun LocalizationScreen() = FlorisScreen { ) } - content { ListPreference( prefs.localization.displayLanguageNamesIn, title = stringRes(R.string.settings__localization__display_language_names_in__label), - entries = DisplayLanguageNamesIn.listEntries(), + entries = enumDisplayEntriesOf(DisplayLanguageNamesIn::class), ) Preference( // icon = R.drawable.ic_edit, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/media/MediaScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/media/MediaScreen.kt index 77a69278..4d077dc4 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/media/MediaScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/media/MediaScreen.kt @@ -18,6 +18,7 @@ package dev.patrickgold.florisboard.app.settings.media import androidx.compose.runtime.Composable import dev.patrickgold.florisboard.R +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.media.emoji.EmojiSkinTone import dev.patrickgold.florisboard.lib.compose.FlorisScreen import dev.patrickgold.florisboard.lib.compose.pluralsRes @@ -37,7 +38,7 @@ fun MediaScreen() = FlorisScreen { ListPreference( prefs.media.emojiPreferredSkinTone, title = stringRes(R.string.prefs__media__emoji_preferred_skin_tone), - entries = EmojiSkinTone.listEntries(), + entries = enumDisplayEntriesOf(EmojiSkinTone::class), ) DialogSliderPreference( prefs.media.emojiRecentlyUsedMaxSize, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/smartbar/SmartbarScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/smartbar/SmartbarScreen.kt index d0bb8a0e..820fee58 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/smartbar/SmartbarScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/smartbar/SmartbarScreen.kt @@ -18,6 +18,7 @@ package dev.patrickgold.florisboard.app.settings.smartbar import androidx.compose.runtime.Composable import dev.patrickgold.florisboard.R +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.smartbar.CandidatesDisplayMode import dev.patrickgold.florisboard.ime.smartbar.ExtendedActionsPlacement import dev.patrickgold.florisboard.ime.smartbar.SmartbarLayout @@ -41,7 +42,7 @@ fun SmartbarScreen() = FlorisScreen { ListPreference( listPref = prefs.smartbar.layout, title = stringRes(R.string.pref__smartbar__layout__label), - entries = SmartbarLayout.listEntries(), + entries = enumDisplayEntriesOf(SmartbarLayout::class), enabledIf = { prefs.smartbar.enabled isEqualTo true }, ) @@ -49,7 +50,7 @@ fun SmartbarScreen() = FlorisScreen { ListPreference( prefs.suggestion.displayMode, title = stringRes(R.string.pref__suggestion__display_mode__label), - entries = CandidatesDisplayMode.listEntries(), + entries = enumDisplayEntriesOf(CandidatesDisplayMode::class), enabledIf = { prefs.smartbar.enabled isEqualTo true }, visibleIf = { prefs.smartbar.layout isNotEqualTo SmartbarLayout.ACTIONS_ONLY }, ) @@ -73,7 +74,7 @@ fun SmartbarScreen() = FlorisScreen { ListPreference( listPref = prefs.smartbar.extendedActionsPlacement, title = stringRes(R.string.pref__smartbar__extended_actions_placement__label), - entries = ExtendedActionsPlacement.listEntries(), + entries = enumDisplayEntriesOf(ExtendedActionsPlacement::class), enabledIf = { prefs.smartbar.enabled isEqualTo true }, visibleIf = { prefs.smartbar.layout isEqualTo SmartbarLayout.SUGGESTIONS_ACTIONS_EXTENDED }, ) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt index 2fad6597..8d819b25 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt @@ -16,34 +16,10 @@ package dev.patrickgold.florisboard.app.settings.theme -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries -import org.florisboard.lib.kotlin.curlyFormat - /** * DisplayColorsAs indicates how color strings should be visually presented to the user. */ enum class DisplayColorsAs { HEX8, RGBA; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = HEX8, - label = stringRes(R.string.enum__display_colors_as__hex8), - description = stringRes(R.string.general__example_given).curlyFormat("example" to "#4caf50ff"), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = RGBA, - label = stringRes(R.string.enum__display_colors_as__rgba), - description = stringRes(R.string.general__example_given).curlyFormat("example" to "rgba(76,175,80,1.0)"), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayKbdAfterDialog.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayKbdAfterDialog.kt index dd1d1b4c..18620638 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayKbdAfterDialog.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayKbdAfterDialog.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.app.settings.theme -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * DisplayPreviewAfterDialogs indicates if the keyboard should auto-open after closing * any dialog. This is useful because the dialog always hides the keyboard and one may @@ -30,28 +25,4 @@ enum class DisplayKbdAfterDialogs { ALWAYS, NEVER, REMEMBER; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = ALWAYS, - label = stringRes(R.string.enum__display_kbd_after_dialogs__always), - description = stringRes(R.string.enum__display_kbd_after_dialogs__always__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = NEVER, - label = stringRes(R.string.enum__display_kbd_after_dialogs__never), - description = stringRes(R.string.enum__display_kbd_after_dialogs__never__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = REMEMBER, - label = stringRes(R.string.enum__display_kbd_after_dialogs__remember), - description = stringRes(R.string.enum__display_kbd_after_dialogs__remember__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } 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 01fe4998..981399ed 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 @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable import androidx.compose.ui.unit.dp 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 @@ -40,17 +41,17 @@ fun FineTuneDialog(onDismiss: () -> Unit) { ListPreference( listPref = prefs.theme.editorLevel, title = stringRes(R.string.settings__theme_editor__fine_tune__level), - entries = SnyggLevel.listEntries(), + entries = enumDisplayEntriesOf(SnyggLevel::class), ) ListPreference( listPref = prefs.theme.editorDisplayColorsAs, title = stringRes(R.string.settings__theme_editor__fine_tune__display_colors_as), - entries = DisplayColorsAs.listEntries(), + entries = enumDisplayEntriesOf(DisplayColorsAs::class), ) ListPreference( listPref = prefs.theme.editorDisplayKbdAfterDialogs, title = stringRes(R.string.settings__theme_editor__fine_tune__display_kbd_after_dialogs), - entries = DisplayKbdAfterDialogs.listEntries(), + entries = enumDisplayEntriesOf(DisplayKbdAfterDialogs::class), ) } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeScreen.kt index a6decf3e..7ab9778e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/ThemeScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.unit.dp import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.LocalNavController import dev.patrickgold.florisboard.app.Routes +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.app.ext.AddonManagementReferenceBox import dev.patrickgold.florisboard.app.ext.ExtensionListScreenType import dev.patrickgold.florisboard.ime.theme.ThemeManager @@ -79,7 +80,7 @@ fun ThemeScreen() = FlorisScreen { prefs.theme.mode, icon = Icons.Default.BrightnessAuto, title = stringRes(R.string.pref__theme__mode__label), - entries = ThemeMode.listEntries(), + entries = enumDisplayEntriesOf(ThemeMode::class), ) if (themeMode == ThemeMode.FOLLOW_TIME) { FlorisInfoCard( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/typing/TypingScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/typing/TypingScreen.kt index e93e1f8f..eecc2017 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/typing/TypingScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/typing/TypingScreen.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.unit.dp import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.app.LocalNavController import dev.patrickgold.florisboard.app.Routes +import dev.patrickgold.florisboard.app.enumDisplayEntriesOf import dev.patrickgold.florisboard.ime.nlp.SpellingLanguageMode import org.florisboard.lib.android.AndroidVersion import dev.patrickgold.florisboard.lib.compose.FlorisErrorCard @@ -151,7 +152,7 @@ fun TypingScreen() = FlorisScreen { prefs.spelling.languageMode, icon = Icons.Default.Language, title = stringRes(R.string.pref__spelling__language_mode__label), - entries = SpellingLanguageMode.listEntries(), + entries = enumDisplayEntriesOf(SpellingLanguageMode::class), enabledIf = { florisSpellCheckerEnabled.value }, ) SwitchPreference( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/core/DisplayLanguageNamesIn.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/core/DisplayLanguageNamesIn.kt index 7b692147..2dc6b3e1 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/core/DisplayLanguageNamesIn.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/core/DisplayLanguageNamesIn.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.core -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * DisplayLocalesIn indicates how language names should be visually presented to the user. */ @@ -29,22 +24,4 @@ enum class DisplayLanguageNamesIn { SYSTEM_LOCALE, /** Language names are displayed in the locale referred by itself. */ NATIVE_LOCALE; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = SYSTEM_LOCALE, - label = stringRes(R.string.enum__display_language_names_in__system_locale), - description = stringRes(R.string.enum__display_language_names_in__system_locale__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = NATIVE_LOCALE, - label = stringRes(R.string.enum__display_language_names_in__native_locale), - description = stringRes(R.string.enum__display_language_names_in__native_locale__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/CapitalizationBehavior.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/CapitalizationBehavior.kt index e3d046eb..9ba67359 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/CapitalizationBehavior.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/CapitalizationBehavior.kt @@ -1,25 +1,6 @@ package dev.patrickgold.florisboard.ime.input -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class CapitalizationBehavior { CAPSLOCK_BY_DOUBLE_TAP, CAPSLOCK_BY_CYCLE; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = CAPSLOCK_BY_DOUBLE_TAP, - label = stringRes(R.string.enum__capitalization_behavior__capslock_by_double_tap), - ) - entry( - key = CAPSLOCK_BY_CYCLE, - label = stringRes(R.string.enum__capitalization_behavior__capslock_by_cycle), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/HapticVibrationMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/HapticVibrationMode.kt index 0691ee6b..e35ee06c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/HapticVibrationMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/HapticVibrationMode.kt @@ -16,30 +16,7 @@ package dev.patrickgold.florisboard.ime.input -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class HapticVibrationMode { USE_VIBRATOR_DIRECTLY, USE_HAPTIC_FEEDBACK_INTERFACE; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = USE_VIBRATOR_DIRECTLY, - label = stringRes(R.string.enum__haptic_vibration_mode__use_vibrator_directly), - description = stringRes(R.string.enum__haptic_vibration_mode__use_vibrator_directly__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = USE_HAPTIC_FEEDBACK_INTERFACE, - label = stringRes(R.string.enum__haptic_vibration_mode__use_haptic_feedback_interface), - description = stringRes(R.string.enum__haptic_vibration_mode__use_haptic_feedback_interface__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputFeedbackActivationMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputFeedbackActivationMode.kt index 398a3d1f..3bee4e9c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputFeedbackActivationMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputFeedbackActivationMode.kt @@ -16,38 +16,7 @@ package dev.patrickgold.florisboard.ime.input -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class InputFeedbackActivationMode { RESPECT_SYSTEM_SETTINGS, IGNORE_SYSTEM_SETTINGS; - - companion object { - @Composable - fun audioListEntries() = listPrefEntries { - entry( - key = RESPECT_SYSTEM_SETTINGS, - label = stringRes(R.string.enum__input_feedback_activation_mode__audio_respect_system_settings), - ) - entry( - key = IGNORE_SYSTEM_SETTINGS, - label = stringRes(R.string.enum__input_feedback_activation_mode__audio_ignore_system_settings), - ) - } - - @Composable - fun hapticListEntries() = listPrefEntries { - entry( - key = RESPECT_SYSTEM_SETTINGS, - label = stringRes(R.string.enum__input_feedback_activation_mode__haptic_respect_system_settings), - ) - entry( - key = IGNORE_SYSTEM_SETTINGS, - label = stringRes(R.string.enum__input_feedback_activation_mode__haptic_ignore_system_settings), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/IncognitoMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/IncognitoMode.kt index 2b94b201..f6f330dd 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/IncognitoMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/IncognitoMode.kt @@ -16,37 +16,8 @@ package dev.patrickgold.florisboard.ime.keyboard -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class IncognitoMode { FORCE_OFF, FORCE_ON, DYNAMIC_ON_OFF; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = FORCE_OFF, - label = stringRes(R.string.enum__incognito_mode__force_off), - description = stringRes(R.string.enum__incognito_mode__force_off__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = DYNAMIC_ON_OFF, - label = stringRes(R.string.enum__incognito_mode__dynamic_on_off), - description = stringRes(R.string.enum__incognito_mode__dynamic_on_off__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = FORCE_ON, - label = stringRes(R.string.enum__incognito_mode__force_on), - description = stringRes(R.string.enum__incognito_mode__force_on__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/SpaceBarMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/SpaceBarMode.kt index a6939d21..9a41491e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/SpaceBarMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/SpaceBarMode.kt @@ -1,30 +1,7 @@ package dev.patrickgold.florisboard.ime.keyboard -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class SpaceBarMode { NOTHING, CURRENT_LANGUAGE, SPACE_BAR_KEY; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = NOTHING, - label = stringRes(R.string.enum__space_bar_mode__nothing), - ) - entry( - key = CURRENT_LANGUAGE, - label = stringRes(R.string.enum__space_bar_mode__current_language), - ) - entry( - key = SPACE_BAR_KEY, - label = stringRes(R.string.enum__space_bar_mode__space_bar_key), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/landscapeinput/LandscapeInputUiMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/landscapeinput/LandscapeInputUiMode.kt index 7994a205..5c12bf5d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/landscapeinput/LandscapeInputUiMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/landscapeinput/LandscapeInputUiMode.kt @@ -16,31 +16,8 @@ package dev.patrickgold.florisboard.ime.landscapeinput -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class LandscapeInputUiMode { NEVER_SHOW, ALWAYS_SHOW, DYNAMICALLY_SHOW; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = NEVER_SHOW, - label = stringRes(R.string.enum__landscape_input_ui_mode__never_show), - ) - entry( - key = ALWAYS_SHOW, - label = stringRes(R.string.enum__landscape_input_ui_mode__always_show), - ) - entry( - key = DYNAMICALLY_SHOW, - label = stringRes(R.string.enum__landscape_input_ui_mode__dynamically_show), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/Emoji.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/Emoji.kt index 651c954c..c6d93849 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/Emoji.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/media/emoji/Emoji.kt @@ -16,16 +16,12 @@ package dev.patrickgold.florisboard.ime.media.emoji -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R import dev.patrickgold.florisboard.ime.keyboard.AbstractKeyData import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator import dev.patrickgold.florisboard.ime.keyboard.KeyData import dev.patrickgold.florisboard.ime.popup.PopupSet import dev.patrickgold.florisboard.ime.text.key.KeyCode import dev.patrickgold.florisboard.ime.text.key.KeyType -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries import java.util.stream.IntStream import kotlin.streams.toList @@ -36,54 +32,6 @@ enum class EmojiSkinTone(val id: Int) { MEDIUM_SKIN_TONE(0x1F3FD), MEDIUM_DARK_SKIN_TONE(0x1F3FE), DARK_SKIN_TONE(0x1F3FF); - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = DEFAULT, - label = stringRes( - R.string.enum__emoji_skin_tone__default, - "emoji" to "\uD83D\uDC4B" // 👋 - ), - ) - entry( - key = LIGHT_SKIN_TONE, - label = stringRes( - R.string.enum__emoji_skin_tone__light_skin_tone, - "emoji" to "\uD83D\uDC4B\uD83C\uDFFB" // 👋🏻 - ), - ) - entry( - key = MEDIUM_LIGHT_SKIN_TONE, - label = stringRes( - R.string.enum__emoji_skin_tone__medium_light_skin_tone, - "emoji" to "\uD83D\uDC4B\uD83C\uDFFC" // 👋🏼 - ), - ) - entry( - key = MEDIUM_SKIN_TONE, - label = stringRes( - R.string.enum__emoji_skin_tone__medium_skin_tone, - "emoji" to "\uD83D\uDC4B\uD83C\uDFFD" // 👋🏽 - ), - ) - entry( - key = MEDIUM_DARK_SKIN_TONE, - label = stringRes( - R.string.enum__emoji_skin_tone__medium_dark_skin_tone, - "emoji" to "\uD83D\uDC4B\uD83C\uDFFE" // 👋🏾 - ), - ) - entry( - key = DARK_SKIN_TONE, - label = stringRes( - R.string.enum__emoji_skin_tone__dark_skin_tone, - "emoji" to "\uD83D\uDC4B\uD83C\uDFFF" // 👋🏿 - ), - ) - } - } } enum class EmojiHairStyle(val id: Int) { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/SpellingLanguageMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/SpellingLanguageMode.kt index 57cf0fe5..50f28883 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/SpellingLanguageMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/SpellingLanguageMode.kt @@ -16,29 +16,10 @@ package dev.patrickgold.florisboard.ime.nlp -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum for the spelling language modes. */ enum class SpellingLanguageMode { USE_SYSTEM_LANGUAGES, USE_KEYBOARD_SUBTYPES; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = USE_SYSTEM_LANGUAGES, - label = stringRes(R.string.enum__spelling_language_mode__use_system_languages), - ) - entry( - key = USE_KEYBOARD_SUBTYPES, - label = stringRes(R.string.enum__spelling_language_mode__use_keyboard_subtypes), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedMode.kt index 38906ea5..d787fb67 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/onehanded/OneHandedMode.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.onehanded -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Static object which contains all possible one-handed mode strings. */ @@ -28,22 +23,4 @@ enum class OneHandedMode { OFF, START, END; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = OFF, - label = stringRes(R.string.enum__one_handed_mode__off), - ) - entry( - key = START, - label = stringRes(R.string.enum__one_handed_mode__start), - ) - entry( - key = END, - label = stringRes(R.string.enum__one_handed_mode__end), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesDisplayMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesDisplayMode.kt index 8f789c2b..3054a63c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesDisplayMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/CandidatesDisplayMode.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.smartbar -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum class defining the display mode for the candidates. */ @@ -28,22 +23,4 @@ enum class CandidatesDisplayMode { CLASSIC, DYNAMIC, DYNAMIC_SCROLLABLE; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = CLASSIC, - label = stringRes(R.string.enum__candidates_display_mode__classic), - ) - entry( - key = DYNAMIC, - label = stringRes(R.string.enum__candidates_display_mode__dynamic), - ) - entry( - key = DYNAMIC_SCROLLABLE, - label = stringRes(R.string.enum__candidates_display_mode__dynamic_scrollable), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/ExtendedActionsPlacement.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/ExtendedActionsPlacement.kt index 573422ac..3d67677b 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/ExtendedActionsPlacement.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/ExtendedActionsPlacement.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.smartbar -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum class defining the possible placements for the Smartbar extended actions. */ @@ -28,28 +23,4 @@ enum class ExtendedActionsPlacement { ABOVE_CANDIDATES, BELOW_CANDIDATES, OVERLAY_APP_UI; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = ABOVE_CANDIDATES, - label = stringRes(R.string.enum__extended_actions_placement__above_candidates), - description = stringRes(R.string.enum__extended_actions_placement__above_candidates__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = BELOW_CANDIDATES, - label = stringRes(R.string.enum__extended_actions_placement__below_candidates), - description = stringRes(R.string.enum__extended_actions_placement__below_candidates__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = OVERLAY_APP_UI, - label = stringRes(R.string.enum__extended_actions_placement__overlay_app_ui), - description = stringRes(R.string.enum__extended_actions_placement__overlay_app_ui__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/IncognitoDisplayMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/IncognitoDisplayMode.kt index ffc63f54..11a2fc92 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/IncognitoDisplayMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/IncognitoDisplayMode.kt @@ -1,25 +1,6 @@ package dev.patrickgold.florisboard.ime.smartbar -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class IncognitoDisplayMode { REPLACE_SHARED_ACTIONS_TOGGLE, DISPLAY_BEHIND_KEYBOARD; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = REPLACE_SHARED_ACTIONS_TOGGLE, - label = stringRes(id = R.string.enum__incognito_display_mode__replace_shared_actions_toggle), - ) - entry( - key = DISPLAY_BEHIND_KEYBOARD, - label = stringRes(id = R.string.enum__incognito_display_mode__display_behind_keyboard), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/SmartbarLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/SmartbarLayout.kt index ae51e4cf..32924988 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/SmartbarLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/SmartbarLayout.kt @@ -16,40 +16,9 @@ package dev.patrickgold.florisboard.ime.smartbar -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - enum class SmartbarLayout { SUGGESTIONS_ONLY, ACTIONS_ONLY, SUGGESTIONS_ACTIONS_SHARED, SUGGESTIONS_ACTIONS_EXTENDED; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = SUGGESTIONS_ONLY, - label = stringRes(R.string.enum__smartbar_layout__suggestions_only), - description = stringRes(R.string.enum__smartbar_layout__suggestions_only__description), - ) - entry( - key = ACTIONS_ONLY, - label = stringRes(R.string.enum__smartbar_layout__actions_only), - description = stringRes(R.string.enum__smartbar_layout__actions_only__description), - ) - entry( - key = SUGGESTIONS_ACTIONS_SHARED, - label = stringRes(R.string.enum__smartbar_layout__suggestions_action_shared), - description = stringRes(R.string.enum__smartbar_layout__suggestions_action_shared__description), - ) - entry( - key = SUGGESTIONS_ACTIONS_EXTENDED, - label = stringRes(R.string.enum__smartbar_layout__suggestions_actions_extended), - description = stringRes(R.string.enum__smartbar_layout__suggestions_actions_extended__description), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/gestures/SwipeAction.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/gestures/SwipeAction.kt index c35adc7b..6e7bb113 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/gestures/SwipeAction.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/gestures/SwipeAction.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.text.gestures -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum for declaring the possible actions for swipe gestures. */ @@ -53,142 +48,4 @@ enum class SwipeAction { SWITCH_TO_PREV_KEYBOARD, TOGGLE_SMARTBAR_VISIBILITY, UNDO; - - companion object { - @Composable - fun generalListEntries() = listPrefEntries { - entry( - key = NO_ACTION, - label = stringRes(R.string.enum__swipe_action__no_action), - ) - entry( - key = CYCLE_TO_PREVIOUS_KEYBOARD_MODE, - label = stringRes(R.string.enum__swipe_action__cycle_to_previous_keyboard_mode), - ) - entry( - key = CYCLE_TO_NEXT_KEYBOARD_MODE, - label = stringRes(R.string.enum__swipe_action__cycle_to_next_keyboard_mode), - ) - entry( - key = DELETE_WORD, - label = stringRes(R.string.enum__swipe_action__delete_word), - ) - entry( - key = HIDE_KEYBOARD, - label = stringRes(R.string.enum__swipe_action__hide_keyboard), - ) - entry( - key = INSERT_SPACE, - label = stringRes(R.string.enum__swipe_action__insert_space), - ) - entry( - key = MOVE_CURSOR_UP, - label = stringRes(R.string.enum__swipe_action__move_cursor_up), - ) - entry( - key = MOVE_CURSOR_DOWN, - label = stringRes(R.string.enum__swipe_action__move_cursor_down), - ) - entry( - key = MOVE_CURSOR_LEFT, - label = stringRes(R.string.enum__swipe_action__move_cursor_left), - ) - entry( - key = MOVE_CURSOR_RIGHT, - label = stringRes(R.string.enum__swipe_action__move_cursor_right), - ) - entry( - key = MOVE_CURSOR_START_OF_LINE, - label = stringRes(R.string.enum__swipe_action__move_cursor_start_of_line), - ) - entry( - key = MOVE_CURSOR_END_OF_LINE, - label = stringRes(R.string.enum__swipe_action__move_cursor_end_of_line), - ) - entry( - key = MOVE_CURSOR_START_OF_PAGE, - label = stringRes(R.string.enum__swipe_action__move_cursor_start_of_page), - ) - entry( - key = MOVE_CURSOR_END_OF_PAGE, - label = stringRes(R.string.enum__swipe_action__move_cursor_end_of_page), - ) - entry( - key = SHIFT, - label = stringRes(R.string.enum__swipe_action__shift), - ) - entry( - key = REDO, - label = stringRes(R.string.enum__swipe_action__redo), - ) - entry( - key = UNDO, - label = stringRes(R.string.enum__swipe_action__undo), - ) - entry( - key = SWITCH_TO_CLIPBOARD_CONTEXT, - label = stringRes(R.string.enum__swipe_action__switch_to_clipboard_context), - ) - entry( - key = SHOW_INPUT_METHOD_PICKER, - label = stringRes(R.string.enum__swipe_action__show_input_method_picker), - ) - entry( - key = SWITCH_TO_PREV_SUBTYPE, - label = stringRes(R.string.enum__swipe_action__switch_to_prev_subtype), - ) - entry( - key = SWITCH_TO_NEXT_SUBTYPE, - label = stringRes(R.string.enum__swipe_action__switch_to_next_subtype), - ) - entry( - key = SWITCH_TO_PREV_KEYBOARD, - label = stringRes(R.string.enum__swipe_action__switch_to_prev_keyboard), - ) - entry( - key = TOGGLE_SMARTBAR_VISIBILITY, - label = stringRes(R.string.enum__swipe_action__toggle_smartbar_visibility), - ) - } - - @Composable - fun deleteSwipeListEntries() = listPrefEntries { - entry( - key = NO_ACTION, - label = stringRes(R.string.enum__swipe_action__no_action), - ) - entry( - key = DELETE_CHARACTERS_PRECISELY, - label = stringRes(R.string.enum__swipe_action__delete_characters_precisely), - ) - entry( - key = DELETE_WORD, - label = stringRes(R.string.enum__swipe_action__delete_word), - ) - entry( - key = DELETE_WORDS_PRECISELY, - label = stringRes(R.string.enum__swipe_action__delete_words_precisely), - ) - entry( - key = SELECT_CHARACTERS_PRECISELY, - label = stringRes(R.string.enum__swipe_action__select_characters_precisely), - ) - entry( - key = SELECT_WORDS_PRECISELY, - label = stringRes(R.string.enum__swipe_action__select_words_precisely), - ) - } - - @Composable - fun deleteLongPressListEntries() = listPrefEntries { - entry( - key = DELETE_CHARACTER, - label = stringRes(R.string.enum__swipe_action__delete_character), - ) - entry( - key = DELETE_WORD, - label = stringRes(R.string.enum__swipe_action__delete_word), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/KeyHintMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/KeyHintMode.kt index 4fbb2875..966350f5 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/KeyHintMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/KeyHintMode.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.text.key -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum for the key hint modes. */ @@ -29,28 +24,4 @@ enum class KeyHintMode { HINT_PRIORITY, ACCENT_PRIORITY, SMART_PRIORITY; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = ACCENT_PRIORITY, - label = stringRes(R.string.enum__key_hint_mode__accent_priority), - description = stringRes(R.string.enum__key_hint_mode__accent_priority__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = HINT_PRIORITY, - label = stringRes(R.string.enum__key_hint_mode__hint_priority), - description = stringRes(R.string.enum__key_hint_mode__hint_priority__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = SMART_PRIORITY, - label = stringRes(R.string.enum__key_hint_mode__smart_priority), - description = stringRes(R.string.enum__key_hint_mode__smart_priority__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt index f0fba3e8..80c7f794 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.text.key -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum for declaring the utility key actions. */ @@ -30,26 +25,4 @@ enum class UtilityKeyAction { SWITCH_KEYBOARD_APP, DYNAMIC_SWITCH_LANGUAGE_EMOJIS, DISABLED; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = SWITCH_TO_EMOJIS, - label = stringRes(R.string.enum__utility_key_action__switch_to_emojis), - ) - entry( - key = SWITCH_LANGUAGE, - label = stringRes(R.string.enum__utility_key_action__switch_language), - ) - entry( - key = SWITCH_KEYBOARD_APP, - label = stringRes(R.string.enum__utility_key_action__switch_keyboard_app), - ) - entry( - key = DYNAMIC_SWITCH_LANGUAGE_EMOJIS, - label = stringRes(R.string.enum__utility_key_action__dynamic_switch_language_emojis), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeMode.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeMode.kt index e489c478..9eabda20 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeMode.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/theme/ThemeMode.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.ime.theme -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * Enum class which specifies all theme modes available. Used in the Settings * to properly manage different use cases when the day or night theme should @@ -31,26 +26,4 @@ enum class ThemeMode { ALWAYS_NIGHT, FOLLOW_SYSTEM, FOLLOW_TIME; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = ALWAYS_DAY, - label = stringRes(R.string.enum__theme_mode__always_day), - ) - entry( - key = ALWAYS_NIGHT, - label = stringRes(R.string.enum__theme_mode__always_night), - ) - entry( - key = FOLLOW_SYSTEM, - label = stringRes(R.string.enum__theme_mode__follow_system), - ) - entry( - key = FOLLOW_TIME, - label = stringRes(R.string.enum__theme_mode__follow_time), - ) - } - } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt index af068b74..c0a3f46f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggLevel.kt @@ -16,11 +16,6 @@ package dev.patrickgold.florisboard.lib.snygg -import androidx.compose.runtime.Composable -import dev.patrickgold.florisboard.R -import dev.patrickgold.florisboard.lib.compose.stringRes -import dev.patrickgold.jetpref.datastore.ui.listPrefEntries - /** * SnyggLevel indicates if a rule property is intended to be edited by all users (BASIC) or only by advanced users * (ADVANCED). This level is intended for theme editor UIs to hide certain properties in a "basic" mode, for the Snygg @@ -33,28 +28,4 @@ enum class SnyggLevel : Comparable { ADVANCED, /** A property is intended to be edited by developers **/ DEVELOPER; - - companion object { - @Composable - fun listEntries() = listPrefEntries { - entry( - key = BASIC, - label = stringRes(R.string.enum__snygg_level__basic), - description = stringRes(R.string.enum__snygg_level__basic__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = ADVANCED, - label = stringRes(R.string.enum__snygg_level__advanced), - description = stringRes(R.string.enum__snygg_level__advanced__description), - showDescriptionOnlyIfSelected = true, - ) - entry( - key = DEVELOPER, - label = stringRes(R.string.enum__snygg_level__developer), - description = stringRes(R.string.enum__snygg_level__developer__description), - showDescriptionOnlyIfSelected = true, - ) - } - } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 02b7c276..d25c2ccf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -817,6 +817,9 @@ Smart prioritization The initial character selected after long press is dynamically decided to be either the primary accent or the hint symbol, based on the current language and layout + Replace shared actions toggle icon with the incognito indicator + Display the incognito indicator behind the keyboard + Force off Incognito mode will always be disabled, regardless of the target app\'s passed options. The incognito quick action in the Smartbar will not be available with this option. Force on @@ -824,9 +827,6 @@ Dynamically on/off Recommended option. Incognito mode will be dynamically enabled or disabled either through the target app\'s passed options or by manually toggling it through the incognito quick action in the Smartbar. - Replace shared actions toggle icon with the incognito indicator - Display the incognito indicator behind the keyboard - Dynamically play sounds for input events, depending on system settings Always play sounds for input events, regardless of system settings Dynamically vibrate for input events, depending on system settings From b0649b1b7e812737c43ca9aacfa9b3dc8a11eb87 Mon Sep 17 00:00:00 2001 From: Patrick Goldinger Date: Fri, 5 Jul 2024 19:43:00 +0200 Subject: [PATCH 2/2] Move `lib.snygg` to separate module --- app/build.gradle.kts | 1 + .../florisboard/FlorisApplication.kt | 2 + .../florisboard/FlorisImeService.kt | 14 ++--- .../patrickgold/florisboard/app/AppPrefs.kt | 2 +- .../florisboard/app/EnumDisplayEntries.kt | 2 +- .../app/ext/ExtensionEditScreen.kt | 2 +- .../app/settings/theme/EditPropertyDialog.kt | 42 +++++++-------- .../app/settings/theme/EditRuleDialog.kt | 4 +- .../app/settings/theme/FineTuneDialog.kt | 2 +- .../app/settings/theme/SnyggValueIcon.kt | 18 +++---- .../app/settings/theme/ThemeEditorScreen.kt | 18 +++---- .../app/settings/theme/ThemeTranslations.kt | 42 +++++++-------- .../ime/clipboard/ClipboardInputLayout.kt | 16 +++--- .../florisboard/ime/media/MediaInputLayout.kt | 2 +- .../ime/media/emoji/EmojiPaletteView.kt | 10 ++-- .../ime/onehanded/OneHandedPanel.kt | 4 +- .../florisboard/ime/popup/PopupUi.kt | 12 ++--- .../florisboard/ime/smartbar/CandidatesRow.kt | 6 +-- .../florisboard/ime/smartbar/Smartbar.kt | 8 +-- .../smartbar/quickaction/QuickActionButton.kt | 10 ++-- .../quickaction/QuickActionsEditorPanel.kt | 10 ++-- .../quickaction/QuickActionsOverflowPanel.kt | 4 +- .../smartbar/quickaction/QuickActionsRow.kt | 2 +- .../florisboard/ime/text/TextInputLayout.kt | 2 +- .../ime/text/keyboard/TextKeyboardLayout.kt | 8 +-- .../florisboard/ime/theme/FlorisImeTheme.kt | 52 +++++++++++++++++- .../ime/theme/FlorisImeThemeBaseStyle.kt | 2 +- .../florisboard/ime/theme/FlorisImeUiSpec.kt | 30 +++++------ .../ime/theme/ThemeExtensionComponent.kt | 2 +- .../florisboard/ime/theme/ThemeManager.kt | 11 ++-- .../florisboard/lib/compose/SystemUi.kt | 2 +- .../lib/ext/ExtensionValidation.kt | 16 +++--- .../florisboard/lib/snygg/SnyggRuleTest.kt | 2 +- .../lib/snygg/value/SnyggSizeValueTest.kt | 2 +- lib/android/build.gradle.kts | 1 + .../lib/android/ExampleInstrumentedTest.kt | 24 --------- .../lib/android/ExampleUnitTest.kt | 17 ------ lib/snygg/.gitignore | 1 + lib/snygg/build.gradle.kts | 53 +++++++++++++++++++ lib/snygg/consumer-rules.pro | 0 lib/snygg/proguard-rules.pro | 21 ++++++++ lib/snygg/src/main/AndroidManifest.xml | 4 ++ .../org}/florisboard/lib/snygg/Snygg.kt | 12 ++++- .../org}/florisboard/lib/snygg/SnyggLevel.kt | 2 +- .../florisboard/lib/snygg/SnyggPropertySet.kt | 32 +++++------ .../org}/florisboard/lib/snygg/SnyggRule.kt | 39 ++------------ .../org}/florisboard/lib/snygg/SnyggSpec.kt | 8 +-- .../florisboard/lib/snygg/SnyggStylesheet.kt | 19 ++++--- .../florisboard/lib/snygg/ui/SnyggButton.kt | 20 +++---- .../lib/snygg/ui/SnyggModifiers.kt | 17 +++--- .../florisboard/lib/snygg/ui/SnyggSurface.kt | 16 +++--- .../lib/snygg/ui/SnyggUiDefaults.kt | 27 ++++++++++ .../lib/snygg/value/SnyggAppearanceValue.kt | 2 +- .../lib/snygg/value/SnyggIdToValueMap.kt | 2 +- .../lib/snygg/value/SnyggMaterialYouValue.kt | 10 ++-- .../lib/snygg/value/SnyggRefValue.kt | 2 +- .../lib/snygg/value/SnyggShapeValue.kt | 2 +- .../lib/snygg/value/SnyggSizeValue.kt | 2 +- .../florisboard/lib/snygg/value/SnyggValue.kt | 2 +- .../lib/snygg/value/SnyggValueEncoder.kt | 2 +- .../lib/snygg/value/SnyggValueSpec.kt | 2 +- .../lib/snygg/value/SnyggVarValue.kt | 12 +++-- settings.gradle.kts | 1 + 63 files changed, 406 insertions(+), 308 deletions(-) delete mode 100644 lib/android/src/androidTest/java/org/florisboard/lib/android/ExampleInstrumentedTest.kt delete mode 100644 lib/android/src/test/java/org/florisboard/lib/android/ExampleUnitTest.kt create mode 100644 lib/snygg/.gitignore create mode 100644 lib/snygg/build.gradle.kts create mode 100644 lib/snygg/consumer-rules.pro create mode 100644 lib/snygg/proguard-rules.pro create mode 100644 lib/snygg/src/main/AndroidManifest.xml rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/Snygg.kt (76%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/SnyggLevel.kt (96%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/SnyggPropertySet.kt (87%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/SnyggRule.kt (85%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/SnyggSpec.kt (89%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/SnyggStylesheet.kt (95%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/ui/SnyggButton.kt (82%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/ui/SnyggModifiers.kt (85%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/ui/SnyggSurface.kt (82%) create mode 100644 lib/snygg/src/main/kotlin/org/florisboard/lib/snygg/ui/SnyggUiDefaults.kt rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggAppearanceValue.kt (99%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggIdToValueMap.kt (96%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggMaterialYouValue.kt (95%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggRefValue.kt (97%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggShapeValue.kt (99%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggSizeValue.kt (98%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggValue.kt (98%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggValueEncoder.kt (97%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggValueSpec.kt (99%) rename {app/src/main/kotlin/dev/patrickgold => lib/snygg/src/main/kotlin/org}/florisboard/lib/snygg/value/SnyggVarValue.kt (86%) 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")