mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-19 11:32:18 +02:00
Merge pull request #2499 from florisboard/refactor/move-lib-snygg
Move `lib.snygg` to separate module
This commit is contained in:
commit
5b7727b884
@ -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)
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 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
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
private const val DEFAULT = ""
|
||||
|
||||
private val ENUM_DISPLAY_ENTRIES = mapOf<Pair<KClass<*>, String>, @Composable () -> List<ListPreferenceEntry<*>>>(
|
||||
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 <V : Any> enumDisplayEntriesOf(
|
||||
enumClass: KClass<V>,
|
||||
variant: String = DEFAULT,
|
||||
): List<ListPreferenceEntry<V>> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return ENUM_DISPLAY_ENTRIES[enumClass to variant]?.invoke()
|
||||
as List<ListPreferenceEntry<V>>
|
||||
}
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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 },
|
||||
)
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -20,9 +20,10 @@ 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
|
||||
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
|
||||
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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<SnapshotStateList<Int>, ArrayList<Int>>(
|
||||
save = { ArrayList(it) },
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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<Color>(durationMillis = 150, easing = FastOutSlowInEasing)
|
||||
private val DebugHelperColor = Color.Red.copy(alpha = 0.5f)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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<ThemeExtensionComponent> { error("not init") }
|
||||
private val LocalStyle = staticCompositionLocalOf<SnyggStylesheet> { 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
/**
|
||||
|
@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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<String> {
|
||||
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()
|
||||
|
@ -1,60 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Patrick Goldinger
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
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
|
||||
* theme engine internally this level will be ignored completely.
|
||||
*/
|
||||
enum class SnyggLevel : Comparable<SnyggLevel> {
|
||||
/** A property is intended to be edited by all users **/
|
||||
BASIC,
|
||||
/** A property is intended to be edited by advanced users **/
|
||||
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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
@ -817,6 +817,9 @@
|
||||
<string name="enum__key_hint_mode__smart_priority" comment="Enum value label">Smart prioritization</string>
|
||||
<string name="enum__key_hint_mode__smart_priority__description" comment="Enum value description">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</string>
|
||||
|
||||
<string name="enum__incognito_display_mode__replace_shared_actions_toggle" comment="Enum value label">Replace shared actions toggle icon with the incognito indicator</string>
|
||||
<string name="enum__incognito_display_mode__display_behind_keyboard" comment="Enum value label">Display the incognito indicator behind the keyboard</string>
|
||||
|
||||
<string name="enum__incognito_mode__force_off" comment="Enum value label">Force off</string>
|
||||
<string name="enum__incognito_mode__force_off__description" comment="Enum value description">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.</string>
|
||||
<string name="enum__incognito_mode__force_on" comment="Enum value label">Force on</string>
|
||||
@ -824,9 +827,6 @@
|
||||
<string name="enum__incognito_mode__dynamic_on_off" comment="Enum value label">Dynamically on/off</string>
|
||||
<string name="enum__incognito_mode__dynamic_on_off__description" comment="Enum value description">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.</string>
|
||||
|
||||
<string name="enum__incognito_display_mode__replace_shared_actions_toggle" comment="Enum value label">Replace shared actions toggle icon with the incognito indicator</string>
|
||||
<string name="enum__incognito_display_mode__display_behind_keyboard" comment="Enum value label">Display the incognito indicator behind the keyboard</string>
|
||||
|
||||
<string name="enum__input_feedback_activation_mode__audio_respect_system_settings" comment="Enum value label">Dynamically play sounds for input events, depending on system settings</string>
|
||||
<string name="enum__input_feedback_activation_mode__audio_ignore_system_settings" comment="Enum value label">Always play sounds for input events, regardless of system settings</string>
|
||||
<string name="enum__input_feedback_activation_mode__haptic_respect_system_settings" comment="Enum value label">Dynamically vibrate for input events, depending on system settings</string>
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
1
lib/snygg/.gitignore
vendored
Normal file
1
lib/snygg/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
53
lib/snygg/build.gradle.kts
Normal file
53
lib/snygg/build.gradle.kts
Normal file
@ -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)
|
||||
}
|
0
lib/snygg/consumer-rules.pro
Normal file
0
lib/snygg/consumer-rules.pro
Normal file
21
lib/snygg/proguard-rules.pro
vendored
Normal file
21
lib/snygg/proguard-rules.pro
vendored
Normal file
@ -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
|
4
lib/snygg/src/main/AndroidManifest.xml
Normal file
4
lib/snygg/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
@ -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<String>,
|
||||
rulePlaceholders: Map<String, Int>,
|
||||
) {
|
||||
SnyggStylesheetSerializer.GlobalStylesheetSpec = stylesheetSpec
|
||||
SnyggRule.PreferredElementSorting = rulePreferredElementSorting
|
||||
SnyggRule.Placeholders = rulePlaceholders
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2021 Patrick Goldinger
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
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
|
||||
* (ADVANCED). This level is intended for theme editor UIs to hide certain properties in a "basic" mode, for the Snygg
|
||||
* theme engine internally this level will be ignored completely.
|
||||
*/
|
||||
enum class SnyggLevel : Comparable<SnyggLevel> {
|
||||
/** A property is intended to be edited by all users **/
|
||||
BASIC,
|
||||
/** A property is intended to be edited by advanced users **/
|
||||
ADVANCED,
|
||||
/** A property is intended to be edited by developers **/
|
||||
DEVELOPER;
|
||||
}
|
@ -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<String, SnyggValue>) {
|
||||
val width = properties[Snygg.Width] ?: SnyggImplicitInheritValue
|
@ -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<String, Int>()
|
||||
|
||||
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<String>()
|
||||
|
||||
val Saver = Saver<SnyggRule?, String>(
|
||||
save = { it?.toString() ?: "" },
|
@ -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<String, SnyggPropertySetSpec>
|
@ -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<SnyggStylesheet> {
|
||||
|
||||
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<SnyggStylesheet> {
|
||||
val rawRuleMap = ruleMapSerializer.deserialize(decoder)
|
||||
val ruleMap = mutableMapOf<SnyggRule, SnyggPropertySet>()
|
||||
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() }
|
@ -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,
|
@ -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,
|
@ -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
|
@ -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()
|
||||
}
|
||||
}
|
@ -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
|
@ -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
|
@ -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
|
@ -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"
|
@ -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
|
@ -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
|
@ -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
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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("")
|
@ -38,3 +38,4 @@ include(":benchmark")
|
||||
include(":lib:android")
|
||||
include(":lib:kotlin")
|
||||
include(":lib:native")
|
||||
include(":lib:snygg")
|
||||
|
Loading…
Reference in New Issue
Block a user