From 0d67680e7f00502f1a34151d59aecb01d04d5353 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 6 Jan 2020 18:06:30 +0100 Subject: [PATCH] #308 Display barcode format on select barcode view --- .../card_locker/BarcodeImageWriterTask.java | 13 +- .../card_locker/BarcodeSelectorActivity.java | 39 ++--- .../card_locker/LoyaltyCardEditActivity.java | 4 +- .../card_locker/LoyaltyCardViewActivity.java | 4 +- .../res/layout/barcode_selector_activity.xml | 143 +++++++++++++++--- 5 files changed, 158 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java b/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java index 9ef6b7115..6aae3f5ca 100644 --- a/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java +++ b/app/src/main/java/protect/card_locker/BarcodeImageWriterTask.java @@ -5,6 +5,7 @@ import android.os.AsyncTask; import android.util.Log; import android.view.View; import android.widget.ImageView; +import android.widget.TextView; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; @@ -28,16 +29,18 @@ class BarcodeImageWriterTask extends AsyncTask private static final int MAX_WIDTH_2D = 500; private final WeakReference imageViewReference; + private final WeakReference textViewReference; private final String cardId; private final BarcodeFormat format; private final int imageHeight; private final int imageWidth; BarcodeImageWriterTask(ImageView imageView, String cardIdString, - BarcodeFormat barcodeFormat) + BarcodeFormat barcodeFormat, TextView textView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<>(imageView); + textViewReference = new WeakReference<>(textView); cardId = cardIdString; format = barcodeFormat; @@ -175,16 +178,24 @@ class BarcodeImageWriterTask extends AsyncTask } imageView.setImageBitmap(result); + TextView textView = textViewReference.get(); if(result != null) { Log.i(TAG, "Displaying barcode"); imageView.setVisibility(View.VISIBLE); + + if (textView != null) { + textView.setVisibility(View.VISIBLE); + textView.setText(format.name()); + } } else { Log.i(TAG, "Barcode generation failed, removing image from display"); imageView.setVisibility(View.GONE); + if (textView != null) + textView.setVisibility(View.GONE); } } } diff --git a/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java b/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java index 18becdcc6..0c00615b7 100644 --- a/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java +++ b/app/src/main/java/protect/card_locker/BarcodeSelectorActivity.java @@ -11,11 +11,13 @@ import androidx.appcompat.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; +import android.util.Pair; import android.view.MenuItem; import android.view.View; import android.view.ViewTreeObserver; import android.widget.EditText; import android.widget.ImageView; +import android.widget.TextView; import com.google.common.collect.ImmutableMap; import com.google.zxing.BarcodeFormat; @@ -58,7 +60,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity BarcodeFormat.UPC_A.name() )); - private Map barcodeViewMap; + private Map> barcodeViewMap; private LinkedList barcodeGeneratorTasks = new LinkedList<>(); @Override @@ -75,18 +77,18 @@ public class BarcodeSelectorActivity extends AppCompatActivity actionBar.setDisplayHomeAsUpEnabled(true); } - barcodeViewMap = ImmutableMap.builder() - .put(BarcodeFormat.AZTEC.name(), R.id.aztecBarcode) - .put(BarcodeFormat.CODE_39.name(), R.id.code39Barcode) - .put(BarcodeFormat.CODE_128.name(), R.id.code128Barcode) - .put(BarcodeFormat.CODABAR.name(), R.id.codabarBarcode) - .put(BarcodeFormat.DATA_MATRIX.name(), R.id.datamatrixBarcode) - .put(BarcodeFormat.EAN_8.name(), R.id.ean8Barcode) - .put(BarcodeFormat.EAN_13.name(), R.id.ean13Barcode) - .put(BarcodeFormat.ITF.name(), R.id.itfBarcode) - .put(BarcodeFormat.PDF_417.name(), R.id.pdf417Barcode) - .put(BarcodeFormat.QR_CODE.name(), R.id.qrcodeBarcode) - .put(BarcodeFormat.UPC_A.name(), R.id.upcaBarcode) + barcodeViewMap = ImmutableMap.>builder() + .put(BarcodeFormat.AZTEC.name(), new Pair<>(R.id.aztecBarcode, R.id.aztecBarcodeText)) + .put(BarcodeFormat.CODE_39.name(), new Pair<>(R.id.code39Barcode, R.id.code39BarcodeText)) + .put(BarcodeFormat.CODE_128.name(), new Pair<>(R.id.code128Barcode, R.id.code128BarcodeText)) + .put(BarcodeFormat.CODABAR.name(), new Pair<>(R.id.codabarBarcode, R.id.codabarBarcodeText)) + .put(BarcodeFormat.DATA_MATRIX.name(), new Pair<>(R.id.datamatrixBarcode, R.id.datamatrixBarcodeText)) + .put(BarcodeFormat.EAN_8.name(), new Pair<>(R.id.ean8Barcode, R.id.ean8BarcodeText)) + .put(BarcodeFormat.EAN_13.name(), new Pair<>(R.id.ean13Barcode, R.id.ean13BarcodeText)) + .put(BarcodeFormat.ITF.name(), new Pair<>(R.id.itfBarcode, R.id.itfBarcodeText)) + .put(BarcodeFormat.PDF_417.name(), new Pair<>(R.id.pdf417Barcode, R.id.pdf417BarcodeText)) + .put(BarcodeFormat.QR_CODE.name(), new Pair<>(R.id.qrcodeBarcode, R.id.qrcodeBarcodeText)) + .put(BarcodeFormat.UPC_A.name(), new Pair<>(R.id.upcaBarcode, R.id.upcaBarcodeText)) .build(); EditText cardId = findViewById(R.id.cardId); @@ -113,8 +115,9 @@ public class BarcodeSelectorActivity extends AppCompatActivity // Update barcodes for(String key : barcodeViewMap.keySet()) { - ImageView image = findViewById(barcodeViewMap.get(key)); - createBarcodeOption(image, key, s.toString()); + ImageView image = findViewById(barcodeViewMap.get(key).first); + TextView text = findViewById(barcodeViewMap.get(key).second); + createBarcodeOption(image, key, s.toString(), text); } View noBarcodeButtonView = findViewById(R.id.noBarcode); @@ -153,7 +156,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity }); } - private void createBarcodeOption(final ImageView image, final String formatType, final String cardId) + private void createBarcodeOption(final ImageView image, final String formatType, final String cardId, final TextView text) { final BarcodeFormat format = BarcodeFormat.valueOf(formatType); if(format == null) @@ -198,7 +201,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity } Log.d(TAG, "Generating barcode for type " + formatType); - BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format); + BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format, text); barcodeGeneratorTasks.add(task); task.execute(); } @@ -207,7 +210,7 @@ public class BarcodeSelectorActivity extends AppCompatActivity else { Log.d(TAG, "Generating barcode for type " + formatType); - BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format); + BarcodeImageWriterTask task = new BarcodeImageWriterTask(image, cardId, format, text); barcodeGeneratorTasks.add(task); task.execute(); } diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 3a45918c4..b8edf392f 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -261,14 +261,14 @@ public class LoyaltyCardEditActivity extends AppCompatActivity } Log.d(TAG, "ImageView size now known"); - new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute(); + new BarcodeImageWriterTask(barcodeImage, cardIdString, format, null).execute(); } }); } else { Log.d(TAG, "ImageView size known known, creating barcode"); - new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute(); + new BarcodeImageWriterTask(barcodeImage, cardIdString, format, null).execute(); } barcodeImageLayout.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 28b4057a5..9ef3c191b 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -264,14 +264,14 @@ public class LoyaltyCardViewActivity extends AppCompatActivity barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this); Log.d(TAG, "ImageView size now known"); - new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute(); + new BarcodeImageWriterTask(barcodeImage, cardIdString, format, null).execute(); } }); } else { Log.d(TAG, "ImageView size known known, creating barcode"); - new BarcodeImageWriterTask(barcodeImage, cardIdString, format).execute(); + new BarcodeImageWriterTask(barcodeImage, cardIdString, format, null).execute(); } barcodeFormatView.setText(getString(R.string.barcodeTypePlaceholder, format)); } diff --git a/app/src/main/res/layout/barcode_selector_activity.xml b/app/src/main/res/layout/barcode_selector_activity.xml index 8edd3374f..4e164d389 100644 --- a/app/src/main/res/layout/barcode_selector_activity.xml +++ b/app/src/main/res/layout/barcode_selector_activity.xml @@ -70,137 +70,236 @@ android:layout_height="wrap_content" android:text="@string/barcodeNoBarcode" android:enabled="false" /> - + - + - + - + - + - + - + - + - + - + - +