1 /** 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * ``` 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * ``` 10 * 11 * Unless required by applicable law or agreed to in writing, software distributed under the License 12 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 13 * or implied. See the License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 package com.android.healthconnect.controller 17 18 import android.os.Bundle 19 import android.view.WindowManager 20 import androidx.activity.result.contract.ActivityResultContracts.* 21 import androidx.activity.viewModels 22 import androidx.navigation.findNavController 23 import com.android.healthconnect.controller.migration.MigrationActivity.Companion.maybeRedirectToMigrationActivity 24 import com.android.healthconnect.controller.migration.MigrationViewModel 25 import com.android.healthconnect.controller.navigation.DestinationChangedListener 26 import com.android.healthconnect.controller.utils.logging.HealthConnectLogger 27 import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity 28 import dagger.hilt.android.AndroidEntryPoint 29 import javax.inject.Inject 30 31 /** Entry point activity for Health Connect. */ 32 @AndroidEntryPoint(CollapsingToolbarBaseActivity::class) 33 class MainActivity : Hilt_MainActivity() { 34 35 @Inject lateinit var logger: HealthConnectLogger 36 37 private val migrationViewModel: MigrationViewModel by viewModels() 38 onCreatenull39 override fun onCreate(savedInstanceState: Bundle?) { 40 super.onCreate(savedInstanceState) 41 // This flag ensures a non system app cannot show an overlay on Health Connect. b/313425281 42 window.addSystemFlags(WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS) 43 44 setContentView(R.layout.activity_main) 45 46 setTitle(R.string.app_label) 47 48 val currentMigrationState = migrationViewModel.getCurrentMigrationUiState() 49 50 if (maybeRedirectToMigrationActivity(this, currentMigrationState)) { 51 return 52 } 53 } 54 onStartnull55 override fun onStart() { 56 super.onStart() 57 findNavController(R.id.nav_host_fragment) 58 .addOnDestinationChangedListener(DestinationChangedListener(this)) 59 } 60 onResumenull61 override fun onResume() { 62 super.onResume() 63 val currentMigrationState = migrationViewModel.getCurrentMigrationUiState() 64 65 if (maybeRedirectToMigrationActivity(this, currentMigrationState)) { 66 return 67 } 68 } 69 onBackPressednull70 override fun onBackPressed() { 71 val navController = findNavController(R.id.nav_host_fragment) 72 if (!navController.popBackStack()) { 73 finish() 74 } 75 } 76 onNavigateUpnull77 override fun onNavigateUp(): Boolean { 78 val navController = findNavController(R.id.nav_host_fragment) 79 if (!navController.popBackStack()) { 80 finish() 81 } 82 83 return true 84 } 85 86 // TODO (b/270864219): implement interaction logging for the menu button 87 // override fun onMenuOpened(featureId: Int, menu: Menu?): Boolean { 88 // logger.logInteraction(ElementName.TOOLBAR_SETTINGS_BUTTON) 89 // return super.onMenuOpened(featureId, menu) 90 // } 91 92 } 93