diff options
author | 2022-06-02 06:59:33 +0000 | |
---|---|---|
committer | 2022-06-10 04:07:23 +0000 | |
commit | 015f5d9d5c31f94fa44927b5a3c5734a71dcb8eb (patch) | |
tree | 23756dfe444a1d694daf026a63e547da97465879 | |
parent | 925e3670fdb16b41d5a8ac47d368c93a2c021fbd (diff) |
Change POINTER_ICON_STYLE enum to a type safe enum class
Test: Current tests all pass, this is a static type change, not
a functional change.
Change-Id: I8f0e8e43ea64f5abab163e4ef5444a8cb3d4fa78
-rw-r--r-- | core/jni/android_view_PointerIcon.cpp | 10 | ||||
-rw-r--r-- | core/jni/android_view_PointerIcon.h | 11 | ||||
-rw-r--r-- | libs/input/MouseCursorController.cpp | 11 | ||||
-rw-r--r-- | libs/input/MouseCursorController.h | 8 | ||||
-rw-r--r-- | libs/input/PointerController.cpp | 2 | ||||
-rw-r--r-- | libs/input/PointerController.h | 2 | ||||
-rw-r--r-- | libs/input/PointerControllerContext.h | 9 | ||||
-rw-r--r-- | libs/input/SpriteController.cpp | 2 | ||||
-rw-r--r-- | libs/input/SpriteIcon.h | 10 | ||||
-rw-r--r-- | libs/input/tests/PointerController_test.cpp | 75 | ||||
-rw-r--r-- | services/core/jni/com_android_server_input_InputManagerService.cpp | 67 |
11 files changed, 111 insertions, 96 deletions
diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp index 20832514a306..d57ec1528c69 100644 --- a/core/jni/android_view_PointerIcon.cpp +++ b/core/jni/android_view_PointerIcon.cpp @@ -44,7 +44,8 @@ static struct { // --- Global Functions --- -jobject android_view_PointerIcon_getSystemIcon(JNIEnv* env, jobject contextObj, int32_t style) { +jobject android_view_PointerIcon_getSystemIcon(JNIEnv* env, jobject contextObj, + PointerIconStyle style) { jobject pointerIconObj = env->CallStaticObjectMethod(gPointerIconClassInfo.clazz, gPointerIconClassInfo.getSystemIcon, contextObj, style); if (env->ExceptionCheck()) { @@ -80,7 +81,8 @@ status_t android_view_PointerIcon_getLoadedIcon(JNIEnv* env, jobject pointerIcon if (!pointerIconObj) { return BAD_VALUE; } - outPointerIcon->style = env->GetIntField(pointerIconObj, gPointerIconClassInfo.mType); + outPointerIcon->style = static_cast<PointerIconStyle>( + env->GetIntField(pointerIconObj, gPointerIconClassInfo.mType)); outPointerIcon->hotSpotX = env->GetFloatField(pointerIconObj, gPointerIconClassInfo.mHotSpotX); outPointerIcon->hotSpotY = env->GetFloatField(pointerIconObj, gPointerIconClassInfo.mHotSpotY); @@ -107,7 +109,8 @@ status_t android_view_PointerIcon_getLoadedIcon(JNIEnv* env, jobject pointerIcon } status_t android_view_PointerIcon_loadSystemIcon(JNIEnv* env, jobject contextObj, - int32_t style, PointerIcon* outPointerIcon) { + PointerIconStyle style, + PointerIcon* outPointerIcon) { jobject pointerIconObj = android_view_PointerIcon_getSystemIcon(env, contextObj, style); if (!pointerIconObj) { outPointerIcon->reset(); @@ -120,7 +123,6 @@ status_t android_view_PointerIcon_loadSystemIcon(JNIEnv* env, jobject contextObj return status; } - // --- JNI Registration --- int register_android_view_PointerIcon(JNIEnv* env) { diff --git a/core/jni/android_view_PointerIcon.h b/core/jni/android_view_PointerIcon.h index a87db1df8461..f3eaad3d0a9f 100644 --- a/core/jni/android_view_PointerIcon.h +++ b/core/jni/android_view_PointerIcon.h @@ -33,17 +33,17 @@ namespace android { struct PointerIcon { inline PointerIcon() { reset(); } - int32_t style; + PointerIconStyle style; graphics::Bitmap bitmap; float hotSpotX; float hotSpotY; std::vector<graphics::Bitmap> bitmapFrames; int32_t durationPerFrame; - inline bool isNullIcon() { return style == POINTER_ICON_STYLE_NULL; } + inline bool isNullIcon() { return style == PointerIconStyle::TYPE_NULL; } inline void reset() { - style = POINTER_ICON_STYLE_NULL; + style = PointerIconStyle::TYPE_NULL; bitmap.reset(); hotSpotX = 0; hotSpotY = 0; @@ -54,7 +54,7 @@ struct PointerIcon { /* Gets a system pointer icon with the specified style. */ extern jobject android_view_PointerIcon_getSystemIcon(JNIEnv* env, jobject contextObj, - int32_t style); + PointerIconStyle style); /* Loads the bitmap associated with a pointer icon. * If pointerIconObj is NULL, returns OK and a pointer icon with POINTER_ICON_STYLE_NULL. */ @@ -68,7 +68,8 @@ extern status_t android_view_PointerIcon_getLoadedIcon(JNIEnv* env, jobject poin /* Loads the bitmap associated with a pointer icon by style. * If pointerIconObj is NULL, returns OK and a pointer icon with POINTER_ICON_STYLE_NULL. */ extern status_t android_view_PointerIcon_loadSystemIcon(JNIEnv* env, jobject contextObj, - int32_t style, PointerIcon* outPointerIcon); + PointerIconStyle style, + PointerIcon* outPointerIcon); } // namespace android diff --git a/libs/input/MouseCursorController.cpp b/libs/input/MouseCursorController.cpp index 956101e7a2a4..0e7b7ff4319d 100644 --- a/libs/input/MouseCursorController.cpp +++ b/libs/input/MouseCursorController.cpp @@ -22,6 +22,7 @@ #include "MouseCursorController.h" +#include <input/Input.h> #include <log/log.h> namespace { @@ -286,7 +287,7 @@ void MouseCursorController::setDisplayViewport(const DisplayViewport& viewport, updatePointerLocked(); } -void MouseCursorController::updatePointerIcon(int32_t iconId) { +void MouseCursorController::updatePointerIcon(PointerIconStyle iconId) { std::scoped_lock lock(mLock); if (mLocked.requestedPointerType != iconId) { @@ -299,7 +300,7 @@ void MouseCursorController::updatePointerIcon(int32_t iconId) { void MouseCursorController::setCustomPointerIcon(const SpriteIcon& icon) { std::scoped_lock lock(mLock); - const int32_t iconId = mContext.getPolicy()->getCustomPointerIconId(); + const PointerIconStyle iconId = mContext.getPolicy()->getCustomPointerIconId(); mLocked.additionalMouseResources[iconId] = icon; mLocked.requestedPointerType = iconId; mLocked.updatePointerIcon = true; @@ -334,7 +335,7 @@ bool MouseCursorController::doFadingAnimationLocked(nsecs_t timestamp) REQUIRES( } bool MouseCursorController::doBitmapAnimationLocked(nsecs_t timestamp) REQUIRES(mLock) { - std::map<int32_t, PointerAnimation>::const_iterator iter = + std::map<PointerIconStyle, PointerAnimation>::const_iterator iter = mLocked.animationResources.find(mLocked.requestedPointerType); if (iter == mLocked.animationResources.end()) { return false; @@ -380,10 +381,10 @@ void MouseCursorController::updatePointerLocked() REQUIRES(mLock) { if (mLocked.requestedPointerType == mContext.getPolicy()->getDefaultPointerIconId()) { mLocked.pointerSprite->setIcon(mLocked.pointerIcon); } else { - std::map<int32_t, SpriteIcon>::const_iterator iter = + std::map<PointerIconStyle, SpriteIcon>::const_iterator iter = mLocked.additionalMouseResources.find(mLocked.requestedPointerType); if (iter != mLocked.additionalMouseResources.end()) { - std::map<int32_t, PointerAnimation>::const_iterator anim_iter = + std::map<PointerIconStyle, PointerAnimation>::const_iterator anim_iter = mLocked.animationResources.find(mLocked.requestedPointerType); if (anim_iter != mLocked.animationResources.end()) { mLocked.animationFrameIndex = 0; diff --git a/libs/input/MouseCursorController.h b/libs/input/MouseCursorController.h index c0ab58bd2e7e..208d33d7c717 100644 --- a/libs/input/MouseCursorController.h +++ b/libs/input/MouseCursorController.h @@ -54,7 +54,7 @@ public: void unfade(PointerControllerInterface::Transition transition); void setDisplayViewport(const DisplayViewport& viewport, bool getAdditionalMouseResources); - void updatePointerIcon(int32_t iconId); + void updatePointerIcon(PointerIconStyle iconId); void setCustomPointerIcon(const SpriteIcon& icon); void reloadPointerResources(bool getAdditionalMouseResources); @@ -88,10 +88,10 @@ private: bool resourcesLoaded; - std::map<int32_t, SpriteIcon> additionalMouseResources; - std::map<int32_t, PointerAnimation> animationResources; + std::map<PointerIconStyle, SpriteIcon> additionalMouseResources; + std::map<PointerIconStyle, PointerAnimation> animationResources; - int32_t requestedPointerType; + PointerIconStyle requestedPointerType; int32_t buttonState; diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp index 10ea6512c724..54f893e165f7 100644 --- a/libs/input/PointerController.cpp +++ b/libs/input/PointerController.cpp @@ -264,7 +264,7 @@ void PointerController::setDisplayViewport(const DisplayViewport& viewport) { } } -void PointerController::updatePointerIcon(int32_t iconId) { +void PointerController::updatePointerIcon(PointerIconStyle iconId) { std::scoped_lock lock(getLock()); mCursorController.updatePointerIcon(iconId); } diff --git a/libs/input/PointerController.h b/libs/input/PointerController.h index eab030f71e1a..33480e8fa194 100644 --- a/libs/input/PointerController.h +++ b/libs/input/PointerController.h @@ -65,7 +65,7 @@ public: BitSet32 spotIdBits, int32_t displayId); virtual void clearSpots(); - void updatePointerIcon(int32_t iconId); + void updatePointerIcon(PointerIconStyle iconId); void setCustomPointerIcon(const SpriteIcon& icon); void setInactivityTimeout(InactivityTimeout inactivityTimeout); void doInactivityTimeout(); diff --git a/libs/input/PointerControllerContext.h b/libs/input/PointerControllerContext.h index c2bc1e020279..1797428b343f 100644 --- a/libs/input/PointerControllerContext.h +++ b/libs/input/PointerControllerContext.h @@ -75,10 +75,11 @@ public: virtual void loadPointerIcon(SpriteIcon* icon, int32_t displayId) = 0; virtual void loadPointerResources(PointerResources* outResources, int32_t displayId) = 0; virtual void loadAdditionalMouseResources( - std::map<int32_t, SpriteIcon>* outResources, - std::map<int32_t, PointerAnimation>* outAnimationResources, int32_t displayId) = 0; - virtual int32_t getDefaultPointerIconId() = 0; - virtual int32_t getCustomPointerIconId() = 0; + std::map<PointerIconStyle, SpriteIcon>* outResources, + std::map<PointerIconStyle, PointerAnimation>* outAnimationResources, + int32_t displayId) = 0; + virtual PointerIconStyle getDefaultPointerIconId() = 0; + virtual PointerIconStyle getCustomPointerIconId() = 0; virtual void onPointerDisplayIdChanged(int32_t displayId, float xPos, float yPos) = 0; }; diff --git a/libs/input/SpriteController.cpp b/libs/input/SpriteController.cpp index a5ca49847bb6..cab3f8414d7b 100644 --- a/libs/input/SpriteController.cpp +++ b/libs/input/SpriteController.cpp @@ -242,7 +242,7 @@ void SpriteController::doUpdateSprites() { && (becomingVisible || (update.state.dirty & (DIRTY_HOTSPOT | DIRTY_ICON_STYLE)))) { Parcel p; - p.writeInt32(update.state.icon.style); + p.writeInt32(static_cast<int32_t>(update.state.icon.style)); p.writeFloat(update.state.icon.hotSpotX); p.writeFloat(update.state.icon.hotSpotY); diff --git a/libs/input/SpriteIcon.h b/libs/input/SpriteIcon.h index a257d7e89ebc..5f085bbd2374 100644 --- a/libs/input/SpriteIcon.h +++ b/libs/input/SpriteIcon.h @@ -19,6 +19,7 @@ #include <android/graphics/bitmap.h> #include <gui/Surface.h> +#include <input/Input.h> namespace android { @@ -26,12 +27,13 @@ namespace android { * Icon that a sprite displays, including its hotspot. */ struct SpriteIcon { - inline SpriteIcon() : style(0), hotSpotX(0), hotSpotY(0) {} - inline SpriteIcon(const graphics::Bitmap& bitmap, int32_t style, float hotSpotX, float hotSpotY) + inline SpriteIcon() : style(PointerIconStyle::TYPE_NULL), hotSpotX(0), hotSpotY(0) {} + inline SpriteIcon(const graphics::Bitmap& bitmap, PointerIconStyle style, float hotSpotX, + float hotSpotY) : bitmap(bitmap), style(style), hotSpotX(hotSpotX), hotSpotY(hotSpotY) {} graphics::Bitmap bitmap; - int32_t style; + PointerIconStyle style; float hotSpotX; float hotSpotY; @@ -41,7 +43,7 @@ struct SpriteIcon { inline void reset() { bitmap.reset(); - style = 0; + style = PointerIconStyle::TYPE_NULL; hotSpotX = 0; hotSpotY = 0; } diff --git a/libs/input/tests/PointerController_test.cpp b/libs/input/tests/PointerController_test.cpp index f9752ed155df..a6a4115476df 100644 --- a/libs/input/tests/PointerController_test.cpp +++ b/libs/input/tests/PointerController_test.cpp @@ -14,17 +14,18 @@ * limitations under the License. */ -#include "mocks/MockSprite.h" -#include "mocks/MockSpriteController.h" - +#include <gmock/gmock.h> +#include <gtest/gtest.h> #include <input/PointerController.h> #include <input/SpriteController.h> #include <atomic> -#include <gmock/gmock.h> -#include <gtest/gtest.h> #include <thread> +#include "input/Input.h" +#include "mocks/MockSprite.h" +#include "mocks/MockSpriteController.h" + namespace android { enum TestCursorType { @@ -39,7 +40,6 @@ enum TestCursorType { using ::testing::AllOf; using ::testing::Field; -using ::testing::Mock; using ::testing::NiceMock; using ::testing::Return; using ::testing::Test; @@ -52,10 +52,12 @@ class MockPointerControllerPolicyInterface : public PointerControllerPolicyInter public: virtual void loadPointerIcon(SpriteIcon* icon, int32_t displayId) override; virtual void loadPointerResources(PointerResources* outResources, int32_t displayId) override; - virtual void loadAdditionalMouseResources(std::map<int32_t, SpriteIcon>* outResources, - std::map<int32_t, PointerAnimation>* outAnimationResources, int32_t displayId) override; - virtual int32_t getDefaultPointerIconId() override; - virtual int32_t getCustomPointerIconId() override; + virtual void loadAdditionalMouseResources( + std::map<PointerIconStyle, SpriteIcon>* outResources, + std::map<PointerIconStyle, PointerAnimation>* outAnimationResources, + int32_t displayId) override; + virtual PointerIconStyle getDefaultPointerIconId() override; + virtual PointerIconStyle getCustomPointerIconId() override; virtual void onPointerDisplayIdChanged(int32_t displayId, float xPos, float yPos) override; bool allResourcesAreLoaded(); @@ -85,34 +87,33 @@ void MockPointerControllerPolicyInterface::loadPointerResources(PointerResources } void MockPointerControllerPolicyInterface::loadAdditionalMouseResources( - std::map<int32_t, SpriteIcon>* outResources, - std::map<int32_t, PointerAnimation>* outAnimationResources, - int32_t) { + std::map<PointerIconStyle, SpriteIcon>* outResources, + std::map<PointerIconStyle, PointerAnimation>* outAnimationResources, int32_t) { SpriteIcon icon; PointerAnimation anim; // CURSOR_TYPE_ADDITIONAL doesn't have animation resource. int32_t cursorType = CURSOR_TYPE_ADDITIONAL; loadPointerIconForType(&icon, cursorType); - (*outResources)[cursorType] = icon; + (*outResources)[static_cast<PointerIconStyle>(cursorType)] = icon; // CURSOR_TYPE_ADDITIONAL_ANIM has animation resource. cursorType = CURSOR_TYPE_ADDITIONAL_ANIM; loadPointerIconForType(&icon, cursorType); anim.animationFrames.push_back(icon); anim.durationPerFrame = 10; - (*outResources)[cursorType] = icon; - (*outAnimationResources)[cursorType] = anim; + (*outResources)[static_cast<PointerIconStyle>(cursorType)] = icon; + (*outAnimationResources)[static_cast<PointerIconStyle>(cursorType)] = anim; additionalMouseResourcesLoaded = true; } -int32_t MockPointerControllerPolicyInterface::getDefaultPointerIconId() { - return CURSOR_TYPE_DEFAULT; +PointerIconStyle MockPointerControllerPolicyInterface::getDefaultPointerIconId() { + return static_cast<PointerIconStyle>(CURSOR_TYPE_DEFAULT); } -int32_t MockPointerControllerPolicyInterface::getCustomPointerIconId() { - return CURSOR_TYPE_CUSTOM; +PointerIconStyle MockPointerControllerPolicyInterface::getCustomPointerIconId() { + return static_cast<PointerIconStyle>(CURSOR_TYPE_CUSTOM); } bool MockPointerControllerPolicyInterface::allResourcesAreLoaded() { @@ -124,7 +125,7 @@ bool MockPointerControllerPolicyInterface::noResourcesAreLoaded() { } void MockPointerControllerPolicyInterface::loadPointerIconForType(SpriteIcon* icon, int32_t type) { - icon->style = type; + icon->style = static_cast<PointerIconStyle>(type); std::pair<float, float> hotSpot = getHotSpotCoordinatesForType(type); icon->hotSpotX = hotSpot.first; icon->hotSpotY = hotSpot.second; @@ -205,11 +206,11 @@ TEST_F(PointerControllerTest, useDefaultCursorTypeByDefault) { std::pair<float, float> hotspot = getHotSpotCoordinatesForType(CURSOR_TYPE_DEFAULT); EXPECT_CALL(*mPointerSprite, setVisible(true)); EXPECT_CALL(*mPointerSprite, setAlpha(1.0f)); - EXPECT_CALL(*mPointerSprite, setIcon( - AllOf( - Field(&SpriteIcon::style, CURSOR_TYPE_DEFAULT), - Field(&SpriteIcon::hotSpotX, hotspot.first), - Field(&SpriteIcon::hotSpotY, hotspot.second)))); + EXPECT_CALL(*mPointerSprite, + setIcon(AllOf(Field(&SpriteIcon::style, + static_cast<PointerIconStyle>(CURSOR_TYPE_DEFAULT)), + Field(&SpriteIcon::hotSpotX, hotspot.first), + Field(&SpriteIcon::hotSpotY, hotspot.second)))); mPointerController->reloadPointerResources(); } @@ -222,12 +223,11 @@ TEST_F(PointerControllerTest, updatePointerIcon) { std::pair<float, float> hotspot = getHotSpotCoordinatesForType(type); EXPECT_CALL(*mPointerSprite, setVisible(true)); EXPECT_CALL(*mPointerSprite, setAlpha(1.0f)); - EXPECT_CALL(*mPointerSprite, setIcon( - AllOf( - Field(&SpriteIcon::style, type), - Field(&SpriteIcon::hotSpotX, hotspot.first), - Field(&SpriteIcon::hotSpotY, hotspot.second)))); - mPointerController->updatePointerIcon(type); + EXPECT_CALL(*mPointerSprite, + setIcon(AllOf(Field(&SpriteIcon::style, static_cast<PointerIconStyle>(type)), + Field(&SpriteIcon::hotSpotX, hotspot.first), + Field(&SpriteIcon::hotSpotY, hotspot.second)))); + mPointerController->updatePointerIcon(static_cast<PointerIconStyle>(type)); } TEST_F(PointerControllerTest, setCustomPointerIcon) { @@ -239,17 +239,16 @@ TEST_F(PointerControllerTest, setCustomPointerIcon) { float hotSpotY = 20; SpriteIcon icon; - icon.style = style; + icon.style = static_cast<PointerIconStyle>(style); icon.hotSpotX = hotSpotX; icon.hotSpotY = hotSpotY; EXPECT_CALL(*mPointerSprite, setVisible(true)); EXPECT_CALL(*mPointerSprite, setAlpha(1.0f)); - EXPECT_CALL(*mPointerSprite, setIcon( - AllOf( - Field(&SpriteIcon::style, style), - Field(&SpriteIcon::hotSpotX, hotSpotX), - Field(&SpriteIcon::hotSpotY, hotSpotY)))); + EXPECT_CALL(*mPointerSprite, + setIcon(AllOf(Field(&SpriteIcon::style, static_cast<PointerIconStyle>(style)), + Field(&SpriteIcon::hotSpotX, hotSpotX), + Field(&SpriteIcon::hotSpotY, hotSpotY)))); mPointerController->setCustomPointerIcon(icon); } diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index a5653d6084ea..c018d96407fe 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -224,8 +224,10 @@ static inline const char* toString(bool value) { return value ? "true" : "false"; } -static void loadSystemIconAsSpriteWithPointerIcon(JNIEnv* env, jobject contextObj, int32_t style, - PointerIcon* outPointerIcon, SpriteIcon* outSpriteIcon) { +static void loadSystemIconAsSpriteWithPointerIcon(JNIEnv* env, jobject contextObj, + PointerIconStyle style, + PointerIcon* outPointerIcon, + SpriteIcon* outSpriteIcon) { status_t status = android_view_PointerIcon_loadSystemIcon(env, contextObj, style, outPointerIcon); if (!status) { @@ -236,7 +238,7 @@ static void loadSystemIconAsSpriteWithPointerIcon(JNIEnv* env, jobject contextOb } } -static void loadSystemIconAsSprite(JNIEnv* env, jobject contextObj, int32_t style, +static void loadSystemIconAsSprite(JNIEnv* env, jobject contextObj, PointerIconStyle style, SpriteIcon* outSpriteIcon) { PointerIcon pointerIcon; loadSystemIconAsSpriteWithPointerIcon(env, contextObj, style, &pointerIcon, outSpriteIcon); @@ -290,7 +292,7 @@ public: void setShowTouches(bool enabled); void setInteractive(bool interactive); void reloadCalibration(); - void setPointerIconType(int32_t iconId); + void setPointerIconType(PointerIconStyle iconId); void reloadPointerIcons(); void requestPointerCapture(const sp<IBinder>& windowToken, bool enabled); void setCustomPointerIcon(const SpriteIcon& icon); @@ -346,10 +348,11 @@ public: virtual void loadPointerIcon(SpriteIcon* icon, int32_t displayId); virtual void loadPointerResources(PointerResources* outResources, int32_t displayId); - virtual void loadAdditionalMouseResources(std::map<int32_t, SpriteIcon>* outResources, - std::map<int32_t, PointerAnimation>* outAnimationResources, int32_t displayId); - virtual int32_t getDefaultPointerIconId(); - virtual int32_t getCustomPointerIconId(); + virtual void loadAdditionalMouseResources( + std::map<PointerIconStyle, SpriteIcon>* outResources, + std::map<PointerIconStyle, PointerAnimation>* outAnimationResources, int32_t displayId); + virtual PointerIconStyle getDefaultPointerIconId(); + virtual PointerIconStyle getCustomPointerIconId(); virtual void onPointerDisplayIdChanged(int32_t displayId, float xPos, float yPos); private: @@ -1113,7 +1116,7 @@ void NativeInputManager::reloadCalibration() { InputReaderConfiguration::CHANGE_TOUCH_AFFINE_TRANSFORMATION); } -void NativeInputManager::setPointerIconType(int32_t iconId) { +void NativeInputManager::setPointerIconType(PointerIconStyle iconId) { AutoMutex _l(mLock); std::shared_ptr<PointerController> controller = mLocked.pointerController.lock(); if (controller != nullptr) { @@ -1430,29 +1433,31 @@ void NativeInputManager::loadPointerResources(PointerResources* outResources, in ScopedLocalRef<jobject> displayContext(env, env->CallObjectMethod( mServiceObj, gServiceClassInfo.getContextForDisplay, displayId)); - loadSystemIconAsSprite(env, displayContext.get(), POINTER_ICON_STYLE_SPOT_HOVER, - &outResources->spotHover); - loadSystemIconAsSprite(env, displayContext.get(), POINTER_ICON_STYLE_SPOT_TOUCH, - &outResources->spotTouch); - loadSystemIconAsSprite(env, displayContext.get(), POINTER_ICON_STYLE_SPOT_ANCHOR, - &outResources->spotAnchor); + loadSystemIconAsSprite(env, displayContext.get(), PointerIconStyle::TYPE_SPOT_HOVER, + &outResources->spotHover); + loadSystemIconAsSprite(env, displayContext.get(), PointerIconStyle::TYPE_SPOT_TOUCH, + &outResources->spotTouch); + loadSystemIconAsSprite(env, displayContext.get(), PointerIconStyle::TYPE_SPOT_ANCHOR, + &outResources->spotAnchor); } -void NativeInputManager::loadAdditionalMouseResources(std::map<int32_t, SpriteIcon>* outResources, - std::map<int32_t, PointerAnimation>* outAnimationResources, int32_t displayId) { +void NativeInputManager::loadAdditionalMouseResources( + std::map<PointerIconStyle, SpriteIcon>* outResources, + std::map<PointerIconStyle, PointerAnimation>* outAnimationResources, int32_t displayId) { ATRACE_CALL(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> displayContext(env, env->CallObjectMethod( mServiceObj, gServiceClassInfo.getContextForDisplay, displayId)); - for (int iconId = POINTER_ICON_STYLE_CONTEXT_MENU; iconId <= POINTER_ICON_STYLE_GRABBING; - ++iconId) { + for (int32_t iconId = static_cast<int32_t>(PointerIconStyle::TYPE_CONTEXT_MENU); + iconId <= static_cast<int32_t>(PointerIconStyle::TYPE_GRABBING); ++iconId) { + const PointerIconStyle pointerIconStyle = static_cast<PointerIconStyle>(iconId); PointerIcon pointerIcon; - loadSystemIconAsSpriteWithPointerIcon( - env, displayContext.get(), iconId, &pointerIcon, &((*outResources)[iconId])); + loadSystemIconAsSpriteWithPointerIcon(env, displayContext.get(), pointerIconStyle, + &pointerIcon, &((*outResources)[pointerIconStyle])); if (!pointerIcon.bitmapFrames.empty()) { - PointerAnimation& animationData = (*outAnimationResources)[iconId]; + PointerAnimation& animationData = (*outAnimationResources)[pointerIconStyle]; size_t numFrames = pointerIcon.bitmapFrames.size() + 1; animationData.durationPerFrame = milliseconds_to_nanoseconds(pointerIcon.durationPerFrame); @@ -1467,16 +1472,16 @@ void NativeInputManager::loadAdditionalMouseResources(std::map<int32_t, SpriteIc } } } - loadSystemIconAsSprite(env, displayContext.get(), POINTER_ICON_STYLE_NULL, - &((*outResources)[POINTER_ICON_STYLE_NULL])); + loadSystemIconAsSprite(env, displayContext.get(), PointerIconStyle::TYPE_NULL, + &((*outResources)[PointerIconStyle::TYPE_NULL])); } -int32_t NativeInputManager::getDefaultPointerIconId() { - return POINTER_ICON_STYLE_ARROW; +PointerIconStyle NativeInputManager::getDefaultPointerIconId() { + return PointerIconStyle::TYPE_ARROW; } -int32_t NativeInputManager::getCustomPointerIconId() { - return POINTER_ICON_STYLE_CUSTOM; +PointerIconStyle NativeInputManager::getCustomPointerIconId() { + return PointerIconStyle::TYPE_CUSTOM; } void NativeInputManager::setMotionClassifierEnabled(bool enabled) { @@ -2133,9 +2138,13 @@ static void nativeDisableInputDevice(JNIEnv* env, jobject nativeImplObj, jint de } static void nativeSetPointerIconType(JNIEnv* env, jobject nativeImplObj, jint iconId) { + // iconId is set in java from from frameworks/base/core/java/android/view/PointerIcon.java, + // where the definition in <input/Input.h> is duplicated as a sealed class (type safe enum + // equivalent in Java). + NativeInputManager* im = getNativeInputManager(env, nativeImplObj); - im->setPointerIconType(iconId); + im->setPointerIconType(static_cast<PointerIconStyle>(iconId)); } static void nativeReloadPointerIcons(JNIEnv* env, jobject nativeImplObj) { |