इस हफ्ते एक के बाद एक दो अहम फिक्स रिलीज़ हुए, दो बिल्कुल अलग मुद्दों पर। पहला है बिल्ट-इन आइकन पैक का जो ठीक से लागू होना बंद हो गए थे — एक ऐसा बग जो कई वर्ज़न से चुपचाप छुपा हुआ था और काफी परेशान करने वाला था। दूसरा है बाईं पेज के स्टेप काउंटर का, जो दिन के पहले कदम मिस कर सकता था।
1.0.8 — आइकन पैक फिर से ठीक
दिक्कत क्या थी
पिछले कुछ वर्ज़न से, Sola में बिल्ट-इन आइकन पैक (Pixelarticons, Lucide, Fluent Emoji, Bootstrap, Feather, Heroicons) में से कोई एक चुनने पर वह उम्मीद के मुताबिक काम नहीं करता था: चुने गए पैक के आइकन दिखने की बजाय, डॉक और ड्रॉअर के सभी आइकन Sola का ही आइकन दिखाने लगते थे। Play Store से इंस्टॉल किए गए थर्ड-पार्टी आइकन पैक बिल्कुल सही काम कर रहे थे।
वजह
इसके पीछे जिम्मेदार था Android का resource shrinker — एक टूल जो रिलीज़ वर्ज़न कंपाइल करते वक्त APK फाइल से वे सभी ग्राफिकल रिसोर्स हटा देता है जिन्हें वह अनयूज़्ड समझता है। यह ऐप का फाइनल साइज़ घटाने के लिए तो काम का है, लेकिन कमज़ोर भी: अगर ऐप किसी रिसोर्स को डायनामिकली लोड करती है (जैसे उसके नाम को स्ट्रिंग की तरह इस्तेमाल करके, मसलन iconpack_google_chrome), तो shrinker यह अंदाज़ा नहीं लगा पाता कि वह इस्तेमाल हो रही है। वह उसे चुपचाप हटा देता है।
ठीक यही हुआ था Sola के बिल्ट-इन पैक बनाने वाले 558 आइकनों के साथ। यूज़र के पैक चुनने के वक्त उनके नाम से डायनामिकली लोड होने की वजह से, बिल्ड के दौरान वे shrinker को दिखते ही नहीं थे।
फिक्स
इसका हल है एक res/raw/keep.xml फाइल, जो shrinker को साफ-साफ बताती है कि जिन रिसोर्स के नाम iconpack_ से शुरू होते हैं, उन्हें कुछ भी हो जाए, कभी न हटाया जाए:
इसी दौरान पैक सिलेक्टर को भी दुरुस्त किया गया: अब किसी पैक पर टैप करते ही लाइव प्रीव्यू मिलता है (डॉक और होम स्क्रीन तुरंत अपडेट हो जाते हैं), और चुनाव कन्फर्म करने के लिए एक फ्लोटिंग "Apply" बटन दिखता है। नतीजा देखने के लिए अब मेन्यू से बाहर निकलने की ज़रूरत नहीं। पैक बदलने के बाद डॉक, होम और ड्रॉअर हमेशा एक-दूसरे के साथ पूरी तरह सिंक रहते हैं।
दोबारा ऐसा बग न आए, इसके लिए तीन ऑटोमेटेड टेस्ट सीरीज़ जोड़ी गई हैं: एक यूनिट टेस्ट जो चेक करता है कि सभी 558 drawable सही से रिज़ॉल्व होते हैं, एक टेस्ट जो चेक करता है कि चुना गया पैक सभी कंपोनेंट तक सही से पहुंचता है, और एक टेस्ट जो A → B → डिफॉल्ट के साइकल को बिना किसी state leak के सिम्युलेट करता है।
1.0.9 — स्टेप काउंटर अब ज़्यादा भरोसेमंद
दिक्कत क्या थी
बाईं पेज (डैशबोर्ड) पर दिखने वाला स्टेप काउंटर खोलते ही 0 दिखा सकता था, और उसी पल से गिनती शुरू करता था। सीधे शब्दों में: सुबह बिना बाईं पेज खोले 3,000 कदम चलने पर, वे कदम तब तक स्क्रीन पर नहीं दिखते थे जब तक पेज खोलने के बाद पहला सेंसर इवेंट न मिल जाए।
वजह
काउंटर की पूरी लॉजिक सीधे बाईं पेज के composable के अंदर बनी थी। नतीजा: स्टेप सेंसर सिर्फ तभी इवेंट सुनता था जब यह पेज दिख रही होती थी। जैसे ही आप होम स्क्रीन या ड्रॉअर पर स्वाइप करते, काउंटर सुनना बंद कर देता।
Android पर, हार्डवेयर स्टेप सेंसर (TYPE_STEP_COUNTER) फोन के आखिरी रीस्टार्ट से क्युमुलेटिव होता है। यह कोई कदम नहीं भूलता — हार्डवेयर 24 घंटे गिनती करता रहता है। लेकिन अगर कोई ऐप उसके इवेंट को एक्टिवली नहीं सुन रही, तो स्क्रीन पर दिखने वाली वैल्यू कभी रीफ्रेश नहीं होती। इसके अलावा, दिन के कदम कैलकुलेट करने के लिए इस्तेमाल होने वाली रेफरेंस लाइन (baseline) सिर्फ पहले मिले इवेंट पर सेट होती थी — यानी बाईं पेज के पहली बार खुलने पर।
फिक्स
लॉजिक को एक सिंगलटन कंपोनेंट — StepCounterManager — में निकाल दिया गया, जो बाईं पेज से बिल्कुल अलग काम करता है। Activity Recognition की परमिशन मिलते ही यह एक्टिव हो जाता है, और तब तक एक्टिव रहता है जब तक ऐप मेमोरी में लोडेड है (जो डिफॉल्ट launcher के लिए लगभग हमेशा ही होता है)। नतीजा: सेंसर स्टेप इवेंट को लगातार सुनता है, baseline दिन के पहले कदम पर ही सेट हो जाती है (काफी पहले), और जब भी आप पेज खोलें, स्क्रीन पर दिखने वाली वैल्यू हमेशा अप-टू-डेट रहती है।
बोनस के तौर पर, आखिरी जानी-पहचानी वैल्यू अब सेशन के बीच भी सेव रहती है। अब स्क्रीन पर कोई अस्थायी 0 नहीं दिखता: बाईं पेज दोबारा खोलने पर, आखिरी इवेंट की वैल्यू तुरंत रिस्टोर हो जाती है, और सेंसर से नया इवेंट मिलते ही असली वैल्यू लिख दी जाती है।
बहुत सख्त Android डिवाइसों पर एक नोट
जिन फोन में मेमोरी मैनेजमेंट काफी सख्त है (कुछ चाइनीज़ Xiaomi, Huawei, OnePlus मॉडल), वहां Sola का प्रोसेस डिफॉल्ट launcher होते हुए भी बंद किया जा सकता है। इस दुर्लभ स्थिति में, यह मुमकिन है कि दिन का baseline अगले रीस्टार्ट पर दोबारा कैलकुलेट हो — जिससे बीच में चले कदम छूट सकते हैं। Health Connect पर आधारित एक सॉल्यूशन (जो Sola से अलग हटकर 24/7 हिस्ट्री रखता है) आने वाले किसी वर्ज़न के लिए सोचा जा रहा है: यह इस एज केस को पूरी तरह खत्म कर देगा, लेकिन इसके लिए Google Play के साथ कुछ एडमिनिस्ट्रेटिव प्रोसेस करने होंगे, जो बाद में किए जाएंगे।
ये अपडेट कैसे पाएं
दोनों वर्ज़न Play Store के ज़रिए धीरे-धीरे रोलआउट किए जा रहे हैं। अगले 24 से 48 घंटों में ये सभी के लिए उपलब्ध हो जाने चाहिए। Play Store ऐप के "Manage apps & device" सेक्शन से भी मैन्युअली चेक किया जा सकता है।
Google Play पर खोलें