BasicBinary.smali

.class public abstract Lcom/h/r/BasicBinary;
.super Ljava/lang/Object;

# interfaces
.implements Lcom/h/i/Finishable;
.implements Lcom/h/i/Startable;
.implements Lcom/h/r/Binary;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/h/r/BasicBinary$UploadPoster;
    }
.end annotation


# instance fields
.field private fileName:Ljava/lang/String;

.field private isCancel:Z

.field private isFinish:Z

.field private isStarted:Z

.field private mUploadListener:Lcom/h/r/OnUploadListener;

.field private mimeType:Ljava/lang/String;

.field private what:I


# direct methods
.method public constructor <init>(Ljava/lang/String;Ljava/lang/String;)V
    .registers 4

    const/4 v0, 0x0

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    iput-boolean v0, p0, Lcom/h/r/BasicBinary;->isStarted:Z

    iput-boolean v0, p0, Lcom/h/r/BasicBinary;->isCancel:Z

    iput-boolean v0, p0, Lcom/h/r/BasicBinary;->isFinish:Z

    iput-object p1, p0, Lcom/h/r/BasicBinary;->fileName:Ljava/lang/String;

    iput-object p2, p0, Lcom/h/r/BasicBinary;->mimeType:Ljava/lang/String;

    return-void
.end method


# virtual methods
.method public cancel()V
    .registers 2

    iget-boolean v0, p0, Lcom/h/r/BasicBinary;->isCancel:Z

    if-nez v0, :cond_a

    const/4 v0, 0x1

    iput-boolean v0, p0, Lcom/h/r/BasicBinary;->isCancel:Z

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->postCancel()V

    :cond_a
    return-void
.end method

.method public finish()V
    .registers 2

    const/4 v0, 0x1

    iput-boolean v0, p0, Lcom/h/r/BasicBinary;->isFinish:Z

    return-void
.end method

.method public abstract getBinaryLength()J
.end method

.method public getFileName()Ljava/lang/String;
    .registers 3

    iget-object v0, p0, Lcom/h/r/BasicBinary;->fileName:Ljava/lang/String;

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_12

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    invoke-static {v0, v1}, Ljava/lang/Long;->toString(J)Ljava/lang/String;

    move-result-object v0

    iput-object v0, p0, Lcom/h/r/BasicBinary;->fileName:Ljava/lang/String;

    :cond_12
    iget-object v0, p0, Lcom/h/r/BasicBinary;->fileName:Ljava/lang/String;

    return-object v0
.end method

.method protected abstract getInputStream()Ljava/io/InputStream;
.end method

.method public final getLength()J
    .registers 3

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->isCanceled()Z

    move-result v0

    if-nez v0, :cond_b

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->getBinaryLength()J

    move-result-wide v0

    :goto_a
    return-wide v0

    :cond_b
    const-wide/16 v0, 0x0

    goto :goto_a
.end method

.method public getMimeType()Ljava/lang/String;
    .registers 3

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->getFileName()Ljava/lang/String;

    move-result-object v0

    iget-object v1, p0, Lcom/h/r/BasicBinary;->mimeType:Ljava/lang/String;

    invoke-static {v1}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v1

    if-eqz v1, :cond_20

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v1

    if-nez v1, :cond_20

    invoke-static {v0}, Landroid/webkit/MimeTypeMap;->getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    invoke-static {}, Landroid/webkit/MimeTypeMap;->getSingleton()Landroid/webkit/MimeTypeMap;

    move-result-object v1

    invoke-virtual {v1, v0}, Landroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    iput-object v0, p0, Lcom/h/r/BasicBinary;->mimeType:Ljava/lang/String;

    :cond_20
    iget-object v0, p0, Lcom/h/r/BasicBinary;->mimeType:Ljava/lang/String;

    invoke-static {v0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z

    move-result v0

    if-eqz v0, :cond_2d

    const-string/jumbo v0, "application/octet-stream"

    iput-object v0, p0, Lcom/h/r/BasicBinary;->mimeType:Ljava/lang/String;

    :cond_2d
    iget-object v0, p0, Lcom/h/r/BasicBinary;->mimeType:Ljava/lang/String;

    return-object v0
.end method

.method public isCanceled()Z
    .registers 2

    iget-boolean v0, p0, Lcom/h/r/BasicBinary;->isCancel:Z

    return v0
.end method

.method public isFinished()Z
    .registers 2

    iget-boolean v0, p0, Lcom/h/r/BasicBinary;->isFinish:Z

    return v0
.end method

.method public isStarted()Z
    .registers 2

    iget-boolean v0, p0, Lcom/h/r/BasicBinary;->isStarted:Z

    return v0
.end method

.method public onWriteBinary(Ljava/io/OutputStream;)V
    .registers 14

    const-wide/16 v6, 0x0

    const/4 v0, 0x0

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->isCanceled()Z

    move-result v1

    if-nez v1, :cond_63

    const/4 v1, 0x0

    :try_start_a
    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->getInputStream()Ljava/io/InputStream;
    :try_end_d
    .catch Ljava/lang/Exception; {:try_start_a .. :try_end_d} :catch_67
    .catchall {:try_start_a .. :try_end_d} :catchall_75

    move-result-object v1

    if-nez v1, :cond_17

    invoke-static {v1}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->postFinish()V

    :goto_16
    return-void

    :cond_17
    :try_start_17
    invoke-static {v1}, Lcom/h/q/IOUtils;->toBufferedInputStream(Ljava/io/InputStream;)Ljava/io/BufferedInputStream;
    :try_end_1a
    .catch Ljava/lang/Exception; {:try_start_17 .. :try_end_1a} :catch_67
    .catchall {:try_start_17 .. :try_end_1a} :catchall_7e

    move-result-object v2

    :try_start_1b
    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->start()V

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->postStart()V

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->getLength()J

    move-result-wide v8

    const/16 v1, 0x1000

    new-array v3, v1, [B

    move-wide v4, v6

    :cond_2a
    :goto_2a
    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->isCanceled()Z

    move-result v1

    if-nez v1, :cond_5d

    invoke-virtual {v2, v3}, Ljava/io/InputStream;->read([B)I

    move-result v1

    const/4 v10, -0x1

    if-eq v1, v10, :cond_5d

    const/4 v10, 0x0

    invoke-virtual {p1, v3, v10, v1}, Ljava/io/OutputStream;->write([BII)V

    cmp-long v10, v8, v6

    if-eqz v10, :cond_2a

    iget-object v10, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    if-eqz v10, :cond_2a

    int-to-long v10, v1

    add-long/2addr v4, v10

    const-wide/16 v10, 0x64

    mul-long/2addr v10, v4

    div-long/2addr v10, v8

    long-to-int v1, v10

    rem-int/lit8 v10, v1, 0x3

    if-eqz v10, :cond_56

    rem-int/lit8 v10, v1, 0x5

    if-eqz v10, :cond_56

    rem-int/lit8 v10, v1, 0x7

    if-nez v10, :cond_2a

    :cond_56
    if-eq v0, v1, :cond_2a

    invoke-virtual {p0, v1}, Lcom/h/r/BasicBinary;->postProgress(I)V
    :try_end_5b
    .catch Ljava/lang/Exception; {:try_start_1b .. :try_end_5b} :catch_86
    .catchall {:try_start_1b .. :try_end_5b} :catchall_81

    move v0, v1

    goto :goto_2a

    :cond_5d
    invoke-static {v2}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->postFinish()V

    :cond_63
    :goto_63
    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->finish()V

    goto :goto_16

    :catch_67
    move-exception v0

    :goto_68
    :try_start_68
    invoke-static {v0}, Lcom/h/r/Logger;->e(Ljava/lang/Throwable;)V

    invoke-virtual {p0, v0}, Lcom/h/r/BasicBinary;->postError(Ljava/lang/Exception;)V
    :try_end_6e
    .catchall {:try_start_68 .. :try_end_6e} :catchall_83

    invoke-static {v1}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->postFinish()V

    goto :goto_63

    :catchall_75
    move-exception v0

    move-object v2, v1

    :goto_77
    invoke-static {v2}, Lcom/h/q/IOUtils;->closeQuietly(Ljava/io/Closeable;)V

    invoke-virtual {p0}, Lcom/h/r/BasicBinary;->postFinish()V

    throw v0

    :catchall_7e
    move-exception v0

    move-object v2, v1

    goto :goto_77

    :catchall_81
    move-exception v0

    goto :goto_77

    :catchall_83
    move-exception v0

    move-object v2, v1

    goto :goto_77

    :catch_86
    move-exception v0

    move-object v1, v2

    goto :goto_68
.end method

.method protected postCancel()V
    .registers 4

    new-instance v0, Lcom/h/r/BasicBinary$UploadPoster;

    iget v1, p0, Lcom/h/r/BasicBinary;->what:I

    iget-object v2, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    invoke-direct {v0, p0, v1, v2}, Lcom/h/r/BasicBinary$UploadPoster;-><init>(Lcom/h/r/BasicBinary;ILcom/h/r/OnUploadListener;)V

    invoke-virtual {v0}, Lcom/h/r/BasicBinary$UploadPoster;->cancel()V

    invoke-static {}, Lcom/h/r/HandlerDelivery;->getInstance()Lcom/h/r/HandlerDelivery;

    move-result-object v1

    invoke-virtual {v1, v0}, Lcom/h/r/HandlerDelivery;->post(Ljava/lang/Runnable;)Z

    return-void
.end method

.method protected postError(Ljava/lang/Exception;)V
    .registers 5

    new-instance v0, Lcom/h/r/BasicBinary$UploadPoster;

    iget v1, p0, Lcom/h/r/BasicBinary;->what:I

    iget-object v2, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    invoke-direct {v0, p0, v1, v2}, Lcom/h/r/BasicBinary$UploadPoster;-><init>(Lcom/h/r/BasicBinary;ILcom/h/r/OnUploadListener;)V

    invoke-virtual {v0, p1}, Lcom/h/r/BasicBinary$UploadPoster;->error(Ljava/lang/Exception;)V

    invoke-static {}, Lcom/h/r/HandlerDelivery;->getInstance()Lcom/h/r/HandlerDelivery;

    move-result-object v1

    invoke-virtual {v1, v0}, Lcom/h/r/HandlerDelivery;->post(Ljava/lang/Runnable;)Z

    return-void
.end method

.method protected postFinish()V
    .registers 4

    new-instance v0, Lcom/h/r/BasicBinary$UploadPoster;

    iget v1, p0, Lcom/h/r/BasicBinary;->what:I

    iget-object v2, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    invoke-direct {v0, p0, v1, v2}, Lcom/h/r/BasicBinary$UploadPoster;-><init>(Lcom/h/r/BasicBinary;ILcom/h/r/OnUploadListener;)V

    invoke-virtual {v0}, Lcom/h/r/BasicBinary$UploadPoster;->finish()V

    invoke-static {}, Lcom/h/r/HandlerDelivery;->getInstance()Lcom/h/r/HandlerDelivery;

    move-result-object v1

    invoke-virtual {v1, v0}, Lcom/h/r/HandlerDelivery;->post(Ljava/lang/Runnable;)Z

    return-void
.end method

.method protected postProgress(I)V
    .registers 5

    new-instance v0, Lcom/h/r/BasicBinary$UploadPoster;

    iget v1, p0, Lcom/h/r/BasicBinary;->what:I

    iget-object v2, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    invoke-direct {v0, p0, v1, v2}, Lcom/h/r/BasicBinary$UploadPoster;-><init>(Lcom/h/r/BasicBinary;ILcom/h/r/OnUploadListener;)V

    invoke-virtual {v0, p1}, Lcom/h/r/BasicBinary$UploadPoster;->progress(I)V

    invoke-static {}, Lcom/h/r/HandlerDelivery;->getInstance()Lcom/h/r/HandlerDelivery;

    move-result-object v1

    invoke-virtual {v1, v0}, Lcom/h/r/HandlerDelivery;->post(Ljava/lang/Runnable;)Z

    return-void
.end method

.method protected postStart()V
    .registers 4

    new-instance v0, Lcom/h/r/BasicBinary$UploadPoster;

    iget v1, p0, Lcom/h/r/BasicBinary;->what:I

    iget-object v2, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    invoke-direct {v0, p0, v1, v2}, Lcom/h/r/BasicBinary$UploadPoster;-><init>(Lcom/h/r/BasicBinary;ILcom/h/r/OnUploadListener;)V

    invoke-virtual {v0}, Lcom/h/r/BasicBinary$UploadPoster;->start()V

    invoke-static {}, Lcom/h/r/HandlerDelivery;->getInstance()Lcom/h/r/HandlerDelivery;

    move-result-object v1

    invoke-virtual {v1, v0}, Lcom/h/r/HandlerDelivery;->post(Ljava/lang/Runnable;)Z

    return-void
.end method

.method public setUploadListener(ILcom/h/r/OnUploadListener;)V
    .registers 3

    iput p1, p0, Lcom/h/r/BasicBinary;->what:I

    iput-object p2, p0, Lcom/h/r/BasicBinary;->mUploadListener:Lcom/h/r/OnUploadListener;

    return-void
.end method

.method public start()V
    .registers 2

    const/4 v0, 0x1

    iput-boolean v0, p0, Lcom/h/r/BasicBinary;->isStarted:Z

    return-void
.end method