/
daaasris
/
HealthApp
Обзор
Документация
Войти
/
daaasris
/
HealthApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/example/healtapp/MainActivity.kt
120 строк
5 KB
daaastis
Initial commit
04 июн 2026, 18:19
04 июн 2026, 18:19
1f67131
Код
Авторство
О чём код?
package com.example.healtapp import android.Manifest import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat import com.example.healtapp.data.database.AppDatabase import com.example.healtapp.domain.service.StepSensorService import com.example.healtapp.presentation.navigation.NavGraph import com.example.healtapp.presentation.screens.activity.ActivityViewModel import com.example.healtapp.presentation.screens.water.WaterViewModel import com.example.healtapp.presentation.screens.profile.ProfileViewModel import com.example.healtapp.presentation.screens.medication.MedicationViewModel import com.example.healtapp.presentation.screens.mood.MoodViewModel import com.example.healtapp.presentation.screens.statistics.StatisticsViewModel import com.example.healtapp.presentation.theme.HealtAppTheme class MainActivity : ComponentActivity() { private lateinit var stepSensorService: StepSensorService private lateinit var activityViewModel: ActivityViewModel // Вынесли в переменную класса для доступа в лаунчере private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted -> if (isGranted) { Log.d("MainActivity", "✅ Разрешение на шагомер получено") stepSensorService.startTracking() // Передаем сигнал во ViewModel, что отслеживание началось activityViewModel.startstepTracking() } else { Log.e("MainActivity", "❌ Разрешение на шагомер НЕ получено") } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 1. Создаём сервис шагомера stepSensorService = StepSensorService(applicationContext) // 2. Инициализируем базу данных val db = AppDatabase.getInstance(applicationContext) val stepDao = db.stepDao() val waterDao = db.waterDao() val moodDao = db.moodDao() val medicationDao = db.medicationDao() val profileDao = db.profileDao() // 3. Инициализируем ViewModels с учетом нового параметра profileDao activityViewModel = ActivityViewModel(stepDao, profileDao, stepSensorService) val waterViewModel = WaterViewModel(waterDao, profileDao, applicationContext) val profileViewModel = ProfileViewModel(profileDao, application) val medicationViewModel = MedicationViewModel(medicationDao, profileDao, application) val moodViewModel = MoodViewModel(moodDao, profileDao) val statisticsViewModel = StatisticsViewModel(stepDao, waterDao, moodDao, medicationDao, profileDao) // 4. Запрашиваем разрешение и запускаем датчик requestStepPermission() setContent { HealtAppTheme { NavGraph( activityViewModel = activityViewModel, waterViewModel = waterViewModel, profileViewModel = profileViewModel, medicationViewModel = medicationViewModel, moodViewModel = moodViewModel, statisticsViewModel = statisticsViewModel ) } } } private fun requestStepPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (ContextCompat.checkSelfPermission( this, Manifest.permission.ACTIVITY_RECOGNITION ) != PackageManager.PERMISSION_GRANTED ) { // Запрашиваем разрешение requestPermissionLauncher.launch(Manifest.permission.ACTIVITY_RECOGNITION) } else { // Разрешение уже есть, запускаем шагомер Log.d("MainActivity", "✅ Разрешение на шагомер уже есть") stepSensorService.startTracking() activityViewModel.startstepTracking() } } else { // Для старых версий Android (до 10) разрешение не требуется Log.d("MainActivity", "✅ Android < 10, разрешение не требуется") stepSensorService.startTracking() activityViewModel.startstepTracking() } } override fun onResume() { super.onResume() // На случай, если свернули/развернули приложение — подстраховка для датчика if (::stepSensorService.isInitialized && ContextCompat.checkSelfPermission( this, Manifest.permission.ACTIVITY_RECOGNITION ) == PackageManager.PERMISSION_GRANTED) { stepSensorService.startTracking() } } override fun onPause() { super.onPause() // Очищаем слушатель, когда приложение уходит в фон, чтобы беречь батарею if (::stepSensorService.isInitialized) { stepSensorService.stopTracking() } } }