# gsjsjzhznsz/mobileglues-plugin architecture

> Architecture diagram of the GitHub repository gsjsjzhznsz/mobileglues-plugin, 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/gsjsjzhznsz/mobileglues-plugin
- Repository: https://github.com/gsjsjzhznsz/mobileglues-plugin

## Overview

MobileGlues-plugin is an Android companion app for configuring and inspecting the MobileGlues renderer. Users enter through the app UI, grant access to the renderer’s MG directory, then manage settings or request renderer information and multidraw benchmarks; benchmark results can be reviewed and adopted. The architecture separates UI orchestration, authorization and configuration, and isolated renderer queries. The README provides little product detail, so major capabilities are inferred from the source tree and sampled excerpts; unsampled wiring is omitted where uncertain.

Main entry points: [`app/src/main/java/com/fcl/plugin/mobileglues/ui/AppController.kt`](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/ui/AppController.kt) (App controller), [`app/src/main/java/com/fcl/plugin/mobileglues/MainActivity.kt`](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MainActivity.kt) (Activity shell), [`app/src/main/java/com/fcl/plugin/mobileglues/settings/AuthController.kt`](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/AuthController.kt) (Authorization), [`app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigStore.kt`](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigStore.kt) (Renderer configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["App interface"]
  node_activity["Activity shell<br/>[MainActivity.kt]"]
  node_controller["App controller<br/>[AppController.kt]"]
  node_skins["Compose screens"]
end

subgraph group_settings["Access and settings"]
  node_application["Application state<br/>[MGApplication.kt]"]
  node_auth["Authorization<br/>[AuthController.kt]"]
  node_pluginconfig[("Plugin preferences")]
  node_mgstorage["MG directory access<br/>[MgStorage.kt]"]
  node_configstore["Renderer configuration<br/>[MGConfigStore.kt]"]
  node_configcodec["Config encoding<br/>[MGConfigCodec.kt]"]
  node_cacheexport["Cache export<br/>[MGCacheExporter.kt]"]
end

subgraph group_queries["Renderer queries"]
  node_queryclient["Query client<br/>[MgQuery.kt]"]
  node_queryservice["Isolated query service<br/>[MgQueryService.kt]"]
  node_bench["Multidraw benchmark<br/>[MGBench.kt]"]
  node_info["Renderer information<br/>[MGInfoGetter.kt]"]
  node_deviceinfo["Device information<br/>[DeviceInfo.kt]"]
end

subgraph group_native["Renderer integration"]
  node_nativeinfo["Native GL probe"]
end

node_user(("User"))
node_renderer["MobileGlues renderer"]
node_graphics["Android graphics driver"]

node_user -->|"opens"| node_activity
node_activity -->|"creates"| node_controller
node_activity -->|"renders"| node_skins
node_skins -->|"dispatches actions"| node_controller
node_controller -->|"checks access"| node_auth
node_auth -->|"reads choice"| node_pluginconfig
node_auth -->|"selects access"| node_mgstorage
node_controller -->|"updates settings"| node_configstore
node_configstore -->|"persists config"| node_mgstorage
node_configstore -->|"encodes config"| node_configcodec
node_controller -->|"exports cache"| node_cacheexport
node_controller -->|"requests query"| node_queryclient
node_queryclient -->|"binds service"| node_queryservice
node_queryservice -->|"runs benchmark"| node_bench
node_queryservice -->|"requests info"| node_info
node_info -->|"probes graphics"| node_nativeinfo
node_nativeinfo -->|"loads renderer"| node_renderer
node_nativeinfo -->|"queries EGL and GL"| node_graphics
node_bench -->|"runs benchmark"| node_renderer
node_controller -->|"loads device details"| node_deviceinfo

click node_activity "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MainActivity.kt"
click node_controller "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/ui/AppController.kt"
click node_skins "https://github.com/gsjsjzhznsz/mobileglues-plugin/tree/main/app/src/main/java/com/fcl/plugin/mobileglues/ui"
click node_application "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MGApplication.kt"
click node_auth "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/AuthController.kt"
click node_pluginconfig "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/PluginConfigStore.kt"
click node_mgstorage "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MgStorage.kt"
click node_configstore "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigStore.kt"
click node_configcodec "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigCodec.kt"
click node_cacheexport "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGCacheExporter.kt"
click node_queryclient "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MgQuery.kt"
click node_queryservice "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MgQueryService.kt"
click node_bench "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MGBench.kt"
click node_info "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MGInfoGetter.kt"
click node_nativeinfo "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/cpp/mobileglues_info_getter.cpp"
click node_deviceinfo "https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/DeviceInfo.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_activity,node_controller,node_skins,node_user toneBlue
class node_application,node_auth,node_pluginconfig,node_mgstorage,node_configstore,node_configcodec,node_cacheexport toneAmber
class node_queryclient,node_queryservice,node_bench,node_info,node_deviceinfo toneMint
class node_nativeinfo toneRose
class node_renderer,node_graphics toneIndigo
```

## Components

### App interface

- [Activity shell](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MainActivity.kt): `app/src/main/java/com/fcl/plugin/mobileglues/MainActivity.kt`
- [App controller](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/ui/AppController.kt): `app/src/main/java/com/fcl/plugin/mobileglues/ui/AppController.kt`
- [Compose screens](https://github.com/gsjsjzhznsz/mobileglues-plugin/tree/main/app/src/main/java/com/fcl/plugin/mobileglues/ui): `app/src/main/java/com/fcl/plugin/mobileglues/ui`

### Access and settings

- [Application state](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MGApplication.kt): `app/src/main/java/com/fcl/plugin/mobileglues/MGApplication.kt`
- [Authorization](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/AuthController.kt): `app/src/main/java/com/fcl/plugin/mobileglues/settings/AuthController.kt`
- [Plugin preferences](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/PluginConfigStore.kt): `app/src/main/java/com/fcl/plugin/mobileglues/settings/PluginConfigStore.kt`
- [MG directory access](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MgStorage.kt): `app/src/main/java/com/fcl/plugin/mobileglues/settings/MgStorage.kt`
- [Renderer configuration](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigStore.kt): `app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigStore.kt`
- [Config encoding](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigCodec.kt): `app/src/main/java/com/fcl/plugin/mobileglues/settings/MGConfigCodec.kt`
- [Cache export](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/settings/MGCacheExporter.kt): `app/src/main/java/com/fcl/plugin/mobileglues/settings/MGCacheExporter.kt`

### Renderer queries

- [Query client](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MgQuery.kt): `app/src/main/java/com/fcl/plugin/mobileglues/MgQuery.kt`
- [Isolated query service](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MgQueryService.kt): `app/src/main/java/com/fcl/plugin/mobileglues/MgQueryService.kt`
- [Multidraw benchmark](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MGBench.kt): `app/src/main/java/com/fcl/plugin/mobileglues/MGBench.kt`
- [Renderer information](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/MGInfoGetter.kt): `app/src/main/java/com/fcl/plugin/mobileglues/MGInfoGetter.kt`
- [Device information](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/java/com/fcl/plugin/mobileglues/DeviceInfo.kt): `app/src/main/java/com/fcl/plugin/mobileglues/DeviceInfo.kt`

### Renderer integration

- [Native GL probe](https://github.com/gsjsjzhznsz/mobileglues-plugin/blob/main/app/src/main/cpp/mobileglues_info_getter.cpp): `app/src/main/cpp/mobileglues_info_getter.cpp`

### Other components

- **User**
- **MobileGlues renderer**
- **Android graphics driver**

## Connections

- User → Activity shell: opens
- Activity shell → App controller: creates
- Activity shell → Compose screens: renders
- Compose screens → App controller: dispatches actions
- App controller → Authorization: checks access
- Authorization → Plugin preferences: reads choice
- Authorization → MG directory access: selects access
- App controller → Renderer configuration: updates settings
- Renderer configuration → MG directory access: persists config
- Renderer configuration → Config encoding: encodes config
- App controller → Cache export: exports cache
- App controller → Query client: requests query
- Query client → Isolated query service: binds service
- Isolated query service → Multidraw benchmark: runs benchmark
- Isolated query service → Renderer information: requests info
- Renderer information → Native GL probe: probes graphics
- Native GL probe → MobileGlues renderer: loads renderer
- Native GL probe → Android graphics driver: queries EGL and GL
- Multidraw benchmark → MobileGlues renderer: runs benchmark
- App controller → Device information: loads device details
