From fb9817091a8722782801a34b40e5baaceb777521 Mon Sep 17 00:00:00 2001 From: steckbrief Date: Mon, 26 Feb 2018 21:07:26 +0100 Subject: improves remote file status display and loading of remote files --- .../conversationsplus/utils/ui/QrCodeUtil.java | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/de/thedevstack/conversationsplus/utils/ui/QrCodeUtil.java (limited to 'src/main/java/de/thedevstack/conversationsplus/utils/ui/QrCodeUtil.java') diff --git a/src/main/java/de/thedevstack/conversationsplus/utils/ui/QrCodeUtil.java b/src/main/java/de/thedevstack/conversationsplus/utils/ui/QrCodeUtil.java new file mode 100644 index 00000000..1c342290 --- /dev/null +++ b/src/main/java/de/thedevstack/conversationsplus/utils/ui/QrCodeUtil.java @@ -0,0 +1,68 @@ +package de.thedevstack.conversationsplus.utils.ui; + +import android.app.AlertDialog; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.Point; +import android.widget.ImageView; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; + +import java.util.Hashtable; + +import de.thedevstack.android.logcat.Logging; +import de.thedevstack.conversationsplus.Config; +import de.thedevstack.conversationsplus.ui.XmppActivity; + +/** + */ +public final class QrCodeUtil { + + public static void showQrCode(XmppActivity activity) { + String uri = activity.getShareableUri(); + if (uri != null) { + Point size = new Point(); + activity.getWindowManager().getDefaultDisplay().getSize(size); + final int width = (size.x < size.y ? size.x : size.y); + + Bitmap bitmap = QrCodeUtil.createQrCodeBitmap(uri, width); + ImageView view = new ImageView(activity); + view.setImageBitmap(bitmap); + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setView(view); + builder.create().show(); + } + } + + public static Bitmap createQrCodeBitmap(String input, int size) { + Logging.d(Config.LOGTAG,"qr code requested size: "+size); + try { + final QRCodeWriter QR_CODE_WRITER = new QRCodeWriter(); + final Hashtable hints = new Hashtable<>(); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); + final BitMatrix result = QR_CODE_WRITER.encode(input, BarcodeFormat.QR_CODE, size, size, hints); + final int width = result.getWidth(); + final int height = result.getHeight(); + final int[] pixels = new int[width * height]; + for (int y = 0; y < height; y++) { + final int offset = y * width; + for (int x = 0; x < width; x++) { + pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.TRANSPARENT; + } + } + final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Logging.d(Config.LOGTAG,"output size: "+width+"x"+height); + bitmap.setPixels(pixels, 0, width, 0, 0, width, height); + return bitmap; + } catch (final WriterException e) { + return null; + } + } + + private QrCodeUtil() {} +} -- cgit v1.2.3