SpectrumSoLoader.smali
.class public Lcom/facebook/spectrum/SpectrumSoLoader;
.super Ljava/lang/Object;
.source "SpectrumSoLoader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/facebook/spectrum/SpectrumSoLoader$SpectrumImplForFbJniSoLoaderDelegate;,
Lcom/facebook/spectrum/SpectrumSoLoader$SystemSoLoaderImpl;,
Lcom/facebook/spectrum/SpectrumSoLoader$FacebookSoLoaderImpl;,
Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;
}
.end annotation
# static fields
.field public static final sAlreadyInitialized:Ljava/util/concurrent/atomic/AtomicBoolean;
.field public static sSoLoaderDelegate:Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;
# direct methods
.method public static constructor <clinit>()V
.registers 2
new-instance v0, Ljava/util/concurrent/atomic/AtomicBoolean;
const/4 v1, 0x0
invoke-direct {v0, v1}, Ljava/util/concurrent/atomic/AtomicBoolean;-><init>(Z)V
sput-object v0, Lcom/facebook/spectrum/SpectrumSoLoader;->sAlreadyInitialized:Ljava/util/concurrent/atomic/AtomicBoolean;
return-void
.end method
.method public constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static init(Landroid/content/Context;)V
.registers 2
new-instance v0, Lcom/facebook/spectrum/SpectrumSoLoader$FacebookSoLoaderImpl;
invoke-direct {v0}, Lcom/facebook/spectrum/SpectrumSoLoader$FacebookSoLoaderImpl;-><init>()V
invoke-static {p0, v0}, Lcom/facebook/spectrum/SpectrumSoLoader;->init(Landroid/content/Context;Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;)V
return-void
.end method
.method public static init(Landroid/content/Context;Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;)V
.registers 4
sget-object v0, Lcom/facebook/spectrum/SpectrumSoLoader;->sAlreadyInitialized:Ljava/util/concurrent/atomic/AtomicBoolean;
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicBoolean;->getAndSet(Z)Z
move-result v0
if-nez v0, :cond_17
sput-object p1, Lcom/facebook/spectrum/SpectrumSoLoader;->sSoLoaderDelegate:Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;
invoke-interface {p1, p0}, Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;->init(Landroid/content/Context;)V
new-instance p0, Lcom/facebook/spectrum/SpectrumSoLoader$SpectrumImplForFbJniSoLoaderDelegate;
const/4 p1, 0x0
invoke-direct {p0, p1}, Lcom/facebook/spectrum/SpectrumSoLoader$SpectrumImplForFbJniSoLoaderDelegate;-><init>(Lcom/facebook/spectrum/SpectrumSoLoader$1;)V
sput-object p0, Lcom/facebook/jni/FbJniSoLoader;->delegate:Lcom/facebook/jni/FbJniSoLoader$SoLoaderWrapper;
return-void
:cond_17
new-instance p0, Ljava/lang/IllegalStateException;
const-string p1, "SpectrumSoLoader must not be initialized more than once"
invoke-direct {p0, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p0
.end method
.method public static loadLibrary(Ljava/lang/String;)V
.registers 4
sget-object v0, Lcom/facebook/spectrum/SpectrumSoLoader;->sAlreadyInitialized:Ljava/util/concurrent/atomic/AtomicBoolean;
monitor-enter v0
:try_start_3
sget-object v1, Lcom/facebook/spectrum/SpectrumSoLoader;->sAlreadyInitialized:Ljava/util/concurrent/atomic/AtomicBoolean;
const/4 v2, 0x1
invoke-virtual {v1, v2}, Ljava/util/concurrent/atomic/AtomicBoolean;->getAndSet(Z)Z
move-result v1
if-nez v1, :cond_13
new-instance v1, Lcom/facebook/spectrum/SpectrumSoLoader$FacebookSoLoaderImpl;
invoke-direct {v1}, Lcom/facebook/spectrum/SpectrumSoLoader$FacebookSoLoaderImpl;-><init>()V
sput-object v1, Lcom/facebook/spectrum/SpectrumSoLoader;->sSoLoaderDelegate:Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;
:cond_13
monitor-exit v0
:try_end_14
.catchall {:try_start_3 .. :try_end_14} :catchall_1a
sget-object v0, Lcom/facebook/spectrum/SpectrumSoLoader;->sSoLoaderDelegate:Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;
invoke-interface {v0, p0}, Lcom/facebook/spectrum/SpectrumSoLoader$SoLoaderWrapper;->loadLibrary(Ljava/lang/String;)V
return-void
:catchall_1a
move-exception p0
:try_start_1b
monitor-exit v0
:try_end_1c
.catchall {:try_start_1b .. :try_end_1c} :catchall_1a
throw p0
.end method