Skip to content

Commit c463d86

Browse files
authored
Merge branch 'osfans:develop' into develop
2 parents 4736e43 + 1f1c0a6 commit c463d86

File tree

11 files changed

+55
-104
lines changed

11 files changed

+55
-104
lines changed

app/src/main/java/com/osfans/trime/core/Rime.kt

+2-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.osfans.trime.data.opencc.OpenCCDictManager
99
import com.osfans.trime.data.prefs.AppPrefs
1010
import com.osfans.trime.data.schema.SchemaManager
1111
import com.osfans.trime.util.appContext
12+
import com.osfans.trime.util.isAsciiPrintable
1213
import com.osfans.trime.util.isStorageAvailable
1314
import kotlinx.coroutines.channels.BufferOverflow
1415
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -214,15 +215,9 @@ class Rime : RimeApi, RimeLifecycleOwner {
214215
}
215216
}
216217

217-
private fun isValidText(text: CharSequence?): Boolean {
218-
if (text.isNullOrEmpty()) return false
219-
val ch = text.toString().codePointAt(0)
220-
return ch in 0x20..0x7f
221-
}
222-
223218
@JvmStatic
224219
fun simulateKeySequence(sequence: CharSequence): Boolean {
225-
if (!isValidText(sequence)) return false
220+
if (!sequence.first().isAsciiPrintable()) return false
226221
Timber.d("simulateKeySequence: $sequence")
227222
return simulateRimeKeySequence(
228223
sequence.toString().replace("{}", "{braceleft}{braceright}"),

app/src/main/java/com/osfans/trime/data/db/ClipboardHelper.kt

+10-6
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import android.content.ClipboardManager
88
import android.content.Context
99
import androidx.room.Room
1010
import com.osfans.trime.data.prefs.AppPrefs
11-
import com.osfans.trime.util.StringUtils.matches
12-
import com.osfans.trime.util.StringUtils.removeAll
1311
import com.osfans.trime.util.WeakHashSet
12+
import com.osfans.trime.util.matchesAny
13+
import com.osfans.trime.util.removeRegexSet
1414
import kotlinx.coroutines.CoroutineScope
1515
import kotlinx.coroutines.Dispatchers
1616
import kotlinx.coroutines.SupervisorJob
@@ -62,10 +62,14 @@ object ClipboardHelper :
6262
private val limit get() = AppPrefs.defaultInstance().clipboard.clipboardLimit
6363
private val compare get() =
6464
AppPrefs.defaultInstance().clipboard.clipboardCompareRules
65-
.trim().split('\n')
65+
.split('\n')
66+
.map { Regex(it.trim()) }
67+
.toHashSet()
6668
private val output get() =
6769
AppPrefs.defaultInstance().clipboard.clipboardOutputRules
68-
.trim().split('\n')
70+
.split('\n')
71+
.map { Regex(it) }
72+
.toHashSet()
6973

7074
var lastBean: DatabaseBean? = null
7175

@@ -118,10 +122,10 @@ object ClipboardHelper :
118122
?.let { DatabaseBean.fromClipData(it) }
119123
?.takeIf {
120124
it.text!!.isNotBlank() &&
121-
!it.text.matches(output.toTypedArray())
125+
!it.text.matchesAny(output)
122126
}
123127
?.let { b ->
124-
if (b.text!!.removeAll(compare.toTypedArray()).isEmpty()) return
128+
if (b.text?.removeRegexSet(compare)?.isEmpty() == true) return
125129
Timber.d("Accept clipboard $b")
126130
launch {
127131
mutex.withLock {

app/src/main/java/com/osfans/trime/data/db/DraftHelper.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import android.content.Context
88
import androidx.room.Room
99
import com.osfans.trime.data.prefs.AppPrefs
1010
import com.osfans.trime.ime.core.TrimeInputMethodService
11-
import com.osfans.trime.util.StringUtils.matches
11+
import com.osfans.trime.util.matchesAny
1212
import kotlinx.coroutines.CoroutineScope
1313
import kotlinx.coroutines.Dispatchers
1414
import kotlinx.coroutines.SupervisorJob
@@ -33,7 +33,9 @@ object DraftHelper : CoroutineScope by CoroutineScope(SupervisorJob() + Dispatch
3333
private val limit get() = AppPrefs.defaultInstance().clipboard.draftLimit
3434
private val output get() =
3535
AppPrefs.defaultInstance().clipboard.draftOutputRules
36-
.trim().split('n')
36+
.split('\n')
37+
.map { Regex(it) }
38+
.toHashSet()
3739

3840
var lastBean: DatabaseBean? = null
3941

@@ -81,7 +83,7 @@ object DraftHelper : CoroutineScope by CoroutineScope(SupervisorJob() + Dispatch
8183
?.let { DatabaseBean.fromInputConnection(it) }
8284
?.takeIf {
8385
it.text!!.isNotBlank() &&
84-
!it.text.matches(output.toTypedArray())
86+
!it.text.matchesAny(output)
8587
}
8688
?.let { b ->
8789
Timber.d("Accept $b")

app/src/main/java/com/osfans/trime/ime/core/TrimeInputMethodService.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ import com.osfans.trime.ime.text.Candidate
5858
import com.osfans.trime.ime.text.TextInputManager
5959
import com.osfans.trime.util.ShortcutUtils
6060
import com.osfans.trime.util.ShortcutUtils.openCategory
61-
import com.osfans.trime.util.StringUtils
6261
import com.osfans.trime.util.WeakHashSet
62+
import com.osfans.trime.util.findSectionFrom
6363
import com.osfans.trime.util.isNightMode
6464
import kotlinx.coroutines.Dispatchers
6565
import kotlinx.coroutines.launch
@@ -1049,7 +1049,7 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
10491049
etr.token = 0
10501050
val et = ic.getExtractedText(etr, 0)
10511051
if (et != null) {
1052-
val moveTo = StringUtils.findSectionAfter(et.text, et.startOffset + et.selectionEnd)
1052+
val moveTo = et.text.findSectionFrom(et.startOffset + et.selectionEnd)
10531053
ic.setSelection(moveTo, moveTo)
10541054
return true
10551055
}
@@ -1062,7 +1062,7 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
10621062
etr.token = 0
10631063
val et = ic.getExtractedText(etr, 0)
10641064
if (et != null) {
1065-
val moveTo = StringUtils.findSectionBefore(et.text, et.startOffset + et.selectionStart)
1065+
val moveTo = et.text.findSectionFrom(et.startOffset + et.selectionStart, true)
10661066
ic.setSelection(moveTo, moveTo)
10671067
return true
10681068
}

app/src/main/java/com/osfans/trime/ime/keyboard/Keyboard.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ class Keyboard() {
164164
mLabelTransform = obtainString(keyboardConfig, "label_transform", "none")
165165
asciiMode = obtainInt(keyboardConfig, "ascii_mode", 1) == 1
166166
currentAsciiMode = asciiMode
167-
if (asciiMode) asciiKeyboard = obtainString(keyboardConfig, "ascii_keyboard", "")
167+
if (!asciiMode) asciiKeyboard = obtainString(keyboardConfig, "ascii_keyboard", "")
168168
resetAsciiMode = obtainBoolean(keyboardConfig, "reset_ascii_mode", true)
169169
landscapeKeyboard = obtainString(keyboardConfig, "landscape_keyboard", "")
170170
mLandscapePercent =

app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import com.osfans.trime.ui.main.settings.ColorPickerDialog
3535
import com.osfans.trime.ui.main.settings.KeySoundEffectPickerDialog
3636
import com.osfans.trime.ui.main.settings.ThemePickerDialog
3737
import com.osfans.trime.util.ShortcutUtils
38-
import com.osfans.trime.util.startsWithAsciiChar
38+
import com.osfans.trime.util.isAsciiPrintable
3939
import kotlinx.coroutines.Job
4040
import kotlinx.coroutines.flow.launchIn
4141
import kotlinx.coroutines.flow.onEach
@@ -461,7 +461,7 @@ class TextInputManager(
461461

462462
override fun onText(text: CharSequence?) {
463463
text ?: return
464-
if (!text.startsWithAsciiChar() && Rime.isComposing) {
464+
if (!text.first().isAsciiPrintable() && Rime.isComposing) {
465465
Rime.commitComposition()
466466
trime.commitRimeText()
467467
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.osfans.trime.util
2+
3+
@Suppress("NOTHING_TO_INLINE")
4+
inline fun Char.isAsciiPrintable(): Boolean = code in 32 until 127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.osfans.trime.util
2+
3+
fun String.removeRegexSet(regexSet: Set<Regex>): String {
4+
regexSet.forEach { replace(it, String.EMPTY) }
5+
return this
6+
}
7+
8+
fun String.matchesAny(regexSet: Set<Regex>): Boolean = regexSet.any { it.matches(this) }

app/src/main/java/com/osfans/trime/util/StringUtils.kt

-62
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.osfans.trime.util
2+
3+
val String.Companion.EMPTY: String
4+
get() = ""
5+
6+
private const val SECTION_DIVIDER = ",.?!~:,。:~?!…\t\r\n\\/"
7+
8+
fun CharSequence.findSectionFrom(
9+
start: Int,
10+
forward: Boolean = false,
11+
): Int {
12+
if (start !in 0..lastIndex) return -1
13+
return if (forward) {
14+
val subSequence = subSequence(0, start)
15+
subSequence.indexOfLast { SECTION_DIVIDER.contains(it) }
16+
} else {
17+
val subSequence = subSequence(start, length)
18+
start + subSequence.indexOfFirst { SECTION_DIVIDER.contains(it) }
19+
}
20+
}

app/src/main/res/layout/licensing.xml

-20
This file was deleted.

0 commit comments

Comments
 (0)