Deze week zijn er kort na elkaar twee belangrijke bugfixes uitgebracht, voor twee heel verschillende problemen. De eerste betreft de ingebouwde icoonpakketten die niet meer correct werden toegepast — een bijzonder vervelende bug die al een aantal versies onopgemerkt bleef. De tweede betreft de stappenteller op de linkerpagina, die de eerste stappen van de dag kon missen.
1.0.8 — icoonpakketten hersteld
Het symptoom
Sinds een aantal versies werkte het selecteren van een van de ingebouwde icoonpakketten van Sola (Pixelarticons, Lucide, Fluent Emoji, Bootstrap, Feather, Heroicons) niet zoals verwacht: in plaats van de iconen van het gekozen pakket te tonen, toonden alle iconen in het dock en de lade het Sola-icoon zelf. Icoonpakketten van derden, geïnstalleerd via de Play Store, werkten wel gewoon.
De oorzaak
De boosdoener was de resource shrinker van Android — een tool die bij het compileren van de releaseversie alle grafische resources uit het APK-bestand verwijdert die volgens hem niet worden gebruikt. Handig om de uiteindelijke app-grootte te verkleinen, maar kwetsbaar: als de app een resource dynamisch laadt (bijvoorbeeld via de naam als string, zoals iconpack_google_chrome), kan de shrinker niet weten dat deze wordt gebruikt. Hij verwijdert hem, stilletjes.
Precies dit gebeurde met de 558 iconen waaruit de ingebouwde pakketten van Sola bestaan. Omdat ze dynamisch via hun naam worden geladen op het moment dat de gebruiker een pakket kiest, waren ze voor de shrinker onzichtbaar tijdens de build.
De oplossing
De oplossing is een bestand res/raw/keep.xml dat de shrinker expliciet vertelt dat alle resources waarvan de naam begint met iconpack_ behouden moeten blijven, wat er ook gebeurt:
De pakketkiezer is tegelijk ook herzien: een tik op een pakket geeft nu een live voorbeeld (het dock en het startscherm werken direct bij), en er verschijnt een zwevende knop "Toepassen" om de keuze te bevestigen. Je hoeft het menu niet meer te verlaten om het resultaat te zien. Het dock, het startscherm en de lade blijven perfect gesynchroniseerd na elke pakketwissel.
Er zijn drie reeksen geautomatiseerde tests toegevoegd om te garanderen dat een vergelijkbare bug niet weer door de mazen glipt: een unit test die controleert of de 558 drawables correct opgelost kunnen worden, een test die controleert of het geselecteerde pakket goed doorwerkt naar alle onderdelen, en een test die de cyclus A → B → standaard simuleert zonder state-lek.
1.0.9 — robuustere stappenteller
Het symptoom
De stappenteller op de linkerpagina (dashboard) kon bij het openen 0 tonen en pas vanaf dat moment beginnen te tellen. Concreet: 3.000 stappen zetten in de ochtend zonder de linkerpagina te hebben geopend, kon ervoor zorgen dat die stappen niet zichtbaar waren totdat het eerste event na het openen werd opgevangen.
De oorzaak
De logica van de teller zat rechtstreeks ingebouwd in de composable van de linkerpagina. Het gevolg: de stappensensor luisterde alleen naar events zolang die pagina zichtbaar was. Zodra je naar het startscherm of de lade swipete, stopte de teller met luisteren.
Op Android is de hardware-stappensensor (TYPE_STEP_COUNTER) cumulatief sinds de laatste herstart van de telefoon. Er gaat geen enkele stap verloren — de hardware telt 24 uur per dag. Maar als geen enkele app actief naar zijn events luistert, wordt de weergegeven waarde nooit ververst. Daar komt bij dat de referentielijn (baseline) waarmee het aantal stappen van de huidige dag wordt berekend, pas werd vastgelegd bij het eerste ontvangen event — dus bij het eerste openen van de linkerpagina.
De oplossing
De logica is verplaatst naar een singleton-component — een StepCounterManager — die onafhankelijk van de linkerpagina bestaat. Deze wordt geactiveerd zodra de Activity Recognition-toestemming is verleend, en blijft actief zolang de app in het geheugen geladen is (wat vrijwel permanent is voor een standaardlauncher). Resultaat: de sensor luistert continu naar stappenevents, de baseline wordt vastgesteld bij de eerste stap van de dag (veel eerder), en de weergegeven waarde is altijd actueel op het moment dat je de pagina opent.
Als bonus wordt de laatst bekende waarde nu bewaard tussen sessies. Geen tijdelijke 0 meer op het scherm: bij het opnieuw openen van de linkerpagina wordt de waarde van het laatste event direct hersteld, en de echte waarde wordt geschreven zodra de sensor een nieuw event uitzendt.
Opmerking over zeer restrictieve Android-toestellen
Op telefoons met agressief geheugenbeheer (sommige Chinese Xiaomi-, Huawei-, OnePlus-toestellen) kan het Sola-proces worden gestopt, zelfs als het de standaardlauncher is. In dat zeldzame geval blijft het mogelijk dat de baseline van de dag opnieuw wordt berekend bij de eerste herstart — waardoor de intussen gezette stappen verloren gaan. Een oplossing op basis van Health Connect (dat een 24/7-geschiedenis bijhoudt, onafhankelijk van Sola) wordt overwogen voor een toekomstige versie: dit elimineert dit randgeval volledig, maar vereist administratieve stappen bij Google Play die later worden opgepakt.
Hoe je deze updates krijgt
Beide versies worden geleidelijk uitgerold via de Play Store. Ze zouden binnen 24 tot 48 uur voor iedereen beschikbaar moeten zijn. Je kunt ook zelf een controle forceren vanuit de Play Store-app, onder "Apps en apparaat beheren".
Openen in Google Play