Initial commit: VesiscanBasic Android app
Port of MedilightV2 iOS app to Android with Kotlin + Jetpack Compose. Includes BLE connectivity, NIRS/Piezo sensor modes, Rive animations, interactive measurement history charts, and foldable device support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package com.example.medilightv2android
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import app.rive.runtime.kotlin.core.Rive
|
||||
import com.example.medilightv2android.services.KeychainService
|
||||
import com.example.medilightv2android.services.NotificationService
|
||||
import com.example.medilightv2android.ui.theme.Medilightv2androidTheme
|
||||
import com.example.medilightv2android.ui.views.calibration.CalibrationView
|
||||
import com.example.medilightv2android.ui.views.connection.DeviceScanView
|
||||
import com.example.medilightv2android.ui.views.history.MeasurementHistoryView
|
||||
import com.example.medilightv2android.ui.views.home.HomeView
|
||||
import com.example.medilightv2android.ui.views.monitoring.PiezoMonitoringView
|
||||
import com.example.medilightv2android.ui.views.monitoring.VivamyoMonitoringView
|
||||
import com.example.medilightv2android.ui.views.onboarding.OnboardingView
|
||||
import com.example.medilightv2android.ui.views.personalization.PiezoPersonalizationView
|
||||
import com.example.medilightv2android.ui.views.pin.PinMode
|
||||
import com.example.medilightv2android.ui.views.pin.PinView
|
||||
import com.example.medilightv2android.ui.views.registration.RegistrationView
|
||||
import com.example.medilightv2android.ui.views.sensorselect.SensorSelectView
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
// Initialize services
|
||||
Rive.init(this)
|
||||
KeychainService.init(this)
|
||||
NotificationService.getInstance(this)
|
||||
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
Medilightv2androidTheme {
|
||||
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
|
||||
MedilightApp(modifier = Modifier.padding(innerPadding))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun MedilightApp(modifier: Modifier = Modifier) {
|
||||
val context = LocalContext.current
|
||||
val appState = remember { AppState(context) }
|
||||
|
||||
Crossfade(
|
||||
targetState = appState.currentScreen,
|
||||
animationSpec = tween(300),
|
||||
modifier = modifier,
|
||||
label = "screen"
|
||||
) { screen ->
|
||||
when (screen) {
|
||||
AppScreen.ONBOARDING -> OnboardingView(appState)
|
||||
AppScreen.REGISTRATION -> RegistrationView(appState)
|
||||
AppScreen.HOME -> HomeView(appState)
|
||||
AppScreen.SENSOR_SELECT -> SensorSelectView(appState)
|
||||
AppScreen.DEVICE_SCAN -> DeviceScanView(appState)
|
||||
AppScreen.NIRS_CALIBRATION -> CalibrationView(appState)
|
||||
AppScreen.PIEZO_PERSONALIZATION -> PiezoPersonalizationView(appState)
|
||||
AppScreen.PIN_SETUP -> PinView(appState, PinMode.SETUP, context)
|
||||
AppScreen.PIN_ENTRY -> PinView(appState, PinMode.ENTER, context)
|
||||
AppScreen.VIVAMYO_MONITORING -> VivamyoMonitoringView(appState)
|
||||
AppScreen.PIEZO_MONITORING -> PiezoMonitoringView(appState)
|
||||
AppScreen.MEASUREMENT_HISTORY -> MeasurementHistoryView(appState)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user