diff --git a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java index ef8dcc55ebf9f4fca1ae931b7d239a0bbfa02d04..e3426388bc1961cceaf4808ff10f243387c14c01 100644 --- a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java +++ b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java @@ -5,6 +5,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.graphics.Bitmap; import android.hardware.Camera; import android.os.Bundle; import android.support.annotation.Nullable; @@ -23,9 +24,9 @@ import org.briarproject.R; import org.briarproject.android.ActivityComponent; import org.briarproject.android.api.AndroidExecutor; import org.briarproject.android.fragment.BaseEventFragment; -import org.briarproject.android.view.CameraView; import org.briarproject.android.util.QrCodeDecoder; import org.briarproject.android.util.QrCodeUtils; +import org.briarproject.android.view.CameraView; import org.briarproject.api.event.Event; import org.briarproject.api.event.KeyAgreementAbortedEvent; import org.briarproject.api.event.KeyAgreementFailedEvent; @@ -49,16 +50,16 @@ import static android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED; import static android.bluetooth.BluetoothAdapter.EXTRA_STATE; import static android.bluetooth.BluetoothAdapter.STATE_ON; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; +import static android.view.View.INVISIBLE; +import static android.view.View.VISIBLE; import static android.widget.Toast.LENGTH_LONG; import static java.util.logging.Level.WARNING; public class ShowQrCodeFragment extends BaseEventFragment implements QrCodeDecoder.ResultCallback { - public static final String TAG = "ShowQrCodeFragment"; - - private static final Logger LOG = - Logger.getLogger(ShowQrCodeFragment.class.getName()); + private static final String TAG = ShowQrCodeFragment.class.getName(); + private static final Logger LOG = Logger.getLogger(TAG); @Inject protected KeyAgreementTaskFactory keyAgreementTaskFactory; @@ -85,9 +86,9 @@ public class ShowQrCodeFragment extends BaseEventFragment private volatile boolean waitingForBluetooth; public static ShowQrCodeFragment newInstance() { - + Bundle args = new Bundle(); - + ShowQrCodeFragment fragment = new ShowQrCodeFragment(); fragment.setArguments(args); return fragment; @@ -225,8 +226,8 @@ public class ShowQrCodeFragment extends BaseEventFragment } private void reset() { - statusView.setVisibility(View.INVISIBLE); - cameraView.setVisibility(View.VISIBLE); + statusView.setVisibility(INVISIBLE); + cameraView.setVisibility(VISIBLE); gotRemotePayload = false; cameraView.startConsumer(); startListening(); @@ -234,11 +235,10 @@ public class ShowQrCodeFragment extends BaseEventFragment private void qrCodeScanned(String content) { try { - // TODO use Base32 Payload remotePayload = payloadParser.parse( Base64.decode(content, 0)); - cameraView.setVisibility(View.INVISIBLE); - statusView.setVisibility(View.VISIBLE); + cameraView.setVisibility(INVISIBLE); + statusView.setVisibility(VISIBLE); status.setText(R.string.connecting_to_device); task.connectAndRunProtocol(remotePayload); } catch (IOException e) { @@ -269,11 +269,12 @@ public class ShowQrCodeFragment extends BaseEventFragment listener.runOnUiThread(new Runnable() { @Override public void run() { - // TODO use Base32 String input = Base64.encodeToString( payloadEncoder.encode(localPayload), 0); - qrCode.setImageBitmap( - QrCodeUtils.createQrCode((Context) listener, input)); + Bitmap bitmap = + QrCodeUtils.createQrCode((Context) listener, input); + if (bitmap == null) return; + qrCode.setImageBitmap(bitmap); // Simple fade-in animation AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f); anim.setDuration(200); diff --git a/briar-android/src/org/briarproject/android/util/QrCodeUtils.java b/briar-android/src/org/briarproject/android/util/QrCodeUtils.java index 8a09d2cd8536dcb4a82dbeb5b9f81f67968257ad..16d0172a23693f0559f65173b26def39376ac290 100644 --- a/briar-android/src/org/briarproject/android/util/QrCodeUtils.java +++ b/briar-android/src/org/briarproject/android/util/QrCodeUtils.java @@ -2,16 +2,20 @@ package org.briarproject.android.util; import android.content.Context; import android.graphics.Bitmap; -import android.graphics.Color; import android.util.DisplayMetrics; -import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; +import org.jetbrains.annotations.Nullable; + import java.util.logging.Logger; +import static android.graphics.Bitmap.Config.ARGB_8888; +import static android.graphics.Color.BLACK; +import static android.graphics.Color.WHITE; +import static com.google.zxing.BarcodeFormat.QR_CODE; import static java.util.logging.Level.WARNING; public class QrCodeUtils { @@ -19,6 +23,7 @@ public class QrCodeUtils { private static final Logger LOG = Logger.getLogger(QrCodeUtils.class.getName()); + @Nullable public static Bitmap createQrCode(Context context, String input) { // Get narrowest screen dimension DisplayMetrics dm = context.getResources().getDisplayMetrics(); @@ -26,24 +31,21 @@ public class QrCodeUtils { try { // Generate QR code final BitMatrix encoded = new QRCodeWriter().encode( - input, BarcodeFormat.QR_CODE, smallestDimen, smallestDimen); + input, QR_CODE, smallestDimen, smallestDimen); // Convert QR code to Bitmap int width = encoded.getWidth(); int height = encoded.getHeight(); int[] pixels = new int[width * height]; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { - pixels[y * width + x] = - encoded.get(x, y) ? Color.BLACK : Color.WHITE; + pixels[y * width + x] = encoded.get(x, y) ? BLACK : WHITE; } } - Bitmap qr = Bitmap.createBitmap(width, height, - Bitmap.Config.ARGB_8888); + Bitmap qr = Bitmap.createBitmap(width, height, ARGB_8888); qr.setPixels(pixels, 0, width, 0, 0, width, height); return qr; } catch (WriterException e) { - if (LOG.isLoggable(WARNING)) - LOG.log(WARNING, e.toString(), e); + if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); return null; } }