Skip to content

Commit 06f6314

Browse files
committed
feat: transition editing mode to standard parsed JSON layout
Replace hard-coded TextEditView overlay with a standard, user-customizable JSON layout structure loaded via KeyboardSwitcher
1 parent 1e131e1 commit 06f6314

11 files changed

Lines changed: 55 additions & 737 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
[
2+
[
3+
{ "code": -131, "label": "Undo", "type": "function", "width": 0.16 },
4+
{ "code": -132, "label": "Redo", "type": "function", "width": 0.16 },
5+
{ "code": -34, "label": "Select All", "type": "function", "width": 0.2 },
6+
{ "code": -305, "label": "Select Word", "type": "function", "width": 0.2 },
7+
{ "code": -306, "label": "Select Mode", "type": "function", "width": 0.28 }
8+
],
9+
[
10+
{ "code": -124, "label": "Start Line", "type": "function", "width": 0.2 },
11+
{ "code": -241, "label": "Word Left", "type": "function", "width": 0.2 },
12+
{ "code": -21, "label": "Up", "type": "function", "width": 0.2 },
13+
{ "code": -242, "label": "Word Right", "type": "function", "width": 0.2 },
14+
{ "code": -125, "label": "End Line", "type": "function", "width": 0.2 }
15+
],
16+
[
17+
{ "code": -122, "label": "Start Doc", "type": "function", "width": 0.2 },
18+
{ "code": -24, "label": "Left", "type": "function", "width": 0.2 },
19+
{ "code": -22, "label": "Down", "type": "function", "width": 0.2 },
20+
{ "code": -23, "label": "Right", "type": "function", "width": 0.2 },
21+
{ "code": -123, "label": "End Doc", "type": "function", "width": 0.2 }
22+
],
23+
[
24+
{ "code": -201, "label": "alpha", "type": "function", "width": 0.15 },
25+
{ "code": -32, "label": "Cut", "type": "function", "width": 0.15 },
26+
{ "code": -31, "label": "Copy", "type": "function", "width": 0.15 },
27+
{ "code": -33, "label": "Paste", "type": "function", "width": 0.15 },
28+
{ "code": 32, "label": "space", "type": "function", "width": 0.25 },
29+
{ "code": -5, "label": "delete", "type": "function", "width": 0.15 }
30+
]
31+
]

app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp
127127
KeyCode.TOGGLE_SELECTION_MODE -> {
128128
sPersistentSelectionModeActive = !sPersistentSelectionModeActive
129129
keyboardSwitcher.mainKeyboardView?.invalidateAllKeys()
130-
keyboardSwitcher.textEditView?.applyColors(Settings.getValues().mColors)
131130
keyboardSwitcher.suggestionStripView?.findViewById<android.view.ViewGroup>(R.id.toolbar)?.let {
132131
helium314.keyboard.latin.utils.setToolbarButtonsActivatedStateOnPrefChange(it, Settings.PREF_AUTO_CORRECTION)
133132
}
@@ -169,12 +168,7 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp
169168
if (sPersistentTextEditModeActive) {
170169
PointerTracker.sPersistentTouchpadModeActive = false
171170
keyboardSwitcher.hideTouchpadView()
172-
173-
val textEditView = keyboardSwitcher.textEditView
174-
if (textEditView != null) {
175-
setupTextEditListener(textEditView)
176-
keyboardSwitcher.showTextEditView()
177-
}
171+
keyboardSwitcher.showTextEditView()
178172
} else {
179173
keyboardSwitcher.hideTextEditView()
180174
}
@@ -691,39 +685,7 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp
691685
})
692686
}
693687

694-
fun setupTextEditListener(textEditView: TextEditView) {
695-
textEditView.setTextEditListener(object : TextEditView.TextEditListener {
696-
override fun onCursorMove(keyCode: Int, isSelecting: Boolean) {
697-
if (isSelecting) {
698-
val androidKeyCode = when (keyCode) {
699-
KeyCode.ARROW_UP -> KeyEvent.KEYCODE_DPAD_UP
700-
KeyCode.ARROW_DOWN -> KeyEvent.KEYCODE_DPAD_DOWN
701-
KeyCode.ARROW_LEFT -> KeyEvent.KEYCODE_DPAD_LEFT
702-
KeyCode.ARROW_RIGHT -> KeyEvent.KEYCODE_DPAD_RIGHT
703-
else -> 0
704-
}
705-
if (androidKeyCode != 0) {
706-
val eventTime = android.os.SystemClock.uptimeMillis()
707-
connection.sendKeyEvent(KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0))
708-
connection.sendKeyEvent(KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, androidKeyCode, 0, KeyEvent.META_SHIFT_ON))
709-
connection.sendKeyEvent(KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, androidKeyCode, 0, KeyEvent.META_SHIFT_ON))
710-
connection.sendKeyEvent(KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0))
711-
}
712-
} else {
713-
onCodeInput(keyCode, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, false)
714-
}
715-
}
716-
717-
override fun onCodeInput(keyCode: Int) {
718-
onCodeInput(keyCode, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, false)
719-
}
720688

721-
override fun onClose() {
722-
sPersistentTextEditModeActive = false
723-
keyboardSwitcher.hideTextEditView()
724-
}
725-
})
726-
}
727689

728690
companion object {
729691
@JvmField

app/src/main/java/helium314/keyboard/keyboard/KeyboardId.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public final class KeyboardId {
6868
public static final int ELEMENT_EMOJI_BOTTOM_ROW = 29;
6969
public static final int ELEMENT_CLIPBOARD_BOTTOM_ROW = 30;
7070
public static final int ELEMENT_HANDWRITING_BOTTOM_ROW = 31;
71+
public static final int ELEMENT_TEXT_EDIT = 32;
7172

7273
public final RichInputMethodSubtype mSubtype;
7374
public final int mWidth;
@@ -294,6 +295,7 @@ public static String elementIdToName(final int elementId) {
294295
case ELEMENT_EMOJI_BOTTOM_ROW -> "emojiBottomRow";
295296
case ELEMENT_CLIPBOARD_BOTTOM_ROW -> "clipboardBottomRow";
296297
case ELEMENT_HANDWRITING_BOTTOM_ROW -> "handwritingBottomRow";
298+
case ELEMENT_TEXT_EDIT -> "editing";
297299
default -> null;
298300
};
299301
}

app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java

Lines changed: 15 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
7272
private ClipboardHistoryView mClipboardHistoryView;
7373
private HandwritingView mHandwritingView;
7474
private TouchpadView mTouchpadView;
75-
private TextEditView mTextEditView;
7675
private TextView mFakeToastView;
7776
private LatinIME mLatinIME;
7877
private RichInputMethodManager mRichImm;
@@ -221,7 +220,17 @@ private void setKeyboard(final int keyboardId, @NonNull final KeyboardSwitchStat
221220
// TODO: pass this object to setKeyboard instead of getting the current values.
222221
final MainKeyboardView keyboardView = mKeyboardView;
223222
final Keyboard oldKeyboard = keyboardView.getKeyboard();
224-
final Keyboard newKeyboard = mKeyboardLayoutSet.getKeyboard(keyboardId);
223+
final int targetId;
224+
if (KeyboardActionListenerImpl.sPersistentTextEditModeActive && (keyboardId == KeyboardId.ELEMENT_ALPHABET
225+
|| keyboardId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED
226+
|| keyboardId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED
227+
|| keyboardId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED
228+
|| keyboardId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED)) {
229+
targetId = KeyboardId.ELEMENT_TEXT_EDIT;
230+
} else {
231+
targetId = keyboardId;
232+
}
233+
final Keyboard newKeyboard = mKeyboardLayoutSet.getKeyboard(targetId);
225234
keyboardView.setKeyboard(newKeyboard);
226235
mCurrentInputView.setKeyboardTopPadding(newKeyboard.mTopPadding);
227236
keyboardView.setKeyPreviewPopupEnabled(currentSettingsValues.mKeyPreviewPopupOn);
@@ -343,7 +352,7 @@ private void setMainKeyboardFrame(
343352
final int stripVisibility = settingsValues.mToolbarMode == ToolbarMode.HIDDEN ? View.GONE : View.VISIBLE;
344353
mStripContainer.setVisibility(stripVisibility);
345354
PointerTracker.switchTo(mKeyboardView);
346-
if (PointerTracker.sPersistentTouchpadModeActive || KeyboardActionListenerImpl.sPersistentTextEditModeActive) {
355+
if (PointerTracker.sPersistentTouchpadModeActive) {
347356
mKeyboardView.setVisibility(visibility == View.VISIBLE ? View.INVISIBLE : View.GONE);
348357
} else {
349358
mKeyboardView.setVisibility(visibility);
@@ -383,21 +392,6 @@ private void setMainKeyboardFrame(
383392
} else {
384393
if (mTouchpadView != null) mTouchpadView.setVisibility(View.GONE);
385394
}
386-
387-
if (KeyboardActionListenerImpl.sPersistentTextEditModeActive) {
388-
if (mTextEditView != null) {
389-
mTextEditView.setVisibility(visibility);
390-
mTextEditView.applyColors(Settings.getValues().mColors);
391-
mTextEditView.setPadding(
392-
mKeyboardView.getPaddingLeft(),
393-
mKeyboardView.getPaddingTop(),
394-
mKeyboardView.getPaddingRight(),
395-
mKeyboardView.getPaddingBottom()
396-
);
397-
}
398-
} else {
399-
if (mTextEditView != null) mTextEditView.setVisibility(View.GONE);
400-
}
401395
}
402396

403397
// Implements {@link KeyboardState.SwitchActions}.
@@ -411,9 +405,6 @@ public void setEmojiKeyboard() {
411405
mTouchpadView.setVisibility(View.GONE);
412406
}
413407
KeyboardActionListenerImpl.sPersistentTextEditModeActive = false;
414-
if (mTextEditView != null) {
415-
mTextEditView.setVisibility(View.GONE);
416-
}
417408
mMainKeyboardFrame.setVisibility(View.VISIBLE);
418409
// The visibility of {@link #mKeyboardView} must be aligned with {@link
419410
// #MainKeyboardFrame}.
@@ -443,9 +434,6 @@ public void setClipboardKeyboard() {
443434
mTouchpadView.setVisibility(View.GONE);
444435
}
445436
KeyboardActionListenerImpl.sPersistentTextEditModeActive = false;
446-
if (mTextEditView != null) {
447-
mTextEditView.setVisibility(View.GONE);
448-
}
449437
mMainKeyboardFrame.setVisibility(View.VISIBLE);
450438
// The visibility of {@link #mKeyboardView} must be aligned with {@link
451439
// #MainKeyboardFrame}.
@@ -474,9 +462,6 @@ public void setHandwritingKeyboard() {
474462
mTouchpadView.setVisibility(View.GONE);
475463
}
476464
KeyboardActionListenerImpl.sPersistentTextEditModeActive = false;
477-
if (mTextEditView != null) {
478-
mTextEditView.setVisibility(View.GONE);
479-
}
480465
mMainKeyboardFrame.setVisibility(View.VISIBLE);
481466
mKeyboardView.setVisibility(View.GONE);
482467
mEmojiTabStripView.setVisibility(View.GONE);
@@ -694,39 +679,14 @@ public TouchpadView getTouchpadView() {
694679
}
695680

696681
public void showTextEditView() {
697-
if (mTextEditView == null) return;
698-
mKeyboardView.setVisibility(View.INVISIBLE);
699-
mEmojiPalettesView.setVisibility(View.GONE);
700-
mClipboardHistoryView.setVisibility(View.GONE);
701-
mKeyboardViewWrapper.findViewById(R.id.btn_stop_one_handed_mode).setVisibility(View.GONE);
702-
mKeyboardViewWrapper.findViewById(R.id.btn_switch_one_handed_mode).setVisibility(View.GONE);
703-
mKeyboardViewWrapper.findViewById(R.id.btn_resize_one_handed_mode).setVisibility(View.GONE);
704-
mTextEditView.setPadding(
705-
mKeyboardView.getPaddingLeft(),
706-
mKeyboardView.getPaddingTop(),
707-
mKeyboardView.getPaddingRight(),
708-
mKeyboardView.getPaddingBottom()
709-
);
710-
mTextEditView.applyColors(Settings.getValues().mColors);
711-
mTextEditView.setVisibility(View.VISIBLE);
712-
mMainKeyboardFrame.setVisibility(View.VISIBLE);
682+
setKeyboard(KeyboardId.ELEMENT_TEXT_EDIT, KeyboardSwitchState.OTHER);
713683
}
714684

715685
public void hideTextEditView() {
716-
if (mTextEditView == null) return;
717-
mTextEditView.setVisibility(View.GONE);
718-
mKeyboardView.setVisibility(View.VISIBLE);
719-
mKeyboardView.setAlpha(1.0f);
720-
if (mKeyboardViewWrapper.getOneHandedModeEnabled()) {
721-
mKeyboardViewWrapper.findViewById(R.id.btn_stop_one_handed_mode).setVisibility(View.VISIBLE);
722-
mKeyboardViewWrapper.findViewById(R.id.btn_switch_one_handed_mode).setVisibility(View.VISIBLE);
723-
mKeyboardViewWrapper.findViewById(R.id.btn_resize_one_handed_mode).setVisibility(View.VISIBLE);
724-
}
686+
setAlphabetKeyboard();
725687
}
726688

727-
public TextEditView getTextEditView() {
728-
return mTextEditView;
729-
}
689+
730690

731691
public void toggleSplitKeyboardMode() {
732692
final Settings settings = Settings.getInstance();
@@ -988,13 +948,6 @@ public View onCreateInputView(@NonNull Context displayContext, final boolean isH
988948
}
989949
}
990950

991-
mTextEditView = mCurrentInputView.findViewById(R.id.text_edit_view);
992-
if (KeyboardActionListenerImpl.sPersistentTextEditModeActive && mTextEditView != null) {
993-
if (mLatinIME.mKeyboardActionListener instanceof KeyboardActionListenerImpl) {
994-
((KeyboardActionListenerImpl) mLatinIME.mKeyboardActionListener).setupTextEditListener(mTextEditView);
995-
}
996-
}
997-
998951
mKeyboardView.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
999952
if (mTouchpadView != null && mTouchpadView.getVisibility() == View.VISIBLE) {
1000953
mTouchpadView.setPadding(
@@ -1004,14 +957,6 @@ public View onCreateInputView(@NonNull Context displayContext, final boolean isH
1004957
mKeyboardView.getPaddingBottom()
1005958
);
1006959
}
1007-
if (mTextEditView != null && mTextEditView.getVisibility() == View.VISIBLE) {
1008-
mTextEditView.setPadding(
1009-
mKeyboardView.getPaddingLeft(),
1010-
mKeyboardView.getPaddingTop(),
1011-
mKeyboardView.getPaddingRight(),
1012-
mKeyboardView.getPaddingBottom()
1013-
);
1014-
}
1015960
});
1016961

1017962
return mCurrentInputView;

0 commit comments

Comments
 (0)