Two important fixes shipped back to back this week, on two quite distinct subjects. The first concerns the bundled icon packs, which had stopped applying correctly — a particularly annoying bug that had been quietly lurking for several versions. The second concerns the left-page step counter, which could miss the first steps of the day.
1.0.8 — icon packs restored
The symptom
For a few versions, selecting one of Sola's built-in icon packs (Pixelarticons, Lucide, Fluent Emoji, Bootstrap, Feather, Heroicons) didn't work as expected: instead of showing the icons from the chosen pack, every icon in the dock and drawer displayed the Sola icon itself. Third-party icon packs installed from the Play Store, on the other hand, worked normally.
The cause
The culprit was Android's resource shrinker — a tool that, when building the release version, strips out any graphic resources it believes are unused from the APK. Useful for reducing the app's final size, but fragile: if the app loads a resource dynamically (for example via its name as a string, like iconpack_google_chrome), the shrinker has no way to know it's used. It removes it, silently.
That's exactly what had happened to the 558 icons that make up Sola's bundled packs. Loaded dynamically by name when the user selects a pack, they were invisible to the shrinker at build time.
The fix
The solution is a res/raw/keep.xml file that explicitly tells the shrinker that any resource whose name starts with iconpack_ must be kept, no matter what:
The pack picker was also reworked along the way: tapping a pack now gives a live preview (the dock and home screen update instantly), and a floating "Apply" button appears to confirm the choice. No need to leave the menu to see the result. The dock, home screen, and drawer stay perfectly in sync after any pack change.
Three sets of automated tests were added to make sure a similar bug can't slip through again: a unit test that checks all 558 drawables resolve correctly, a test that checks the selected pack propagates to every component, and a test that simulates the A → B → default cycle without state leaks.
1.0.9 — robust step counter
The symptom
The step counter shown on the left page (dashboard) could display 0 when opened, then only start counting from that point onward. In practice: walking 3,000 steps in the morning without having opened the left page could cause those steps to be missing from the display until the first event captured after opening it.
The cause
The counter's logic was built directly into the left page's composable. As a result, the step sensor only listened for events while that page was visible. As soon as you swiped to the home screen or the drawer, the counter stopped listening.
On Android, the hardware step sensor (TYPE_STEP_COUNTER) is cumulative since the last reboot of the phone. It never loses a step — the hardware counts around the clock. But if no app is actively listening to its events, the displayed value never refreshes. On top of that, the baseline used to calculate the current day's steps was only established on the first event received — meaning at the first opening of the left page.
The fix
The logic was extracted into a singleton component — a StepCounterManager — that lives independently of the left page. It activates as soon as the Activity Recognition permission is granted, and stays active as long as the app is loaded in memory (which is nearly permanent for a default launcher). The result: the sensor listens to step events continuously, the baseline is established at the very first step of the day (much earlier), and the displayed value is always up to date the moment you open the page.
As a bonus, the last known value is now persisted between sessions. No more transient 0 on screen: when you reopen the left page, the value from the last event is restored immediately, and the true value is written as soon as the sensor emits a new event.
A note on very restrictive Android devices
On phones with aggressive memory management policies (some Chinese Xiaomi, Huawei, OnePlus devices), the Sola process can be killed even when it's the default launcher. In that rare case, it's still possible for the day's baseline to be recalculated on the first reopening — losing the steps taken in between. A Health Connect-based solution (which keeps a 24/7 history independently of Sola) is being considered for a future version: it would eliminate this edge case entirely, but requires administrative steps with Google Play that will be handled later.
How to get these updates
Both versions are being rolled out gradually via the Play Store. They should be available to everyone within 24 to 48 hours. You can also force a check from the Play Store app, in the "Manage apps & device" section.
Open on Google Play