MVI Media SDK Community Challenge

إيكو جورنال

تطبيق تدوين صوتي يعتمد على تصميم Material 3، يتيح تصنيف المذكرات حسب الحالات المزاجية.

EchoJournal Mockup

نظرة عامة

تم بناء EchoJournal كجزء من تحدي مجتمع Pl Mobile Dev Campus. يتجاوز التطبيق فكرة التسجيل الصوتي البسيط، ليسمح للمستخدمين بإنشاء جدول زمني (Timeline) غني وقابل للفلترة عبر سجلاتهم الصوتية الموسومة ببيانات وصفية (Metadata) تشير للمزاج والمواضيع، مع إمكانية دعمه لاحقاً بالنسخ الصوتي عبر الذكاء الاصطناعي.

التحدي

إدارة حالة تسجيل الوسائط عبر دورة حياة نظام Android (Android Lifecycle) تعتبر مسألة حساسة؛ فإذا أُرسل التطبيق للعمل في الخلفية، أو عند حدوث تغييرات في إعدادات الجهاز، قد يتسبب تدفق `MediaRecorder` في تسريب الموارد أو إتلاف المخزن المؤقت للبيانات، مما يؤدي إلى عدم توافق في المؤثرات البصرية التي تعرض مستوى الصوت في الوقت الفعلي.

بالإضافة إلى ذلك، فإن تطوير منتج أولي (MVP) متماسك، ولكنه مفتوح في ذات الوقت لإعادة الهيكلة ونظام "الوحدات المتعددة" (Multi-Module Integration) لاحقاً، تطلب موازنة دقيقة بين سرعة التطوير والحدود المعمارية الصارمة.

القرارات المعمارية والتقنية

قمت بتصميم EchoJournal مبدئياً كـ MVP أحادي الوحدة (Single-Module)، يعتمد بشكل كامل على معمارية MVI (Model-View-Intent). ترسل واجهة المستخدم (UI) أوامر مصنفة بصرامة (Intents) للأسفل، لضمان أن آلة الحالة المعقدة (التي تدير عمليات `الإعداد`، `التسجيل`، `الإيقاف المؤقت`، أو `السكون`) لا تفقد تزامنها أبداً مع طبقة العرض (Compose UI).

التعامل مع طبقات الوسائط (Media Layers)

  • الإدارة الآمنة لحزم تطوير البرمجيات (SDK): تم تطبيق نطاقات عمل لـ Coroutines متصلة بمكونات (Lifecycle-Aware). يتم تحرير كائنات `MediaPlayer` و `MediaRecorder` بدقة متناهية لتجنب استنزاف الذاكرة.
  • نظام تدوين تفاعلي (Reactive Journaling): ترتبط آلية تجميع السجل التاريخي برمجياً بالكامل عبر Room و Flow. يمكن للمستخدمين التصفية حسب نصوص 'الموضوع' أو 'المزاج' بشكل طبيعي، حيث تؤدي أي تغييرات في سجلات قاعدة البيانات إلى تحديث واجهة Jetpack Compose فوراً وبسلاسة تامة.
  • هيكلة مرنة: تم تصميم الحزم (`domain`، `data`، `presentation`) بطريقة تتيح نقل ميزات الذكاء الاصطناعي (AI) مستقبلاً إلى وحدات Gradle معزولة دون الحاجة لإعادة كتابة منطق الأعمال الأساسي.

الأثر والنتائج

  • بناء آلة حالة صوتية مستقرة، تمنع تسريبات الموارد الحيوية في نظام Android عند الدوران أو التبديل عبر إعدادات النظام المختلفة.
  • تفعيل التحديث الفوري التلقائي للبيانات عبر مكتبات Room و Flow، لتحديث عروض السجل المتداخلة والمعقدة ديناميكياً، مع تفادي التدخل اليدوي وحلقات إعادة تكوين واجهة المستخدم (UI re-composition).
  • نواة قابلة للتوسعة (Extensible Core) وجاهزة لدعم وحدات النسخ الصوتي بالذكاء الاصطناعي أو ميزة المزامنة السحابية المخصصة دون أي مساس بالبنية الهندسية الأساسية.

التقنيات المستخدمة

Language Kotlin
Architecture MVI / Repository
UI Framework Jetpack Compose
Media SDK MediaRecorder / MediaPlayer
DI Framework Koin
Persistence Room DB