MotoRun - Android Verseny Adminisztrációs App MotoRun - Android Verseny Adminisztrációs App

MotoRun - Android Verseny Adminisztrációs App


Áttekintés

A MotoRun egy modern Android alkalmazás Silkolene motoRun motoros navigációs versenyekhez, amely egyszerűsíti a verseny szervezői és résztvevői számára a pontőröknél történő adatnaplózást. Az alkalmazás offline-first megközelítéssel készült, ahol az elsődleges cél a megbízható, másodperc-pontos digitális naplózás volt még internetkapcsolat nélkül is.

A projekt során különös figyelmet fordítottam a Clean Architecture elvekre, MVVM mintára és az offline-first adatkezelésre, biztosítva hogy a kritikus versenyinformációk soha ne vesszenek el kapcsolódási problémák miatt.


Architektúra és tervezési minták

Clean Architecture implementáció

  • Presentation Layer: @HiltViewModel annotált ViewModel-ek unidirectional data flow-val (StateFlow)
  • Domain Layer: Repository interface-ek és use-case-ek a business logic elkülönítésére
  • Data Layer: Room database + Firestore hibrid megoldás offline-first prioritással
  • UI Layer: Jetpack Compose-zal felépített stateless Composable-ök

State Management és reaktív programozás

data class CheckpointUiState(
    val sorter: Sorter = Sorter.TimeDESC,
    val filter: Filter = Filter.Arrived,
    val selectedEntry: Entry? = null,
    val sortedEntries: List<Entry> = emptyList(),
    val isFilterHidingEntries: Boolean = false
)
  • Sealed classes típusbiztos state/error modeling-hez (AuthState, AuthError)
  • Flow operators (combine, distinctUntilChanged) reaktív adatáramláshoz

Dependency Injection és modularitás

  • Hilt használata teljes DI coverage-dzsel
  • Moduláris felépítés: AuthRepository, EntryRepository, NetworkManager
  • Interface segregation a tesztelhetőség javítására

Kulcs funkciók és implementációk

NFC-alapú csapat regisztráció

@Singleton
class NFCHandler @Inject constructor(
    private val authRepository: AuthRepository,
    private val entryRepository: EntryRepository
) {
    sealed class NFCState {
        object Disabled : NFCState()
        data class Enabled(val checkpointId: Int) : NFCState()
    }
    
    fun handleNfcIntent(intent: Intent) {
        // Role-based authorization and automatic entry creation
    }
}

Offline-first adatszinkronizáció

  • Room database helyi perzisztenciával
  • Firestore cloud backup és multi-device sync
  • Conflict resolution version-based update strategiával
  • Network state monitoring automatikus reconnection és retry logikával

Role-based hozzáférés-vezérlés

enum class Role {
    UNKNOWN, TEAM, CHECKPOINT, ORGANIZER, ADMIN
}

sealed class AuthState {
    data object Idle : AuthState()
    data object Loading : AuthState() 
    data class LoggedIn(val role: Role, val isOnline: Boolean) : AuthState()
    data class Error(val error: AuthError) : AuthState()
}

Robusztus hálózatkezelés

  • NetworkManager lifecycle-aware hálózatkezelés
  • Exponential backoff újra csatlakozási stratégia
  • Rate limiting Firestore API túlterhelés ellen (free tier :))
  • Health checks és automatikus helyreállás

Technikai megvalósítás

Offline képességek

  • AndroidKeyStore belépési adatok és kulcsok biztonságos tárolásához
  • Room komplex relációs lekérdezésekkel és indexeléssel
  • DataStore konfigurációk kezeléséhez

UI/UX tervezés

  • Material 3 design system
  • Compose UI deklaratív kezelőfelület leírás
  • State hoisting clean separation of concerns-ért
  • Dialog management centralizált UI state handling-gel

Adatexport és jelentések

  • Apache POI Excel export funkcióhoz
  • Google Apps Script Google Sheets export funkcióhoz
  • FileProvider offline file sharing-hez
  • Progress tracking callbacks hosszú műveleteknél

Hardware integráció

  • NFC card reading NDEF message parsing-gal
  • Device identification unique device tracking-hez
  • Hardware sensor access készülék-specifikus adatokhoz

Alkalmazott technológiák

Android fejlesztés:

  • Kotlin 2.0 modern nyelvi elemek használata
  • Jetpack Compose declarative UI
  • Navigation Compose type-safe navigáció
  • Hilt dependency injection
  • Room + DataStore data persistence

Backend és szinkronizáció:

  • Firebase Auth role-based authentication
  • Firebase Firestore szinkronizációs adatbázis, verziókezeléssel
  • Firebase Crashlytics crash reporting

Architektúra és patterns:

  • MVVM + Clean Architecture
  • Repository pattern adat absztakciós réteg
  • Observer pattern reactive programming-hoz
  • Singleton pattern system services-hez

Fejlesztői tooling:

  • Gradle KTS build configuration
  • ProGuard code obfuscation and minifying
  • BuildConfig environment-specific settings

Eredmények és teljesítmény

  • Offline működés: 100% funkcionalitás internet nélkül
  • Adatbiztonság: Zero data loss konfliktus-feloldó szinkronizációval
  • NFC response idő: < 200ms card-tól entry creation-ig
  • Multi-role support: 4 különböző felhasználói szerepkör
  • Excel export: Teljes verseny eredmények batch export-ja
  • Network resilience: Automatikus reconnection és retry logika

A projekt demonstrálja a modern Android fejlesztés best practice-eit, különös tekintettel a reliability, scalability és maintainability szempontjaira kritikus alkalmazási környezetben.


← Vissza a projektekhez