@@ -93,6 +93,7 @@ private enum NewEventScrollDirection {
93
93
private boolean creatingNewEvent = false ;
94
94
private boolean movingNewEvent = false ;
95
95
private NewEventScrollDirection mCurrentNewEventScrollDirection = NewEventScrollDirection .NONE ;
96
+ private float mNewEventDragOffset = 0 ;
96
97
97
98
// Attributes and their default values.
98
99
private int mHourHeight = 50 ;
@@ -183,7 +184,7 @@ public boolean onDown(MotionEvent e) {
183
184
}
184
185
185
186
@ Override
186
- public boolean onSingleTapUp (MotionEvent e ){
187
+ public boolean onSingleTapUp (MotionEvent e ) {
187
188
Log .d ("QuivrWeekView" , "singleTapUp" );
188
189
goToNearestOrigin ();
189
190
boolean wasEmptyClick = true ;
@@ -195,16 +196,16 @@ public boolean onSingleTapUp(MotionEvent e){
195
196
Collections .reverse (reversedEventRects );
196
197
for (EventRect eventRect : reversedEventRects ) {
197
198
if (eventRect .rectF != null && eventRect .rectF .contains (e .getX (), e .getY ())) {
198
- if (mNewEventIdentifier .equals (eventRect .event .getIdentifier ())) {
199
- mAddEventClickListener .onAddEventClicked (mNewEventRect .event .getStartTime (), mNewEventRect .event .getEndTime ());
200
- // Do this later, as we are iterating over this list currently
201
- doRemoveNewEvent = true ;
202
- creatingNewEvent = false ;
203
- } else {
204
- mEventClickListener .onEventClick (eventRect .originalEvent , eventRect .rectF );
205
- playSoundEffect (SoundEffectConstants .CLICK );
206
- }
207
- wasEmptyClick = false ;
199
+ if (mNewEventIdentifier .equals (eventRect .event .getIdentifier ())) {
200
+ mAddEventClickListener .onAddEventClicked (mNewEventRect .event .getStartTime (), mNewEventRect .event .getEndTime ());
201
+ // Do this later, as we are iterating over this list currently
202
+ doRemoveNewEvent = true ;
203
+ creatingNewEvent = false ;
204
+ } else {
205
+ mEventClickListener .onEventClick (eventRect .originalEvent , eventRect .rectF );
206
+ playSoundEffect (SoundEffectConstants .CLICK );
207
+ }
208
+ wasEmptyClick = false ;
208
209
}
209
210
}
210
211
}
@@ -214,7 +215,8 @@ public boolean onSingleTapUp(MotionEvent e){
214
215
215
216
// If the tap was on an empty space, then trigger the callback.
216
217
if (wasEmptyClick && (mEmptyViewClickListener != null || mAddEventClickListener != null ) && e .getX () > mHeaderColumnWidth && e .getY () > (mHeaderHeight + mHeaderRowPadding * 2 + mHeaderMarginBottom )) {
217
- startNewEventAdding (e );
218
+ mNewEventDragOffset = 0 ;
219
+ startNewEventAdding (e );
218
220
}
219
221
220
222
return super .onSingleTapUp (e );
@@ -355,9 +357,13 @@ public void onLongPress(MotionEvent e) {
355
357
}
356
358
};
357
359
358
- public boolean wasOnNewEventRect ( MotionEvent e ) {
360
+ private EventRect getNewEventRectWithCorrectDims ( ) {
359
361
Optional <EventRect > newEventRectWithCorrectDims = mEventRects .stream ().filter (r -> r .event .getIdentifier ().equals (getNewEventIdentifier ())).findFirst ();
360
- EventRect eventRect = newEventRectWithCorrectDims .orElse (null );
362
+ return newEventRectWithCorrectDims .orElse (null );
363
+ }
364
+
365
+ public boolean wasOnNewEventRect (MotionEvent e ) {
366
+ EventRect eventRect = getNewEventRectWithCorrectDims ();
361
367
return eventRect != null && eventRect .rectF != null && eventRect .rectF .contains (e .getX (), e .getY ());
362
368
}
363
369
@@ -2487,12 +2493,14 @@ public boolean onTouchEvent(MotionEvent event) {
2487
2493
mScaleDetector .onTouchEvent (event );
2488
2494
boolean val = mGestureDetector .onTouchEvent (event );
2489
2495
if (event .getAction () == MotionEvent .ACTION_DOWN && creatingNewEvent && wasOnNewEventRect (event )) {
2490
- // goToNearestOrigin();
2491
2496
movingNewEvent = true ;
2497
+ EventRect mNewEventRectCorrectDims = getNewEventRectWithCorrectDims ();
2498
+ mNewEventDragOffset = event .getY () - (mNewEventRectCorrectDims .rectF .top + mNewEventRectCorrectDims .rectF .bottom ) / 2 ;
2492
2499
startNewEventAdding (event );
2493
2500
}
2494
2501
2495
2502
if (event .getAction () == MotionEvent .ACTION_UP && movingNewEvent ) {
2503
+ stopScrolling ();
2496
2504
movingNewEvent = false ;
2497
2505
}
2498
2506
@@ -2718,7 +2726,9 @@ public boolean dateIsValid(Calendar day) {
2718
2726
2719
2727
private void updateNewEvent (MotionEvent e ) {
2720
2728
Log .d ("QuivrWeekView" , String .format ("updateNewEvent: %s%n" , e .toString ()));
2721
- Calendar selectedTime = getTimeFromPoint (e .getX (), e .getY ());
2729
+ Log .d ("QuivrWeekView" , String .format (Float .valueOf (mNewEventDragOffset ).toString ()));
2730
+ Log .d ("QuivrWeekView" , String .format (Float .valueOf (e .getY ()).toString ()));
2731
+ Calendar selectedTime = getTimeFromPoint (e .getX (), e .getY () - mNewEventDragOffset );
2722
2732
if (selectedTime != null ) {
2723
2733
List <WeekViewEvent > tempEvents = new ArrayList <>(mEvents );
2724
2734
if (mNewEventRect != null ) {
0 commit comments