blob: bcd30bb81382cae5ec9f732d3f92155279d8d350 [file]
package com.android.onboarding.contracts
import android.content.Context
import android.os.Bundle
/** Equivalent to [Activity.registerForActivityResult] when a result is not expected. */
fun <I> Context.registerForActivityLaunch(contract: OnboardingActivityApiContract<I, *>) =
ActivityLauncher(this, contract)
/** A wrapper around a request to launch a particular activity via a contract. */
class ActivityLauncher<I>(
private val context: Context,
private val contract: OnboardingActivityApiContract<I, *>,
) {
fun launch(arg: I) {
context.startActivity(contract.createIntentDirectly(context, arg))
}
/** Launches an activity with given [intentFlags] and contract arguments [args]. */
fun launch(arg: I, intentFlags: Int): Long {
val intent = contract.createIntentDirectly(context, arg)
intent.flags = intentFlags
context.startActivity(intent)
return intent.getLongExtra(EXTRA_ONBOARDING_NODE_ID, UNKNOWN_NODE_ID)
}
fun launch(arg: I, options: Bundle?) {
context.startActivity(contract.createIntentDirectly(context, arg), options)
}
}