CaptureHandler.smali

.class public Lcom/king/zxing/CaptureHandler;
.super Landroid/os/Handler;
.source "CaptureHandler.java"

# interfaces
.implements Lcom/google/zxing/ResultPointCallback;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/king/zxing/CaptureHandler$State;
    }
.end annotation


# static fields
.field private static final TAG:Ljava/lang/String;


# instance fields
.field private final cameraManager:Lcom/king/zxing/camera/CameraManager;

.field private final decodeThread:Lcom/king/zxing/DecodeThread;

.field private isReturnBitmap:Z

.field private isSupportAutoZoom:Z

.field private isSupportLuminanceInvert:Z

.field private isSupportVerticalCode:Z

.field private final onCaptureListener:Lcom/king/zxing/OnCaptureListener;

.field private state:Lcom/king/zxing/CaptureHandler$State;

.field private final viewfinderView:Lcom/king/zxing/ViewfinderView;


# direct methods
.method static constructor <clinit>()V
    .registers 1

    .line 29
    const-class v0, Lcom/king/zxing/CaptureHandler;

    invoke-virtual {v0}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;

    move-result-object v0

    sput-object v0, Lcom/king/zxing/CaptureHandler;->TAG:Ljava/lang/String;

    return-void
.end method

.method constructor <init>(Landroid/app/Activity;Lcom/king/zxing/ViewfinderView;Lcom/king/zxing/OnCaptureListener;Ljava/util/Collection;Ljava/util/Map;Ljava/lang/String;Lcom/king/zxing/camera/CameraManager;)V
    .registers 20
    .param p1, "activity"    # Landroid/app/Activity;
    .param p2, "viewfinderView"    # Lcom/king/zxing/ViewfinderView;
    .param p3, "onCaptureListener"    # Lcom/king/zxing/OnCaptureListener;
    .param p6, "characterSet"    # Ljava/lang/String;
    .param p7, "cameraManager"    # Lcom/king/zxing/camera/CameraManager;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Landroid/app/Activity;",
            "Lcom/king/zxing/ViewfinderView;",
            "Lcom/king/zxing/OnCaptureListener;",
            "Ljava/util/Collection<",
            "Lcom/google/zxing/BarcodeFormat;",
            ">;",
            "Ljava/util/Map<",
            "Lcom/google/zxing/DecodeHintType;",
            "Ljava/lang/Object;",
            ">;",
            "Ljava/lang/String;",
            "Lcom/king/zxing/camera/CameraManager;",
            ")V"
        }
    .end annotation

    .line 67
    .local p4, "decodeFormats":Ljava/util/Collection;, "Ljava/util/Collection<Lcom/google/zxing/BarcodeFormat;>;"
    .local p5, "baseHints":Ljava/util/Map;, "Ljava/util/Map<Lcom/google/zxing/DecodeHintType;Ljava/lang/Object;>;"
    move-object v8, p0

    invoke-direct {p0}, Landroid/os/Handler;-><init>()V

    .line 68
    move-object v9, p2

    iput-object v9, v8, Lcom/king/zxing/CaptureHandler;->viewfinderView:Lcom/king/zxing/ViewfinderView;

    .line 69
    move-object v10, p3

    iput-object v10, v8, Lcom/king/zxing/CaptureHandler;->onCaptureListener:Lcom/king/zxing/OnCaptureListener;

    .line 70
    new-instance v11, Lcom/king/zxing/DecodeThread;

    move-object v0, v11

    move-object v1, p1

    move-object/from16 v2, p7

    move-object v3, p0

    move-object/from16 v4, p4

    move-object/from16 v5, p5

    move-object/from16 v6, p6

    move-object v7, p0

    invoke-direct/range {v0 .. v7}, Lcom/king/zxing/DecodeThread;-><init>(Landroid/content/Context;Lcom/king/zxing/camera/CameraManager;Lcom/king/zxing/CaptureHandler;Ljava/util/Collection;Ljava/util/Map;Ljava/lang/String;Lcom/google/zxing/ResultPointCallback;)V

    iput-object v11, v8, Lcom/king/zxing/CaptureHandler;->decodeThread:Lcom/king/zxing/DecodeThread;

    .line 71
    invoke-virtual {v11}, Lcom/king/zxing/DecodeThread;->start()V

    .line 72
    sget-object v0, Lcom/king/zxing/CaptureHandler$State;->SUCCESS:Lcom/king/zxing/CaptureHandler$State;

    iput-object v0, v8, Lcom/king/zxing/CaptureHandler;->state:Lcom/king/zxing/CaptureHandler$State;

    .line 75
    move-object/from16 v0, p7

    iput-object v0, v8, Lcom/king/zxing/CaptureHandler;->cameraManager:Lcom/king/zxing/camera/CameraManager;

    .line 76
    invoke-virtual/range {p7 .. p7}, Lcom/king/zxing/camera/CameraManager;->startPreview()V

    .line 77
    invoke-virtual {p0}, Lcom/king/zxing/CaptureHandler;->restartPreviewAndDecode()V

    .line 78
    return-void
.end method

.method private isScreenPortrait(Landroid/content/Context;)Z
    .registers 7
    .param p1, "context"    # Landroid/content/Context;

    .line 145
    const-string/jumbo v0, "window"

    invoke-virtual {p1, v0}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Landroid/view/WindowManager;

    .line 146
    .local v0, "manager":Landroid/view/WindowManager;
    invoke-interface {v0}, Landroid/view/WindowManager;->getDefaultDisplay()Landroid/view/Display;

    move-result-object v1

    .line 147
    .local v1, "display":Landroid/view/Display;
    new-instance v2, Landroid/graphics/Point;

    invoke-direct {v2}, Landroid/graphics/Point;-><init>()V

    .line 148
    .local v2, "screenResolution":Landroid/graphics/Point;
    invoke-virtual {v1, v2}, Landroid/view/Display;->getSize(Landroid/graphics/Point;)V

    .line 149
    iget v3, v2, Landroid/graphics/Point;->x:I

    iget v4, v2, Landroid/graphics/Point;->y:I

    if-ge v3, v4, :cond_1d

    const/4 v3, 0x1

    goto :goto_1e

    :cond_1d
    const/4 v3, 0x0

    :goto_1e
    return v3
.end method

.method private transform(Lcom/google/zxing/ResultPoint;)Lcom/google/zxing/ResultPoint;
    .registers 10
    .param p1, "originPoint"    # Lcom/google/zxing/ResultPoint;

    .line 157
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->cameraManager:Lcom/king/zxing/camera/CameraManager;

    invoke-virtual {v0}, Lcom/king/zxing/camera/CameraManager;->getScreenResolution()Landroid/graphics/Point;

    move-result-object v0

    .line 158
    .local v0, "screenPoint":Landroid/graphics/Point;
    iget-object v1, p0, Lcom/king/zxing/CaptureHandler;->cameraManager:Lcom/king/zxing/camera/CameraManager;

    invoke-virtual {v1}, Lcom/king/zxing/camera/CameraManager;->getCameraResolution()Landroid/graphics/Point;

    move-result-object v1

    .line 165
    .local v1, "cameraPoint":Landroid/graphics/Point;
    iget v2, v0, Landroid/graphics/Point;->x:I

    iget v3, v0, Landroid/graphics/Point;->y:I

    const/high16 v4, 0x3f800000    # 1.0f

    if-ge v2, v3, :cond_4b

    .line 166
    iget v2, v0, Landroid/graphics/Point;->x:I

    int-to-float v2, v2

    mul-float v2, v2, v4

    iget v3, v1, Landroid/graphics/Point;->y:I

    int-to-float v3, v3

    div-float/2addr v2, v3

    .line 167
    .local v2, "scaleX":F
    iget v3, v0, Landroid/graphics/Point;->y:I

    int-to-float v3, v3

    mul-float v3, v3, v4

    iget v4, v1, Landroid/graphics/Point;->x:I

    int-to-float v4, v4

    div-float/2addr v3, v4

    .line 169
    .local v3, "scaleY":F
    invoke-virtual {p1}, Lcom/google/zxing/ResultPoint;->getX()F

    move-result v4

    mul-float v4, v4, v2

    iget v5, v0, Landroid/graphics/Point;->x:I

    iget v6, v1, Landroid/graphics/Point;->y:I

    invoke-static {v5, v6}, Ljava/lang/Math;->max(II)I

    move-result v5

    div-int/lit8 v5, v5, 0x2

    int-to-float v5, v5

    sub-float/2addr v4, v5

    .line 170
    .local v4, "x":F
    invoke-virtual {p1}, Lcom/google/zxing/ResultPoint;->getY()F

    move-result v5

    mul-float v5, v5, v3

    iget v6, v0, Landroid/graphics/Point;->y:I

    iget v7, v1, Landroid/graphics/Point;->x:I

    invoke-static {v6, v7}, Ljava/lang/Math;->min(II)I

    move-result v6

    div-int/lit8 v6, v6, 0x2

    int-to-float v6, v6

    sub-float/2addr v5, v6

    .local v5, "y":F
    goto :goto_81

    .line 172
    .end local v2    # "scaleX":F
    .end local v3    # "scaleY":F
    .end local v4    # "x":F
    .end local v5    # "y":F
    :cond_4b
    iget v2, v0, Landroid/graphics/Point;->x:I

    int-to-float v2, v2

    mul-float v2, v2, v4

    iget v3, v1, Landroid/graphics/Point;->x:I

    int-to-float v3, v3

    div-float/2addr v2, v3

    .line 173
    .restart local v2    # "scaleX":F
    iget v3, v0, Landroid/graphics/Point;->y:I

    int-to-float v3, v3

    mul-float v3, v3, v4

    iget v4, v1, Landroid/graphics/Point;->y:I

    int-to-float v4, v4

    div-float/2addr v3, v4

    .line 175
    .restart local v3    # "scaleY":F
    invoke-virtual {p1}, Lcom/google/zxing/ResultPoint;->getX()F

    move-result v4

    mul-float v4, v4, v2

    iget v5, v0, Landroid/graphics/Point;->y:I

    iget v6, v1, Landroid/graphics/Point;->y:I

    invoke-static {v5, v6}, Ljava/lang/Math;->min(II)I

    move-result v5

    div-int/lit8 v5, v5, 0x2

    int-to-float v5, v5

    sub-float/2addr v4, v5

    .line 176
    .restart local v4    # "x":F
    invoke-virtual {p1}, Lcom/google/zxing/ResultPoint;->getY()F

    move-result v5

    mul-float v5, v5, v3

    iget v6, v0, Landroid/graphics/Point;->x:I

    iget v7, v1, Landroid/graphics/Point;->x:I

    invoke-static {v6, v7}, Ljava/lang/Math;->max(II)I

    move-result v6

    div-int/lit8 v6, v6, 0x2

    int-to-float v6, v6

    sub-float/2addr v5, v6

    .line 180
    .restart local v5    # "y":F
    :goto_81
    new-instance v6, Lcom/google/zxing/ResultPoint;

    invoke-direct {v6, v4, v5}, Lcom/google/zxing/ResultPoint;-><init>(FF)V

    return-object v6
.end method


# virtual methods
.method public foundPossibleResultPoint(Lcom/google/zxing/ResultPoint;)V
    .registers 4
    .param p1, "point"    # Lcom/google/zxing/ResultPoint;

    .line 138
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->viewfinderView:Lcom/king/zxing/ViewfinderView;

    if-eqz v0, :cond_d

    .line 139
    invoke-direct {p0, p1}, Lcom/king/zxing/CaptureHandler;->transform(Lcom/google/zxing/ResultPoint;)Lcom/google/zxing/ResultPoint;

    move-result-object v0

    .line 140
    .local v0, "resultPoint":Lcom/google/zxing/ResultPoint;
    iget-object v1, p0, Lcom/king/zxing/CaptureHandler;->viewfinderView:Lcom/king/zxing/ViewfinderView;

    invoke-virtual {v1, v0}, Lcom/king/zxing/ViewfinderView;->addPossibleResultPoint(Lcom/google/zxing/ResultPoint;)V

    .line 142
    .end local v0    # "resultPoint":Lcom/google/zxing/ResultPoint;
    :cond_d
    return-void
.end method

.method public handleMessage(Landroid/os/Message;)V
    .registers 9
    .param p1, "message"    # Landroid/os/Message;

    .line 82
    iget v0, p1, Landroid/os/Message;->what:I

    sget v1, Lcom/king/zxing/R$id;->restart_preview:I

    if-ne v0, v1, :cond_a

    .line 83
    invoke-virtual {p0}, Lcom/king/zxing/CaptureHandler;->restartPreviewAndDecode()V

    goto :goto_5c

    .line 85
    :cond_a
    iget v0, p1, Landroid/os/Message;->what:I

    sget v1, Lcom/king/zxing/R$id;->decode_succeeded:I

    if-ne v0, v1, :cond_43

    .line 86
    sget-object v0, Lcom/king/zxing/CaptureHandler$State;->SUCCESS:Lcom/king/zxing/CaptureHandler$State;

    iput-object v0, p0, Lcom/king/zxing/CaptureHandler;->state:Lcom/king/zxing/CaptureHandler$State;

    .line 87
    invoke-virtual {p1}, Landroid/os/Message;->getData()Landroid/os/Bundle;

    move-result-object v0

    .line 88
    .local v0, "bundle":Landroid/os/Bundle;
    const/4 v1, 0x0

    .line 89
    .local v1, "barcode":Landroid/graphics/Bitmap;
    const/high16 v2, 0x3f800000    # 1.0f

    .line 90
    .local v2, "scaleFactor":F
    if-eqz v0, :cond_39

    .line 91
    const-string v3, "barcode_bitmap"

    invoke-virtual {v0, v3}, Landroid/os/Bundle;->getByteArray(Ljava/lang/String;)[B

    move-result-object v3

    .line 92
    .local v3, "compressedBitmap":[B
    if-eqz v3, :cond_33

    .line 93
    const/4 v4, 0x0

    array-length v5, v3

    const/4 v6, 0x0

    invoke-static {v3, v4, v5, v6}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;

    move-result-object v1

    .line 95
    sget-object v4, Landroid/graphics/Bitmap$Config;->ARGB_8888:Landroid/graphics/Bitmap$Config;

    const/4 v5, 0x1

    invoke-virtual {v1, v4, v5}, Landroid/graphics/Bitmap;->copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;

    move-result-object v1

    .line 97
    :cond_33
    const-string v4, "barcode_scaled_factor"

    invoke-virtual {v0, v4}, Landroid/os/Bundle;->getFloat(Ljava/lang/String;)F

    move-result v2

    .line 99
    .end local v3    # "compressedBitmap":[B
    :cond_39
    iget-object v3, p0, Lcom/king/zxing/CaptureHandler;->onCaptureListener:Lcom/king/zxing/OnCaptureListener;

    iget-object v4, p1, Landroid/os/Message;->obj:Ljava/lang/Object;

    check-cast v4, Lcom/google/zxing/Result;

    invoke-interface {v3, v4, v1, v2}, Lcom/king/zxing/OnCaptureListener;->onHandleDecode(Lcom/google/zxing/Result;Landroid/graphics/Bitmap;F)V

    .end local v0    # "bundle":Landroid/os/Bundle;
    .end local v1    # "barcode":Landroid/graphics/Bitmap;
    .end local v2    # "scaleFactor":F
    goto :goto_5b

    .line 102
    :cond_43
    iget v0, p1, Landroid/os/Message;->what:I

    sget v1, Lcom/king/zxing/R$id;->decode_failed:I

    if-ne v0, v1, :cond_5b

    .line 103
    sget-object v0, Lcom/king/zxing/CaptureHandler$State;->PREVIEW:Lcom/king/zxing/CaptureHandler$State;

    iput-object v0, p0, Lcom/king/zxing/CaptureHandler;->state:Lcom/king/zxing/CaptureHandler$State;

    .line 104
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->cameraManager:Lcom/king/zxing/camera/CameraManager;

    iget-object v1, p0, Lcom/king/zxing/CaptureHandler;->decodeThread:Lcom/king/zxing/DecodeThread;

    invoke-virtual {v1}, Lcom/king/zxing/DecodeThread;->getHandler()Landroid/os/Handler;

    move-result-object v1

    sget v2, Lcom/king/zxing/R$id;->decode:I

    invoke-virtual {v0, v1, v2}, Lcom/king/zxing/camera/CameraManager;->requestPreviewFrame(Landroid/os/Handler;I)V

    goto :goto_5c

    .line 102
    :cond_5b
    :goto_5b
    nop

    .line 107
    :goto_5c
    return-void
.end method

.method public isReturnBitmap()Z
    .registers 2

    .line 192
    iget-boolean v0, p0, Lcom/king/zxing/CaptureHandler;->isReturnBitmap:Z

    return v0
.end method

.method public isSupportAutoZoom()Z
    .registers 2

    .line 200
    iget-boolean v0, p0, Lcom/king/zxing/CaptureHandler;->isSupportAutoZoom:Z

    return v0
.end method

.method public isSupportLuminanceInvert()Z
    .registers 2

    .line 208
    iget-boolean v0, p0, Lcom/king/zxing/CaptureHandler;->isSupportLuminanceInvert:Z

    return v0
.end method

.method public isSupportVerticalCode()Z
    .registers 2

    .line 184
    iget-boolean v0, p0, Lcom/king/zxing/CaptureHandler;->isSupportVerticalCode:Z

    return v0
.end method

.method public quitSynchronously()V
    .registers 5

    .line 110
    sget-object v0, Lcom/king/zxing/CaptureHandler$State;->DONE:Lcom/king/zxing/CaptureHandler$State;

    iput-object v0, p0, Lcom/king/zxing/CaptureHandler;->state:Lcom/king/zxing/CaptureHandler$State;

    .line 111
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->cameraManager:Lcom/king/zxing/camera/CameraManager;

    invoke-virtual {v0}, Lcom/king/zxing/camera/CameraManager;->stopPreview()V

    .line 112
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->decodeThread:Lcom/king/zxing/DecodeThread;

    invoke-virtual {v0}, Lcom/king/zxing/DecodeThread;->getHandler()Landroid/os/Handler;

    move-result-object v0

    sget v1, Lcom/king/zxing/R$id;->quit:I

    invoke-static {v0, v1}, Landroid/os/Message;->obtain(Landroid/os/Handler;I)Landroid/os/Message;

    move-result-object v0

    .line 113
    .local v0, "quit":Landroid/os/Message;
    invoke-virtual {v0}, Landroid/os/Message;->sendToTarget()V

    .line 116
    :try_start_18
    iget-object v1, p0, Lcom/king/zxing/CaptureHandler;->decodeThread:Lcom/king/zxing/DecodeThread;

    const-wide/16 v2, 0x64

    invoke-virtual {v1, v2, v3}, Lcom/king/zxing/DecodeThread;->join(J)V
    :try_end_1f
    .catch Ljava/lang/InterruptedException; {:try_start_18 .. :try_end_1f} :catch_20

    .line 119
    goto :goto_21

    .line 117
    :catch_20
    move-exception v1

    .line 122
    :goto_21
    sget v1, Lcom/king/zxing/R$id;->decode_succeeded:I

    invoke-virtual {p0, v1}, Lcom/king/zxing/CaptureHandler;->removeMessages(I)V

    .line 123
    sget v1, Lcom/king/zxing/R$id;->decode_failed:I

    invoke-virtual {p0, v1}, Lcom/king/zxing/CaptureHandler;->removeMessages(I)V

    .line 124
    return-void
.end method

.method public restartPreviewAndDecode()V
    .registers 4

    .line 127
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->state:Lcom/king/zxing/CaptureHandler$State;

    sget-object v1, Lcom/king/zxing/CaptureHandler$State;->SUCCESS:Lcom/king/zxing/CaptureHandler$State;

    if-ne v0, v1, :cond_1e

    .line 128
    sget-object v0, Lcom/king/zxing/CaptureHandler$State;->PREVIEW:Lcom/king/zxing/CaptureHandler$State;

    iput-object v0, p0, Lcom/king/zxing/CaptureHandler;->state:Lcom/king/zxing/CaptureHandler$State;

    .line 129
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->cameraManager:Lcom/king/zxing/camera/CameraManager;

    iget-object v1, p0, Lcom/king/zxing/CaptureHandler;->decodeThread:Lcom/king/zxing/DecodeThread;

    invoke-virtual {v1}, Lcom/king/zxing/DecodeThread;->getHandler()Landroid/os/Handler;

    move-result-object v1

    sget v2, Lcom/king/zxing/R$id;->decode:I

    invoke-virtual {v0, v1, v2}, Lcom/king/zxing/camera/CameraManager;->requestPreviewFrame(Landroid/os/Handler;I)V

    .line 130
    iget-object v0, p0, Lcom/king/zxing/CaptureHandler;->viewfinderView:Lcom/king/zxing/ViewfinderView;

    if-eqz v0, :cond_1e

    .line 131
    invoke-virtual {v0}, Lcom/king/zxing/ViewfinderView;->drawViewfinder()V

    .line 134
    :cond_1e
    return-void
.end method

.method public setReturnBitmap(Z)V
    .registers 2
    .param p1, "returnBitmap"    # Z

    .line 196
    iput-boolean p1, p0, Lcom/king/zxing/CaptureHandler;->isReturnBitmap:Z

    .line 197
    return-void
.end method

.method public setSupportAutoZoom(Z)V
    .registers 2
    .param p1, "supportAutoZoom"    # Z

    .line 204
    iput-boolean p1, p0, Lcom/king/zxing/CaptureHandler;->isSupportAutoZoom:Z

    .line 205
    return-void
.end method

.method public setSupportLuminanceInvert(Z)V
    .registers 2
    .param p1, "supportLuminanceInvert"    # Z

    .line 212
    iput-boolean p1, p0, Lcom/king/zxing/CaptureHandler;->isSupportLuminanceInvert:Z

    .line 213
    return-void
.end method

.method public setSupportVerticalCode(Z)V
    .registers 2
    .param p1, "supportVerticalCode"    # Z

    .line 188
    iput-boolean p1, p0, Lcom/king/zxing/CaptureHandler;->isSupportVerticalCode:Z

    .line 189
    return-void
.end method