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
diff --git a/core/jni/android_view_PointerIcon.cpp b/core/jni/android_view_PointerIcon.cpp
index 2083251..d57ec15 100644
--- a/core/jni/android_view_PointerIcon.cpp
+++ b/core/jni/android_view_PointerIcon.cpp
@@ -44,7 +44,8 @@
 
 // --- 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 @@
     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_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 @@
     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 a87db1df..f3eaad3 100644
--- a/core/jni/android_view_PointerIcon.h
+++ b/core/jni/android_view_PointerIcon.h
@@ -33,17 +33,17 @@
 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 @@
 
 /* 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 @@
 /* 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 956101e..0e7b7ff 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 @@
     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::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::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 @@
         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 c0ab58b..208d33d 100644
--- a/libs/input/MouseCursorController.h
+++ b/libs/input/MouseCursorController.h
@@ -54,7 +54,7 @@
     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 @@
 
         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 10ea651..54f893e 100644
--- a/libs/input/PointerController.cpp
+++ b/libs/input/PointerController.cpp
@@ -264,7 +264,7 @@
     }
 }
 
-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 eab030f..33480e8 100644
--- a/libs/input/PointerController.h
+++ b/libs/input/PointerController.h
@@ -65,7 +65,7 @@
                           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 c2bc1e0..1797428 100644
--- a/libs/input/PointerControllerContext.h
+++ b/libs/input/PointerControllerContext.h
@@ -75,10 +75,11 @@
     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 a5ca498..cab3f84 100644
--- a/libs/input/SpriteController.cpp
+++ b/libs/input/SpriteController.cpp
@@ -242,7 +242,7 @@
                     && (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 a257d7e..5f085bb 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 @@
  * 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 @@
 
     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 f9752ed..a6a4115 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 @@
 
 using ::testing::AllOf;
 using ::testing::Field;
-using ::testing::Mock;
 using ::testing::NiceMock;
 using ::testing::Return;
 using ::testing::Test;
@@ -52,10 +52,12 @@
 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::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 @@
 }
 
 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 @@
     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 @@
     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 @@
     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 a5653d6..c018d96 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 @@
     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 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 @@
     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 @@
 
     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 @@
             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 @@
     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 @@
             }
         }
     }
-    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 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) {