Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Identity] Dagger - Move injection to IdentityActivity #5249

Merged
merged 4 commits into from
Jul 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
34 changes: 14 additions & 20 deletions identity/api/identity.api
Expand Up @@ -5,6 +5,16 @@ public final class com/stripe/android/identity/BuildConfig {
public fun <init> ()V
}

public final class com/stripe/android/identity/IdentityActivity_MembersInjector : dagger/MembersInjector {
public fun <init> (Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V
public static fun create (Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Ldagger/MembersInjector;
public fun injectMembers (Lcom/stripe/android/identity/IdentityActivity;)V
public synthetic fun injectMembers (Ljava/lang/Object;)V
public static fun injectSubComponentBuilderProvider (Lcom/stripe/android/identity/IdentityActivity;Ljavax/inject/Provider;)V
public static fun injectUiContext (Lcom/stripe/android/identity/IdentityActivity;Lkotlin/coroutines/CoroutineContext;)V
public static fun injectWorkContext (Lcom/stripe/android/identity/IdentityActivity;Lkotlin/coroutines/CoroutineContext;)V
}

public abstract interface class com/stripe/android/identity/IdentityVerificationSheet {
public static final field Companion Lcom/stripe/android/identity/IdentityVerificationSheet$Companion;
public abstract fun present (Ljava/lang/String;Ljava/lang/String;)V
Expand Down Expand Up @@ -291,12 +301,12 @@ public final class com/stripe/android/identity/databinding/SelfieScanFragmentBin
public static fun inflate (Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Z)Lcom/stripe/android/identity/databinding/SelfieScanFragmentBinding;
}

public final class com/stripe/android/identity/injection/DaggerIdentityVerificationSheetComponent {
public static fun builder ()Lcom/stripe/android/identity/injection/IdentityVerificationSheetComponent$Builder;
public final class com/stripe/android/identity/injection/DaggerIdentityActivityFallbackComponent {
public static fun builder ()Lcom/stripe/android/identity/injection/IdentityActivityFallbackComponent$Builder;
}

public final class com/stripe/android/identity/injection/DaggerIdentityViewModelFactoryComponent {
public static fun builder ()Lcom/stripe/android/identity/injection/IdentityViewModelFactoryComponent$Builder;
public final class com/stripe/android/identity/injection/DaggerIdentityVerificationSheetComponent {
public static fun builder ()Lcom/stripe/android/identity/injection/IdentityVerificationSheetComponent$Builder;
}

public final class com/stripe/android/identity/injection/IdentityCommonModule_Companion_ProvideStripeNetworkClientFactory : dagger/internal/Factory {
Expand Down Expand Up @@ -376,19 +386,3 @@ public final class com/stripe/android/identity/viewmodel/IdentityUploadViewModel
public static fun newInstance (Lcom/stripe/android/identity/utils/IdentityIO;)Lcom/stripe/android/identity/viewmodel/IdentityUploadViewModel$FrontBackUploadViewModelFactory;
}

public final class com/stripe/android/identity/viewmodel/IdentityViewModel_Factory : dagger/internal/Factory {
public fun <init> (Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V
public static fun create (Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/stripe/android/identity/viewmodel/IdentityViewModel_Factory;
public fun get ()Lcom/stripe/android/identity/viewmodel/IdentityViewModel;
public synthetic fun get ()Ljava/lang/Object;
public static fun newInstance (Lcom/stripe/android/identity/IdentityVerificationSheetContract$Args;Lcom/stripe/android/identity/networking/IdentityRepository;Lcom/stripe/android/identity/networking/IdentityModelFetcher;Lcom/stripe/android/identity/utils/IdentityIO;Lcom/stripe/android/identity/navigation/IdentityFragmentFactory;Lcom/stripe/android/identity/analytics/IdentityAnalyticsRequestFactory;Lcom/stripe/android/identity/analytics/FPSTracker;Lcom/stripe/android/identity/analytics/ScreenTracker;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lcom/stripe/android/identity/viewmodel/IdentityViewModel;
}

public final class com/stripe/android/identity/viewmodel/IdentityViewModel_IdentityViewModelFactory_MembersInjector : dagger/MembersInjector {
public fun <init> (Ljavax/inject/Provider;)V
public static fun create (Ljavax/inject/Provider;)Ldagger/MembersInjector;
public fun injectMembers (Lcom/stripe/android/identity/viewmodel/IdentityViewModel$IdentityViewModelFactory;)V
public synthetic fun injectMembers (Ljava/lang/Object;)V
public static fun injectSubComponentBuilderProvider (Lcom/stripe/android/identity/viewmodel/IdentityViewModel$IdentityViewModelFactory;Ljavax/inject/Provider;)V
}

@@ -1,6 +1,7 @@
package com.stripe.android.identity

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
Expand All @@ -19,33 +20,41 @@ import androidx.navigation.fragment.NavHostFragment
import com.google.android.material.appbar.MaterialToolbar
import com.stripe.android.camera.CameraPermissionCheckingActivity
import com.stripe.android.camera.framework.time.asEpochMillisecondsClockMark
import com.stripe.android.core.injection.IOContext
import com.stripe.android.core.injection.Injectable
import com.stripe.android.core.injection.UIContext
import com.stripe.android.core.injection.injectWithFallback
import com.stripe.android.identity.IdentityVerificationSheet.VerificationFlowResult
import com.stripe.android.identity.analytics.IdentityAnalyticsRequestFactory.Companion.SCREEN_NAME_CONSENT
import com.stripe.android.identity.databinding.IdentityActivityBinding
import com.stripe.android.identity.injection.DaggerIdentityActivityFallbackComponent
import com.stripe.android.identity.injection.IdentityActivitySubcomponent
import com.stripe.android.identity.navigation.ErrorFragment
import com.stripe.android.identity.networking.models.VerificationPage.Companion.requireSelfie
import com.stripe.android.identity.utils.navigateUpAndSetArgForUploadFragment
import com.stripe.android.identity.viewmodel.IdentityViewModel
import javax.inject.Inject
import javax.inject.Provider
import kotlin.coroutines.CoroutineContext

/**
* Host activity to perform Identity verification.
*/
internal class IdentityActivity :
CameraPermissionCheckingActivity(),
VerificationFlowFinishable,
FallbackUrlLauncher {
FallbackUrlLauncher,
Injectable<Context> {
@VisibleForTesting
internal lateinit var navController: NavController

@VisibleForTesting
internal var viewModelFactory: ViewModelProvider.Factory =
IdentityViewModel.IdentityViewModelFactory(
this,
{ starterArgs },
this,
this,
this,
this
{ uiContext },
{ workContext },
{ subcomponent }
)

private val binding by lazy {
Expand All @@ -71,14 +80,47 @@ internal class IdentityActivity :

private var launchedFallbackUrl: Boolean = false

lateinit var subcomponent: IdentityActivitySubcomponent

@Inject
lateinit var subComponentBuilderProvider: Provider<IdentityActivitySubcomponent.Builder>

@Inject
@UIContext
lateinit var uiContext: CoroutineContext

@Inject
@IOContext
lateinit var workContext: CoroutineContext

override fun fallbackInitialize(arg: Context) {
DaggerIdentityActivityFallbackComponent.builder()
.context(arg)
.build().inject(this)
}

override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean(KEY_LAUNCHED_FALLBACK_URL, launchedFallbackUrl)
outState.putBoolean(KEY_PRESENTED, true)
}

override fun onCreate(savedInstanceState: Bundle?) {
supportFragmentManager.fragmentFactory = identityViewModel.identityFragmentFactory
injectWithFallback(
starterArgs.injectorKey,
this
)
subcomponent = subComponentBuilderProvider.get()
.args(starterArgs)
.cameraPermissionEnsureable(this)
.appSettingsOpenable(this)
.verificationFlowFinishable(this)
.identityViewModelFactory(viewModelFactory as IdentityViewModel.IdentityViewModelFactory)
.fallbackUrlLauncher(this)
.build()
ccen-stripe marked this conversation as resolved.
Show resolved Hide resolved

supportFragmentManager.fragmentFactory = subcomponent.identityFragmentFactory

super.onCreate(savedInstanceState)
fallbackUrlLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
Expand Down
Expand Up @@ -11,7 +11,6 @@ import com.stripe.android.core.injection.InjectorKey
import com.stripe.android.core.injection.WeakMapInjectorRegistry
import com.stripe.android.identity.injection.DaggerIdentityVerificationSheetComponent
import com.stripe.android.identity.injection.IdentityVerificationSheetComponent
import com.stripe.android.identity.viewmodel.IdentityViewModel

internal class StripeIdentityVerificationSheet private constructor(
activityResultCaller: ActivityResultCaller,
Expand Down Expand Up @@ -78,7 +77,7 @@ internal class StripeIdentityVerificationSheet private constructor(

override fun inject(injectable: Injectable<*>) {
when (injectable) {
is IdentityViewModel.IdentityViewModelFactory -> {
is IdentityActivity -> {
identityVerificationSheetComponent.inject(injectable)
}
else -> {
Expand Down
Expand Up @@ -2,7 +2,7 @@ package com.stripe.android.identity.injection

import android.content.Context
import com.stripe.android.core.injection.CoroutineContextModule
import com.stripe.android.identity.viewmodel.IdentityViewModel
import com.stripe.android.identity.IdentityActivity
import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton
Expand All @@ -14,14 +14,14 @@ import javax.inject.Singleton
CoroutineContextModule::class
]
)
internal interface IdentityViewModelFactoryComponent {
fun inject(factory: IdentityViewModel.IdentityViewModelFactory)
internal interface IdentityActivityFallbackComponent {
fun inject(activity: IdentityActivity)

@Component.Builder
interface Builder {
@BindsInstance
fun context(context: Context): Builder

fun build(): IdentityViewModelFactoryComponent
fun build(): IdentityActivityFallbackComponent
}
}
Expand Up @@ -5,13 +5,27 @@ import com.stripe.android.camera.CameraPermissionEnsureable
import com.stripe.android.identity.FallbackUrlLauncher
import com.stripe.android.identity.IdentityVerificationSheetContract
import com.stripe.android.identity.VerificationFlowFinishable
import com.stripe.android.identity.analytics.FPSTracker
import com.stripe.android.identity.analytics.IdentityAnalyticsRequestFactory
import com.stripe.android.identity.analytics.ScreenTracker
import com.stripe.android.identity.navigation.IdentityFragmentFactory
import com.stripe.android.identity.networking.IdentityModelFetcher
import com.stripe.android.identity.networking.IdentityRepository
import com.stripe.android.identity.utils.IdentityIO
import com.stripe.android.identity.viewmodel.IdentityViewModel
import dagger.BindsInstance
import dagger.Subcomponent

@Subcomponent
internal interface IdentityViewModelSubcomponent {
val viewModel: IdentityViewModel
internal interface IdentityActivitySubcomponent {
ccen-stripe marked this conversation as resolved.
Show resolved Hide resolved
val identityFragmentFactory: IdentityFragmentFactory
val identityRepository: IdentityRepository
val identityModelFetcher: IdentityModelFetcher
val identityIO: IdentityIO
val identityAnalyticsRequestFactory: IdentityAnalyticsRequestFactory
val fpsTracker: FPSTracker
val screenTracker: ScreenTracker
val verificationArgs: IdentityVerificationSheetContract.Args

@Subcomponent.Builder
interface Builder {
Expand All @@ -34,6 +48,6 @@ internal interface IdentityViewModelSubcomponent {
@BindsInstance
fun fallbackUrlLauncher(fallbackUrlLauncher: FallbackUrlLauncher): Builder

fun build(): IdentityViewModelSubcomponent
fun build(): IdentityActivitySubcomponent
}
}
Expand Up @@ -14,7 +14,7 @@ import dagger.Provides
import javax.inject.Singleton

@Module(
subcomponents = [IdentityViewModelSubcomponent::class]
subcomponents = [IdentityActivitySubcomponent::class]
)
internal abstract class IdentityCommonModule {
@Binds
Expand Down
Expand Up @@ -2,7 +2,7 @@ package com.stripe.android.identity.injection

import android.content.Context
import com.stripe.android.core.injection.CoroutineContextModule
import com.stripe.android.identity.viewmodel.IdentityViewModel
import com.stripe.android.identity.IdentityActivity
import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton
Expand All @@ -15,7 +15,7 @@ import javax.inject.Singleton
]
)
internal interface IdentityVerificationSheetComponent {
fun inject(identityViewModelFactory: IdentityViewModel.IdentityViewModelFactory)
fun inject(identityActivity: IdentityActivity)

@Component.Builder
interface Builder {
Expand Down