mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-18 19:12: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.material.ui)
|
||||
|
||||
|
||||
implementation(project(":lib:kotlin"))
|
||||
|
||||
testImplementation(libs.equalsverifier)
|
||||
testImplementation(libs.kotest.assertions.core)
|
||||
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.deleteContentsRecursively
|
||||
import dev.patrickgold.florisboard.lib.io.subFile
|
||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
||||
import dev.patrickgold.florisboard.lib.toNativeStr
|
||||
import dev.patrickgold.jetpref.datastore.JetPref
|
||||
import org.florisboard.lib.kotlin.tryOrNull
|
||||
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.flogInfo
|
||||
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.snygg.ui.SnyggSurface
|
||||
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.debugSummarize
|
||||
import dev.patrickgold.jetpref.datastore.model.observeAsState
|
||||
import org.florisboard.lib.kotlin.collectLatestIn
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
/**
|
||||
|
@ -23,14 +23,14 @@ import android.view.textservice.TextInfo
|
||||
import dev.patrickgold.florisboard.app.florisPreferenceModel
|
||||
import dev.patrickgold.florisboard.ime.core.Subtype
|
||||
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.SpellingResult
|
||||
import dev.patrickgold.florisboard.lib.FlorisLocale
|
||||
import dev.patrickgold.florisboard.lib.devtools.LogTopic
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogInfo
|
||||
import dev.patrickgold.florisboard.lib.kotlin.map
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.florisboard.lib.kotlin.map
|
||||
|
||||
class FlorisSpellCheckerService : SpellCheckerService() {
|
||||
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.typing.TypingScreen
|
||||
import dev.patrickgold.florisboard.app.setup.SetupScreen
|
||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
|
||||
@Suppress("FunctionName")
|
||||
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.florisHorizontalScroll
|
||||
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.kotlin.resultOk
|
||||
import org.florisboard.lib.kotlin.resultOk
|
||||
|
||||
enum class ExtensionImportScreenType(
|
||||
val id: String,
|
||||
|
@ -19,8 +19,8 @@ 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.florisboard.lib.kotlin.curlyFormat
|
||||
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.
|
||||
|
@ -68,8 +68,6 @@ import dev.patrickgold.florisboard.lib.compose.FlorisTextButton
|
||||
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.kotlin.curlyFormat
|
||||
import dev.patrickgold.florisboard.lib.kotlin.toStringWithoutDotZero
|
||||
import dev.patrickgold.florisboard.lib.rememberValidationResult
|
||||
import dev.patrickgold.florisboard.lib.snygg.SnyggLevel
|
||||
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.JetPrefColorPicker
|
||||
import dev.patrickgold.jetpref.material.ui.rememberJetPrefColorPickerState
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.toStringWithoutDotZero
|
||||
|
||||
internal val SnyggEmptyPropertyInfoForAdding = PropertyInfo(
|
||||
name = "- select -",
|
||||
|
@ -67,6 +67,7 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import dev.patrickgold.florisboard.R
|
||||
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.DefaultComputingEvaluator
|
||||
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.computeIconResId
|
||||
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.keyboard.TextKeyData
|
||||
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.florisHorizontalScroll
|
||||
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.SnyggRule
|
||||
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
||||
import dev.patrickgold.jetpref.material.ui.JetPrefAlertDialog
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.getKeyByValue
|
||||
|
||||
private val TransparentTextSelectionColors = TextSelectionColors(
|
||||
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.showShortToast
|
||||
import dev.patrickgold.florisboard.lib.android.systemService
|
||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@ -46,6 +45,7 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.florisboard.lib.kotlin.tryOrNull
|
||||
import java.io.Closeable
|
||||
|
||||
/**
|
||||
|
@ -40,7 +40,7 @@ import androidx.room.TypeConverter
|
||||
import androidx.room.TypeConverters
|
||||
import androidx.room.Update
|
||||
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_FILES_TABLE = "clipboard_files"
|
||||
|
@ -30,11 +30,11 @@ import android.provider.OpenableColumns
|
||||
import androidx.exifinterface.media.ExifInterface
|
||||
import dev.patrickgold.florisboard.BuildConfig
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.launch
|
||||
import org.florisboard.lib.kotlin.tryOrNull
|
||||
|
||||
/**
|
||||
* 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.android.readText
|
||||
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
|
||||
|
||||
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.keyboardManager
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
||||
import dev.patrickgold.florisboard.nlpManager
|
||||
import dev.patrickgold.florisboard.subtypeManager
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.florisboard.lib.kotlin.guardedByLock
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
@Suppress("BlockingMethodInNonBlockingContext")
|
||||
abstract class AbstractEditorInstance(context: Context) {
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
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.
|
||||
@ -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 localSelection The selection reported by 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
|
||||
* [offset] included.
|
||||
* @property localCurrentWord The current word for the editor (typically the same as [localComposing]), without [offset]
|
||||
* included.
|
||||
*/
|
||||
data class EditorContent(
|
||||
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.lib.android.removeAndReturn
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@ -39,6 +38,7 @@ import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.florisboard.lib.kotlin.guardedByLock
|
||||
|
||||
class InputEventDispatcher private constructor(private val repeatableKeyCodes: IntArray) {
|
||||
companion object {
|
||||
|
@ -22,7 +22,6 @@ import android.view.KeyEvent
|
||||
import android.widget.Toast
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
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.flogError
|
||||
import dev.patrickgold.florisboard.lib.ext.ExtensionComponentName
|
||||
import dev.patrickgold.florisboard.lib.kotlin.collectIn
|
||||
import dev.patrickgold.florisboard.lib.kotlin.collectLatestIn
|
||||
import dev.patrickgold.florisboard.lib.kotlin.titlecase
|
||||
import dev.patrickgold.florisboard.lib.kotlin.uppercase
|
||||
import dev.patrickgold.florisboard.lib.titlecase
|
||||
import dev.patrickgold.florisboard.lib.uppercase
|
||||
import dev.patrickgold.florisboard.lib.util.InputMethodUtils
|
||||
import dev.patrickgold.florisboard.nlpManager
|
||||
import dev.patrickgold.florisboard.subtypeManager
|
||||
@ -78,6 +75,8 @@ import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import org.florisboard.lib.kotlin.collectIn
|
||||
import org.florisboard.lib.kotlin.collectLatestIn
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
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.ext.ExtensionComponentName
|
||||
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.Deferred
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -44,6 +42,8 @@ import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import org.florisboard.lib.kotlin.DeferredResult
|
||||
import org.florisboard.lib.kotlin.runCatchingAsync
|
||||
|
||||
private data class LTN(
|
||||
val type: LayoutType,
|
||||
|
@ -18,9 +18,9 @@ package dev.patrickgold.florisboard.ime.nlp
|
||||
|
||||
import android.icu.text.BreakIterator
|
||||
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 org.florisboard.lib.kotlin.GuardedByLock
|
||||
import org.florisboard.lib.kotlin.guardedByLock
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
|
||||
|
@ -3,31 +3,17 @@ package dev.patrickgold.florisboard.ime.nlp
|
||||
import android.content.Context
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
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.android.copy
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||
import dev.patrickgold.florisboard.lib.ext.Extension
|
||||
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.ExtensionMeta
|
||||
import dev.patrickgold.florisboard.lib.io.FlorisRef
|
||||
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.kotlin.tryOrNull
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
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
|
||||
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.editor.EditorContent
|
||||
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.latin.LatinLanguageProvider
|
||||
import dev.patrickgold.florisboard.keyboardManager
|
||||
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.subtypeManager
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@ -51,6 +49,8 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import org.florisboard.lib.kotlin.collectLatestIn
|
||||
import org.florisboard.lib.kotlin.guardedByLock
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
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.lib.android.readText
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogDebug
|
||||
import dev.patrickgold.florisboard.lib.kotlin.guardedByLock
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.serialization.builtins.MapSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.json.Json
|
||||
import org.florisboard.lib.kotlin.guardedByLock
|
||||
|
||||
class LatinLanguageProvider(context: Context) : SpellingProvider, SuggestionProvider {
|
||||
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.KeyType
|
||||
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) {
|
||||
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.lib.FlorisLocale
|
||||
import dev.patrickgold.florisboard.lib.Unicode
|
||||
import dev.patrickgold.florisboard.lib.kotlin.lowercase
|
||||
import dev.patrickgold.florisboard.lib.kotlin.uppercase
|
||||
import dev.patrickgold.florisboard.lib.lowercase
|
||||
import dev.patrickgold.florisboard.lib.uppercase
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
|
@ -18,8 +18,6 @@ package dev.patrickgold.florisboard.lib
|
||||
|
||||
import android.content.Context
|
||||
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.Serializable
|
||||
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.remember
|
||||
import dev.patrickgold.florisboard.lib.compose.stringRes
|
||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.CurlyArg
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
import kotlin.contracts.contract
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
|
@ -28,7 +28,7 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
||||
import org.florisboard.lib.kotlin.tryOrNull
|
||||
import java.lang.reflect.Modifier
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
|
@ -20,8 +20,8 @@ package dev.patrickgold.florisboard.lib.android
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.StringRes
|
||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.CurlyArg
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
/**
|
||||
|
@ -24,7 +24,7 @@ import androidx.annotation.StringRes
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.lib.devtools.flogError
|
||||
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.contract
|
||||
import kotlin.reflect.KClass
|
||||
|
@ -19,7 +19,7 @@ package dev.patrickgold.florisboard.lib.android
|
||||
import android.content.Context
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.StringRes
|
||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
||||
import org.florisboard.lib.kotlin.CurlyArg
|
||||
|
||||
/**
|
||||
* 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.unit.LayoutDirection
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.lib.kotlin.CurlyArg
|
||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.CurlyArg
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
|
||||
private val LocalResourcesContext = staticCompositionLocalOf<Context> {
|
||||
error("resources context not initialized!!")
|
||||
|
@ -24,7 +24,7 @@ import dev.patrickgold.florisboard.BuildConfig
|
||||
import dev.patrickgold.florisboard.R
|
||||
import dev.patrickgold.florisboard.app.AppPrefs
|
||||
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.UnitUtils
|
||||
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.FsFile
|
||||
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.Serializable
|
||||
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
|
||||
|
@ -17,7 +17,6 @@
|
||||
package dev.patrickgold.florisboard.lib.ext
|
||||
|
||||
import androidx.compose.runtime.saveable.Saver
|
||||
import dev.patrickgold.florisboard.lib.kotlin.tryOrNull
|
||||
import dev.patrickgold.jetpref.datastore.model.PreferenceSerializer
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
@ -25,6 +24,7 @@ import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import org.florisboard.lib.kotlin.tryOrNull
|
||||
|
||||
/**
|
||||
* An extension component, typically a layout, theme, file, etc. descriptor.
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
package dev.patrickgold.florisboard.lib.ext
|
||||
|
||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
|
||||
object ExtensionDefaults {
|
||||
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.ZipUtils
|
||||
import dev.patrickgold.florisboard.lib.io.writeJson
|
||||
import dev.patrickgold.florisboard.lib.kotlin.throwOnFailure
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
@ -49,6 +48,7 @@ import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
import kotlinx.serialization.modules.polymorphic
|
||||
import org.florisboard.lib.kotlin.throwOnFailure
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
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.TextKeyData
|
||||
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.json.Json
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
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
|
||||
|
||||
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.text.key.KeyCode
|
||||
import dev.patrickgold.florisboard.ime.theme.FlorisImeUi
|
||||
import dev.patrickgold.florisboard.lib.kotlin.curlyFormat
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import org.florisboard.lib.kotlin.curlyFormat
|
||||
|
||||
@Serializable(with = SnyggRule.Serializer::class)
|
||||
data class SnyggRule(
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
package dev.patrickgold.florisboard.lib.snygg.value
|
||||
|
||||
import dev.patrickgold.florisboard.lib.kotlin.toStringWithoutDotZero
|
||||
import org.florisboard.lib.kotlin.toStringWithoutDotZero
|
||||
|
||||
interface SnyggValueSpec {
|
||||
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.matchers.shouldBe
|
||||
|
@ -19,6 +19,7 @@ plugins {
|
||||
alias(libs.plugins.agp.library) apply false
|
||||
alias(libs.plugins.agp.test) 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.ksp) 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-test = { id = "com.android.test", version.ref = "android-gradle-plugin" }
|
||||
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" }
|
||||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||||
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.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
@Throws(NoSuchElementException::class)
|
||||
fun <K, V> Map<K, V>.getKeyByValue(value: V): K {
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.Flow
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlin.contracts.InvocationKind
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
@ -14,6 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
fun Number.toStringWithoutDotZero(): String = this.toString().removeSuffix(".0")
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
@ -16,7 +16,7 @@
|
||||
|
||||
@file:Suppress("NOTHING_TO_INLINE")
|
||||
|
||||
package dev.patrickgold.florisboard.lib.kotlin
|
||||
package org.florisboard.lib.kotlin
|
||||
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Deferred
|
@ -14,21 +14,11 @@
|
||||
* 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.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 {
|
||||
return try {
|
@ -35,3 +35,4 @@ dependencyResolutionManagement {
|
||||
|
||||
include(":app")
|
||||
include(":benchmark")
|
||||
include(":lib:kotlin")
|
||||
|
Loading…
Reference in New Issue
Block a user