Skip to content

Commit

Permalink
[Identity] Dagger - Move injection to IdentityActivity (#5249)
Browse files Browse the repository at this point in the history
* [Identity] Move injection to IdentityActivity

* lint

* rename component

* dump API
  • Loading branch information
ccen-stripe committed Jul 6, 2022
1 parent 17d31c8 commit 55a9da7
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 118 deletions.
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 @@ -292,12 +302,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 @@ -377,19 +387,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()

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 {
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

0 comments on commit 55a9da7

Please sign in to comment.