aboutsummaryrefslogtreecommitdiffstats
path: root/wpadebug/src
diff options
context:
space:
mode:
authorPurushottam Kushwaha <pkushwah@codeaurora.org>2018-01-30 15:05:46 (GMT)
committerJouni Malinen <j@w1.fi>2018-02-08 16:39:41 (GMT)
commit717f236dce3ed571e9a61fcce86d8a37a7f7bc1b (patch)
tree65c8121822bbe32a88ad9d7c6db8e32d33683e19 /wpadebug/src
parent8f7a50a63ef8523110a44201eb3885e14ca24f84 (diff)
downloadhostap-717f236dce3ed571e9a61fcce86d8a37a7f7bc1b.zip
hostap-717f236dce3ed571e9a61fcce86d8a37a7f7bc1b.tar.gz
hostap-717f236dce3ed571e9a61fcce86d8a37a7f7bc1b.tar.bz2
wpadebug: Add support for QR Code scanning and display via zxing
Enhance wpadebug application to support scanning and displaying of QR codes. This depends on a third-party source: zxing (https://github.com/zxing/zxing). Shell command to launch scanner/viewer via wpadebug is: >adb root >adb shell Scanner: >am start -n w1.fi.wpadebug/w1.fi.wpadebug.QrCodeScannerActivity Viewer: >am start -n w1.fi.wpadebug/w1.fi.wpadebug.QrCodeDisplayActivity QR code string input/output file would be generated in '/sdcard/wpadebug_qrdata.txt' in the device. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Diffstat (limited to 'wpadebug/src')
-rw-r--r--wpadebug/src/w1/fi/wpadebug/QrCodeDisplayActivity.java109
-rw-r--r--wpadebug/src/w1/fi/wpadebug/QrCodeScannerActivity.java75
2 files changed, 184 insertions, 0 deletions
diff --git a/wpadebug/src/w1/fi/wpadebug/QrCodeDisplayActivity.java b/wpadebug/src/w1/fi/wpadebug/QrCodeDisplayActivity.java
new file mode 100644
index 0000000..10c9c01
--- /dev/null
+++ b/wpadebug/src/w1/fi/wpadebug/QrCodeDisplayActivity.java
@@ -0,0 +1,109 @@
+/*
+ * wpadebug - wpa_supplicant and Wi-Fi debugging app for Android
+ * Copyright (c) 2018, The Linux Foundation
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+package w1.fi.wpadebug;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.ImageView;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class QrCodeDisplayActivity extends Activity {
+
+ private static final String TAG = "wpadebug";
+ private static final String FILE_NAME = "wpadebug_qrdata.txt";
+ private ImageView imageView;
+
+ // Below set of configs are used for QR code display window
+ private final static int WHITE = 0xFFFFFFFF;
+ private final static int BLACK = 0xFF000000;
+ private final static int WIDTH = 400;
+ private final static int HEIGHT = 400;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // create imageview for this and attach to this activity.
+ setContentView(R.layout.qrcode);
+ imageView = (ImageView) findViewById(R.id.qrCode);
+ String str = readFromFile(FILE_NAME);
+
+ //Encode and launch qrcode now
+ try {
+ Bitmap bitmap = (TextUtils.isEmpty(str)) ? null : encodeAsBitmap(str);
+ if (bitmap != null) {
+ imageView.setImageBitmap(bitmap);
+ } else {
+ Log.e(TAG, "Failed to generate bitmap for uri=" + str);
+ finish();
+ }
+ } catch (WriterException e) {
+ e.printStackTrace();
+ finish();
+ }
+ }
+
+ private Bitmap encodeAsBitmap(String str) throws WriterException {
+ BitMatrix result;
+ try {
+ result = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, null);
+ } catch (IllegalArgumentException iae) {
+ // Unsupported format
+ return null;
+ }
+
+ int width = result.getWidth();
+ int height = result.getHeight();
+ int[] pixels = new int[width * height];
+ for (int y = 0; y < height; y++) {
+ int offset = y * width;
+ for (int x = 0; x < width; x++) {
+ pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
+ }
+ }
+
+ Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
+ return bitmap;
+ }
+
+ private String readFromFile(String filePath) {
+ try {
+ FileInputStream fis = new FileInputStream(new File("/sdcard", filePath));
+ BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
+ StringBuilder sb = new StringBuilder();
+ String line;
+ while(( line = br.readLine()) != null ) {
+ sb.append( line );
+ sb.append( '\n' );
+ }
+ return sb.toString();
+ }
+ catch (FileNotFoundException e) {
+ Log.e(TAG, "File not found: " + e.toString());
+ } catch (IOException e) {
+ Log.e(TAG, "Can not read file: " + e.toString());
+ }
+
+ return null;
+ }
+}
diff --git a/wpadebug/src/w1/fi/wpadebug/QrCodeScannerActivity.java b/wpadebug/src/w1/fi/wpadebug/QrCodeScannerActivity.java
new file mode 100644
index 0000000..0c31553
--- /dev/null
+++ b/wpadebug/src/w1/fi/wpadebug/QrCodeScannerActivity.java
@@ -0,0 +1,75 @@
+/*
+ * wpadebug - wpa_supplicant and Wi-Fi debugging app for Android
+ * Copyright (c) 2018, The Linux Foundation
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+package w1.fi.wpadebug;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Toast;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
+public class QrCodeScannerActivity extends Activity {
+
+ private static final String TAG = "wpadebug";
+ private static final String RESULT = "SCAN_RESULT";
+ private static final String FILE_NAME = "wpadebug_qrdata.txt";
+ private static final String ACTION = "com.google.zxing.client.android.SCAN";
+
+ private static final int QRCODE = 1;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Intent intent = new Intent();
+ intent.setAction(ACTION);
+ try {
+ startActivityForResult(intent, QRCODE);
+ } catch (ActivityNotFoundException e) {
+ Log.e(TAG, "No QR code scanner found with name=" + ACTION);
+ Toast.makeText(QrCodeScannerActivity.this, "QR code scanner not found", Toast.LENGTH_SHORT).show();
+ finish();
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == QRCODE && resultCode == RESULT_OK) {
+ writeToFile(data.getStringExtra(RESULT));
+ finish();
+ }
+ }
+
+ public void writeToFile(String data)
+ {
+ File file = new File("/sdcard", FILE_NAME);
+ try
+ {
+ file.createNewFile();
+ FileOutputStream fOut = new FileOutputStream(file);
+ OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
+ myOutWriter.append(data);
+
+ myOutWriter.close();
+
+ fOut.flush();
+ fOut.close();
+ }
+ catch (IOException e)
+ {
+ Log.e(TAG, "File write failed: " + e.toString());
+ }
+ }
+}