.class public final Landroidx/credentials/CredentialProviderFactory; .super Ljava/lang/Object; .source "SourceFile" # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Landroidx/credentials/CredentialProviderFactory$Companion; } .end annotation # static fields .field private static final CREDENTIAL_PROVIDER_KEY:Ljava/lang/String; = "androidx.credentials.CREDENTIAL_PROVIDER_KEY" .field public static final Companion:Landroidx/credentials/CredentialProviderFactory$Companion; .field private static final MAX_CRED_MAN_PRE_FRAMEWORK_API_LEVEL:I = 0x21 .field private static final TAG:Ljava/lang/String; = "CredProviderFactory" # instance fields .field private final context:Landroid/content/Context; .field private testMode:Z .field private testPostUProvider:Landroidx/credentials/CredentialProvider; .field private testPreUProvider:Landroidx/credentials/CredentialProvider; # direct methods .method static constructor ()V .locals 2 new-instance v0, Landroidx/credentials/CredentialProviderFactory$Companion; const/4 v1, 0x0 invoke-direct {v0, v1}, Landroidx/credentials/CredentialProviderFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V sput-object v0, Landroidx/credentials/CredentialProviderFactory;->Companion:Landroidx/credentials/CredentialProviderFactory$Companion; return-void .end method .method public constructor (Landroid/content/Context;)V .locals 1 const-string v0, "context" invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V .line 29 invoke-direct {p0}, Ljava/lang/Object;->()V iput-object p1, p0, Landroidx/credentials/CredentialProviderFactory;->context:Landroid/content/Context; return-void .end method .method private final getAllowedProvidersFromManifest(Landroid/content/Context;)Ljava/util/List; .locals 5 .annotation system Ldalvik/annotation/Signature; value = { "(", "Landroid/content/Context;", ")", "Ljava/util/List<", "Ljava/lang/String;", ">;" } .end annotation .line 172 invoke-virtual {p1}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager; move-result-object v0 .line 173 invoke-virtual {p1}, Landroid/content/Context;->getPackageName()Ljava/lang/String; move-result-object p1 const/16 v1, 0x84 .line 172 invoke-virtual {v0, p1, v1}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo; move-result-object p1 .line 177 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V .line 178 iget-object p1, p1, Landroid/content/pm/PackageInfo;->services:[Landroid/content/pm/ServiceInfo; if-eqz p1, :cond_1 .line 179 invoke-static {p1}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V array-length v1, p1 const/4 v2, 0x0 :goto_0 if-ge v2, v1, :cond_1 aget-object v3, p1, v2 .line 180 iget-object v3, v3, Landroid/content/pm/ServiceInfo;->metaData:Landroid/os/Bundle; if-eqz v3, :cond_0 const-string v4, "androidx.credentials.CREDENTIAL_PROVIDER_KEY" .line 181 invoke-virtual {v3, v4}, Landroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String; move-result-object v3 if-eqz v3, :cond_0 .line 183 invoke-interface {v0, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z :cond_0 add-int/lit8 v2, v2, 0x1 goto :goto_0 .line 188 :cond_1 invoke-static {v0}, Lkotlin/collections/CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; move-result-object p1 return-object p1 .end method .method public static synthetic getBestAvailableProvider$default(Landroidx/credentials/CredentialProviderFactory;Ljava/lang/Object;ZILjava/lang/Object;)Landroidx/credentials/CredentialProvider; .locals 0 and-int/lit8 p3, p3, 0x2 if-eqz p3, :cond_0 const/4 p2, 0x1 .line 71 :cond_0 invoke-virtual {p0, p1, p2}, Landroidx/credentials/CredentialProviderFactory;->getBestAvailableProvider(Ljava/lang/Object;Z)Landroidx/credentials/CredentialProvider; move-result-object p0 return-object p0 .end method .method public static synthetic getBestAvailableProvider$default(Landroidx/credentials/CredentialProviderFactory;ZILjava/lang/Object;)Landroidx/credentials/CredentialProvider; .locals 0 const/4 p3, 0x1 and-int/2addr p2, p3 if-eqz p2, :cond_0 move p1, p3 .line 92 :cond_0 invoke-virtual {p0, p1}, Landroidx/credentials/CredentialProviderFactory;->getBestAvailableProvider(Z)Landroidx/credentials/CredentialProvider; move-result-object p0 return-object p0 .end method .method private final instantiatePreUProvider(Ljava/util/List;Landroid/content/Context;)Landroidx/credentials/CredentialProvider; .locals 6 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/List<", "Ljava/lang/String;", ">;", "Landroid/content/Context;", ")", "Landroidx/credentials/CredentialProvider;" } .end annotation .line 151 invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object p1 const/4 v0, 0x0 move-object v1, v0 :catchall_0 :cond_0 :goto_0 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_2 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Ljava/lang/String; .line 153 :try_start_0 invoke-static {v2}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; move-result-object v2 const/4 v3, 0x1 new-array v3, v3, [Ljava/lang/Class; const-class v4, Landroid/content/Context; const/4 v5, 0x0 aput-object v4, v3, v5 .line 155 invoke-virtual {v2, v3}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor; move-result-object v2 filled-new-array {p2}, [Ljava/lang/Object; move-result-object v3 invoke-virtual {v2, v3}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object; move-result-object v2 const-string v3, "null cannot be cast to non-null type androidx.credentials.CredentialProvider" invoke-static {v2, v3}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V check-cast v2, Landroidx/credentials/CredentialProvider; .line 157 invoke-interface {v2}, Landroidx/credentials/CredentialProvider;->isAvailableOnDevice()Z move-result v3 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-eqz v3, :cond_0 if-eqz v1, :cond_1 return-object v0 :cond_1 move-object v1, v2 goto :goto_0 :cond_2 return-object v1 .end method .method private final tryCreatePostUProvider()Landroidx/credentials/CredentialProvider; .locals 3 .annotation build Landroidx/annotation/RequiresApi; value = 0x22 .end annotation iget-boolean v0, p0, Landroidx/credentials/CredentialProviderFactory;->testMode:Z const/4 v1, 0x0 if-eqz v0, :cond_2 iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->testPostUProvider:Landroidx/credentials/CredentialProvider; if-nez v0, :cond_0 return-object v1 .line 132 :cond_0 invoke-static {v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V invoke-interface {v0}, Landroidx/credentials/CredentialProvider;->isAvailableOnDevice()Z move-result v0 if-eqz v0, :cond_1 iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->testPostUProvider:Landroidx/credentials/CredentialProvider; return-object v0 :cond_1 return-object v1 .line 139 :cond_2 new-instance v0, Landroidx/credentials/CredentialProviderFrameworkImpl; iget-object v2, p0, Landroidx/credentials/CredentialProviderFactory;->context:Landroid/content/Context; invoke-direct {v0, v2}, Landroidx/credentials/CredentialProviderFrameworkImpl;->(Landroid/content/Context;)V .line 140 invoke-virtual {v0}, Landroidx/credentials/CredentialProviderFrameworkImpl;->isAvailableOnDevice()Z move-result v2 if-eqz v2, :cond_3 return-object v0 :cond_3 return-object v1 .end method .method private final tryCreatePreUOemProvider()Landroidx/credentials/CredentialProvider; .locals 3 iget-boolean v0, p0, Landroidx/credentials/CredentialProviderFactory;->testMode:Z const/4 v1, 0x0 if-eqz v0, :cond_2 iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->testPreUProvider:Landroidx/credentials/CredentialProvider; if-nez v0, :cond_0 return-object v1 .line 111 :cond_0 invoke-static {v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V invoke-interface {v0}, Landroidx/credentials/CredentialProvider;->isAvailableOnDevice()Z move-result v0 if-eqz v0, :cond_1 iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->testPreUProvider:Landroidx/credentials/CredentialProvider; return-object v0 :cond_1 return-object v1 :cond_2 iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->context:Landroid/content/Context; .line 118 invoke-direct {p0, v0}, Landroidx/credentials/CredentialProviderFactory;->getAllowedProvidersFromManifest(Landroid/content/Context;)Ljava/util/List; move-result-object v0 .line 119 invoke-interface {v0}, Ljava/util/List;->isEmpty()Z move-result v2 if-eqz v2, :cond_3 return-object v1 :cond_3 iget-object v1, p0, Landroidx/credentials/CredentialProviderFactory;->context:Landroid/content/Context; .line 122 invoke-direct {p0, v0, v1}, Landroidx/credentials/CredentialProviderFactory;->instantiatePreUProvider(Ljava/util/List;Landroid/content/Context;)Landroidx/credentials/CredentialProvider; move-result-object v0 return-object v0 .end method # virtual methods .method public final getBestAvailableProvider(Ljava/lang/Object;Z)Landroidx/credentials/CredentialProvider; .locals 2 const-string v0, "request" invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V .line 75 instance-of v0, p1, Landroidx/credentials/CreateRestoreCredentialRequest; if-nez v0, :cond_4 const-string v0, "androidx.credentials.TYPE_CLEAR_RESTORE_CREDENTIAL" invoke-static {p1, v0}, Lkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 goto :goto_0 .line 77 :cond_0 instance-of v0, p1, Landroidx/credentials/GetCredentialRequest; if-eqz v0, :cond_3 .line 78 check-cast p1, Landroidx/credentials/GetCredentialRequest; invoke-virtual {p1}, Landroidx/credentials/GetCredentialRequest;->getCredentialOptions()Ljava/util/List; move-result-object p1 invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object p1 :cond_1 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_3 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Landroidx/credentials/CredentialOption; .line 79 instance-of v1, v0, Landroidx/credentials/GetRestoreCredentialOption; if-nez v1, :cond_2 instance-of v0, v0, Landroidx/credentials/GetDigitalCredentialOption; if-eqz v0, :cond_1 .line 80 :cond_2 invoke-direct {p0}, Landroidx/credentials/CredentialProviderFactory;->tryCreatePreUOemProvider()Landroidx/credentials/CredentialProvider; move-result-object p1 return-object p1 .line 84 :cond_3 invoke-virtual {p0, p2}, Landroidx/credentials/CredentialProviderFactory;->getBestAvailableProvider(Z)Landroidx/credentials/CredentialProvider; move-result-object p1 return-object p1 .line 76 :cond_4 :goto_0 invoke-direct {p0}, Landroidx/credentials/CredentialProviderFactory;->tryCreatePreUOemProvider()Landroidx/credentials/CredentialProvider; move-result-object p1 return-object p1 .end method .method public final getBestAvailableProvider(Z)Landroidx/credentials/CredentialProvider; .locals 2 sget v0, Landroid/os/Build$VERSION;->SDK_INT:I const/16 v1, 0x22 if-lt v0, v1, :cond_1 .line 94 invoke-direct {p0}, Landroidx/credentials/CredentialProviderFactory;->tryCreatePostUProvider()Landroidx/credentials/CredentialProvider; move-result-object v0 if-nez v0, :cond_0 if-eqz p1, :cond_0 .line 96 invoke-direct {p0}, Landroidx/credentials/CredentialProviderFactory;->tryCreatePreUOemProvider()Landroidx/credentials/CredentialProvider; move-result-object p1 return-object p1 :cond_0 return-object v0 :cond_1 const/16 p1, 0x21 if-gt v0, p1, :cond_2 .line 100 invoke-direct {p0}, Landroidx/credentials/CredentialProviderFactory;->tryCreatePreUOemProvider()Landroidx/credentials/CredentialProvider; move-result-object p1 return-object p1 :cond_2 const/4 p1, 0x0 return-object p1 .end method .method public final getContext()Landroid/content/Context; .locals 1 iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->context:Landroid/content/Context; return-object v0 .end method .method public final getTestMode()Z .locals 1 .annotation build Landroidx/annotation/RestrictTo; value = { .enum Landroidx/annotation/RestrictTo$Scope;->LIBRARY:Landroidx/annotation/RestrictTo$Scope; } .end annotation .annotation build Landroidx/annotation/VisibleForTesting; .end annotation iget-boolean v0, p0, Landroidx/credentials/CredentialProviderFactory;->testMode:Z return v0 .end method .method public final getTestPostUProvider()Landroidx/credentials/CredentialProvider; .locals 1 .annotation build Landroidx/annotation/RestrictTo; value = { .enum Landroidx/annotation/RestrictTo$Scope;->LIBRARY:Landroidx/annotation/RestrictTo$Scope; } .end annotation .annotation build Landroidx/annotation/VisibleForTesting; .end annotation iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->testPostUProvider:Landroidx/credentials/CredentialProvider; return-object v0 .end method .method public final getTestPreUProvider()Landroidx/credentials/CredentialProvider; .locals 1 .annotation build Landroidx/annotation/RestrictTo; value = { .enum Landroidx/annotation/RestrictTo$Scope;->LIBRARY:Landroidx/annotation/RestrictTo$Scope; } .end annotation .annotation build Landroidx/annotation/VisibleForTesting; .end annotation iget-object v0, p0, Landroidx/credentials/CredentialProviderFactory;->testPreUProvider:Landroidx/credentials/CredentialProvider; return-object v0 .end method .method public final setTestMode(Z)V .locals 0 .annotation build Landroidx/annotation/RestrictTo; value = { .enum Landroidx/annotation/RestrictTo$Scope;->LIBRARY:Landroidx/annotation/RestrictTo$Scope; } .end annotation .annotation build Landroidx/annotation/VisibleForTesting; .end annotation iput-boolean p1, p0, Landroidx/credentials/CredentialProviderFactory;->testMode:Z return-void .end method .method public final setTestPostUProvider(Landroidx/credentials/CredentialProvider;)V .locals 0 .annotation build Landroidx/annotation/RestrictTo; value = { .enum Landroidx/annotation/RestrictTo$Scope;->LIBRARY:Landroidx/annotation/RestrictTo$Scope; } .end annotation .annotation build Landroidx/annotation/VisibleForTesting; .end annotation iput-object p1, p0, Landroidx/credentials/CredentialProviderFactory;->testPostUProvider:Landroidx/credentials/CredentialProvider; return-void .end method .method public final setTestPreUProvider(Landroidx/credentials/CredentialProvider;)V .locals 0 .annotation build Landroidx/annotation/RestrictTo; value = { .enum Landroidx/annotation/RestrictTo$Scope;->LIBRARY:Landroidx/annotation/RestrictTo$Scope; } .end annotation .annotation build Landroidx/annotation/VisibleForTesting; .end annotation iput-object p1, p0, Landroidx/credentials/CredentialProviderFactory;->testPreUProvider:Landroidx/credentials/CredentialProvider; return-void .end method