Skip to content

Commit d5ad817

Browse files
tumuyanBambooin
authored andcommitted
feat: ignore Shift locke for space, number and symbol
1 parent 908637e commit d5ad817

File tree

9 files changed

+64
-3
lines changed

9 files changed

+64
-3
lines changed

app/src/main/java/com/osfans/trime/data/AppPrefs.kt

+12
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ class AppPrefs(
183183
const val HOOK_CTRL_CV = "keyboard__hook_ctrl_cv"
184184
const val HOOK_CTRL_LR = "keyboard__hook_ctrl_lr"
185185
const val HOOK_CTRL_ZY = "keyboard__hook_ctrl_zy"
186+
const val HOOK_SHIFT_SPACE = "keyboard__hook_shift_space"
187+
const val HOOK_SHIFT_NUM = "keyboard__hook_shift_num"
188+
const val HOOK_SHIFT_SYMBOL = "keyboard__hook_shift_symbol"
186189

187190
const val SOUND_ENABLED = "keyboard__key_sound"
188191
const val SOUND_VOLUME = "keyboard__key_sound_volume"
@@ -252,6 +255,15 @@ class AppPrefs(
252255
var hookCtrlZY: Boolean = false
253256
get() = prefs.getPref(HOOK_CTRL_ZY, false)
254257
private set
258+
var hookShiftSpace: Boolean = false
259+
get() = prefs.getPref(HOOK_SHIFT_SPACE, false)
260+
private set
261+
var hookShiftNum: Boolean = false
262+
get() = prefs.getPref(HOOK_SHIFT_NUM, false)
263+
private set
264+
var hookShiftSymbol: Boolean = false
265+
get() = prefs.getPref(HOOK_SHIFT_SYMBOL, false)
266+
private set
255267

256268
var soundEnabled: Boolean = false
257269
get() = prefs.getPref(SOUND_ENABLED, false)

app/src/main/java/com/osfans/trime/ime/core/Trime.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1087,7 +1087,7 @@ public boolean shareText() {
10871087
private boolean hookKeyboard(int code, int mask) { // 編輯操作
10881088
final @Nullable InputConnection ic = getCurrentInputConnection();
10891089
if (ic == null) return false;
1090-
if (Event.hasModifier(mask, KeyEvent.META_CTRL_ON)) {
1090+
if (mask == KeyEvent.META_CTRL_ON) {
10911091

10921092
if (VERSION.SDK_INT >= VERSION_CODES.M) {
10931093
if (getPrefs().getKeyboard().getHookCtrlZY()) {

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

+6
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,12 @@ public boolean setMetaOn(boolean on, boolean keyDown) {
642642
// return setModifier(KeyEvent.META_FUNCTION_ON, on || keyDown);
643643
// }
644644

645+
public boolean isOnlyShiftOn() {
646+
if (mShiftKey != null && mShiftKey.isOn() && mModifierState == KeyEvent.META_SHIFT_ON)
647+
return true;
648+
return false;
649+
}
650+
645651
public boolean resetShifted() {
646652
if (mShiftKey != null && !mShiftKey.isOn()) return setModifier(KeyEvent.META_SHIFT_ON, false);
647653
return false;

app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardView.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1089,7 +1089,7 @@ private void detectAndSendKey(int index, int x, int y, long eventTime, KeyEventT
10891089
// TextEntryState.keyPressedAt(key, x, y);
10901090
final int[] codes = new int[MAX_NEARBY_KEYS];
10911091
Arrays.fill(codes, NOT_A_KEY);
1092-
getKeyIndices(x, y, codes);
1092+
// getKeyIndices(x, y, codes); // 这里实际上并没有生效
10931093
Timber.d("\t<TrimeInput>\tdetectAndSendKey()\tonEvent, code=%d, key.getEvent", code);
10941094
// 可以在这里把 mKeyboard.getModifer() 获取的修饰键状态写入event里
10951095
mKeyboardActionListener.onEvent(key.getEvent(type.ordinal()));

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

+20-1
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,26 @@ class TextInputManager private constructor() :
396396
}
397397
KeyEvent.KEYCODE_PROG_RED -> trime.showColorDialog() // Color schemes
398398
KeyEvent.KEYCODE_MENU -> trime.showOptionsDialog()
399-
else -> onKey(event.code, event.mask or trime.keyboardSwitcher.currentKeyboard.modifer)
399+
else -> {
400+
if (event.mask == 0 && trime.keyboardSwitcher.currentKeyboard.isOnlyShiftOn) {
401+
if (event.code == KeyEvent.KEYCODE_SPACE && prefs.keyboard.hookShiftSpace) {
402+
onKey(event.code, 0)
403+
return
404+
} else if (event.code >= KeyEvent.KEYCODE_0 && event.code <= KeyEvent.KEYCODE_9 && prefs.keyboard.hookShiftNum) {
405+
onKey(event.code, 0)
406+
return
407+
} else if (prefs.keyboard.hookShiftSymbol) {
408+
if (event.code >= KeyEvent.KEYCODE_GRAVE && event.code <= KeyEvent.KEYCODE_SLASH ||
409+
event.code == KeyEvent.KEYCODE_COMMA ||
410+
event.code == KeyEvent.KEYCODE_PERIOD
411+
) {
412+
onKey(event.code, 0)
413+
return
414+
}
415+
}
416+
}
417+
onKey(event.code, event.mask or trime.keyboardSwitcher.currentKeyboard.modifer)
418+
}
400419
}
401420
}
402421

app/src/main/res/values-zh-rCN/strings.xml

+3
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@
206206
<string name="keyboard__candidate_page_size">每页显示候选词数量</string>
207207
<string name="copy_done">已复制</string>
208208
<string name="delete_done">已删除</string>
209+
<string name="keyboard__hook_shift_space">点击空格时,忽略Shift的锁定状态</string>
210+
<string name="keyboard__hook_shift_num">点击0-9时,忽略Shift的锁定状态</string>
211+
<string name="keyboard__hook_shift_symbol">点击符号键时,忽略Shift的锁定状态</string>
209212
<string-array name="keyboard__candidate_page_size_entries" >
210213
<item name="10000">不超出候选栏</item>
211214
<item name="10001">接近于候选栏</item>

app/src/main/res/values-zh-rTW/strings.xml

+3
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@
207207
<string name="keyboard__candidate_page_size">每頁顯示候選詞數量</string>
208208
<string name="copy_done">已複製</string>
209209
<string name="delete_done">已刪除</string>
210+
<string name="keyboard__hook_shift_space">點擊空格時,忽略Shift的鎖定狀態</string>
211+
<string name="keyboard__hook_shift_num">點擊0-9時,忽略Shift的鎖定狀態</string>
212+
<string name="keyboard__hook_shift_symbol">點擊符號鍵時,忽略Shift的鎖定狀態</string>
210213
<string-array name="keyboard__candidate_page_size_entries" >
211214
<item name="10000">不超出候選欄</item>
212215
<item name="10001">接近於候選欄</item>

app/src/main/res/values/strings.xml

+3
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,9 @@
209209
<string name="keyboard__candidate_page_size">Candidate item count for each page</string>
210210
<string name="copy_done">Copied to clipboard!</string>
211211
<string name="delete_done">Deleted</string>
212+
<string name="keyboard__hook_shift_space">Ignore Shift locked for Space</string>
213+
<string name="keyboard__hook_shift_num">Ignore Shift locked for 0-9</string>
214+
<string name="keyboard__hook_shift_symbol">Ignore Shift locked for Symbol keys</string>
212215
<string-array name="keyboard__candidate_page_size_entries" >
213216
<item name="10000">Less than candidate</item>
214217
<item name="10001">close to candidate</item>

app/src/main/res/xml/keyboard_preference.xml

+15
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,21 @@
127127
android:title="@string/keyboard__hook_ctrl_zy"
128128
app:iconSpaceReserved="false" />
129129

130+
<SwitchPreferenceCompat
131+
android:key="keyboard__hook_shift_space"
132+
android:title="@string/keyboard__hook_shift_space"
133+
app:iconSpaceReserved="false" />
134+
135+
<SwitchPreferenceCompat
136+
android:key="keyboard__hook_shift_num"
137+
android:title="@string/keyboard__hook_shift_num"
138+
app:iconSpaceReserved="false" />
139+
140+
<SwitchPreferenceCompat
141+
android:key="keyboard__hook_shift_symbol"
142+
android:title="@string/keyboard__hook_shift_symbol"
143+
app:iconSpaceReserved="false" />
144+
130145
</PreferenceCategory>
131146

132147
<PreferenceCategory

0 commit comments

Comments
 (0)