Diese Woche wurden kurz hintereinander zwei wichtige Fehlerbehebungen ausgeliefert, zu zwei ganz unterschiedlichen Themen. Die erste betrifft die integrierten Icon-Packs, die nicht mehr korrekt angewendet wurden — ein besonders lästiger Bug, der sich seit mehreren Versionen unbemerkt eingeschlichen hatte. Die zweite betrifft den Schrittzähler der linken Seite, der die ersten Schritte des Tages verpassen konnte.
1.0.8 — Icon-Packs wiederhergestellt
Das Symptom
Seit einigen Versionen funktionierte die Auswahl eines der in Sola integrierten Icon-Packs (Pixelarticons, Lucide, Fluent Emoji, Bootstrap, Feather, Heroicons) nicht wie vorgesehen: Statt der Icons des gewählten Packs zeigten alle Icons im Dock und in der Schublade das Sola-Icon selbst an. Von Drittanbietern über den Play Store installierte Icon-Packs funktionierten dagegen normal.
Die Ursache
Der Übeltäter war der Resource Shrinker von Android — ein Tool, das beim Kompilieren der Release-Version alle Grafikressourcen aus der APK-Datei entfernt, die es für ungenutzt hält. Nützlich, um die endgültige App-Größe zu reduzieren, aber fehleranfällig: Wenn die App eine Ressource dynamisch lädt (zum Beispiel über ihren Namen als Zeichenkette, wie iconpack_google_chrome), kann der Shrinker nicht erkennen, dass sie verwendet wird. Er entfernt sie, stillschweigend.
Genau das war den 558 Icons passiert, aus denen die in Sola integrierten Packs bestehen. Da sie dynamisch über ihren Namen geladen werden, sobald der Nutzer ein Pack auswählt, waren sie für den Shrinker beim Build unsichtbar.
Der Fix
Die Lösung ist eine Datei res/raw/keep.xml, die dem Shrinker explizit mitteilt, dass alle Ressourcen, deren Name mit iconpack_ beginnt, unter allen Umständen erhalten bleiben müssen:
Die Pack-Auswahl wurde bei dieser Gelegenheit ebenfalls überarbeitet: Ein Tap auf ein Pack liefert jetzt eine Live-Vorschau (Dock und Homescreen aktualisieren sich sofort), und eine schwebende Schaltfläche „Anwenden" erscheint zur Bestätigung der Auswahl. Man muss das Menü nicht mehr verlassen, um das Ergebnis zu sehen. Dock, Homescreen und Schublade bleiben nach jedem Pack-Wechsel perfekt synchron.
Drei automatisierte Testreihen wurden hinzugefügt, um zu verhindern, dass ein ähnlicher Bug erneut durchrutscht: ein Unit-Test, der prüft, dass alle 558 Drawables auflösbar sind, ein Test, der prüft, dass sich das gewählte Pack korrekt auf alle Komponenten überträgt, und ein Test, der den Zyklus A → B → Standard ohne State-Leck simuliert.
1.0.9 — robuster Schrittzähler
Das Symptom
Der auf der linken Seite (Dashboard) angezeigte Schrittzähler konnte beim Öffnen 0 anzeigen und erst ab diesem Zeitpunkt zu zählen beginnen. Konkret: Wer morgens 3.000 Schritte lief, ohne die linke Seite geöffnet zu haben, verlor die Anzeige dieser Schritte bis zum ersten nach dem Öffnen erfassten Ereignis.
Die Ursache
Die Zähler-Logik war direkt in das Composable der linken Seite integriert. Ergebnis: Der Schrittsensor lauschte nur auf Ereignisse, wenn diese Seite sichtbar war. Sobald zum Homescreen oder zur Schublade gewischt wurde, hörte der Zähler auf zu lauschen.
Auf Android ist der Hardware-Schrittsensor (TYPE_STEP_COUNTER) kumulativ seit dem letzten Neustart des Telefons. Er verliert keinen Schritt — die Hardware zählt rund um die Uhr. Aber wenn keine App aktiv auf seine Ereignisse lauscht, wird der angezeigte Wert nie aktualisiert. Hinzu kam, dass die Referenzlinie (Baseline), die zur Berechnung der Schritte des aktuellen Tages dient, erst beim ersten empfangenen Ereignis festgelegt wurde — also beim ersten Öffnen der linken Seite.
Der Fix
Die Logik wurde in eine Singleton-Komponente ausgelagert — einen StepCounterManager —, der unabhängig von der linken Seite existiert. Er aktiviert sich, sobald die Berechtigung Activity Recognition erteilt wird, und bleibt aktiv, solange die App im Speicher geladen ist (was bei einem Standard-Launcher praktisch permanent der Fall ist). Ergebnis: Der Sensor lauscht kontinuierlich auf Schrittereignisse, die Baseline wird beim ersten Schritt des Tages festgelegt (deutlich früher), und der angezeigte Wert ist immer aktuell, sobald die Seite geöffnet wird.
Als Bonus wird der letzte bekannte Wert jetzt zwischen Sitzungen gespeichert. Keine vorübergehende 0 mehr in der Anzeige: Beim erneuten Öffnen der linken Seite wird sofort der Wert des letzten Ereignisses wiederhergestellt, und der tatsächliche Wert wird geschrieben, sobald der Sensor ein neues Ereignis liefert.
Hinweis zu sehr restriktiven Android-Systemen
Auf Telefonen mit aggressiver Speicherverwaltung (bestimmte chinesische Xiaomi-, Huawei-, OnePlus-Modelle) kann der Sola-Prozess beendet werden, selbst wenn er Standard-Launcher ist. In diesem seltenen Fall kann die Tages-Baseline beim ersten Neustart neu berechnet werden — wodurch die in der Zwischenzeit gemachten Schritte verloren gehen. Eine auf Health Connect basierende Lösung (die unabhängig von Sola einen 24/7-Verlauf führt) wird für eine zukünftige Version in Betracht gezogen: Sie würde diesen Grenzfall vollständig beseitigen, erfordert aber administrative Schritte bei Google Play, die später in Angriff genommen werden.
Wie man diese Updates erhält
Beide Versionen werden schrittweise über den Play Store ausgerollt. Sie sollten innerhalb von 24 bis 48 Stunden für alle verfügbar sein. Es ist auch möglich, die Prüfung manuell über die Play Store-App im Bereich „Apps und Gerät verwalten" zu erzwingen.
Bei Google Play öffnen