v0.4.0-beta
Pre-release
Pre-release
دورةُ إصلاحٍ وضبطٍ بعد الاختبار الميدانيّ لـ 0.3.0، ومعها ثلاثُ ميزاتٍ كبيرة.
أُضيف
- التسجيل لا ينقطع بمغادرة التطبيق. كانت الكاميرا مربوطةً بدورة حياة النشاط،
فمتى ضُغط زرّ البداية أو ورد اتّصالٌ أو انطفأت الشاشة فكّ CameraX الارتباط ومات
مصدر الصورة. صارت الجلسة تملك دورة حياةً خاصّةً بها، تُثبَّت عند RESUMED ما دام
التسجيل جاريًا وتتبع المضيف فيما عدا ذلك؛ والخدمة الأمامية تبقى بنوع «كاميرا»
ما بقي تسجيل، لا ما بقيت رحلةٌ فحسب. وحين يتوقّف التسجيل والتطبيق في الخلف
تُحرَّر العدسة فورًا، فلا تُستنزف بطّاريّةٌ ولا يُحجب الجهاز عن غيرنا. - نافذة عائمة (Picture-in-Picture). مغادرة التطبيق ورحلةٌ أو تسجيلٌ جارٍ تُنكمش
به إلى نافذةٍ صغيرة تُظهر السرعة رقمًا كبيرًا ونقطةً حمراء عند التسجيل، بدل أن
يختفي. مسلكان متكاملان:onUserLeaveHintلزرّ البداية والأجهزة الأقدم، و
setAutoEnterEnabledمن أندرويد 12 لإيماءة الصعود التي لا يصلها النداء الأوّل.
ويُضبط الخيار من الإعدادات. - مسنّن إعداداتٍ شامل بخمسة أقسام: المظهر، القيادة، الفيديو، الخريطة والسجلّ،
عن التطبيق. - أربعة أوضاع للسمة: تلقائيّ حسب الوقت (بساعتين قابلتين للضبط، تُراجَعان كلّ
دقيقة فتتبدّل السمة والراكب سائر)، وحسب النظام، وداكنٌ دائمًا، وفاتحٌ دائمًا.
ولوحةٌ فاتحةٌ كاملة، ليست عكسًا حسابيًّا للداكنة: الفيروزيّ الفاتح يذوب على الأبيض
فأُنزلت إضاءته حتّى يُقرأ تحت الشمس. - تقسيم اختياريّ للفيديو: متّصل أو مقاطع كلّ 3 أو 5 أو 7 أو 10 دقائق. السقف
يُملى على المسجّل نفسه، فيُغلق الملفّ سليمًا ويبدأ التالي بلا أن يومض زرّ التسجيل. - زرّا الرحلة في صفٍّ واحد بمقاسٍ متساوٍ ولونين، حادّا الحافّتين عند التلاقي
موقوصَي الأطراف، ومثبَّتان خارج منطقة التمرير. مكوّنٌ مشترك فلا تفترق الشاشتان. - زرّ بدء الرحلة في قسم «رقمي»، وكان عرضًا محضًا لا سبيل فيه إلى رحلة.
- تسجيل الكاميرا يُنشئ رحلةً في السجلّ بمسارها (خيارٌ مفعَّل افتراضيًّا). ولا
يُنهي التسجيلُ رحلةً لم يبدأها. - مهلة تراجعٍ بعد الحذف بعدٍّ تنازليّ ظاهر، والملفّ لا يُمسّ حتّى تنقضي.
- خيارات: إبقاء الشاشة مضاءة، تسجيل الصوت، قلب ألوان الخريطة، المركبة الافتراضيّة
(وصارت تُحفظ، وكانت تعود إلى «دراجة» عند كلّ إقلاع فتغيّر القياس صامتةً).
أُصلح
- «تعذّر حفظ التسجيل (4)» وهو محفوظ. الرمز 4 هو
ERROR_SOURCE_INACTIVE: مصدر
الصورة توقّف، والملفّ يُغلق سليمًا ويُقرأ. صُنِّفت الرموز:SOURCE_INACTIVEو
FILE_SIZE_LIMITوINSUFFICIENT_STORAGEحفظٌ منقوص يُبلَّغ باسم الملفّ،
وDURATION_LIMITلفّةُ مقطع، وما بقي فشلٌ برسالةٍ عربيّةٍ تسمّي سببه لا برقم.
ويُقرأ الاسم منoutputResults.outputUriلا من المطلوب، فلا يُخبَر المستعمل
باسمٍ غيّرته مكتبة الوسائط عند التصادم. - تداخل الطبقة المحروقة. كان المقياس يُشتقّ من الارتفاع وحده والكتلتان تُرصّان
أفقيًّا، فالقرص وحده يطلب %42.7 من العرض في الوضع الطوليّ والإحصاءات نحو %78.
صار المقياس منmin(w, h)، ويُحسب صندوق القرص أوّلًا ثمّ تأخذ الإحصاءات ما بقي
بضمانٍ حسابيّ ألّا تتجاوزه. والمقاسات كلّها من مقاييس الخطّ الحقيقيّة، فانتهى
التصاق «كم/س» بالأرقام واستوت الحواشي. - مسار الرحلة لم يكن يُرسم.
Accent.value.toInt()تعطي صفرًا — أي شفّافًا
تامًّا — لأنّColor.valueكلمةٌ من 64 بتًّا نصفها الأدنى أصفار. الصوابtoArgb(). - إطار الخريطة يتبدّل مع التكبير: خلفيّةٌ مدوّرة بلا
clip، وupdateيُعيد ضبط
الحدود عند كلّ إعادة تأليف. صارت تقصّ نفسها، والحدود تُضبط مرّةً لكلّ مسار. - نصوص سجلّ الرحلات سوداء على داكن: لم يكن أحدٌ يوفّر
LocalContentColor،
وافتراضه في Material 3 أسودُ صريح. صار يُوفَّر في السمة فأُصلح كلّ نصٍّ بلا لون. - زرّ «إنهاء» تحت الطيّة في شاشة العدّاد.
- الكاميرا تبقى مفتوحة إن غادر المستعمل تبويبها قبل وصول مزوّد الكاميرا غير
المتزامن. عدّاد أجيالٍ يُبطل المستمع المتأخّر. OverlayEffectلم يكن يُغلق، فيبقى خيط GL حيًّا طول عمر العمليّة.- تبديل «محروق» لم يكن يُعيد الربط، فيَعِد بالحرق ويسلّم ملفًّا نظيفًا.
- مرساة الفيديو في GPX لم تكن تُكتب أصلًا: لم يُمرَّر اسم ملفٍّ إلى
finishTrip
قطّ. وصارت تُثبَّت للمقطع الأوّل وحده، إذ لا يحمل الملفّ إلّا إزاحةً واحدة. - مربّع الإعدادات السريعة كان يوقف الخدمة بلا شرط، فيسحبها من تحت تسجيلٍ جارٍ.
- رسالة التسجيل كانت تبقى على الشاشة إلى الأبد: استهلاكها كان يسبق
delayوهو
مفتاحLaunchedEffect، فيُلغيها عند الانتظار.
تغييرات داخليّة
AppSettingsفوق DataStore: مصدر تفضيلاتٍ واحد يشترك فيه المحرّك والواجهة
والخدمة، ويبتلع عطب القرص قراءةً وكتابةً بدل أن يُسقط التطبيق.- ألوان اللوحة تُقرأ من
CompositionLocal، فعمل الوضعان بلا تغيير موضع استعمالٍ
واحد في الشاشات. buildConfig = true— شاشة «عن التطبيق» تقرأ رقم الإصدار من مصدرٍ واحد.