Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit 80727587 authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

Pointer Icon Refactor: Load resources for system icons before drawing

In this refactor, we ensure that we load the resource for system icon
types (as opposed to custom icons that use TYPE_CUSTOM) once in the
system before drawing the icon, instead of resolving the resource in the
app using the app context.

The main reason for this refactor is to simplify the pipeline by
eliminating the unnecessary step of resolving the system icon resource
using the app context. The app-resolved resource IDs are already being
ignored, because the native code only caches the icon by type and not
the resource IDs. This refactor only makes that behavior explicit in the
code, so there should be no behavior changes.

Notable changes:
- Do not resolve the resource IDs of system icons in
  PointerIcon#getSystemIcon().
- There is no need to register a display listener in PointerIcon.
- When parceling a system icon, only send the type.
- Get the loaded system icon in native code directly from the java
  InputManagerService, instead of loading it using native code.
- Cache loaded icons in the java IMS so that bitmaps don't need to be
  copied when used by multiple pointer controllers.

To recap, the Java PointerIcon object can be in one of three states:
1. Custom icon: The PointerIcon holds a custom bitmap provided by the
   app to use as the cursor icon.
2. System icon (Unloaded): The PointerIcon object refers to specific
   system icon differentiated by the TYPE_* constants. The bitmap of the
   system icon is not yet loaded in this state.
3. System icon (Loaded): The PointerIcon object refers to a specific
   system icon, and it holds the bitmap for that icon, which has been
   loaded into memory.

Apps only have the ability to create icons in states 1 and 2, since
they don't need to load the system icon bitmaps that are drawn by the
system.

Bug: 293587049
Test: manual
Change-Id: I6f79ca0611019501e0ca02c0edfa16d39578e927
parent e8c4c3b0
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment