2 * Copyright (C) 2012-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "AndroidTouch.h"
11 #include "input/touch/generic/GenericTouchActionHandler.h"
12 #include "input/touch/generic/GenericTouchInputHandler.h"
14 #include "platform/android/activity/XBMCApp.h"
16 CAndroidTouch::CAndroidTouch()
18 CGenericTouchInputHandler::GetInstance().RegisterHandler(&CGenericTouchActionHandler::GetInstance());
21 CAndroidTouch::~CAndroidTouch()
23 CGenericTouchInputHandler::GetInstance().UnregisterHandler();
26 bool CAndroidTouch::onTouchEvent(AInputEvent
* event
)
31 size_t numPointers
= AMotionEvent_getPointerCount(event
);
34 CXBMCApp::android_printf(" => aborting touch event because there are no active pointers");
38 if (numPointers
> CGenericTouchInputHandler::MAX_POINTERS
)
39 numPointers
= CGenericTouchInputHandler::MAX_POINTERS
;
41 int32_t eventAction
= AMotionEvent_getAction(event
);
42 int8_t touchAction
= eventAction
& AMOTION_EVENT_ACTION_MASK
;
43 size_t touchPointer
= eventAction
>> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT
;
45 TouchInput touchEvent
= TouchInputAbort
;
48 case AMOTION_EVENT_ACTION_DOWN
:
49 case AMOTION_EVENT_ACTION_POINTER_DOWN
:
50 touchEvent
= TouchInputDown
;
53 case AMOTION_EVENT_ACTION_UP
:
54 case AMOTION_EVENT_ACTION_POINTER_UP
:
55 touchEvent
= TouchInputUp
;
58 case AMOTION_EVENT_ACTION_MOVE
:
59 touchEvent
= TouchInputMove
;
62 case AMOTION_EVENT_ACTION_OUTSIDE
:
63 case AMOTION_EVENT_ACTION_CANCEL
:
68 float x
= AMotionEvent_getX(event
, touchPointer
);
69 float y
= AMotionEvent_getY(event
, touchPointer
);
70 int64_t time
= AMotionEvent_getEventTime(event
);
72 // first update all touch pointers
73 for (unsigned int pointer
= 0; pointer
< numPointers
; pointer
++)
74 CGenericTouchInputHandler::GetInstance().UpdateTouchPointer(pointer
, AMotionEvent_getX(event
, pointer
), AMotionEvent_getY(event
, pointer
),
75 AMotionEvent_getEventTime(event
));
77 // let system know that we are starting a guesture
78 if (touchEvent
== TouchInputDown
)
79 CGenericTouchActionHandler::GetInstance().QuerySupportedGestures(x
, y
);
82 return CGenericTouchInputHandler::GetInstance().HandleTouchInput(touchEvent
, x
, y
, time
, touchPointer
);
85 void CAndroidTouch::setDPI(uint32_t dpi
)
91 CGenericTouchInputHandler::GetInstance().SetScreenDPI(m_dpi
);