Share icon packs between desktop and Android

The Android app's Material icons become a TeamSpeak-format pack shipped in
core, which the desktop offers next to the TeamSpeak packs. Android now
draws its icons from packs too and imports TeamSpeak's own zips, falling
back to the Material pack for what they lack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-26 09:39:42 +00:00
parent a7aa122728
commit cdf81f3258
92 changed files with 786 additions and 139 deletions

View File

@@ -162,6 +162,11 @@ Android app in [`../android`](../android) does.
TeamSpeak 3 client (`$TS3_CLIENT_DIR` or the usual install paths) and a folder of
your choosing, so the official packs (`default_colored_2014.zip`,
`default_mono_2014.zip`, the legacy `default.zip`) work unchanged.
- **Material**, a pack in the same format built from Google's Material icons, ships
with the client (`core/src/main/resources/gfx/material`, generated by
`tools/material-icon-pack.py`). Its monochrome icons paint with `currentColor`, which
follows the theme's text colour. It is the Android app's default, and the Android app
draws TeamSpeak packs too — import one (e.g. `default_colored_2014.zip`) in its settings.
- The pack draws the tree (server, channel, client state), the toolbar, the menus,
the context menus, the file browser and TeamSpeak's default group icons. Vector
art is rasterised at the size it is drawn at; a pack's `FALLBACK` option decides
@@ -240,8 +245,9 @@ core/ com.ts3client
├── contacts friends and blocked clients, in TS3's own record format
├── text BBCode, TeamSpeak links, chat search
├── gfx
│ ├── IconPack an icon pack zip/folder + its settings.ini mapping
│ └── IconPacks discovery of installed packs
│ ├── IconPack an icon pack zip/folder/classpath folder + its settings.ini mapping
│ ├── IconPacks discovery of installed packs, the shipped Material one, lookup order
│ └── IconKeys the icon keys the channel tree asks for
├── hotkey
│ ├── HotkeyAction catalogue of TeamSpeak's hotkey actions (RE'd from its binary)
│ ├── Hotkey/HotkeyCombo one binding: keys, trigger edge, server scope, argument