# kekejiang114514/token-balance-bubble architecture

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

- Interactive diagram: https://gitdiagram.com/kekejiang114514/token-balance-bubble
- Repository: https://github.com/kekejiang114514/token-balance-bubble

## Overview

鲸鱼娘桌宠是一个 Android 悬浮桌宠，也可查询兼容 API 服务商的账户余额。主流程是用户在设置页配置服务商、密钥和显示模式，启动悬浮服务；点击角色后，服务按模式显示余额或桌宠对白与动作，定时刷新也可更新余额。角色整体姿态与局部网格形变分层实现，气泡由样式转换、排版和绘制组成。README 描述了主要能力；部分运行时细节未采样，因此只展示有索引或文档依据的关系。

Main entry points: [`app/src/com/coco/balancebubble/MainActivity.java`](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/MainActivity.java) (设置界面), [`app/src/com/coco/balancebubble/BubbleService.java`](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleService.java) (悬浮服务), [`app/src/com/coco/balancebubble/BalanceApi.java`](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BalanceApi.java) (余额请求解析), [`app/src/com/coco/balancebubble/Prefs.java`](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Prefs.java) (设置存储)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["设置与状态"]
  node_settings["设置界面<br/>[MainActivity.java]"]
  node_prefs[("设置存储<br/>[Prefs.java]")]
  node_presets["服务商预设<br/>[Presets.java]"]
  node_theme["主题配色<br/>[Theme.java]"]
  node_ui["界面控件<br/>[Ui.java]"]
  node_update["更新检查<br/>[UpdateChecker.java]"]
  node_version["版本比较<br/>[Version.java]"]
end

subgraph group_overlay["悬浮交互"]
  node_service["悬浮服务<br/>[BubbleService.java]"]
  node_bootreceiver["开机恢复<br/>[BootReceiver.java]"]
  node_bubbleview["气泡绘制<br/>[BubbleView.java]"]
  node_bubblestyle["气泡样式<br/>[BubbleStyle.java]"]
  node_bubblelayout["气泡排版<br/>[BubbleLayout.java]"]
  node_textwrap["文字折行<br/>[TextWrap.java]"]
end

subgraph group_balance["余额查询"]
  node_currency["货币格式<br/>[Currencies.java]"]
  node_balanceapi["余额请求解析<br/>[BalanceApi.java]"]
end

subgraph group_pet["角色渲染"]
  node_petview["角色绘制与姿态<br/>[PetView.java]"]
  node_actions["动作定义<br/>[PetAction.java]"]
  node_talk["桌宠对白<br/>[PetTalk.java]"]
  node_rig["局部网格形变<br/>[PartRig.java]"]
  node_rigmodel["骨架参数<br/>[RigModel.java]"]
end

node_user(("用户"))
node_boot(("系统启动"))
node_provider{{"余额服务商"}}
node_releases{{"GitHub Releases"}}

node_user -->|"配置并启动"| node_settings
node_settings -->|"保存设置"| node_prefs
node_settings -->|"选择预设"| node_presets
node_settings -->|"启动服务"| node_service
node_boot -->|"触发恢复"| node_bootreceiver
node_bootreceiver -->|"读取上次状态"| node_prefs
node_bootreceiver -->|"恢复悬浮窗"| node_service
node_service -->|"读取设置"| node_prefs
node_service -->|"管理气泡"| node_bubbleview
node_service -->|"管理角色"| node_petview
node_service -->|"发起查询"| node_balanceapi
node_service -->|"选择对白"| node_talk
node_bubbleview -->|"应用样式"| node_bubblestyle
node_bubbleview -->|"计算排版"| node_bubblelayout
node_bubblelayout -->|"执行折行"| node_textwrap
node_bubblestyle -->|"读取参数"| node_prefs
node_balanceapi -->|"发送 HTTP 请求"| node_provider
node_balanceapi -->|"格式化金额"| node_currency
node_balanceapi -->|"读取查询配置"| node_prefs
node_petview -->|"播放动作"| node_actions
node_petview -->|"更新形变"| node_rig
node_rig -->|"读取骨架参数"| node_rigmodel
node_settings -->|"构建设置界面"| node_ui
node_settings -->|"读取主题"| node_theme
node_settings -->|"预览气泡"| node_bubbleview
node_settings -->|"预览角色"| node_petview
node_settings -->|"测试连接"| node_balanceapi
node_settings -->|"检查更新"| node_update
node_update -->|"比较版本"| node_version
node_update -->|"查询发布版本"| node_releases
node_user -->|"拖动与点击"| node_service

click node_settings "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/MainActivity.java"
click node_prefs "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Prefs.java"
click node_presets "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Presets.java"
click node_currency "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Currencies.java"
click node_service "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleService.java"
click node_bootreceiver "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BootReceiver.java"
click node_bubbleview "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleView.java"
click node_bubblestyle "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleStyle.java"
click node_bubblelayout "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleLayout.java"
click node_textwrap "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/TextWrap.java"
click node_balanceapi "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BalanceApi.java"
click node_petview "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PetView.java"
click node_actions "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PetAction.java"
click node_talk "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PetTalk.java"
click node_rig "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PartRig.java"
click node_rigmodel "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/RigModel.java"
click node_theme "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Theme.java"
click node_ui "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Ui.java"
click node_update "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/UpdateChecker.java"
click node_version "https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Version.java"

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_settings,node_prefs,node_presets,node_theme,node_ui,node_update,node_version toneBlue
class node_service,node_bootreceiver,node_bubbleview,node_bubblestyle,node_bubblelayout,node_textwrap toneAmber
class node_currency,node_balanceapi toneMint
class node_petview,node_actions,node_talk,node_rig,node_rigmodel toneRose
class node_user,node_boot,node_provider,node_releases toneIndigo
```

## Components

### 设置与状态

- [设置界面](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/MainActivity.java): `app/src/com/coco/balancebubble/MainActivity.java`
- [设置存储](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Prefs.java): `app/src/com/coco/balancebubble/Prefs.java`
- [服务商预设](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Presets.java): `app/src/com/coco/balancebubble/Presets.java`
- [主题配色](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Theme.java): `app/src/com/coco/balancebubble/Theme.java`
- [界面控件](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Ui.java): `app/src/com/coco/balancebubble/Ui.java`
- [更新检查](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/UpdateChecker.java): `app/src/com/coco/balancebubble/UpdateChecker.java`
- [版本比较](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Version.java): `app/src/com/coco/balancebubble/Version.java`

### 悬浮交互

- [悬浮服务](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleService.java): `app/src/com/coco/balancebubble/BubbleService.java`
- [开机恢复](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BootReceiver.java): `app/src/com/coco/balancebubble/BootReceiver.java`
- [气泡绘制](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleView.java): `app/src/com/coco/balancebubble/BubbleView.java`
- [气泡样式](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleStyle.java): `app/src/com/coco/balancebubble/BubbleStyle.java`
- [气泡排版](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BubbleLayout.java): `app/src/com/coco/balancebubble/BubbleLayout.java`
- [文字折行](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/TextWrap.java): `app/src/com/coco/balancebubble/TextWrap.java`

### 余额查询

- [货币格式](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/Currencies.java): `app/src/com/coco/balancebubble/Currencies.java`
- [余额请求解析](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/BalanceApi.java): `app/src/com/coco/balancebubble/BalanceApi.java`

### 角色渲染

- [角色绘制与姿态](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PetView.java): `app/src/com/coco/balancebubble/PetView.java`
- [动作定义](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PetAction.java): `app/src/com/coco/balancebubble/PetAction.java`
- [桌宠对白](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PetTalk.java): `app/src/com/coco/balancebubble/PetTalk.java`
- [局部网格形变](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/PartRig.java): `app/src/com/coco/balancebubble/PartRig.java`
- [骨架参数](https://github.com/kekejiang114514/token-balance-bubble/blob/main/app/src/com/coco/balancebubble/RigModel.java): `app/src/com/coco/balancebubble/RigModel.java`

### Other components

- **用户**
- **系统启动**
- **余额服务商**
- **GitHub Releases**

## Connections

- 用户 → 设置界面: 配置并启动 (evidence: `README.md`)
- 设置界面 → 设置存储: 保存设置 (evidence: `app/src/com/coco/balancebubble/Prefs.java`)
- 设置界面 → 服务商预设: 选择预设 (evidence: `app/src/com/coco/balancebubble/MainActivity.java`)
- 设置界面 → 悬浮服务: 启动服务 (evidence: `README.md`)
- 系统启动 → 开机恢复: 触发恢复 (evidence: `app/src/com/coco/balancebubble/BootReceiver.java`)
- 开机恢复 → 设置存储: 读取上次状态 (evidence: `app/src/com/coco/balancebubble/BootReceiver.java`)
- 开机恢复 → 悬浮服务: 恢复悬浮窗 (evidence: `app/src/com/coco/balancebubble/BootReceiver.java`)
- 悬浮服务 → 设置存储: 读取设置 (evidence: `app/src/com/coco/balancebubble/BubbleService.java`)
- 悬浮服务 → 气泡绘制: 管理气泡 (evidence: `app/src/com/coco/balancebubble/BubbleService.java`)
- 悬浮服务 → 角色绘制与姿态: 管理角色 (evidence: `app/src/com/coco/balancebubble/BubbleService.java`)
- 悬浮服务 → 余额请求解析: 发起查询 (evidence: `app/src/com/coco/balancebubble/BubbleService.java`)
- 悬浮服务 → 桌宠对白: 选择对白 (evidence: `app/src/com/coco/balancebubble/BubbleService.java`)
- 气泡绘制 → 气泡样式: 应用样式 (evidence: `app/src/com/coco/balancebubble/BubbleView.java`)
- 气泡绘制 → 气泡排版: 计算排版 (evidence: `app/src/com/coco/balancebubble/BubbleView.java`)
- 气泡排版 → 文字折行: 执行折行 (evidence: `app/src/com/coco/balancebubble/BubbleLayout.java`)
- 气泡样式 → 设置存储: 读取参数 (evidence: `app/src/com/coco/balancebubble/BubbleStyle.java`)
- 余额请求解析 → 余额服务商: 发送 HTTP 请求 (evidence: `README.md`)
- 余额请求解析 → 货币格式: 格式化金额 (evidence: `app/src/com/coco/balancebubble/BalanceApi.java`)
- 余额请求解析 → 设置存储: 读取查询配置 (evidence: `app/src/com/coco/balancebubble/BalanceApi.java`)
- 角色绘制与姿态 → 动作定义: 播放动作 (evidence: `app/src/com/coco/balancebubble/PetView.java`)
- 角色绘制与姿态 → 局部网格形变: 更新形变 (evidence: `app/src/com/coco/balancebubble/PetView.java`)
- 局部网格形变 → 骨架参数: 读取骨架参数 (evidence: `app/src/com/coco/balancebubble/PartRig.java`)
- 设置界面 → 界面控件: 构建设置界面 (evidence: `README.md`)
- 设置界面 → 主题配色: 读取主题 (evidence: `app/src/com/coco/balancebubble/MainActivity.java`)
- 设置界面 → 气泡绘制: 预览气泡 (evidence: `app/src/com/coco/balancebubble/MainActivity.java`)
- 设置界面 → 角色绘制与姿态: 预览角色 (evidence: `app/src/com/coco/balancebubble/MainActivity.java`)
- 设置界面 → 余额请求解析: 测试连接 (evidence: `app/src/com/coco/balancebubble/MainActivity.java`)
- 设置界面 → 更新检查: 检查更新 (evidence: `app/src/com/coco/balancebubble/MainActivity.java`)
- 更新检查 → 版本比较: 比较版本 (evidence: `app/src/com/coco/balancebubble/UpdateChecker.java`)
- 更新检查 → GitHub Releases: 查询发布版本 (evidence: `README.md`)
- 用户 → 悬浮服务: 拖动与点击 (evidence: `README.md`)
