• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  *
17  */
18 
19 package com.android.healthconnect.controller.data
20 
21 import android.os.Bundle
22 import android.view.WindowManager
23 import androidx.activity.viewModels
24 import androidx.navigation.findNavController
25 import com.android.healthconnect.controller.R
26 import com.android.healthconnect.controller.migration.MigrationActivity.Companion.maybeRedirectToMigrationActivity
27 import com.android.healthconnect.controller.migration.MigrationActivity.Companion.maybeShowWhatsNewDialog
28 import com.android.healthconnect.controller.migration.MigrationViewModel
29 import com.android.healthconnect.controller.migration.MigrationViewModel.MigrationFragmentState
30 import com.android.healthconnect.controller.migration.api.MigrationRestoreState.MigrationUiState
31 import com.android.healthconnect.controller.navigation.DestinationChangedListener
32 import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity
33 import dagger.hilt.android.AndroidEntryPoint
34 
35 /** Entry point activity for Health Connect Data Management controllers. */
36 @AndroidEntryPoint(CollapsingToolbarBaseActivity::class)
37 class DataManagementActivity : Hilt_DataManagementActivity() {
38 
39     private val migrationViewModel: MigrationViewModel by viewModels()
40 
41     override fun onCreate(savedInstanceState: Bundle?) {
42         super.onCreate(savedInstanceState)
43 
44         // This flag ensures a non system app cannot show an overlay on Health Connect. b/313425281
45         window.addSystemFlags(
46             WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS
47         )
48 
49         setContentView(R.layout.activity_data_management)
50 
51         val currentMigrationState = migrationViewModel.getCurrentMigrationUiState()
52         if (maybeRedirectToMigrationActivity(this, currentMigrationState)) {
53             return
54         }
55 
56         migrationViewModel.migrationState.observe(this) { migrationState ->
57             when (migrationState) {
58                 is MigrationFragmentState.WithData -> {
59                     if (
60                         migrationState.migrationRestoreState.migrationUiState ==
61                             MigrationUiState.COMPLETE
62                     ) {
63                         maybeShowWhatsNewDialog(this)
64                     }
65                 }
66                 else -> {
67                     // do nothing
68                 }
69             }
70         }
71     }
72 
73     override fun onStart() {
74         super.onStart()
75         findNavController(R.id.nav_host_fragment)
76             .addOnDestinationChangedListener(DestinationChangedListener(this))
77     }
78 
79     override fun onResume() {
80         super.onResume()
81         val currentMigrationState = migrationViewModel.getCurrentMigrationUiState()
82 
83         if (maybeRedirectToMigrationActivity(this, currentMigrationState)) {
84             return
85         }
86     }
87 
88     override fun onBackPressed() {
89         val navController = findNavController(R.id.nav_host_fragment)
90         if (!navController.popBackStack()) {
91             finish()
92         }
93     }
94 
95     override fun onNavigateUp(): Boolean {
96         val navController = findNavController(R.id.nav_host_fragment)
97         if (!navController.popBackStack()) {
98             finish()
99         }
100         return true
101     }
102 }
103