mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-19 11:32:18 +02:00
Modularize lib.kotlin (#2404)
* extract dev.patrickgold.florisboard.lib.kotlin to org.florisboard.lib.kotlin * apply review suggestions
This commit is contained in:
parent
74dd67642c
commit
22b7a675e4
@ -236,6 +236,9 @@ dependencies {
|
|||||||
implementation(libs.patrickgold.jetpref.datastore.ui)
|
implementation(libs.patrickgold.jetpref.datastore.ui)
|
||||||
implementation(libs.patrickgold.jetpref.material.ui)
|
implementation(libs.patrickgold.jetpref.material.ui)
|
||||||
|
|
||||||
|
|
||||||
|
implementation(project(":lib:kotlin"))
|
||||||
|
|
||||||
testImplementation(libs.equalsverifier)
|
testImplementation(libs.equalsverifier)
|
||||||
testImplementation(libs.kotest.assertions.core)
|
testImplementation(libs.kotest.assertions.core)
|
||||||
testImplementation(libs.kotest.extensions.roboelectric)
|
testImplementation(libs.kotest.extensions.roboelectric)
|
||||||
|
@ -45,9 +45,9 @@ import dev.patrickgold.florisboard.lib.ext.ExtensionManager
|
|||||||
import dev.patrickgold.florisboard.lib.io.AssetManager
|
import dev.patrickgold.florisboard.lib.io.AssetManager
|
||||||
import dev.patrickgold.florisboard.lib.io.deleteContentsRecursively
|
import dev.patrickgold.florisboard.lib.io.deleteContentsRecursively
|
||||||
import dev.patrickgold.florisboard.lib.io.subFile
|
import dev.patrickgold.florisboard.lib.io.subFile
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
|
||||||
import dev.patrickgold.florisboard.lib.toNativeStr
|
import dev.patrickgold.florisboard.lib.toNativeStr
|
||||||
import dev.patrickgold.jetpref.datastore.JetPref
|
import dev.patrickgold.jetpref.datastore.JetPref
|
||||||
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -112,7 +112,6 @@ import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
|||||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogWarning
|
import dev.patrickgold.florisboard.lib.devtools.flogWarning
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn
|
|
||||||
import dev.patrickgold.florisboard.lib.observeAsTransformingState
|
import dev.patrickgold.florisboard.lib.observeAsTransformingState
|
||||||
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface
|
import dev.patrickgold.florisboard.lib.snygg.ui.SnyggSurface
|
||||||
import dev.patrickgold.florisboard.lib.snygg.ui.shape
|
import dev.patrickgold.florisboard.lib.snygg.ui.shape
|
||||||
@ -124,6 +123,7 @@ import dev.patrickgold.florisboard.lib.snygg.ui.spSize
|
|||||||
import dev.patrickgold.florisboard.lib.util.ViewUtils
|
import dev.patrickgold.florisboard.lib.util.ViewUtils
|
||||||
import dev.patrickgold.florisboard.lib.util.debugSummarize
|
import dev.patrickgold.florisboard.lib.util.debugSummarize
|
||||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||||
|
import org.florisboard.lib.kotlin.collectLatestIn
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,14 +23,14 @@ import android.view.textservice.TextInfo
|
|||||||
import dev.patrickgold.florisboard.app.florisPreferenceModel
|
import dev.patrickgold.florisboard.app.florisPreferenceModel
|
||||||
import dev.patrickgold.florisboard.ime.core.Subtype
|
import dev.patrickgold.florisboard.ime.core.Subtype
|
||||||
import dev.patrickgold.florisboard.ime.dictionary.DictionaryManager
|
import dev.patrickgold.florisboard.ime.dictionary.DictionaryManager
|
||||||
import dev.patrickgold.florisboard.ime.nlp.SpellingResult
|
|
||||||
import dev.patrickgold.florisboard.ime.nlp.SpellingLanguageMode
|
import dev.patrickgold.florisboard.ime.nlp.SpellingLanguageMode
|
||||||
|
import dev.patrickgold.florisboard.ime.nlp.SpellingResult
|
||||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||||
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.map
|
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import org.florisboard.lib.kotlin.map
|
||||||
|
|
||||||
class FlorisSpellCheckerService : SpellCheckerService() {
|
class FlorisSpellCheckerService : SpellCheckerService() {
|
||||||
private val prefs by florisPreferenceModel()
|
private val prefs by florisPreferenceModel()
|
||||||
|
@ -56,7 +56,7 @@ import dev.patrickgold.florisboard.app.settings.theme.ThemeManagerScreenAction
|
|||||||
import dev.patrickgold.florisboard.app.settings.theme.ThemeScreen
|
import dev.patrickgold.florisboard.app.settings.theme.ThemeScreen
|
||||||
import dev.patrickgold.florisboard.app.settings.typing.TypingScreen
|
import dev.patrickgold.florisboard.app.settings.typing.TypingScreen
|
||||||
import dev.patrickgold.florisboard.app.setup.SetupScreen
|
import dev.patrickgold.florisboard.app.setup.SetupScreen
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
|
|
||||||
@Suppress("FunctionName")
|
@Suppress("FunctionName")
|
||||||
object Routes {
|
object Routes {
|
||||||
|
@ -61,9 +61,8 @@ import dev.patrickgold.florisboard.lib.compose.FlorisScreen
|
|||||||
import dev.patrickgold.florisboard.lib.compose.defaultFlorisOutlinedBox
|
import dev.patrickgold.florisboard.lib.compose.defaultFlorisOutlinedBox
|
||||||
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
||||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
|
||||||
import dev.patrickgold.florisboard.lib.io.FileRegistry
|
import dev.patrickgold.florisboard.lib.io.FileRegistry
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.resultOk
|
import org.florisboard.lib.kotlin.resultOk
|
||||||
|
|
||||||
enum class ExtensionImportScreenType(
|
enum class ExtensionImportScreenType(
|
||||||
val id: String,
|
val id: String,
|
||||||
|
@ -19,8 +19,8 @@ package dev.patrickgold.florisboard.app.settings.theme
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import dev.patrickgold.florisboard.R
|
import dev.patrickgold.florisboard.R
|
||||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
|
||||||
import dev.patrickgold.jetpref.datastore.ui.listPrefEntries
|
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.
|
* DisplayColorsAs indicates how color strings should be visually presented to the user.
|
||||||
|
@ -68,8 +68,6 @@ import dev.patrickgold.florisboard.lib.compose.FlorisTextButton
|
|||||||
import dev.patrickgold.florisboard.lib.compose.rippleClickable
|
import dev.patrickgold.florisboard.lib.compose.rippleClickable
|
||||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
|
import dev.patrickgold.florisboard.lib.ext.ExtensionValidation
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.toStringWithoutDotZero
|
|
||||||
import dev.patrickgold.florisboard.lib.rememberValidationResult
|
import dev.patrickgold.florisboard.lib.rememberValidationResult
|
||||||
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
|
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
|
||||||
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec
|
import dev.patrickgold.florisboard.lib.snygg.SnyggPropertySetSpec
|
||||||
@ -97,6 +95,8 @@ import dev.patrickgold.jetpref.material.ui.ExperimentalJetPrefMaterialUi
|
|||||||
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
|
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
|
||||||
import dev.patrickgold.jetpref.material.ui.JetPrefColorPicker
|
import dev.patrickgold.jetpref.material.ui.JetPrefColorPicker
|
||||||
import dev.patrickgold.jetpref.material.ui.rememberJetPrefColorPickerState
|
import dev.patrickgold.jetpref.material.ui.rememberJetPrefColorPickerState
|
||||||
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
|
import org.florisboard.lib.kotlin.toStringWithoutDotZero
|
||||||
|
|
||||||
internal val SnyggEmptyPropertyInfoForAdding = PropertyInfo(
|
internal val SnyggEmptyPropertyInfoForAdding = PropertyInfo(
|
||||||
name = "- select -",
|
name = "- select -",
|
||||||
|
@ -67,6 +67,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import dev.patrickgold.florisboard.R
|
import dev.patrickgold.florisboard.R
|
||||||
import dev.patrickgold.florisboard.ime.input.InputKeyEventReceiver
|
import dev.patrickgold.florisboard.ime.input.InputKeyEventReceiver
|
||||||
|
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
||||||
import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator
|
import dev.patrickgold.florisboard.ime.keyboard.ComputingEvaluator
|
||||||
import dev.patrickgold.florisboard.ime.keyboard.DefaultComputingEvaluator
|
import dev.patrickgold.florisboard.ime.keyboard.DefaultComputingEvaluator
|
||||||
import dev.patrickgold.florisboard.ime.keyboard.Key
|
import dev.patrickgold.florisboard.ime.keyboard.Key
|
||||||
@ -75,7 +76,6 @@ import dev.patrickgold.florisboard.ime.keyboard.Keyboard
|
|||||||
import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode
|
import dev.patrickgold.florisboard.ime.keyboard.KeyboardMode
|
||||||
import dev.patrickgold.florisboard.ime.keyboard.computeIconResId
|
import dev.patrickgold.florisboard.ime.keyboard.computeIconResId
|
||||||
import dev.patrickgold.florisboard.ime.keyboard.computeLabel
|
import dev.patrickgold.florisboard.ime.keyboard.computeLabel
|
||||||
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
|
||||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUiSpec
|
import dev.patrickgold.florisboard.ime.theme.FlorisImeUiSpec
|
||||||
@ -90,12 +90,12 @@ import dev.patrickgold.florisboard.lib.compose.FlorisIconButton
|
|||||||
import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField
|
import dev.patrickgold.florisboard.lib.compose.FlorisOutlinedTextField
|
||||||
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
import dev.patrickgold.florisboard.lib.compose.florisHorizontalScroll
|
||||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.getKeyByValue
|
|
||||||
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
|
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
|
||||||
import dev.patrickgold.florisboard.lib.snygg.SnyggRule
|
import dev.patrickgold.florisboard.lib.snygg.SnyggRule
|
||||||
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
||||||
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
|
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
|
||||||
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
|
import org.florisboard.lib.kotlin.getKeyByValue
|
||||||
|
|
||||||
private val TransparentTextSelectionColors = TextSelectionColors(
|
private val TransparentTextSelectionColors = TextSelectionColors(
|
||||||
handleColor = Color.Transparent,
|
handleColor = Color.Transparent,
|
||||||
|
@ -33,7 +33,6 @@ import dev.patrickgold.florisboard.lib.android.AndroidClipboardManager_OnPrimary
|
|||||||
import dev.patrickgold.florisboard.lib.android.setOrClearPrimaryClip
|
import dev.patrickgold.florisboard.lib.android.setOrClearPrimaryClip
|
||||||
import dev.patrickgold.florisboard.lib.android.showShortToast
|
import dev.patrickgold.florisboard.lib.android.showShortToast
|
||||||
import dev.patrickgold.florisboard.lib.android.systemService
|
import dev.patrickgold.florisboard.lib.android.systemService
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
@ -46,6 +45,7 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,7 +40,7 @@ import androidx.room.TypeConverter
|
|||||||
import androidx.room.TypeConverters
|
import androidx.room.TypeConverters
|
||||||
import androidx.room.Update
|
import androidx.room.Update
|
||||||
import dev.patrickgold.florisboard.lib.android.query
|
import dev.patrickgold.florisboard.lib.android.query
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
|
|
||||||
private const val CLIPBOARD_HISTORY_TABLE = "clipboard_history"
|
private const val CLIPBOARD_HISTORY_TABLE = "clipboard_history"
|
||||||
private const val CLIPBOARD_FILES_TABLE = "clipboard_files"
|
private const val CLIPBOARD_FILES_TABLE = "clipboard_files"
|
||||||
|
@ -30,11 +30,11 @@ import android.provider.OpenableColumns
|
|||||||
import androidx.exifinterface.media.ExifInterface
|
import androidx.exifinterface.media.ExifInterface
|
||||||
import dev.patrickgold.florisboard.BuildConfig
|
import dev.patrickgold.florisboard.BuildConfig
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows apps to access images and videos on the clipboard.
|
* Allows apps to access images and videos on the clipboard.
|
||||||
|
@ -38,7 +38,7 @@ import dev.patrickgold.florisboard.lib.FlorisLocale
|
|||||||
import dev.patrickgold.florisboard.lib.ValidationRule
|
import dev.patrickgold.florisboard.lib.ValidationRule
|
||||||
import dev.patrickgold.florisboard.lib.android.readText
|
import dev.patrickgold.florisboard.lib.android.readText
|
||||||
import dev.patrickgold.florisboard.lib.android.writeText
|
import dev.patrickgold.florisboard.lib.android.writeText
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
private const val WORDS_TABLE = "words"
|
private const val WORDS_TABLE = "words"
|
||||||
|
@ -29,16 +29,16 @@ import dev.patrickgold.florisboard.ime.nlp.BreakIteratorGroup
|
|||||||
import dev.patrickgold.florisboard.ime.text.composing.Composer
|
import dev.patrickgold.florisboard.ime.text.composing.Composer
|
||||||
import dev.patrickgold.florisboard.keyboardManager
|
import dev.patrickgold.florisboard.keyboardManager
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
|
||||||
import dev.patrickgold.florisboard.nlpManager
|
import dev.patrickgold.florisboard.nlpManager
|
||||||
import dev.patrickgold.florisboard.subtypeManager
|
import dev.patrickgold.florisboard.subtypeManager
|
||||||
import kotlin.math.max
|
|
||||||
import kotlin.math.min
|
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import org.florisboard.lib.kotlin.guardedByLock
|
||||||
|
import kotlin.math.max
|
||||||
|
import kotlin.math.min
|
||||||
|
|
||||||
@Suppress("BlockingMethodInNonBlockingContext")
|
@Suppress("BlockingMethodInNonBlockingContext")
|
||||||
abstract class AbstractEditorInstance(context: Context) {
|
abstract class AbstractEditorInstance(context: Context) {
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package dev.patrickgold.florisboard.ime.editor
|
package dev.patrickgold.florisboard.ime.editor
|
||||||
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.safeSubstring
|
import org.florisboard.lib.kotlin.safeSubstring
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A snapshot window of an input editor content around the selection/cursor.
|
* A snapshot window of an input editor content around the selection/cursor.
|
||||||
@ -25,8 +25,8 @@ import dev.patrickgold.florisboard.lib.kotlin.safeSubstring
|
|||||||
* @property offset The offset of the whole editor content snapshot. `-1` indicates the value is unknown.
|
* @property offset The offset of the whole editor content snapshot. `-1` indicates the value is unknown.
|
||||||
* @property localSelection The selection reported by the editor, without [offset] included.
|
* @property localSelection The selection reported by the editor, without [offset] included.
|
||||||
* @property localComposing The composing region for the editor, without [offset] included.
|
* @property localComposing The composing region for the editor, without [offset] included.
|
||||||
* @property localCurrentWord The current word for the editor (typically the same as [localComposing]), without
|
* @property localCurrentWord The current word for the editor (typically the same as [localComposing]), without [offset]
|
||||||
* [offset] included.
|
* included.
|
||||||
*/
|
*/
|
||||||
data class EditorContent(
|
data class EditorContent(
|
||||||
val text: String,
|
val text: String,
|
||||||
|
@ -28,7 +28,6 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
|||||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||||
import dev.patrickgold.florisboard.lib.android.removeAndReturn
|
import dev.patrickgold.florisboard.lib.android.removeAndReturn
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
@ -39,6 +38,7 @@ import kotlinx.coroutines.isActive
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import org.florisboard.lib.kotlin.guardedByLock
|
||||||
|
|
||||||
class InputEventDispatcher private constructor(private val repeatableKeyCodes: IntArray) {
|
class InputEventDispatcher private constructor(private val repeatableKeyCodes: IntArray) {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -22,7 +22,6 @@ import android.view.KeyEvent
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import dev.patrickgold.florisboard.FlorisImeService
|
import dev.patrickgold.florisboard.FlorisImeService
|
||||||
@ -63,10 +62,8 @@ import dev.patrickgold.florisboard.lib.android.systemService
|
|||||||
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.collectIn
|
import dev.patrickgold.florisboard.lib.titlecase
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn
|
import dev.patrickgold.florisboard.lib.uppercase
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.titlecase
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.uppercase
|
|
||||||
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
||||||
import dev.patrickgold.florisboard.nlpManager
|
import dev.patrickgold.florisboard.nlpManager
|
||||||
import dev.patrickgold.florisboard.subtypeManager
|
import dev.patrickgold.florisboard.subtypeManager
|
||||||
@ -78,6 +75,8 @@ import kotlinx.coroutines.flow.asStateFlow
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
|
import org.florisboard.lib.kotlin.collectIn
|
||||||
|
import org.florisboard.lib.kotlin.collectLatestIn
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
private val DoubleSpacePeriodMatcher = """([^.!?‽\s]\s)""".toRegex()
|
private val DoubleSpacePeriodMatcher = """([^.!?‽\s]\s)""".toRegex()
|
||||||
|
@ -34,8 +34,6 @@ import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
|||||||
import dev.patrickgold.florisboard.lib.devtools.flogWarning
|
import dev.patrickgold.florisboard.lib.devtools.flogWarning
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||||
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.DeferredResult
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.runCatchingAsync
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Deferred
|
import kotlinx.coroutines.Deferred
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -44,6 +42,8 @@ import kotlinx.coroutines.async
|
|||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
|
import org.florisboard.lib.kotlin.DeferredResult
|
||||||
|
import org.florisboard.lib.kotlin.runCatchingAsync
|
||||||
|
|
||||||
private data class LTN(
|
private data class LTN(
|
||||||
val type: LayoutType,
|
val type: LayoutType,
|
||||||
|
@ -18,9 +18,9 @@ package dev.patrickgold.florisboard.ime.nlp
|
|||||||
|
|
||||||
import android.icu.text.BreakIterator
|
import android.icu.text.BreakIterator
|
||||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.GuardedByLock
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
|
||||||
import io.github.reactivecircus.cache4k.Cache
|
import io.github.reactivecircus.cache4k.Cache
|
||||||
|
import org.florisboard.lib.kotlin.GuardedByLock
|
||||||
|
import org.florisboard.lib.kotlin.guardedByLock
|
||||||
import kotlin.contracts.InvocationKind
|
import kotlin.contracts.InvocationKind
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
||||||
|
|
||||||
|
@ -3,31 +3,17 @@ package dev.patrickgold.florisboard.ime.nlp
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import android.database.sqlite.SQLiteException
|
import android.database.sqlite.SQLiteException
|
||||||
import dev.patrickgold.florisboard.appContext
|
|
||||||
import dev.patrickgold.florisboard.assetManager
|
|
||||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||||
import dev.patrickgold.florisboard.lib.android.copy
|
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||||
import dev.patrickgold.florisboard.lib.ext.Extension
|
import dev.patrickgold.florisboard.lib.ext.Extension
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponent
|
import dev.patrickgold.florisboard.lib.ext.ExtensionComponent
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionEditor
|
import dev.patrickgold.florisboard.lib.ext.ExtensionEditor
|
||||||
import dev.patrickgold.florisboard.lib.ext.ExtensionMeta
|
import dev.patrickgold.florisboard.lib.ext.ExtensionMeta
|
||||||
import dev.patrickgold.florisboard.lib.io.FlorisRef
|
|
||||||
import dev.patrickgold.florisboard.lib.io.FsDir
|
import dev.patrickgold.florisboard.lib.io.FsDir
|
||||||
import dev.patrickgold.florisboard.lib.io.parentDir
|
|
||||||
import dev.patrickgold.florisboard.lib.io.subFile
|
import dev.patrickgold.florisboard.lib.io.subFile
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
|
||||||
import kotlinx.serialization.KSerializer
|
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.Transient
|
import kotlinx.serialization.Transient
|
||||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
|
||||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
|
||||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
|
||||||
import kotlinx.serialization.encoding.Decoder
|
|
||||||
import kotlinx.serialization.encoding.Encoder
|
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
class LanguagePackComponent(
|
class LanguagePackComponent(
|
||||||
|
@ -34,12 +34,10 @@ import dev.patrickgold.florisboard.ime.clipboard.provider.ItemType
|
|||||||
import dev.patrickgold.florisboard.ime.core.Subtype
|
import dev.patrickgold.florisboard.ime.core.Subtype
|
||||||
import dev.patrickgold.florisboard.ime.editor.EditorContent
|
import dev.patrickgold.florisboard.ime.editor.EditorContent
|
||||||
import dev.patrickgold.florisboard.ime.editor.EditorRange
|
import dev.patrickgold.florisboard.ime.editor.EditorRange
|
||||||
import dev.patrickgold.florisboard.ime.nlp.latin.LatinLanguageProvider
|
|
||||||
import dev.patrickgold.florisboard.ime.nlp.han.HanShapeBasedLanguageProvider
|
import dev.patrickgold.florisboard.ime.nlp.han.HanShapeBasedLanguageProvider
|
||||||
|
import dev.patrickgold.florisboard.ime.nlp.latin.LatinLanguageProvider
|
||||||
import dev.patrickgold.florisboard.keyboardManager
|
import dev.patrickgold.florisboard.keyboardManager
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
|
||||||
import dev.patrickgold.florisboard.lib.util.NetworkUtils
|
import dev.patrickgold.florisboard.lib.util.NetworkUtils
|
||||||
import dev.patrickgold.florisboard.subtypeManager
|
import dev.patrickgold.florisboard.subtypeManager
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@ -51,6 +49,8 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
|
import org.florisboard.lib.kotlin.collectLatestIn
|
||||||
|
import org.florisboard.lib.kotlin.guardedByLock
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
@ -27,12 +27,12 @@ import dev.patrickgold.florisboard.ime.nlp.SuggestionProvider
|
|||||||
import dev.patrickgold.florisboard.ime.nlp.WordSuggestionCandidate
|
import dev.patrickgold.florisboard.ime.nlp.WordSuggestionCandidate
|
||||||
import dev.patrickgold.florisboard.lib.android.readText
|
import dev.patrickgold.florisboard.lib.android.readText
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.serialization.builtins.MapSerializer
|
import kotlinx.serialization.builtins.MapSerializer
|
||||||
import kotlinx.serialization.builtins.serializer
|
import kotlinx.serialization.builtins.serializer
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
import org.florisboard.lib.kotlin.guardedByLock
|
||||||
|
|
||||||
class LatinLanguageProvider(context: Context) : SpellingProvider, SuggestionProvider {
|
class LatinLanguageProvider(context: Context) : SpellingProvider, SuggestionProvider {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -30,7 +30,7 @@ import dev.patrickgold.florisboard.ime.popup.PopupSet
|
|||||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||||
import dev.patrickgold.florisboard.ime.text.key.KeyType
|
import dev.patrickgold.florisboard.ime.text.key.KeyType
|
||||||
import dev.patrickgold.florisboard.ime.text.key.KeyVariation
|
import dev.patrickgold.florisboard.ime.text.key.KeyVariation
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.lowercase
|
import dev.patrickgold.florisboard.lib.lowercase
|
||||||
|
|
||||||
class TextKey(override val data: AbstractKeyData) : Key(data) {
|
class TextKey(override val data: AbstractKeyData) : Key(data) {
|
||||||
var computedData: KeyData = TextKeyData.UNSPECIFIED
|
var computedData: KeyData = TextKeyData.UNSPECIFIED
|
||||||
|
@ -25,8 +25,8 @@ import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
|||||||
import dev.patrickgold.florisboard.ime.text.key.KeyType
|
import dev.patrickgold.florisboard.ime.text.key.KeyType
|
||||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||||
import dev.patrickgold.florisboard.lib.Unicode
|
import dev.patrickgold.florisboard.lib.Unicode
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.lowercase
|
import dev.patrickgold.florisboard.lib.lowercase
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.uppercase
|
import dev.patrickgold.florisboard.lib.uppercase
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.Transient
|
import kotlinx.serialization.Transient
|
||||||
|
@ -18,8 +18,6 @@ package dev.patrickgold.florisboard.lib
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import dev.patrickgold.florisboard.extensionManager
|
import dev.patrickgold.florisboard.extensionManager
|
||||||
import dev.patrickgold.florisboard.ime.nlp.LanguagePackExtension
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.titlecase
|
|
||||||
import kotlinx.serialization.KSerializer
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||||
@ -362,3 +360,11 @@ class FlorisLocale private constructor(val base: Locale) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun String.lowercase(locale: FlorisLocale): String = this.lowercase(locale.base)
|
||||||
|
|
||||||
|
inline fun String.uppercase(locale: FlorisLocale): String = this.uppercase(locale.base)
|
||||||
|
|
||||||
|
inline fun String.titlecase(locale: FlorisLocale = FlorisLocale.ROOT): String {
|
||||||
|
return this.replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale.base) else it.toString() }
|
||||||
|
}
|
||||||
|
@ -20,8 +20,8 @@ import androidx.annotation.StringRes
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
import org.florisboard.lib.kotlin.CurlyArg
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.LifecycleEventObserver
|
import androidx.lifecycle.LifecycleEventObserver
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
import java.lang.reflect.Modifier
|
import java.lang.reflect.Modifier
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@ package dev.patrickgold.florisboard.lib.android
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
import org.florisboard.lib.kotlin.CurlyArg
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,7 +24,7 @@ import androidx.annotation.StringRes
|
|||||||
import dev.patrickgold.florisboard.R
|
import dev.patrickgold.florisboard.R
|
||||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||||
import dev.patrickgold.florisboard.lib.io.FlorisRef
|
import dev.patrickgold.florisboard.lib.io.FlorisRef
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
import org.florisboard.lib.kotlin.CurlyArg
|
||||||
import kotlin.contracts.InvocationKind
|
import kotlin.contracts.InvocationKind
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
@ -19,7 +19,7 @@ package dev.patrickgold.florisboard.lib.android
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
import org.florisboard.lib.kotlin.CurlyArg
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows a short toast with specified text.
|
* Shows a short toast with specified text.
|
||||||
|
@ -27,8 +27,8 @@ import androidx.compose.ui.platform.LocalLayoutDirection
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.LayoutDirection
|
import androidx.compose.ui.unit.LayoutDirection
|
||||||
import dev.patrickgold.florisboard.R
|
import dev.patrickgold.florisboard.R
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
import org.florisboard.lib.kotlin.CurlyArg
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
|
|
||||||
private val LocalResourcesContext = staticCompositionLocalOf<Context> {
|
private val LocalResourcesContext = staticCompositionLocalOf<Context> {
|
||||||
error("resources context not initialized!!")
|
error("resources context not initialized!!")
|
||||||
|
@ -24,7 +24,7 @@ import dev.patrickgold.florisboard.BuildConfig
|
|||||||
import dev.patrickgold.florisboard.R
|
import dev.patrickgold.florisboard.R
|
||||||
import dev.patrickgold.florisboard.app.AppPrefs
|
import dev.patrickgold.florisboard.app.AppPrefs
|
||||||
import dev.patrickgold.florisboard.lib.android.systemService
|
import dev.patrickgold.florisboard.lib.android.systemService
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.titlecase
|
import dev.patrickgold.florisboard.lib.titlecase
|
||||||
import dev.patrickgold.florisboard.lib.util.TimeUtils
|
import dev.patrickgold.florisboard.lib.util.TimeUtils
|
||||||
import dev.patrickgold.florisboard.lib.util.UnitUtils
|
import dev.patrickgold.florisboard.lib.util.UnitUtils
|
||||||
import java.io.BufferedReader
|
import java.io.BufferedReader
|
||||||
|
@ -21,11 +21,11 @@ import dev.patrickgold.florisboard.lib.io.FlorisRef
|
|||||||
import dev.patrickgold.florisboard.lib.io.FsDir
|
import dev.patrickgold.florisboard.lib.io.FsDir
|
||||||
import dev.patrickgold.florisboard.lib.io.FsFile
|
import dev.patrickgold.florisboard.lib.io.FsFile
|
||||||
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.resultErr
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.resultOk
|
|
||||||
import kotlinx.serialization.Polymorphic
|
import kotlinx.serialization.Polymorphic
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.Transient
|
import kotlinx.serialization.Transient
|
||||||
|
import org.florisboard.lib.kotlin.resultErr
|
||||||
|
import org.florisboard.lib.kotlin.resultOk
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An extension container holding a parsed config, a working directory file
|
* An extension container holding a parsed config, a working directory file
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package dev.patrickgold.florisboard.lib.ext
|
package dev.patrickgold.florisboard.lib.ext
|
||||||
|
|
||||||
import androidx.compose.runtime.saveable.Saver
|
import androidx.compose.runtime.saveable.Saver
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
|
||||||
import dev.patrickgold.jetpref.datastore.model.PreferenceSerializer
|
import dev.patrickgold.jetpref.datastore.model.PreferenceSerializer
|
||||||
import kotlinx.serialization.KSerializer
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@ -25,6 +24,7 @@ import kotlinx.serialization.descriptors.PrimitiveKind
|
|||||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||||
import kotlinx.serialization.encoding.Decoder
|
import kotlinx.serialization.encoding.Decoder
|
||||||
import kotlinx.serialization.encoding.Encoder
|
import kotlinx.serialization.encoding.Encoder
|
||||||
|
import org.florisboard.lib.kotlin.tryOrNull
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An extension component, typically a layout, theme, file, etc. descriptor.
|
* An extension component, typically a layout, theme, file, etc. descriptor.
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.ext
|
package dev.patrickgold.florisboard.lib.ext
|
||||||
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
|
|
||||||
object ExtensionDefaults {
|
object ExtensionDefaults {
|
||||||
private const val ID_LOCAL_TEMPLATE = "local.{groupName}.{extensionName}"
|
private const val ID_LOCAL_TEMPLATE = "local.{groupName}.{extensionName}"
|
||||||
|
@ -38,7 +38,6 @@ import dev.patrickgold.florisboard.lib.io.FlorisRef
|
|||||||
import dev.patrickgold.florisboard.lib.io.FsFile
|
import dev.patrickgold.florisboard.lib.io.FsFile
|
||||||
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
import dev.patrickgold.florisboard.lib.io.ZipUtils
|
||||||
import dev.patrickgold.florisboard.lib.io.writeJson
|
import dev.patrickgold.florisboard.lib.io.writeJson
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.throwOnFailure
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -49,6 +48,7 @@ import kotlinx.serialization.KSerializer
|
|||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import kotlinx.serialization.modules.SerializersModule
|
import kotlinx.serialization.modules.SerializersModule
|
||||||
import kotlinx.serialization.modules.polymorphic
|
import kotlinx.serialization.modules.polymorphic
|
||||||
|
import org.florisboard.lib.kotlin.throwOnFailure
|
||||||
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
val ExtensionJsonConfig = Json {
|
val ExtensionJsonConfig = Json {
|
||||||
|
@ -30,13 +30,13 @@ import dev.patrickgold.florisboard.ime.text.keyboard.AutoTextKeyData
|
|||||||
import dev.patrickgold.florisboard.ime.text.keyboard.MultiTextKeyData
|
import dev.patrickgold.florisboard.ime.text.keyboard.MultiTextKeyData
|
||||||
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyData
|
||||||
import dev.patrickgold.florisboard.lib.android.reader
|
import dev.patrickgold.florisboard.lib.android.reader
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.resultErr
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.resultErrStr
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.resultOk
|
|
||||||
import kotlinx.serialization.KSerializer
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import kotlinx.serialization.modules.SerializersModule
|
import kotlinx.serialization.modules.SerializersModule
|
||||||
import kotlinx.serialization.modules.polymorphic
|
import kotlinx.serialization.modules.polymorphic
|
||||||
|
import org.florisboard.lib.kotlin.resultErr
|
||||||
|
import org.florisboard.lib.kotlin.resultErrStr
|
||||||
|
import org.florisboard.lib.kotlin.resultOk
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
val DefaultJsonConfig = Json {
|
val DefaultJsonConfig = Json {
|
||||||
|
@ -20,13 +20,13 @@ import androidx.compose.runtime.saveable.Saver
|
|||||||
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
import dev.patrickgold.florisboard.ime.input.InputShiftState
|
||||||
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
import dev.patrickgold.florisboard.ime.text.key.KeyCode
|
||||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
|
||||||
import kotlinx.serialization.KSerializer
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||||
import kotlinx.serialization.encoding.Decoder
|
import kotlinx.serialization.encoding.Decoder
|
||||||
import kotlinx.serialization.encoding.Encoder
|
import kotlinx.serialization.encoding.Encoder
|
||||||
|
import org.florisboard.lib.kotlin.curlyFormat
|
||||||
|
|
||||||
@Serializable(with = SnyggRule.Serializer::class)
|
@Serializable(with = SnyggRule.Serializer::class)
|
||||||
data class SnyggRule(
|
data class SnyggRule(
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.snygg.value
|
package dev.patrickgold.florisboard.lib.snygg.value
|
||||||
|
|
||||||
import dev.patrickgold.florisboard.lib.kotlin.toStringWithoutDotZero
|
import org.florisboard.lib.kotlin.toStringWithoutDotZero
|
||||||
|
|
||||||
interface SnyggValueSpec {
|
interface SnyggValueSpec {
|
||||||
val id: String?
|
val id: String?
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
import io.kotest.core.spec.style.FreeSpec
|
import io.kotest.core.spec.style.FreeSpec
|
||||||
import io.kotest.matchers.shouldBe
|
import io.kotest.matchers.shouldBe
|
||||||
|
@ -19,6 +19,7 @@ plugins {
|
|||||||
alias(libs.plugins.agp.library) apply false
|
alias(libs.plugins.agp.library) apply false
|
||||||
alias(libs.plugins.agp.test) apply false
|
alias(libs.plugins.agp.test) apply false
|
||||||
alias(libs.plugins.kotlin.android) apply false
|
alias(libs.plugins.kotlin.android) apply false
|
||||||
|
alias(libs.plugins.kotlin.jvm) apply false
|
||||||
alias(libs.plugins.kotlin.serialization) apply false
|
alias(libs.plugins.kotlin.serialization) apply false
|
||||||
alias(libs.plugins.ksp) apply false
|
alias(libs.plugins.ksp) apply false
|
||||||
alias(libs.plugins.mannodermaus.android.junit5) apply false
|
alias(libs.plugins.mannodermaus.android.junit5) apply false
|
||||||
|
@ -85,6 +85,7 @@ agp-application = { id = "com.android.application", version.ref = "android-gradl
|
|||||||
agp-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
|
agp-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
|
||||||
agp-test = { id = "com.android.test", version.ref = "android-gradle-plugin" }
|
agp-test = { id = "com.android.test", version.ref = "android-gradle-plugin" }
|
||||||
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||||
|
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||||
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||||||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||||||
mannodermaus-android-junit5 = { id = "de.mannodermaus.android-junit5", version.ref = "mannodermaus-android-junit5" }
|
mannodermaus-android-junit5 = { id = "de.mannodermaus.android-junit5", version.ref = "mannodermaus-android-junit5" }
|
||||||
|
51
lib/kotlin/build.gradle.kts
Normal file
51
lib/kotlin/build.gradle.kts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2024 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
alias(libs.plugins.kotlin.jvm)
|
||||||
|
}
|
||||||
|
|
||||||
|
val projectGroupId: String by project
|
||||||
|
val artifactId = "florisboard-lib-kotlin"
|
||||||
|
val projectVersion: String by project
|
||||||
|
|
||||||
|
java {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
maybeCreate("main").apply {
|
||||||
|
java.srcDir("src/main/kotlin")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "1.8"
|
||||||
|
freeCompilerArgs = listOf(
|
||||||
|
"-Xallow-result-return-type",
|
||||||
|
"-opt-in=kotlin.contracts.ExperimentalContracts",
|
||||||
|
"-Xjvm-default=all-compatibility",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(libs.kotlinx.serialization.json)
|
||||||
|
implementation(libs.kotlinx.coroutines)
|
||||||
|
}
|
||||||
|
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
@Throws(NoSuchElementException::class)
|
@Throws(NoSuchElementException::class)
|
||||||
fun <K, V> Map<K, V>.getKeyByValue(value: V): K {
|
fun <K, V> Map<K, V>.getKeyByValue(value: V): K {
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlin.contracts.InvocationKind
|
import kotlin.contracts.InvocationKind
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
import kotlin.contracts.InvocationKind
|
import kotlin.contracts.InvocationKind
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
@ -14,6 +14,6 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
fun Number.toStringWithoutDotZero(): String = this.toString().removeSuffix(".0")
|
fun Number.toStringWithoutDotZero(): String = this.toString().removeSuffix(".0")
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
import kotlinx.serialization.KSerializer
|
import kotlinx.serialization.KSerializer
|
||||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
import kotlinx.serialization.descriptors.PrimitiveKind
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
@file:Suppress("NOTHING_TO_INLINE")
|
@file:Suppress("NOTHING_TO_INLINE")
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Deferred
|
import kotlinx.coroutines.Deferred
|
@ -14,21 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@file:Suppress("NOTHING_TO_INLINE")
|
package org.florisboard.lib.kotlin
|
||||||
|
|
||||||
package dev.patrickgold.florisboard.lib.kotlin
|
|
||||||
|
|
||||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
|
||||||
import kotlin.contracts.InvocationKind
|
import kotlin.contracts.InvocationKind
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
||||||
|
|
||||||
inline fun String.lowercase(locale: FlorisLocale): String = this.lowercase(locale.base)
|
|
||||||
|
|
||||||
inline fun String.uppercase(locale: FlorisLocale): String = this.uppercase(locale.base)
|
|
||||||
|
|
||||||
inline fun String.titlecase(locale: FlorisLocale = FlorisLocale.ROOT): String {
|
|
||||||
return this.replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale.base) else it.toString() }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun String.safeSubstring(startIndex: Int): String {
|
fun String.safeSubstring(startIndex: Int): String {
|
||||||
return try {
|
return try {
|
@ -35,3 +35,4 @@ dependencyResolutionManagement {
|
|||||||
|
|
||||||
include(":app")
|
include(":app")
|
||||||
include(":benchmark")
|
include(":benchmark")
|
||||||
|
include(":lib:kotlin")
|
||||||
|
Loading…
Reference in New Issue
Block a user