wjc
2023-06-06 5308d04e20f3dca6d56ccc3e2b460374540716a6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.zxing.decode;
 
import android.os.Handler;
import android.os.Looper;
 
import com.google.zxing.BarcodeFormat;
import com.google.zxing.DecodeHintType;
import com.zxing.IZxingActivity;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
 
/**
 * This thread does all the heavy lifting of decoding the images.
 */
public class DecodeThread extends Thread {
 
    public static final String BARCODE_BITMAP = "barcode_bitmap";
 
    public static final int BARCODE_MODE = 0X100;
    public static final int QRCODE_MODE = 0X200;
    public static final int ALL_MODE = 0X300;
 
    private final IZxingActivity activity;
    private final Map<DecodeHintType, Object> hints;
    private final CountDownLatch handlerInitLatch;
    private Handler handler;
 
    public DecodeThread(IZxingActivity activity, int decodeMode) {
 
        this.activity = activity;
        handlerInitLatch = new CountDownLatch(1);
 
        hints = new EnumMap<DecodeHintType, Object>(DecodeHintType.class);
 
        Collection<BarcodeFormat> decodeFormats = new ArrayList<BarcodeFormat>();
        decodeFormats.addAll(EnumSet.of(BarcodeFormat.AZTEC));
        decodeFormats.addAll(EnumSet.of(BarcodeFormat.PDF_417));
 
        switch (decodeMode) {
            case BARCODE_MODE:
                decodeFormats.addAll(DecodeFormatManager.getBarCodeFormats());
                break;
 
            case QRCODE_MODE:
                decodeFormats.addAll(DecodeFormatManager.getQrCodeFormats());
                break;
 
            case ALL_MODE:
                decodeFormats.addAll(DecodeFormatManager.getBarCodeFormats());
                decodeFormats.addAll(DecodeFormatManager.getQrCodeFormats());
                break;
 
            default:
                break;
        }
 
        hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats);
    }
 
    public Handler getHandler() {
        try {
            handlerInitLatch.await();
        } catch (InterruptedException ie) {
            // continue?
        }
        return handler;
    }
 
    @Override
    public void run() {
        Looper.prepare();
        handler = new DecodeHandler(activity, hints);
        handlerInitLatch.countDown();
        Looper.loop();
    }
 
}