@@ -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