in health-services/PassiveGoals/app/src/main/java/com/example/passivegoals/MainActivity.kt [58:119]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
permissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
if (isGranted) {
Log.i(TAG, "Activity recognition permission granted")
viewModel.togglePassiveGoals(true)
} else {
Log.i(TAG, "Activity recognition permission not granted")
viewModel.togglePassiveGoals(false)
}
}
binding.enablePassiveGoals.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
// Make sure we have the necessary permission first.
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.ACTIVITY_RECOGNITION
) != PackageManager.PERMISSION_GRANTED) {
permissionLauncher.launch(Manifest.permission.ACTIVITY_RECOGNITION)
} else {
viewModel.togglePassiveGoals(true)
}
} else {
viewModel.togglePassiveGoals(false)
}
}
// Bind viewmodel state to the UI.
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
// As collect is a suspend function, if you want to collect
// multiple flows in parallel, you need to do so in
// different coroutines
launch {
viewModel.uiState.collect {
updateViewVisibility(it)
}
}
launch {
viewModel.passiveGoalsEnabled.collect {
binding.enablePassiveGoals.isChecked = it
}
}
launch {
viewModel.dailyStepsGoalAchieved.collect {
updateDailyStepsGoal(it)
}
}
launch {
viewModel.latestFloorsGoalTime.collect {
updateFloorsGoal(it)
}
}
}
}
}