The entire UI has been rewritten from Android Views to Jetpack Compose with Material 3 Expressive, and several new features are built on top of it.
Live preview
Color, palette and style changes render live inside the app before anything is written to the system. Apply or discard with the floating action buttons. Preview requests are debounced and conflated, so dragging a slider stays smooth.
Community creations
Theme sharing built into the app:
- Browse themes shared by other users, with a drifting showcase carousel on the Colors page
- Search by name or by hue; sort by trending (default), newest, most applied or most voted
- Detail pages render the whole screen, including the bottom bar, in the theme you are previewing
- Share your own creation from the app (root required). Submissions are Turnstile gated and land as a moderated pull request
- Vote, report and deep link support. Apply counts are tracked with a salted device id hash; raw ids never leave the device
- Cache-first loading, so the carousel is populated instantly after the first run
Tasker integration (closes #252)
A broadcast receiver applies a full theme configuration from Tasker or any other automation app. The setup guide is linked from the toggle.
Tablets and foldables
Adaptive layouts with a wide navigation rail on large screens, full-size selectable cards in landscape onboarding, and display cutout padding in landscape edge-to-edge.
Interface
- Onboarding, colors, palette, theme, styles, per-app theming, settings, advanced settings, about, privacy policy and pairing are all Compose now, along with the
colorpickerdialogmodule - Material 3 Expressive throughout: expressive button shapes, toggle buttons, toolbar icon pills, motion-scheme navigation transitions, depth transitions into detail pages
- Palette screen: gradient preview card in place of the old menu entry, tonal ramps instead of quadrant swatches, progressive check-icon tick on selection
- Redesigned color picker dialog with M3 corners and slider handles. The custom color picker moved into the basic color grid
- Drag to reorder saved styles, with a wavy divider between presets and saved styles (closes #189)
- Redesigned privacy policy screen with themed section cards, and accent underlines on About section headers
- Empty states for the community screen and the per-app list
- Haptics and press states on interactive cards
- App-wide themed snackbars that are swipe-dismissable and replace instead of queue
- Search bar with backdrop blur on the app list and community lists
- Standard icons moved to Material rounded vectors
- Monochrome adaptive icon (closes #281)
Theming
- Color Spec 2026 support and the CMF monet style
- Error dialogs with a reason when theming fails, instead of a silent no-op
- Apply status is returned from the Shizuku and wireless ADB paths, and failures are surfaced
- Disabled settings now state the requirement that blocks them
- Adjusted alpha for blurred system UI elements in the pitch black theme
Fixes
- Wrong light blue background for some seed colors (for example
#95BC15) in light theme, caused by bitwise operator precedence inTonalPalette - Crash when requesting Shizuku permission after the activity had resumed
- Restore failing for backup files opened from a file manager, because the URI read grant was not forwarded
- Restoring a backup made on a rooted device no longer applies root-only preferences on a non-rooted setup
Internals
- Hilt removed in favour of direct ViewModel construction
- Glide replaced with Coil, and the legacy view layer deleted
FragmentManagernavigation replaced with Compose Navigation. Splash merged intoMainActivityas a single-activity appLocalBroadcastManagerreplaced with an in-process event busSharedViewModelreplaced withRefreshCoordinator-driven state- Preferences observed as Compose state instead of one-shot reads
- The large theme cache moved off the main thread
- AGP 9.3.1, Gradle wrapper update, JDK toolchain via the Foojay resolver, and dependency updates
- Better class name references and exception handling in
RootConnection
Translations
New and updated translations via Crowdin. Thanks to everyone who contributed. The About screen now shows translated word counts and sorts translators by contribution.
Full changelog: v2.1.1...v3.0