diff --git a/app/build.gradle.kts b/app/build.gradle.kts index be5fb8bb..fd45bfdb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt index 4536b41f..4134157e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisApplication.kt @@ -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 /** diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt index d3bf0cd6..5afc418e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisImeService.kt @@ -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 /** diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisSpellCheckerService.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisSpellCheckerService.kt index b7eb5bb4..d854cc91 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisSpellCheckerService.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/FlorisSpellCheckerService.kt @@ -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() diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/Routes.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/Routes.kt index 5381cbf1..04b8347c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/Routes.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/Routes.kt @@ -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 { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionImportScreen.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionImportScreen.kt index 6fcfb6a4..09b47c6a 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionImportScreen.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/ext/ExtensionImportScreen.kt @@ -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, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt index a7a21cd4..2fad6597 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/DisplayColorsAs.kt @@ -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. diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt index afb43604..21fd4cc9 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditPropertyDialog.kt @@ -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 -", diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt index 43d2b7f7..0341a5be 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/app/settings/theme/EditRuleDialog.kt @@ -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, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardManager.kt index 43de8074..0b2df37f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardManager.kt @@ -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 /** diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardDatabase.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardDatabase.kt index efe978dc..1b82cf7f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardDatabase.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardDatabase.kt @@ -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" diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardMediaProvider.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardMediaProvider.kt index 299294f9..58f13e9e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardMediaProvider.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/provider/ClipboardMediaProvider.kt @@ -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. diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/dictionary/UserDictionary.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/dictionary/UserDictionary.kt index 1c961eba..856ab496 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/dictionary/UserDictionary.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/dictionary/UserDictionary.kt @@ -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" diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/AbstractEditorInstance.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/AbstractEditorInstance.kt index b757aff8..9d317e64 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/AbstractEditorInstance.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/AbstractEditorInstance.kt @@ -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) { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/EditorContent.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/EditorContent.kt index ca04107c..a4375679 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/EditorContent.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/editor/EditorContent.kt @@ -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, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputEventDispatcher.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputEventDispatcher.kt index 8a07cb07..e77ce22a 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputEventDispatcher.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/input/InputEventDispatcher.kt @@ -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 { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt index d1f55a47..26f8ec4d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt @@ -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() diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/LayoutManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/LayoutManager.kt index 07713dc7..e6b1ee5e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/LayoutManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/LayoutManager.kt @@ -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, diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/BreakIteratorGroup.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/BreakIteratorGroup.kt index 127ce5e9..194a39f0 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/BreakIteratorGroup.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/BreakIteratorGroup.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/LanguagePackExtension.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/LanguagePackExtension.kt index 20ec7e39..f1919430 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/LanguagePackExtension.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/LanguagePackExtension.kt @@ -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( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/NlpManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/NlpManager.kt index fc3a7723..1ed8bc37 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/NlpManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/NlpManager.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/latin/LatinLanguageProvider.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/latin/LatinLanguageProvider.kt index b7f69d6a..2d0ecfc0 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/latin/LatinLanguageProvider.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/nlp/latin/LatinLanguageProvider.kt @@ -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 { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKey.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKey.kt index d1e5e51d..c4ecf74d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKey.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKey.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyData.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyData.kt index 4f145744..e7c97f93 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyData.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyData.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/FlorisLocale.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/FlorisLocale.kt index 815325b2..7a4d68e4 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/FlorisLocale.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/FlorisLocale.kt @@ -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() } +} diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/Validation.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/Validation.kt index ba8900fd..eaac5ca4 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/Validation.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/Validation.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/AndroidSettings.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/AndroidSettings.kt index 6088c3f2..58cf5bb0 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/AndroidSettings.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/AndroidSettings.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Context.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Context.kt index 50ca097d..44da195d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Context.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Context.kt @@ -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 /** diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/LaunchUtils.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/LaunchUtils.kt index 3bbdafa2..101f0002 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/LaunchUtils.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/LaunchUtils.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Toast.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Toast.kt index 4244f4f5..33f21a8c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Toast.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/android/Toast.kt @@ -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. diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/Resources.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/Resources.kt index f0e8a3a9..d0262cbd 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/Resources.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/compose/Resources.kt @@ -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 { error("resources context not initialized!!") diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt index 36266aa8..4a9ed620 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/devtools/Devtools.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/Extension.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/Extension.kt index cbb0cc9c..9d9f9eed 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/Extension.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/Extension.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionComponent.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionComponent.kt index 85522c5e..60b5d0d9 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionComponent.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionComponent.kt @@ -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. diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionDefaults.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionDefaults.kt index 57da63e3..e2063b63 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionDefaults.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionDefaults.kt @@ -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}" diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionManager.kt index c7c09ffe..8b7c0e91 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/ext/ExtensionManager.kt @@ -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 { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/io/AssetManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/io/AssetManager.kt index 3137b620..97a31afe 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/io/AssetManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/io/AssetManager.kt @@ -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 { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt index fea54786..20f1d45f 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/SnyggRule.kt @@ -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( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt index 7b6eb84c..29b79136 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/lib/snygg/value/SnyggValueSpec.kt @@ -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? diff --git a/app/src/test/kotlin/dev/patrickgold/florisboard/lib/kotlin/StringsTest.kt b/app/src/test/kotlin/dev/patrickgold/florisboard/lib/kotlin/StringsTest.kt index afb7a452..634403e1 100644 --- a/app/src/test/kotlin/dev/patrickgold/florisboard/lib/kotlin/StringsTest.kt +++ b/app/src/test/kotlin/dev/patrickgold/florisboard/lib/kotlin/StringsTest.kt @@ -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 diff --git a/build.gradle.kts b/build.gradle.kts index 7e4ed4b2..cedfae28 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 691763dd..73c0dc08 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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" } diff --git a/lib/kotlin/build.gradle.kts b/lib/kotlin/build.gradle.kts new file mode 100644 index 00000000..56ea00d3 --- /dev/null +++ b/lib/kotlin/build.gradle.kts @@ -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().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) +} + diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Collections.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Collections.kt similarity index 95% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Collections.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Collections.kt index d86abc9c..e9fc93bc 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Collections.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Collections.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package dev.patrickgold.florisboard.lib.kotlin +package org.florisboard.lib.kotlin @Throws(NoSuchElementException::class) fun Map.getKeyByValue(value: V): K { diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Flow.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Flow.kt similarity index 95% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Flow.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Flow.kt index 84f76ee6..05afea4d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Flow.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Flow.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/GuardedByLock.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/GuardedByLock.kt similarity index 96% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/GuardedByLock.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/GuardedByLock.kt index cd4dd7e6..f4ab87f7 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/GuardedByLock.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/GuardedByLock.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Library.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Library.kt similarity index 94% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Library.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Library.kt index cb20fe67..546d3827 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Library.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Library.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Numbers.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Numbers.kt similarity index 93% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Numbers.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Numbers.kt index 6d58c612..64f564d3 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Numbers.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Numbers.kt @@ -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") diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Regex.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Regex.kt similarity index 96% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Regex.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Regex.kt index ceb75de5..25392d03 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Regex.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Regex.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Result.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Result.kt similarity index 96% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Result.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Result.kt index 499d271e..3387eb2d 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Result.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Result.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Strings.kt b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Strings.kt similarity index 85% rename from app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Strings.kt rename to lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Strings.kt index 665856d2..0d512dd3 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/lib/kotlin/Strings.kt +++ b/lib/kotlin/src/main/kotlin/org/florisboard/lib/kotlin/Strings.kt @@ -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 { diff --git a/settings.gradle.kts b/settings.gradle.kts index 3cca8856..ac13bb2e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -35,3 +35,4 @@ dependencyResolutionManagement { include(":app") include(":benchmark") +include(":lib:kotlin")