# c45v3/unfloat architecture

> Architecture diagram of the GitHub repository c45v3/unfloat, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/c45v3/unfloat
- Repository: https://github.com/c45v3/unfloat

## Overview

UnFloat is an LSPosed module that targets supported cloud-game apps to hide floating controls and loading masks without disrupting their view trees or touch behavior. On package load, it locates host-specific creation points (using cached DexKit results or scanning), then installs precise hooks; view capture and resource/class matching select what to make persistently transparent. A temporary addView fallback handles missed or deferred creations. The README lists supported games; excerpts do not show the full package dispatch or manifest configuration, so those connections are omitted.

Main entry points: [`app/src/main/java/io/c4/UnFloat/HookEntry.kt`](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt) (Package hook entry), [`app/src/main/java/io/c4/UnFloat/Locator.kt`](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt) (Host locator), [`app/src/main/java/io/c4/UnFloat/Util.kt`](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt) (View matching)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_init["Package initialization"]
  node_hookentry["Package hook entry<br/>[HookEntry.kt]"]
end

subgraph group_locate["Host discovery"]
  node_locator["Host locator<br/>[Locator.kt]"]
  node_cache[("Location cache<br/>[Locator.kt]")]
  node_dexkit["DexKit scanner<br/>[Locator.kt]"]
end

subgraph group_hooks["Hooking and hiding"]
  node_creator["Float creator hooks<br/>[HookEntry.kt]"]
  node_capture["View capture<br/>[HookEntry.kt]"]
  node_fallback["AddView fallback<br/>[HookEntry.kt]"]
  node_mask["Loading mask hooks<br/>[HookEntry.kt]"]
end

subgraph group_support["View utilities"]
  node_match["View matching<br/>[Util.kt]"]
  node_alpha["Persistent transparency<br/>[Util.kt]"]
  node_log["Hook logging<br/>[Util.kt]"]
end

node_host(("Cloud-game host"))
node_xposed{{"LSPosed runtime"}}
node_dexlib{{"DexKit library"}}
node_androidviews{{"Android view system"}}
node_result["Hidden controls and masks"]

node_xposed -->|"loads package hook"| node_hookentry
node_hookentry -->|"requests host locations"| node_locator
node_locator -->|"reads or writes"| node_cache
node_locator -->|"scans on cache miss"| node_dexkit
node_dexkit -->|"queries host bytecode"| node_dexlib
node_locator -->|"returns locations"| node_hookentry
node_hookentry -->|"installs creator hooks"| node_creator
node_hookentry -->|"installs mask hooks"| node_mask
node_creator -->|"temporarily captures views"| node_capture
node_capture -->|"observes addView"| node_androidviews
node_capture -->|"selects float targets"| node_match
node_match -->|"pins transparent"| node_alpha
node_creator -->|"arms when unmatched"| node_fallback
node_fallback -->|"hooks addView"| node_androidviews
node_fallback -->|"checks added views"| node_match
node_mask -->|"fades mask views"| node_alpha
node_mask -->|"hooks binding constructors"| node_androidviews
node_alpha -->|"hides visually"| node_result
node_hookentry -->|"hooks supported apps"| node_host

click node_hookentry "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt"
click node_locator "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt"
click node_cache "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt"
click node_dexkit "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt"
click node_creator "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt"
click node_capture "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt"
click node_fallback "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt"
click node_mask "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt"
click node_match "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt"
click node_alpha "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt"
click node_log "https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_hookentry,node_androidviews toneBlue
class node_locator,node_cache,node_dexkit toneAmber
class node_creator,node_capture,node_fallback,node_mask toneMint
class node_match,node_alpha,node_log toneRose
class node_host,node_xposed,node_dexlib,node_result toneIndigo
```

## Components

### Package initialization

- [Package hook entry](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt): `app/src/main/java/io/c4/UnFloat/HookEntry.kt`

### Host discovery

- [Host locator](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt): `app/src/main/java/io/c4/UnFloat/Locator.kt`
- [Location cache](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt): `app/src/main/java/io/c4/UnFloat/Locator.kt`
- [DexKit scanner](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Locator.kt): `app/src/main/java/io/c4/UnFloat/Locator.kt`

### Hooking and hiding

- [Float creator hooks](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt): `app/src/main/java/io/c4/UnFloat/HookEntry.kt`
- [View capture](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt): `app/src/main/java/io/c4/UnFloat/HookEntry.kt`
- [AddView fallback](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt): `app/src/main/java/io/c4/UnFloat/HookEntry.kt`
- [Loading mask hooks](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/HookEntry.kt): `app/src/main/java/io/c4/UnFloat/HookEntry.kt`

### View utilities

- [View matching](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt): `app/src/main/java/io/c4/UnFloat/Util.kt`
- [Persistent transparency](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt): `app/src/main/java/io/c4/UnFloat/Util.kt`
- [Hook logging](https://github.com/c45v3/unfloat/blob/main/app/src/main/java/io/c4/UnFloat/Util.kt): `app/src/main/java/io/c4/UnFloat/Util.kt`

### Other components

- **Cloud-game host**
- **LSPosed runtime**
- **DexKit library**
- **Android view system**
- **Hidden controls and masks**

## Connections

- LSPosed runtime → Package hook entry: loads package hook
- Package hook entry → Host locator: requests host locations
- Host locator → Location cache: reads or writes
- Host locator → DexKit scanner: scans on cache miss
- DexKit scanner → DexKit library: queries host bytecode
- Host locator → Package hook entry: returns locations
- Package hook entry → Float creator hooks: installs creator hooks
- Package hook entry → Loading mask hooks: installs mask hooks
- Float creator hooks → View capture: temporarily captures views
- View capture → Android view system: observes addView
- View capture → View matching: selects float targets
- View matching → Persistent transparency: pins transparent
- Float creator hooks → AddView fallback: arms when unmatched
- AddView fallback → Android view system: hooks addView
- AddView fallback → View matching: checks added views
- Loading mask hooks → Persistent transparency: fades mask views
- Loading mask hooks → Android view system: hooks binding constructors
- Persistent transparency → Hidden controls and masks: hides visually
- Package hook entry → Cloud-game host: hooks supported apps
