override fun onCreate()

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)
                    }
                }
            }
        }
    }