feat(appearance): add stroke and background color customization with app-adaptive and event-adaptive support - #33
Conversation
|
It is a very cool feature, thanks for the PR. I am just wondering why the Also, I love the stroke adaptive color feature, that is very nice, I might also use it myself! I still haven't figured out what does the "Non-app event fallback" do in Also, you are trying to merge on |
|
The |
…app-adaptive and event-adaptive support
f018806 to
2e2f5b0
Compare
|
Rebased onto
|
|
Lgtm, might be a good idea (for later) to implement color animations (fade in-out) when adaptive color is on. Merging |
Resolves #22 (#22)
Summary
This PR adds comprehensive stroke and background color customization for the Dynamic Island in both collapsed (Normal) and Expanded states, including App-Adaptive color extraction for notifications and full Event-Adaptive color support for system events (Wi-Fi, Charging, Lock/Unlock, Battery, etc.).
What Was Done
1. Stroke Outline Customization
#000000).2. Collapsed & Expanded Background Customization
3. Custom System Events Support (Wi-Fi, Charging, Lock/Unlock, etc.)
IslandEvent.primaryColor().colorOverride)useThemeColor) is enabledappColor) for notificationsaccent) for system events (Wi-Fi, USB, Charging, Battery, Headphones, etc.)4. Unit Testing & Verification
CutoutColorsTestverifying color resolution for system events, color overrides, dynamic themes, app notifications, and empty/idle fallbacks.Screenshots
Technical Details
AppIconColorExtractor: Extracts dominant/vibrant branding color from the application's default launcher icon with fallback.AppearancePreferences: Stores stroke settings and serializedCutoutFill(Solid, Gradient, AppFade) andCutoutColorpreferences via DataStore.CutoutColors: Color resolver supporting opacity, dynamic Material You roles, fallback strategies, andIslandEvent.primaryColor().DynamicIsland&IslandSurface: Renders stroke border and interpolates background brushes and base colors between normal and expanded states.BackgroundScreen&AppearanceScreen: Settings UI with preview integration, sliders, and fallback selection.