Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
LatinIME
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
keyboard
LatinIME
Commits
da0edf86
Commit
da0edf86
authored
11 years ago
by
Tadashi G. Takaoka
Committed by
Android (Google) Code Review
11 years ago
Browse files
Options
Downloads
Plain Diff
Merge "Stop overriding InputView.dispatchTouchEvent"
parents
1e9897b0
5cd732f8
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
java/src/com/android/inputmethod/latin/InputView.java
+63
-56
63 additions, 56 deletions
java/src/com/android/inputmethod/latin/InputView.java
with
63 additions
and
56 deletions
java/src/com/android/inputmethod/latin/InputView.java
+
63
−
56
View file @
da0edf86
...
@@ -31,6 +31,7 @@ public final class InputView extends LinearLayout {
...
@@ -31,6 +31,7 @@ public final class InputView extends LinearLayout {
private
final
Rect
mInputViewRect
=
new
Rect
();
private
final
Rect
mInputViewRect
=
new
Rect
();
private
KeyboardTopPaddingForwarder
mKeyboardTopPaddingForwarder
;
private
KeyboardTopPaddingForwarder
mKeyboardTopPaddingForwarder
;
private
MoreSuggestionsViewCanceler
mMoreSuggestionsViewCanceler
;
private
MoreSuggestionsViewCanceler
mMoreSuggestionsViewCanceler
;
private
MotionEventForwarder
<?,
?>
mActiveForwarder
;
public
InputView
(
final
Context
context
,
final
AttributeSet
attrs
)
{
public
InputView
(
final
Context
context
,
final
AttributeSet
attrs
)
{
super
(
context
,
attrs
,
0
);
super
(
context
,
attrs
,
0
);
...
@@ -53,42 +54,62 @@ public final class InputView extends LinearLayout {
...
@@ -53,42 +54,62 @@ public final class InputView extends LinearLayout {
}
}
@Override
@Override
public
boolean
dispatch
TouchEvent
(
final
MotionEvent
me
)
{
public
boolean
onIntercept
TouchEvent
(
final
MotionEvent
me
)
{
final
Rect
rect
=
mInputViewRect
;
final
Rect
rect
=
mInputViewRect
;
getGlobalVisibleRect
(
rect
);
getGlobalVisibleRect
(
rect
);
final
int
x
=
(
int
)
me
.
getX
()
+
rect
.
left
;
final
int
index
=
me
.
getActionIndex
();
final
int
y
=
(
int
)
me
.
getY
()
+
rect
.
top
;
final
int
x
=
(
int
)
me
.
getX
(
index
)
+
rect
.
left
;
final
int
y
=
(
int
)
me
.
getY
(
index
)
+
rect
.
top
;
// The touch events that hit the top padding of keyboard should be
// forwarded to {@link SuggestionStripView}.
// The touch events that hit the top padding of keyboard should be forwarded to
if
(
mKeyboardTopPaddingForwarder
.
dispatchTouchEvent
(
x
,
y
,
me
))
{
// {@link SuggestionStripView}.
if
(
mKeyboardTopPaddingForwarder
.
onInterceptTouchEvent
(
x
,
y
,
me
))
{
mActiveForwarder
=
mKeyboardTopPaddingForwarder
;
return
true
;
return
true
;
}
}
// To cancel {@link MoreSuggestionsView}, we should intercept a touch event to
// To cancel {@link MoreSuggestionsView}, we should intercept a touch event to
// {@link MainKeyboardView} and dismiss the {@link MoreSuggestionsView}.
// {@link MainKeyboardView} and dismiss the {@link MoreSuggestionsView}.
if
(
mMoreSuggestionsViewCanceler
.
dispatchTouchEvent
(
x
,
y
,
me
))
{
if
(
mMoreSuggestionsViewCanceler
.
onInterceptTouchEvent
(
x
,
y
,
me
))
{
mActiveForwarder
=
mMoreSuggestionsViewCanceler
;
return
true
;
return
true
;
}
}
return
super
.
dispatchTouchEvent
(
me
);
mActiveForwarder
=
null
;
return
false
;
}
@Override
public
boolean
onTouchEvent
(
final
MotionEvent
me
)
{
if
(
mActiveForwarder
==
null
)
{
return
super
.
onTouchEvent
(
me
);
}
final
Rect
rect
=
mInputViewRect
;
getGlobalVisibleRect
(
rect
);
final
int
index
=
me
.
getActionIndex
();
final
int
x
=
(
int
)
me
.
getX
(
index
)
+
rect
.
left
;
final
int
y
=
(
int
)
me
.
getY
(
index
)
+
rect
.
top
;
return
mActiveForwarder
.
onTouchEvent
(
x
,
y
,
me
);
}
}
/**
/**
* This class forwards series of {@link MotionEvent}s from <code>
Forwarder
</code>
view
to
* This class forwards series of {@link MotionEvent}s from <code>
SenderView
</code> to
* <code>Receiver</code>
view
.
* <code>Receiver
View
</code>.
*
*
* @param <Sender> a {@link View} that may send a {@link MotionEvent} to <Receiver>.
* @param <Sender
View
> a {@link View} that may send a {@link MotionEvent} to <Receiver
View
>.
* @param <Receiver> a {@link View} that receives forwarded {@link MotionEvent} from
* @param <Receiver
View
> a {@link View} that receives forwarded {@link MotionEvent} from
* <
Forwarder
>.
* <
SenderView
>.
*/
*/
private
static
abstract
class
MotionEventForwarder
<
Sender
extends
View
,
Receiver
extends
View
>
{
private
static
abstract
class
protected
final
Sender
mSenderView
;
MotionEventForwarder
<
SenderView
extends
View
,
ReceiverView
extends
View
>
{
protected
final
Receiver
mReceiverView
;
protected
final
SenderView
mSenderView
;
protected
final
ReceiverView
mReceiverView
;
private
boolean
mIsForwardingEvent
;
protected
final
Rect
mEventSendingRect
=
new
Rect
();
protected
final
Rect
mEventSendingRect
=
new
Rect
();
protected
final
Rect
mEventReceivingRect
=
new
Rect
();
protected
final
Rect
mEventReceivingRect
=
new
Rect
();
public
MotionEventForwarder
(
final
Sender
senderView
,
final
Receiver
receiverView
)
{
public
MotionEventForwarder
(
final
Sender
View
senderView
,
final
Receiver
View
receiverView
)
{
mSenderView
=
senderView
;
mSenderView
=
senderView
;
mReceiverView
=
receiverView
;
mReceiverView
=
receiverView
;
}
}
...
@@ -96,12 +117,12 @@ public final class InputView extends LinearLayout {
...
@@ -96,12 +117,12 @@ public final class InputView extends LinearLayout {
// Return true if a touch event of global coordinate x, y needs to be forwarded.
// Return true if a touch event of global coordinate x, y needs to be forwarded.
protected
abstract
boolean
needsToForward
(
final
int
x
,
final
int
y
);
protected
abstract
boolean
needsToForward
(
final
int
x
,
final
int
y
);
// Translate global x-coordinate to <code>Receiver</code> local coordinate.
// Translate global x-coordinate to <code>Receiver
View
</code> local coordinate.
protected
int
translateX
(
final
int
x
)
{
protected
int
translateX
(
final
int
x
)
{
return
x
-
mEventReceivingRect
.
left
;
return
x
-
mEventReceivingRect
.
left
;
}
}
// Translate global y-coordinate to <code>Receiver</code> local coordinate.
// Translate global y-coordinate to <code>Receiver
View
</code> local coordinate.
protected
int
translateY
(
final
int
y
)
{
protected
int
translateY
(
final
int
y
)
{
return
y
-
mEventReceivingRect
.
top
;
return
y
-
mEventReceivingRect
.
top
;
}
}
...
@@ -109,49 +130,36 @@ public final class InputView extends LinearLayout {
...
@@ -109,49 +130,36 @@ public final class InputView extends LinearLayout {
// Callback when a {@link MotionEvent} is forwarded.
// Callback when a {@link MotionEvent} is forwarded.
protected
void
onForwardingEvent
(
final
MotionEvent
me
)
{}
protected
void
onForwardingEvent
(
final
MotionEvent
me
)
{}
//
Dispatches
a {@link Motion
e
Event}
to <code>Receiver</code> if needed and returns true.
//
Returns true if
a {@link MotionEvent}
is needed to be forwarded to
// Otherwise returns false.
//
<code>ReceiverView</code>.
Otherwise returns false.
public
boolean
dispatch
TouchEvent
(
final
int
x
,
final
int
y
,
final
MotionEvent
me
)
{
public
boolean
onIntercept
TouchEvent
(
final
int
x
,
final
int
y
,
final
MotionEvent
me
)
{
// Forwards a {link MotionEvent} only if both <code>Sender</code> and
// Forwards a {link MotionEvent} only if both <code>Sender
View
</code> and
// <code>Receiver</code> are visible.
// <code>Receiver
View
</code> are visible.
if
(
mSenderView
.
getVisibility
()
!=
View
.
VISIBLE
||
if
(
mSenderView
.
getVisibility
()
!=
View
.
VISIBLE
||
mReceiverView
.
getVisibility
()
!=
View
.
VISIBLE
)
{
mReceiverView
.
getVisibility
()
!=
View
.
VISIBLE
)
{
return
false
;
return
false
;
}
}
final
Rect
sendingRect
=
mEventSendingRect
;
mSenderView
.
getGlobalVisibleRect
(
mEventSendingRect
);
mSenderView
.
getGlobalVisibleRect
(
sendingRect
);
if
(!
mEventSendingRect
.
contains
(
x
,
y
))
{
if
(!
mIsForwardingEvent
&&
!
sendingRect
.
contains
(
x
,
y
))
{
return
false
;
return
false
;
}
}
boolean
shouldForwardToReceiver
=
false
;
if
(
me
.
getActionMasked
()
==
MotionEvent
.
ACTION_DOWN
)
{
// If the down event happens in the forwarding area, successive
switch
(
me
.
getActionMasked
())
{
// {@link MotionEvent}s should be forwarded to <code>ReceiverView</code>.
case
MotionEvent
.
ACTION_DOWN
:
// If the down event happens in the forwarding area, successive {@link MotionEvent}s
// should be forwarded.
if
(
needsToForward
(
x
,
y
))
{
if
(
needsToForward
(
x
,
y
))
{
mIsForwardingEvent
=
true
;
return
true
;
shouldForwardToReceiver
=
true
;
}
}
break
;
case
MotionEvent
.
ACTION_MOVE
:
shouldForwardToReceiver
=
mIsForwardingEvent
;
break
;
case
MotionEvent
.
ACTION_UP
:
case
MotionEvent
.
ACTION_CANCEL
:
shouldForwardToReceiver
=
mIsForwardingEvent
;
mIsForwardingEvent
=
false
;
break
;
}
}
if
(!
shouldForwardToReceiver
)
{
return
false
;
return
false
;
}
}
final
Rect
receivingRect
=
mEventReceivingRect
;
// Returns true if a {@link MotionEvent} is forwarded to <code>ReceiverView</code>.
mReceiverView
.
getGlobalVisibleRect
(
receivingRect
);
// Otherwise returns false.
// Translate global coordinates to <code>Receiver</code> local coordinates.
public
boolean
onTouchEvent
(
final
int
x
,
final
int
y
,
final
MotionEvent
me
)
{
mReceiverView
.
getGlobalVisibleRect
(
mEventReceivingRect
);
// Translate global coordinates to <code>ReceiverView</code> local coordinates.
me
.
setLocation
(
translateX
(
x
),
translateY
(
y
));
me
.
setLocation
(
translateX
(
x
),
translateY
(
y
));
mReceiverView
.
dispatchTouchEvent
(
me
);
mReceiverView
.
dispatchTouchEvent
(
me
);
onForwardingEvent
(
me
);
onForwardingEvent
(
me
);
...
@@ -189,8 +197,7 @@ public final class InputView extends LinearLayout {
...
@@ -189,8 +197,7 @@ public final class InputView extends LinearLayout {
protected
int
translateY
(
final
int
y
)
{
protected
int
translateY
(
final
int
y
)
{
final
int
translatedY
=
super
.
translateY
(
y
);
final
int
translatedY
=
super
.
translateY
(
y
);
if
(
isInKeyboardTopPadding
(
y
))
{
if
(
isInKeyboardTopPadding
(
y
))
{
// The forwarded event should have coordinates that are inside of
// The forwarded event should have coordinates that are inside of the target.
// the target.
return
Math
.
min
(
translatedY
,
mEventReceivingRect
.
height
()
-
1
);
return
Math
.
min
(
translatedY
,
mEventReceivingRect
.
height
()
-
1
);
}
}
return
translatedY
;
return
translatedY
;
...
@@ -200,8 +207,8 @@ public final class InputView extends LinearLayout {
...
@@ -200,8 +207,8 @@ public final class InputView extends LinearLayout {
/**
/**
* This class forwards {@link MotionEvent}s happened in the {@link MainKeyboardView} to
* This class forwards {@link MotionEvent}s happened in the {@link MainKeyboardView} to
* {@link SuggestionStripView} when the {@link MoreSuggestionsView} is showing.
* {@link SuggestionStripView} when the {@link MoreSuggestionsView} is showing.
* {@link SuggestionStripView} dismisses {@link MoreSuggestionsView} when it receives
those
* {@link SuggestionStripView} dismisses {@link MoreSuggestionsView} when it receives
any event
*
events
.
*
outside of it
.
*/
*/
private
static
class
MoreSuggestionsViewCanceler
private
static
class
MoreSuggestionsViewCanceler
extends
MotionEventForwarder
<
MainKeyboardView
,
SuggestionStripView
>
{
extends
MotionEventForwarder
<
MainKeyboardView
,
SuggestionStripView
>
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment