Skip to content

Commit 126f484

Browse files
committed
add new app
1 parent 5f02cc8 commit 126f484

25 files changed

Lines changed: 2284 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
name: "FAP: Build and Release"
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
tags:
8+
- "v*"
9+
pull_request:
10+
branches:
11+
- main
12+
13+
jobs:
14+
build:
15+
runs-on: ubuntu-latest
16+
permissions:
17+
contents: write
18+
19+
steps:
20+
- name: Checkout repository
21+
uses: actions/checkout@v4
22+
23+
- name: Lint with ufbt
24+
uses: flipperdevices/flipperzero-ufbt-action@v0.1
25+
with:
26+
task: lint
27+
28+
- name: Build FAP with ufbt
29+
id: build-app
30+
uses: flipperdevices/flipperzero-ufbt-action@v0.1
31+
with:
32+
sdk-channel: release
33+
34+
- name: Create GitHub Release
35+
if: startsWith(github.ref, 'refs/tags/v')
36+
uses: softprops/action-gh-release@v2
37+
with:
38+
files: ${{ steps.build-app.outputs.fap-artifacts }}
39+
generate_release_notes: true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
dist/*
2+
.vscode
3+
.clang-format
4+
.clangd
5+
.editorconfig
6+
.env
7+
.ufbt
8+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Artyom Shivtsov
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# 🎨 Theme Manager for Flipper Zero
2+
3+
[![Build](https://github.com/Hoasker/flipper-theme-manager/actions/workflows/build.yml/badge.svg)](https://github.com/Hoasker/flipper-theme-manager/actions)
4+
[![FlipperLab](https://img.shields.io/badge/Flipper%20Lab-Available-orange)](https://lab.flipper.net/apps/theme_manager)
5+
6+
Manage dolphin animation themes directly from your Flipper Zero — no PC required.
7+
8+
## Download
9+
10+
- [**Flipper Apps Catalog**](https://lab.flipper.net/apps/theme_manager)
11+
- [**GitHub Releases**](https://github.com/Hoasker/flipper-theme-manager/releases)
12+
13+
## Screenshots
14+
15+
| Menu | Theme Info | Apply |
16+
|:---:|:---:|:---:|
17+
| ![Menu](screenshots/2.png) | ![Info](screenshots/3.png) | ![Apply](screenshots/4.png) |
18+
19+
| Confirm | Reboot | Delete |
20+
|:---:|:---:|:---:|
21+
| ![Confirm](screenshots/5.png) | ![Reboot](screenshots/7.png) | ![Delete](screenshots/11.png) |
22+
23+
![Full workflow](screenshots/all_process.gif)
24+
25+
## Features
26+
27+
- **Scan SD card** — auto-detects animation packs in `/ext/animation_packs/`
28+
- **3 theme formats** — Pack `[P]`, Anim Pack `[A]`, Single animation `[S]`
29+
- **Theme validation** — checks file integrity (invalid marked `[!P]`, blocked from applying)
30+
- **Animated preview** — multi-frame animation playback on the info screen
31+
- **Favorites** — mark themes with `*` prefix, favorites grouped at top of menu
32+
- **Theme info** — view type, animation count, and size before applying
33+
- **One-tap apply** — merges theme files into `/ext/dolphin/` with progress bar
34+
- **Delete themes** — remove theme packs directly from the app
35+
- **Auto-backup** — backs up entire `/ext/dolphin/` before overwriting
36+
- **Restore** — revert to previous theme from the menu
37+
- **Reboot countdown** — 5-second auto-reboot timer after applying theme
38+
- **SD card check** — verifies SD card at startup with clear error message
39+
40+
## Installation
41+
42+
### From Flipper Apps Catalog (recommended)
43+
44+
Search for **Theme Manager** in the [Flipper Apps Catalog](https://lab.flipper.net/apps/theme_manager) and install directly to your Flipper Zero.
45+
46+
### From Releases
47+
48+
1. Download `theme_manager.fap` from [Releases](https://github.com/Hoasker/flipper-theme-manager/releases)
49+
2. Copy to your Flipper's SD card: `/ext/apps/Tools/`
50+
51+
### Build from source
52+
53+
```bash
54+
cd theme_manager
55+
ufbt
56+
```
57+
58+
Copy `dist/theme_manager.fap` to SD card, or use `ufbt launch` to build & run.
59+
60+
## Adding Themes
61+
62+
Place theme folders in `/ext/animation_packs/` on your SD card:
63+
64+
### Format A — Pack (manifest + animation folders)
65+
```
66+
animation_packs/MyTheme/
67+
├── manifest.txt
68+
├── Anim1/
69+
│ ├── meta.txt
70+
│ └── frame_*.bm
71+
└── Anim2/
72+
├── meta.txt
73+
└── frame_*.bm
74+
```
75+
76+
### Format B — Anim Pack (Anims/ subdirectory)
77+
```
78+
animation_packs/MyTheme/
79+
└── Anims/
80+
├── manifest.txt
81+
├── Anim1/
82+
└── Anim2/
83+
```
84+
85+
### Format C — Single Animation
86+
```
87+
animation_packs/MySingleAnim/
88+
├── meta.txt
89+
├── frame_0.bm
90+
├── frame_1.bm
91+
└── ...
92+
```
93+
94+
## How It Works
95+
96+
1. Scans `/ext/animation_packs/` for supported theme formats
97+
2. Select a theme → view info with animated preview
98+
3. Press **Up** on Info screen to add/remove from favorites
99+
4. Apply → backs up `/ext/dolphin/` → merges new theme with progress bar
100+
5. 5-second reboot countdown starts (or press Later to cancel)
101+
6. Use **Restore Previous** to revert anytime
102+
103+
## Custom Firmware
104+
105+
Override default paths at compile time:
106+
107+
```bash
108+
ufbt CFLAGS='-DCUSTOM_ANIMATION_PACKS_PATH=EXT_PATH("my_anims")'
109+
ufbt CFLAGS='-DCUSTOM_DOLPHIN_PATH=EXT_PATH("my_dolphin")'
110+
```
111+
112+
## Requirements
113+
114+
- Flipper Zero with microSD card
115+
- Works with official & custom firmware (Momentum, Unleashed, RogueMaster)
116+
117+
## Author
118+
119+
**Hoasker**
120+
121+
## License
122+
123+
[MIT](https://github.com/Hoasker/flipper-theme-manager/blob/main/LICENSE)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# For details & more options, see documentation/AppManifests.md in firmware repo
2+
3+
App(
4+
appid="theme_manager",
5+
name="Theme Manager",
6+
apptype=FlipperAppType.EXTERNAL,
7+
entry_point="theme_manager_app",
8+
stack_size=8 * 1024,
9+
fap_category="Tools",
10+
fap_version=(1, 6),
11+
fap_icon="images/theme_manager.png",
12+
fap_description="Manage dolphin animation themes from SD card",
13+
fap_author="Hoasker",
14+
fap_weburl="https://github.com/Hoasker/flipper-theme-manager",
15+
requires=[
16+
"gui",
17+
"storage",
18+
],
19+
)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
v1.6:
2+
- Feature: Progress bar during theme application with file counter and current file name indicator
3+
- Improve: Replaced blocking SDK merge call with manual recursive copying to prevent UI freezing
4+
- Improve: Optimized copy buffer size for faster theme application from SD card
5+
6+
v1.5:
7+
- Feature: theme file integrity validation — checks meta.txt, frame_0.bm, manifest.txt
8+
- Feature: invalid themes marked with \[!P\], \[!A\], \[!S\] prefix in menu
9+
- Feature: Status line on Info screen (OK / Invalid!)
10+
- Feature: Apply blocked for invalid themes with error popup
11+
- Cleanup: removed remaining redundant timer NULL checks
12+
- Cleanup: auto-formatted via ufbt format
13+
14+
v1.4.1:
15+
- Fix: bounded directory recursion (max depth 8) prevents stack overflow
16+
- Fix: removed dangerous goto in preview draw — uses bool flag pattern
17+
- Fix: MAX_THEMES reduced to 64 (saves ~9KB RAM)
18+
- Fix: removed redundant NULL checks on timers (always allocated)
19+
- Fix: removed unreachable default case in type_label switch
20+
- Improve: added MAX_DIR_DEPTH constant for recursive dir traversal
21+
22+
v1.4:
23+
- Feature: favorites system — mark themes with * prefix, grouped at top of menu
24+
- Feature: animated preview — up to 4 frames cycling on Info screen
25+
- Feature: reboot countdown timer (5 sec auto-reboot after apply/restore)
26+
- Feature: SD card status check on startup with error dialog
27+
- Improve: favorite toggle via Up key on Info screen
28+
- Improve: preview timer stops when leaving Info view (no resource leak)
29+
- Refactor: reboot dialog replaced with custom View + FuriTimer
30+
31+
v1.3:
32+
- Refactor: unified ThemeEntry struct (replaces 3 separate arrays)
33+
- Feature: themes sorted alphabetically (case-insensitive)
34+
- Feature: submenu header shows theme count "Themes (N)"
35+
- Improve: cached theme metadata (anim count, size) — Info screen loads instantly on repeat
36+
- Improve: insertion sort for consistent alphabetical ordering
37+
38+
v1.2:
39+
- Refactor: shared file-reading utility (removed ~80 lines of code duplication)
40+
- Fix: memory management in preview loader (goto cleanup pattern)
41+
- Fix: buffer truncation uses named constant instead of magic number
42+
- Fix: display name length adjusted to actual screen space (13 chars)
43+
- Fix: uint16_t → size_t for storage read/write return values
44+
- Fix: storage_common_mkdir return value now checked and logged
45+
- Improve: named Y-coordinate constants for Info screen layout
46+
- Improve: smarter name truncation avoids redundant strlen call
47+
48+
v1.1:
49+
- Animation preview on theme info screen (first frame thumbnail)
50+
- LZSS/heatshrink decompression for compressed .bm frames
51+
- Configurable paths for custom firmware compatibility
52+
- Code cleanup and optimizations
53+
54+
v1.0:
55+
- Initial release
56+
- Scan SD card for animation packs in /ext/animation_packs/
57+
- Support 3 theme formats: Pack (P), Anim Pack (A), Single (S)
58+
- Theme info screen with type, animation count, and size
59+
- One-tap apply with automatic backup
60+
- Delete themes directly from the app
61+
- Restore previous theme from backup
62+
- Reboot dialog after applying theme
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Manage dolphin animation themes directly from your Flipper Zero — no PC required.
2+
3+
Scan your SD card for animation packs, view theme info with animated preview, then apply with one tap.
4+
Supports three theme formats: Pack, Anim Pack, and Single Animation.
5+
Auto-backs up your current dolphin folder before applying a new theme, and lets you restore it anytime.
6+
7+
Features:
8+
- Scan /ext/animation_packs/ automatically
9+
- Theme file integrity validation
10+
- Animated preview with multi-frame playback
11+
- Favorites: mark themes for quick access
12+
- View theme info: type, animation count, size
13+
- Apply themes with progress bar, backup and restore support
14+
- Delete theme packs from within the app
15+
- 5-second reboot countdown after applying
16+
- SD card check on startup
17+
18+
Works with official and custom firmware (Momentum, Unleashed, RogueMaster).
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Filetype: Flipper Animation Manifest
2+
Version: 1
3+
4+
Name: L1_Myanma_128x64
5+
Min butthurt: 0
6+
Max butthurt: 14
7+
Min level: 1
8+
Max level: 30
9+
Weight: 5

non_catalog_apps/flipper-theme-manager/images/.gitkeep

Whitespace-only changes.
95 Bytes
Loading

0 commit comments

Comments
 (0)