@@ -114,9 +114,10 @@ private boolean handleOnTouchForPointer(MotionEvent event, int actionMask, int p
114114 {
115115 final int pointerId = event .getPointerId (pointerIndex );
116116 final int pointerType = event .getToolType (pointerIndex );
117+ final int historySize = event .getHistorySize ();
118+ final boolean useTiltInfo = pointerType == MotionEvent .TOOL_TYPE_STYLUS ;
117119
118120 int inputMode = getInputMode ();
119-
120121 if (inputMode == INPUT_MODE_FORCE_PEN )
121122 {
122123 iinkPointerType = PointerType .PEN ;
@@ -131,13 +132,9 @@ else if (inputMode == INPUT_MODE_FORCE_TOUCH)
131132 {
132133 case MotionEvent .TOOL_TYPE_STYLUS :
133134 if (inputMode == INPUT_MODE_ERASER )
134- {
135135 iinkPointerType = PointerType .ERASER ;
136- }
137136 else
138- {
139137 iinkPointerType = PointerType .PEN ;
140- }
141138 break ;
142139 case MotionEvent .TOOL_TYPE_FINGER :
143140 case MotionEvent .TOOL_TYPE_MOUSE :
@@ -150,71 +147,99 @@ else if (inputMode == INPUT_MODE_FORCE_TOUCH)
150147 }
151148
152149 if (isScalingEnabled )
153- {
154150 scaleGestureDetector .onTouchEvent (event );
155- }
156151
157152 if (iinkPointerType == PointerType .TOUCH )
158- {
159153 gestureDetector .onTouchEvent (event );
160- }
161-
162- int historySize = event .getHistorySize ();
163154
164155 switch (actionMask )
165156 {
166- // ACTION_POINTER_DOWN is "A non-primary pointer has gone down", this is called only when a pointer is already on the touch .
157+ // ACTION_POINTER_DOWN is "A non-primary pointer has gone down", only called when a pointer is already on the touchscreen .
167158 case MotionEvent .ACTION_POINTER_DOWN :
159+ {
168160 isMultiFingerTouch = true ;
169161 if (previousPointerId != -1 )
170162 {
171163 editor .pointerCancel (previousPointerId );
172164 previousPointerId = -1 ;
173165 }
174166 return true ;
175-
167+ }
176168 case MotionEvent .ACTION_DOWN :
169+ {
177170 previousPointerId = pointerId ;
178171 isMultiFingerTouch = false ;
179172 // Request unbuffered events for tools that require low capture latency
180173 ToolController toolController = editor .getToolController ();
181174 PointerTool tool = toolController .getToolForType (iinkPointerType );
182175 if (tool == PointerTool .PEN || tool == PointerTool .HIGHLIGHTER )
183176 editorView .requestUnbufferedDispatch (event );
177+
184178 try
185179 {
186- editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
180+ if (useTiltInfo )
181+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
182+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
183+ else
184+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
187185 }
188- catch (UnsupportedOperationException e ) {
186+ catch (UnsupportedOperationException e ) {
189187 // Special case: pointerDown already called, discard previous and retry
190188 editor .pointerCancel (pointerId );
191- editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
189+ if (useTiltInfo )
190+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
191+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
192+ else
193+ editor .pointerDown (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
192194 }
193195 return true ;
194-
196+ }
195197 case MotionEvent .ACTION_MOVE :
198+ {
196199 if (isMultiFingerTouch )
197200 return true ;
198201
199202 if (historySize > 0 )
200203 {
201204 PointerEvent [] pointerEvents = new PointerEvent [historySize + 1 ];
202- for (int i = 0 ; i < historySize ; ++i )
203- pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ), event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
204- pointerEvents [historySize ] = new PointerEvent (PointerEventType .MOVE , event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
205+ if (useTiltInfo )
206+ {
207+ for (int i = 0 ; i < historySize ; ++i )
208+ {
209+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
210+ event .getHistoricalPressure (pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_TILT , pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex , i ), iinkPointerType , pointerId );
211+ }
212+ pointerEvents [historySize ] = new PointerEvent (PointerEventType .MOVE , event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
213+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
214+ }
215+ else
216+ {
217+ for (int i = 0 ; i < historySize ; ++i )
218+ {
219+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
220+ event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
221+ }
222+ pointerEvents [historySize ] = new PointerEvent (PointerEventType .MOVE , event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
223+ }
205224 editor .pointerEvents (pointerEvents , true );
206225 }
207- else
226+ else // no history
208227 {
209- editor .pointerMove (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
228+ if (useTiltInfo )
229+ editor .pointerMove (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
230+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
231+ else
232+ editor .pointerMove (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
210233 }
211234 return true ;
212-
213- // ACTION_POINTER_UP is "A non-primary pointer has gone up", at least one finger is still on the touch .
235+ }
236+ // ACTION_POINTER_UP is "A non-primary pointer has gone up", at least one finger is still on the touchscreen .
214237 case MotionEvent .ACTION_POINTER_UP :
238+ {
215239 return true ;
216-
240+ }
217241 case MotionEvent .ACTION_UP :
242+ {
218243 if (isMultiFingerTouch )
219244 {
220245 isMultiFingerTouch = false ;
@@ -223,17 +248,37 @@ else if (inputMode == INPUT_MODE_FORCE_TOUCH)
223248 if (historySize > 0 )
224249 {
225250 PointerEvent [] pointerEvents = new PointerEvent [historySize ];
226- for (int i = 0 ; i < historySize ; ++i )
227- pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ), event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
251+ if (useTiltInfo )
252+ {
253+ for (int i = 0 ; i < historySize ; ++i )
254+ {
255+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
256+ event .getHistoricalPressure (pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_TILT , pointerIndex , i ), event .getHistoricalAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex , i ), iinkPointerType , pointerId );
257+ }
258+ }
259+ else
260+ {
261+ for (int i = 0 ; i < historySize ; ++i )
262+ {
263+ pointerEvents [i ] = new PointerEvent (PointerEventType .MOVE , event .getHistoricalX (pointerIndex , i ), event .getHistoricalY (pointerIndex , i ), eventTimeOffset + event .getHistoricalEventTime (i ),
264+ event .getHistoricalPressure (pointerIndex , i ), iinkPointerType , pointerId );
265+ }
266+ }
228267 editor .pointerEvents (pointerEvents , true );
229268 }
230- editor .pointerUp (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
231- return true ;
269+ if (useTiltInfo )
270+ editor .pointerUp (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (),
271+ event .getPressure (), event .getAxisValue (MotionEvent .AXIS_TILT , pointerIndex ), event .getAxisValue (MotionEvent .AXIS_ORIENTATION , pointerIndex ), iinkPointerType , pointerId );
272+ else
273+ editor .pointerUp (event .getX (pointerIndex ), event .getY (pointerIndex ), eventTimeOffset + event .getEventTime (), event .getPressure (), iinkPointerType , pointerId );
232274
275+ return true ;
276+ }
233277 case MotionEvent .ACTION_CANCEL :
278+ {
234279 editor .pointerCancel (pointerId );
235280 return true ;
236-
281+ }
237282 default :
238283 return false ;
239284 }
0 commit comments