1 package com.android.onboarding.bedsteadonboarding.fakes 2 3 import android.content.ContentValues 4 import android.content.Context 5 import android.os.Build 6 import com.android.onboarding.bedsteadonboarding.contractutils.ContractUtils 7 import com.android.onboarding.bedsteadonboarding.providers.ConfigProviderUtil 8 import com.android.onboarding.contracts.ContractResult 9 import com.android.onboarding.contracts.OnboardingActivityApiContract 10 import com.google.errorprone.annotations.CanIgnoreReturnValue 11 import kotlin.reflect.KClass 12 13 /** Represents a fake activity node. */ 14 class FakeActivityNode<I, O>( 15 val appsStoringFakeNodeConfig: Set<String>, 16 val activityNode: KClass<out OnboardingActivityApiContract<I, O>>, 17 val context: Context, 18 ) { 19 20 /** 21 * Stores the [ActivityResult] to return when the activity node identified by [this] is faked and 22 * is attempted to be executed for result. 23 * 24 * @param contractResult The [ActivityResult] to return 25 */ 26 @CanIgnoreReturnValue returnsResultnull27 fun returnsResult(contractResult: ContractResult): FakeActivityNode<I, O> { 28 val bundle = 29 when (contractResult) { 30 is ContractResult.Success, 31 is ContractResult.Failure -> 32 FakeActivityNodeHelper.createBundleFromContractResultAndIdentifier( 33 contractResult, 34 ContractUtils.getContractIdentifier(activityNode.java), 35 ) 36 else -> 37 error( 38 "Unsupported Contract Result type $contractResult for fake node ${activityNode.simpleName}" 39 ) 40 } 41 42 // Since passing of bundle to [ContentResolver#insert] is supported from API level 30. 43 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { 44 error("Faking response of activity node is not supported for Android API level < 30") 45 } 46 47 // Insert bundle to all packages storing test configurations. 48 for (appStoringConfig in appsStoringFakeNodeConfig) { 49 val uri = 50 ConfigProviderUtil.getFakeActivityNodeConfigInsertionUri(packageName = appStoringConfig) 51 context.contentResolver.insert(uri, ContentValues(), bundle) 52 } 53 54 return this 55 } 56 } 57