Pointer icon refactor for mouse (base)

When PointerChoreographer is enabled, CursorInputMapper no longer
depends on the legacy PointerController. PointerChoreographer is
responsible for accumulating movements, fading/unfading pointers,
and deciding display/coordinates.

Test: atest libinputservice_test
Bug: 293587049

Change-Id: Ie35b385a99623bbcb2e47b394b7cf2c0f7c5bc0e
diff --git a/libs/input/PointerController.h b/libs/input/PointerController.h
index aa7ca3c..08e19a0 100644
--- a/libs/input/PointerController.h
+++ b/libs/input/PointerController.h
@@ -47,7 +47,8 @@
 public:
     static std::shared_ptr<PointerController> create(
             const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
-            SpriteController& spriteController, bool enabled);
+            SpriteController& spriteController, bool enabled,
+            ControllerType type = ControllerType::LEGACY);
 
     ~PointerController() override;
 
@@ -75,7 +76,7 @@
     void onDisplayInfosChangedLocked(const std::vector<gui::DisplayInfo>& displayInfos)
             REQUIRES(getLock());
 
-    std::string dump();
+    std::string dump() override;
 
 protected:
     using WindowListenerConsumer =
@@ -87,10 +88,10 @@
                       WindowListenerConsumer registerListener,
                       WindowListenerConsumer unregisterListener);
 
-private:
     PointerController(const sp<PointerControllerPolicyInterface>& policy, const sp<Looper>& looper,
                       SpriteController& spriteController, bool enabled);
 
+private:
     friend PointerControllerContext::LooperCallback;
     friend PointerControllerContext::MessageHandler;
 
@@ -135,6 +136,24 @@
     void clearSpotsLocked() REQUIRES(getLock());
 };
 
+class MousePointerController : public PointerController {
+public:
+    /** A version of PointerController that controls one mouse pointer. */
+    MousePointerController(const sp<PointerControllerPolicyInterface>& policy,
+                           const sp<Looper>& looper, SpriteController& spriteController,
+                           bool enabled);
+
+    void setPresentation(Presentation) override {
+        LOG_ALWAYS_FATAL("Should not be called");
+    }
+    void setSpots(const PointerCoords*, const uint32_t*, BitSet32, int32_t) override {
+        LOG_ALWAYS_FATAL("Should not be called");
+    }
+    void clearSpots() override {
+        LOG_ALWAYS_FATAL("Should not be called");
+    }
+};
+
 } // namespace android
 
 #endif // _UI_POINTER_CONTROLLER_H