ImageFormatChecker.smali
.class public Lcom/facebook/imageformat/ImageFormatChecker;
.super Ljava/lang/Object;
.source "ImageFormatChecker.java"
# static fields
.field private static sInstance:Lcom/facebook/imageformat/ImageFormatChecker;
# instance fields
.field private mCustomImageFormatCheckers:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/facebook/imageformat/ImageFormat$FormatChecker;",
">;"
}
.end annotation
.annotation runtime Ljavax/annotation/Nullable;
.end annotation
.end field
.field private final mDefaultFormatChecker:Lcom/facebook/imageformat/DefaultImageFormatChecker;
.field private mMaxHeaderLength:I
# direct methods
.method private constructor <init>()V
.registers 2
.line 33
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 31
new-instance v0, Lcom/facebook/imageformat/DefaultImageFormatChecker;
invoke-direct {v0}, Lcom/facebook/imageformat/DefaultImageFormatChecker;-><init>()V
iput-object v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mDefaultFormatChecker:Lcom/facebook/imageformat/DefaultImageFormatChecker;
.line 34
invoke-direct {p0}, Lcom/facebook/imageformat/ImageFormatChecker;->updateMaxHeaderLength()V
return-void
.end method
.method public static getImageFormat(Ljava/io/InputStream;)Lcom/facebook/imageformat/ImageFormat;
.registers 2
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x10
}
names = {
"is"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 131
invoke-static {}, Lcom/facebook/imageformat/ImageFormatChecker;->getInstance()Lcom/facebook/imageformat/ImageFormatChecker;
move-result-object v0
invoke-virtual {v0, p0}, Lcom/facebook/imageformat/ImageFormatChecker;->determineImageFormat(Ljava/io/InputStream;)Lcom/facebook/imageformat/ImageFormat;
move-result-object p0
return-object p0
.end method
.method public static getImageFormat(Ljava/lang/String;)Lcom/facebook/imageformat/ImageFormat;
.registers 3
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"filename"
}
.end annotation
const/4 v0, 0x0
.line 157
:try_start_1
new-instance v1, Ljava/io/FileInputStream;
invoke-direct {v1, p0}, Ljava/io/FileInputStream;-><init>(Ljava/lang/String;)V
:try_end_6
.catch Ljava/io/IOException; {:try_start_1 .. :try_end_6} :catch_15
.catchall {:try_start_1 .. :try_end_6} :catchall_13
.line 158
:try_start_6
invoke-static {v1}, Lcom/facebook/imageformat/ImageFormatChecker;->getImageFormat(Ljava/io/InputStream;)Lcom/facebook/imageformat/ImageFormat;
move-result-object p0
:try_end_a
.catch Ljava/io/IOException; {:try_start_6 .. :try_end_a} :catch_11
.catchall {:try_start_6 .. :try_end_a} :catchall_e
.line 162
invoke-static {v1}, Lcom/facebook/common/internal/Closeables;->closeQuietly(Ljava/io/InputStream;)V
return-object p0
:catchall_e
move-exception p0
move-object v0, v1
goto :goto_1b
:catch_11
move-object v0, v1
goto :goto_15
:catchall_13
move-exception p0
goto :goto_1b
.line 160
:catch_15
:goto_15
:try_start_15
sget-object p0, Lcom/facebook/imageformat/ImageFormat;->UNKNOWN:Lcom/facebook/imageformat/ImageFormat;
:try_end_17
.catchall {:try_start_15 .. :try_end_17} :catchall_13
.line 162
invoke-static {v0}, Lcom/facebook/common/internal/Closeables;->closeQuietly(Ljava/io/InputStream;)V
return-object p0
:goto_1b
invoke-static {v0}, Lcom/facebook/common/internal/Closeables;->closeQuietly(Ljava/io/InputStream;)V
.line 163
throw p0
.end method
.method public static getImageFormat_WrapIOException(Ljava/io/InputStream;)Lcom/facebook/imageformat/ImageFormat;
.registers 1
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x10
}
names = {
"is"
}
.end annotation
.line 140
:try_start_0
invoke-static {p0}, Lcom/facebook/imageformat/ImageFormatChecker;->getImageFormat(Ljava/io/InputStream;)Lcom/facebook/imageformat/ImageFormat;
move-result-object p0
:try_end_4
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_4} :catch_5
return-object p0
:catch_5
move-exception p0
.line 142
invoke-static {p0}, Lcom/facebook/common/internal/Throwables;->propagate(Ljava/lang/Throwable;)Ljava/lang/RuntimeException;
move-result-object p0
throw p0
.end method
.method public static declared-synchronized getInstance()Lcom/facebook/imageformat/ImageFormatChecker;
.registers 2
const-class v0, Lcom/facebook/imageformat/ImageFormatChecker;
monitor-enter v0
.line 114
:try_start_3
sget-object v1, Lcom/facebook/imageformat/ImageFormatChecker;->sInstance:Lcom/facebook/imageformat/ImageFormatChecker;
if-nez v1, :cond_e
.line 115
new-instance v1, Lcom/facebook/imageformat/ImageFormatChecker;
invoke-direct {v1}, Lcom/facebook/imageformat/ImageFormatChecker;-><init>()V
sput-object v1, Lcom/facebook/imageformat/ImageFormatChecker;->sInstance:Lcom/facebook/imageformat/ImageFormatChecker;
.line 117
:cond_e
sget-object v1, Lcom/facebook/imageformat/ImageFormatChecker;->sInstance:Lcom/facebook/imageformat/ImageFormatChecker;
:try_end_10
.catchall {:try_start_3 .. :try_end_10} :catchall_12
monitor-exit v0
return-object v1
:catchall_12
move-exception v1
monitor-exit v0
throw v1
.end method
.method private static readHeaderFromStream(ILjava/io/InputStream;[B)I
.registers 5
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x10,
0x10
}
names = {
"maxHeaderLength",
"is",
"imageHeaderBytes"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 90
invoke-static {p1}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 91
invoke-static {p2}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 92
array-length v0, p2
const/4 v1, 0x0
if-lt v0, p0, :cond_c
const/4 v0, 0x1
goto :goto_d
:cond_c
move v0, v1
:goto_d
invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v0
invoke-static {v0}, Lcom/facebook/common/internal/Preconditions;->checkArgument(Ljava/lang/Boolean;)V
.line 96
invoke-virtual {p1}, Ljava/io/InputStream;->markSupported()Z
move-result v0
if-eqz v0, :cond_2a
.line 98
:try_start_1a
invoke-virtual {p1, p0}, Ljava/io/InputStream;->mark(I)V
.line 99
invoke-static {p1, p2, v1, p0}, Lcom/facebook/common/internal/ByteStreams;->read(Ljava/io/InputStream;[BII)I
move-result p0
:try_end_21
.catchall {:try_start_1a .. :try_end_21} :catchall_25
.line 101
invoke-virtual {p1}, Ljava/io/InputStream;->reset()V
return p0
:catchall_25
move-exception p0
invoke-virtual {p1}, Ljava/io/InputStream;->reset()V
.line 102
throw p0
.line 104
:cond_2a
invoke-static {p1, p2, v1, p0}, Lcom/facebook/common/internal/ByteStreams;->read(Ljava/io/InputStream;[BII)I
move-result p0
return p0
.end method
.method private updateMaxHeaderLength()V
.registers 4
.line 69
iget-object v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mDefaultFormatChecker:Lcom/facebook/imageformat/DefaultImageFormatChecker;
invoke-virtual {v0}, Lcom/facebook/imageformat/DefaultImageFormatChecker;->getHeaderSize()I
move-result v0
iput v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mMaxHeaderLength:I
.line 70
iget-object v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mCustomImageFormatCheckers:Ljava/util/List;
if-eqz v0, :cond_29
.line 71
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v0
:goto_10
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v1
if-eqz v1, :cond_29
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/facebook/imageformat/ImageFormat$FormatChecker;
.line 72
iget v2, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mMaxHeaderLength:I
invoke-interface {v1}, Lcom/facebook/imageformat/ImageFormat$FormatChecker;->getHeaderSize()I
move-result v1
invoke-static {v2, v1}, Ljava/lang/Math;->max(II)I
move-result v1
iput v1, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mMaxHeaderLength:I
goto :goto_10
:cond_29
return-void
.end method
# virtual methods
.method public determineImageFormat(Ljava/io/InputStream;)Lcom/facebook/imageformat/ImageFormat;
.registers 6
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x10
}
names = {
"is"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 48
invoke-static {p1}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 49
iget v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mMaxHeaderLength:I
new-array v1, v0, [B
.line 50
invoke-static {v0, p1, v1}, Lcom/facebook/imageformat/ImageFormatChecker;->readHeaderFromStream(ILjava/io/InputStream;[B)I
move-result p1
.line 52
iget-object v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mDefaultFormatChecker:Lcom/facebook/imageformat/DefaultImageFormatChecker;
invoke-virtual {v0, v1, p1}, Lcom/facebook/imageformat/DefaultImageFormatChecker;->determineFormat([BI)Lcom/facebook/imageformat/ImageFormat;
move-result-object v0
if-eqz v0, :cond_18
.line 53
sget-object v2, Lcom/facebook/imageformat/ImageFormat;->UNKNOWN:Lcom/facebook/imageformat/ImageFormat;
if-eq v0, v2, :cond_18
return-object v0
.line 57
:cond_18
iget-object v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mCustomImageFormatCheckers:Ljava/util/List;
if-eqz v0, :cond_37
.line 58
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v0
:cond_20
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_37
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Lcom/facebook/imageformat/ImageFormat$FormatChecker;
.line 59
invoke-interface {v2, v1, p1}, Lcom/facebook/imageformat/ImageFormat$FormatChecker;->determineFormat([BI)Lcom/facebook/imageformat/ImageFormat;
move-result-object v2
if-eqz v2, :cond_20
.line 60
sget-object v3, Lcom/facebook/imageformat/ImageFormat;->UNKNOWN:Lcom/facebook/imageformat/ImageFormat;
if-eq v2, v3, :cond_20
return-object v2
.line 65
:cond_37
sget-object p1, Lcom/facebook/imageformat/ImageFormat;->UNKNOWN:Lcom/facebook/imageformat/ImageFormat;
return-object p1
.end method
.method public setCustomImageFormatCheckers(Ljava/util/List;)V
.registers 2
.param p1 # Ljava/util/List;
.annotation runtime Ljavax/annotation/Nullable;
.end annotation
.end param
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"customImageFormatCheckers"
}
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Lcom/facebook/imageformat/ImageFormat$FormatChecker;",
">;)V"
}
.end annotation
.line 43
iput-object p1, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mCustomImageFormatCheckers:Ljava/util/List;
.line 44
invoke-direct {p0}, Lcom/facebook/imageformat/ImageFormatChecker;->updateMaxHeaderLength()V
return-void
.end method
.method public setUseNewOrder(Z)V
.registers 3
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"useNewOrder"
}
.end annotation
.line 38
iget-object v0, p0, Lcom/facebook/imageformat/ImageFormatChecker;->mDefaultFormatChecker:Lcom/facebook/imageformat/DefaultImageFormatChecker;
invoke-virtual {v0, p1}, Lcom/facebook/imageformat/DefaultImageFormatChecker;->setUseNewOrder(Z)V
return-void
.end method