Skip to content

Commit 099aa8b

Browse files
goofyzWhiredPlanck
authored andcommitted
fix: call super.onTouchEvent when in "Toolbar" mode
After this view is used to display "composition", `composition_pos` is set. All touch events will be consumed by `ACTION_UP` handling in `onTouchEvent()`. However, toolbar related buttons should be taken out and handle by `super.onTouchEvent()`. Thus `isToolbarMode` is added for this handling. Fixes #918
1 parent e79e32b commit 099aa8b

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

app/src/main/java/com/osfans/trime/ime/text/Composition.java

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ public class Composition extends AppCompatTextView {
8282
private Integer hilited_label_color;
8383
private TextInputManager textInputManager;
8484

85+
private boolean isToolbarMode;
86+
8587
private class CompositionSpan extends UnderlineSpan {
8688
public CompositionSpan() {
8789
super();
@@ -176,33 +178,39 @@ public Composition(Context context, AttributeSet attrs) {
176178
@Override
177179
public boolean onTouchEvent(@NonNull MotionEvent event) {
178180
int action = event.getAction();
179-
if (action == MotionEvent.ACTION_UP) {
180-
int n = getOffsetForPosition(event.getX(), event.getY());
181-
if (composition_pos[0] <= n && n <= composition_pos[1]) {
182-
String s =
183-
getText().toString().substring(n, composition_pos[1]).replace(" ", "").replace("‸", "");
184-
n = Rime.getRimeRawInput().length() - s.length(); // 從右側定位
185-
Rime.setCaretPos(n);
186-
Trime.getService().updateComposing();
187-
return true;
188-
}
189-
} else if (!movable.contentEquals("false")
190-
&& (action == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_DOWN)) {
191-
int n = getOffsetForPosition(event.getX(), event.getY());
192-
if (move_pos[0] <= n && n <= move_pos[1]) {
193-
if (action == MotionEvent.ACTION_DOWN) {
194-
if (first_move || movable.contentEquals("once")) {
195-
first_move = false;
196-
this.getLocationOnScreen(new int[] {mCurrentX, mCurrentY});
181+
if (!isToolbarMode) {
182+
if (action == MotionEvent.ACTION_UP) {
183+
int n = getOffsetForPosition(event.getX(), event.getY());
184+
if (composition_pos[0] <= n && n <= composition_pos[1]) {
185+
String s =
186+
getText()
187+
.toString()
188+
.substring(n, composition_pos[1])
189+
.replace(" ", "")
190+
.replace("‸", "");
191+
n = Rime.getRimeRawInput().length() - s.length(); // 從右側定位
192+
Rime.setCaretPos(n);
193+
Trime.getService().updateComposing();
194+
return true;
195+
}
196+
} else if (!movable.contentEquals("false")
197+
&& (action == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_DOWN)) {
198+
int n = getOffsetForPosition(event.getX(), event.getY());
199+
if (move_pos[0] <= n && n <= move_pos[1]) {
200+
if (action == MotionEvent.ACTION_DOWN) {
201+
if (first_move || movable.contentEquals("once")) {
202+
first_move = false;
203+
this.getLocationOnScreen(new int[] {mCurrentX, mCurrentY});
204+
}
205+
mDx = mCurrentX - event.getRawX();
206+
mDy = mCurrentY - event.getRawY();
207+
} else { // MotionEvent.ACTION_MOVE
208+
mCurrentX = (int) (event.getRawX() + mDx);
209+
mCurrentY = (int) (event.getRawY() + mDy);
210+
Trime.getService().updatePopupWindow(mCurrentX, mCurrentY);
197211
}
198-
mDx = mCurrentX - event.getRawX();
199-
mDy = mCurrentY - event.getRawY();
200-
} else { // MotionEvent.ACTION_MOVE
201-
mCurrentX = (int) (event.getRawX() + mDx);
202-
mCurrentY = (int) (event.getRawY() + mDy);
203-
Trime.getService().updatePopupWindow(mCurrentX, mCurrentY);
212+
return true;
204213
}
205-
return true;
206214
}
207215
}
208216
return super.onTouchEvent(event);
@@ -577,6 +585,9 @@ else if (m.containsKey("candidate")) {
577585
if (candidate_num > 0 || ss.toString().contains("\n")) setSingleLine(false); // 設置單行
578586
setText(ss);
579587
setMovementMethod(LinkMovementMethod.getInstance());
588+
589+
isToolbarMode = false;
590+
580591
return start_num;
581592
}
582593

@@ -598,5 +609,7 @@ public void changeToLiquidKeyboardToolbar() {
598609

599610
setText(ss);
600611
setMovementMethod(LinkMovementMethod.getInstance());
612+
613+
isToolbarMode = true;
601614
}
602615
}

0 commit comments

Comments
 (0)