Skip to content

Commit

Permalink
fix: call super.onTouchEvent when in "Toolbar" mode
Browse files Browse the repository at this point in the history
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
  • Loading branch information
goofyz authored and WhiredPlanck committed Jan 23, 2024
1 parent e79e32b commit 099aa8b
Showing 1 changed file with 38 additions and 25 deletions.
63 changes: 38 additions & 25 deletions app/src/main/java/com/osfans/trime/ime/text/Composition.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ public class Composition extends AppCompatTextView {
private Integer hilited_label_color;
private TextInputManager textInputManager;

private boolean isToolbarMode;

private class CompositionSpan extends UnderlineSpan {
public CompositionSpan() {
super();
Expand Down Expand Up @@ -176,33 +178,39 @@ public Composition(Context context, AttributeSet attrs) {
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
int n = getOffsetForPosition(event.getX(), event.getY());
if (composition_pos[0] <= n && n <= composition_pos[1]) {
String s =
getText().toString().substring(n, composition_pos[1]).replace(" ", "").replace("‸", "");
n = Rime.getRimeRawInput().length() - s.length(); // 從右側定位
Rime.setCaretPos(n);
Trime.getService().updateComposing();
return true;
}
} else if (!movable.contentEquals("false")
&& (action == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_DOWN)) {
int n = getOffsetForPosition(event.getX(), event.getY());
if (move_pos[0] <= n && n <= move_pos[1]) {
if (action == MotionEvent.ACTION_DOWN) {
if (first_move || movable.contentEquals("once")) {
first_move = false;
this.getLocationOnScreen(new int[] {mCurrentX, mCurrentY});
if (!isToolbarMode) {
if (action == MotionEvent.ACTION_UP) {
int n = getOffsetForPosition(event.getX(), event.getY());
if (composition_pos[0] <= n && n <= composition_pos[1]) {
String s =
getText()
.toString()
.substring(n, composition_pos[1])
.replace(" ", "")
.replace("‸", "");
n = Rime.getRimeRawInput().length() - s.length(); // 從右側定位
Rime.setCaretPos(n);
Trime.getService().updateComposing();
return true;
}
} else if (!movable.contentEquals("false")
&& (action == MotionEvent.ACTION_MOVE || action == MotionEvent.ACTION_DOWN)) {
int n = getOffsetForPosition(event.getX(), event.getY());
if (move_pos[0] <= n && n <= move_pos[1]) {
if (action == MotionEvent.ACTION_DOWN) {
if (first_move || movable.contentEquals("once")) {
first_move = false;
this.getLocationOnScreen(new int[] {mCurrentX, mCurrentY});
}
mDx = mCurrentX - event.getRawX();
mDy = mCurrentY - event.getRawY();
} else { // MotionEvent.ACTION_MOVE
mCurrentX = (int) (event.getRawX() + mDx);
mCurrentY = (int) (event.getRawY() + mDy);
Trime.getService().updatePopupWindow(mCurrentX, mCurrentY);
}
mDx = mCurrentX - event.getRawX();
mDy = mCurrentY - event.getRawY();
} else { // MotionEvent.ACTION_MOVE
mCurrentX = (int) (event.getRawX() + mDx);
mCurrentY = (int) (event.getRawY() + mDy);
Trime.getService().updatePopupWindow(mCurrentX, mCurrentY);
return true;
}
return true;
}
}
return super.onTouchEvent(event);
Expand Down Expand Up @@ -577,6 +585,9 @@ else if (m.containsKey("candidate")) {
if (candidate_num > 0 || ss.toString().contains("\n")) setSingleLine(false); // 設置單行
setText(ss);
setMovementMethod(LinkMovementMethod.getInstance());

isToolbarMode = false;

return start_num;
}

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

setText(ss);
setMovementMethod(LinkMovementMethod.getInstance());

isToolbarMode = true;
}
}

0 comments on commit 099aa8b

Please sign in to comment.