Skip to content

v0.4.0-beta

Pre-release
Pre-release

Choose a tag to compare

@SalehGNUTUX SalehGNUTUX released this 13 Aug 12:00
· 17 commits to main since this 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 — شاشة «عن التطبيق» تقرأ رقم الإصدار من مصدرٍ واحد.