• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 package android.healthconnect.cts.lib
17 
18 import android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS
19 import android.content.Context
20 import android.content.Intent
21 import android.content.Intent.EXTRA_PACKAGE_NAME
22 import android.content.pm.PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES
23 import android.health.connect.HealthConnectManager
24 import android.healthconnect.cts.lib.UiTestUtils.TEST_APP_PACKAGE_NAME
25 import android.healthconnect.cts.lib.UiTestUtils.skipOnboardingIfAppears
26 import com.android.compatibility.common.util.SystemUtil
27 import com.android.compatibility.common.util.UiAutomatorUtils2.getUiDevice
28 
29 /** A class that provides a way to launch the Health Connect [MainActivity] in tests. */
30 object ActivityLauncher {
31     /** Launches the Main activity and exits it once [block] completes. */
Contextnull32     fun Context.launchMainActivity(block: () -> Unit) {
33         val intent =
34             Intent("android.health.connect.action.HEALTH_HOME_SETTINGS")
35                 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
36                 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
37         executeBlockAndExit(block) {
38             startActivity(intent)
39             skipOnboardingIfAppears()
40         }
41     }
42 
Contextnull43     fun Context.launchDataActivity(block: () -> Unit) {
44         val intent =
45             Intent("android.health.connect.action.MANAGE_HEALTH_DATA")
46                 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
47                 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
48         executeBlockAndExit(block) {
49             startActivity(intent)
50             skipOnboardingIfAppears()
51         }
52     }
53 
Contextnull54     fun Context.launchRequestPermissionActivity(
55         packageName: String = TEST_APP_PACKAGE_NAME,
56         permissions: List<String>,
57         block: () -> Unit
58     ) {
59         val intent =
60             Intent(HealthConnectManager.ACTION_REQUEST_HEALTH_PERMISSIONS).apply {
61                 addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
62                 addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
63                 putExtra(EXTRA_REQUEST_PERMISSIONS_NAMES, permissions.toTypedArray())
64                 putExtra(EXTRA_PACKAGE_NAME, packageName)
65             }
66         executeBlockAndExit(block) {
67             SystemUtil.runWithShellPermissionIdentity(
68                 {
69                     startActivity(intent)
70                     skipOnboardingIfAppears()
71                 },
72                 GRANT_RUNTIME_PERMISSIONS)
73         }
74     }
75 
executeBlockAndExitnull76     private fun executeBlockAndExit(block: () -> Unit, launchActivity: () -> Unit) {
77         val uiDevice = getUiDevice()
78         uiDevice.waitForIdle()
79         launchActivity()
80         uiDevice.waitForIdle()
81         block()
82         uiDevice.pressBack()
83         uiDevice.waitForIdle()
84     }
85 }
86