ImageRequest.smali
.class public Lcom/h/o/ImageRequest;
.super Lcom/h/o/RestRequest;
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/h/o/RestRequest",
"<",
"Landroid/graphics/Bitmap;",
">;"
}
.end annotation
# static fields
.field private static final DECODE_LOCK:Ljava/lang/Object;
# instance fields
.field private final mDecodeConfig:Landroid/graphics/Bitmap$Config;
.field private final mMaxHeight:I
.field private final mMaxWidth:I
.field private mScaleType:Landroid/widget/ImageView$ScaleType;
# direct methods
.method static constructor <clinit>()V
.registers 1
new-instance v0, Ljava/lang/Object;
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
sput-object v0, Lcom/h/o/ImageRequest;->DECODE_LOCK:Ljava/lang/Object;
return-void
.end method
.method public constructor <init>(Ljava/lang/String;Lcom/h/r/RequestMethod;IILandroid/graphics/Bitmap$Config;Landroid/widget/ImageView$ScaleType;)V
.registers 8
invoke-direct {p0, p1, p2}, Lcom/h/o/RestRequest;-><init>(Ljava/lang/String;Lcom/h/r/RequestMethod;)V
iput p3, p0, Lcom/h/o/ImageRequest;->mMaxWidth:I
iput p4, p0, Lcom/h/o/ImageRequest;->mMaxHeight:I
iput-object p5, p0, Lcom/h/o/ImageRequest;->mDecodeConfig:Landroid/graphics/Bitmap$Config;
iput-object p6, p0, Lcom/h/o/ImageRequest;->mScaleType:Landroid/widget/ImageView$ScaleType;
const-string/jumbo v0, "image/*"
invoke-virtual {p0, v0}, Lcom/h/o/ImageRequest;->setAccept(Ljava/lang/String;)Lcom/h/r/BasicRequest;
return-void
.end method
.method private doResponse([B)Landroid/graphics/Bitmap;
.registers 11
const/4 v8, 0x1
const/4 v7, 0x0
new-instance v0, Landroid/graphics/BitmapFactory$Options;
invoke-direct {v0}, Landroid/graphics/BitmapFactory$Options;-><init>()V
iget v1, p0, Lcom/h/o/ImageRequest;->mMaxWidth:I
if-nez v1, :cond_19
iget v1, p0, Lcom/h/o/ImageRequest;->mMaxHeight:I
if-nez v1, :cond_19
iget-object v1, p0, Lcom/h/o/ImageRequest;->mDecodeConfig:Landroid/graphics/Bitmap$Config;
iput-object v1, v0, Landroid/graphics/BitmapFactory$Options;->inPreferredConfig:Landroid/graphics/Bitmap$Config;
array-length v1, p1
invoke-static {p1, v7, v1, v0}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
move-result-object v0
:goto_18
return-object v0
:cond_19
iput-boolean v8, v0, Landroid/graphics/BitmapFactory$Options;->inJustDecodeBounds:Z
array-length v1, p1
invoke-static {p1, v7, v1, v0}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
iget v1, v0, Landroid/graphics/BitmapFactory$Options;->outWidth:I
iget v2, v0, Landroid/graphics/BitmapFactory$Options;->outHeight:I
iget v3, p0, Lcom/h/o/ImageRequest;->mMaxWidth:I
iget v4, p0, Lcom/h/o/ImageRequest;->mMaxHeight:I
iget-object v5, p0, Lcom/h/o/ImageRequest;->mScaleType:Landroid/widget/ImageView$ScaleType;
invoke-static {v3, v4, v1, v2, v5}, Lcom/h/o/ImageRequest;->getResizedDimension(IIIILandroid/widget/ImageView$ScaleType;)I
move-result v3
iget v4, p0, Lcom/h/o/ImageRequest;->mMaxHeight:I
iget v5, p0, Lcom/h/o/ImageRequest;->mMaxWidth:I
iget-object v6, p0, Lcom/h/o/ImageRequest;->mScaleType:Landroid/widget/ImageView$ScaleType;
invoke-static {v4, v5, v2, v1, v6}, Lcom/h/o/ImageRequest;->getResizedDimension(IIIILandroid/widget/ImageView$ScaleType;)I
move-result v4
iput-boolean v7, v0, Landroid/graphics/BitmapFactory$Options;->inJustDecodeBounds:Z
invoke-static {v1, v2, v3, v4}, Lcom/h/o/ImageRequest;->findBestSampleSize(IIII)I
move-result v1
iput v1, v0, Landroid/graphics/BitmapFactory$Options;->inSampleSize:I
array-length v1, p1
invoke-static {p1, v7, v1, v0}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
move-result-object v1
if-eqz v1, :cond_5a
invoke-virtual {v1}, Landroid/graphics/Bitmap;->getWidth()I
move-result v0
if-gt v0, v3, :cond_52
invoke-virtual {v1}, Landroid/graphics/Bitmap;->getHeight()I
move-result v0
if-le v0, v4, :cond_5a
:cond_52
invoke-static {v1, v3, v4, v8}, Landroid/graphics/Bitmap;->createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;
move-result-object v0
invoke-virtual {v1}, Landroid/graphics/Bitmap;->recycle()V
goto :goto_18
:cond_5a
move-object v0, v1
goto :goto_18
.end method
.method public static findBestSampleSize(IIII)I
.registers 11
const/high16 v6, 0x40000000 # 2.0f
int-to-double v0, p0
int-to-double v2, p2
div-double/2addr v0, v2
int-to-double v2, p1
int-to-double v4, p3
div-double/2addr v2, v4
invoke-static {v0, v1, v2, v3}, Ljava/lang/Math;->min(DD)D
move-result-wide v2
const/high16 v0, 0x3f800000 # 1.0f
:goto_e
mul-float v1, v0, v6
float-to-double v4, v1
cmpg-double v1, v4, v2
if-gtz v1, :cond_17
mul-float/2addr v0, v6
goto :goto_e
:cond_17
float-to-int v0, v0
return v0
.end method
.method private static getResizedDimension(IIIILandroid/widget/ImageView$ScaleType;)I
.registers 11
if-nez p0, :cond_6
if-nez p1, :cond_6
move p0, p2
:cond_5
:goto_5
return p0
:cond_6
sget-object v0, Landroid/widget/ImageView$ScaleType;->FIT_XY:Landroid/widget/ImageView$ScaleType;
if-ne p4, v0, :cond_e
if-nez p0, :cond_5
move p0, p2
goto :goto_5
:cond_e
if-nez p0, :cond_17
int-to-double v0, p1
int-to-double v2, p3
div-double/2addr v0, v2
int-to-double v2, p2
mul-double/2addr v0, v2
double-to-int p0, v0
goto :goto_5
:cond_17
if-eqz p1, :cond_5
int-to-double v0, p3
int-to-double v2, p2
div-double/2addr v0, v2
sget-object v2, Landroid/widget/ImageView$ScaleType;->CENTER_CROP:Landroid/widget/ImageView$ScaleType;
if-ne p4, v2, :cond_2c
int-to-double v2, p0
mul-double/2addr v2, v0
int-to-double v4, p1
cmpg-double v2, v2, v4
if-gez v2, :cond_5
int-to-double v2, p1
div-double v0, v2, v0
double-to-int p0, v0
goto :goto_5
:cond_2c
int-to-double v2, p0
mul-double/2addr v2, v0
int-to-double v4, p1
cmpl-double v2, v2, v4
if-lez v2, :cond_5
int-to-double v2, p1
div-double v0, v2, v0
double-to-int p0, v0
goto :goto_5
.end method
# virtual methods
.method public parseResponse(Lcom/h/r/Headers;[B)Landroid/graphics/Bitmap;
.registers 11
sget-object v1, Lcom/h/o/ImageRequest;->DECODE_LOCK:Ljava/lang/Object;
monitor-enter v1
const/4 v0, 0x0
if-eqz p2, :cond_a
:try_start_6
invoke-direct {p0, p2}, Lcom/h/o/ImageRequest;->doResponse([B)Landroid/graphics/Bitmap;
:try_end_9
.catch Ljava/lang/OutOfMemoryError; {:try_start_6 .. :try_end_9} :catch_c
.catchall {:try_start_6 .. :try_end_9} :catchall_2c
move-result-object v0
:cond_a
:goto_a
:try_start_a
monitor-exit v1
return-object v0
:catch_c
move-exception v2
sget-object v3, Ljava/util/Locale;->US:Ljava/util/Locale;
const-string/jumbo v4, "Caught OOM for %d byte image, url=%s"
const/4 v5, 0x2
new-array v5, v5, [Ljava/lang/Object;
const/4 v6, 0x0
array-length v7, p2
invoke-static {v7}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v7
aput-object v7, v5, v6
const/4 v6, 0x1
invoke-virtual {p0}, Lcom/h/o/ImageRequest;->url()Ljava/lang/String;
move-result-object v7
aput-object v7, v5, v6
invoke-static {v3, v4, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-static {v2, v3}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;Ljava/lang/String;)V
goto :goto_a
:catchall_2c
move-exception v0
monitor-exit v1
:try_end_2e
.catchall {:try_start_a .. :try_end_2e} :catchall_2c
throw v0
.end method
.method public bridge synthetic parseResponse(Lcom/h/r/Headers;[B)Ljava/lang/Object;
.registers 4
invoke-virtual {p0, p1, p2}, Lcom/h/o/ImageRequest;->parseResponse(Lcom/h/r/Headers;[B)Landroid/graphics/Bitmap;
move-result-object v0
return-object v0
.end method