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() {} }