summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2019-06-02 09:41:16 +0200
committerBjørn Mork <bjorn@mork.no>2019-06-02 09:41:16 +0200
commitfa45f59cb0abb08670ec8d309842a9a9845059c7 (patch)
tree412b5bce2a2a77065186d69ccfb375a938cc6730
parent320e3dc88c632fe6d45f844069655cb4502a19dc (diff)
QR code scanning and connect works
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r--Defogger/res/layout/activity_main.xml6
-rw-r--r--Defogger/res/values/strings.xml1
-rw-r--r--Defogger/src/no/mork/android/defogger/MainActivity.java44
3 files changed, 51 insertions, 0 deletions
diff --git a/Defogger/res/layout/activity_main.xml b/Defogger/res/layout/activity_main.xml
index e6d815e..df1ab37 100644
--- a/Defogger/res/layout/activity_main.xml
+++ b/Defogger/res/layout/activity_main.xml
@@ -17,6 +17,12 @@
android:layout_height="wrap_content"
android:onClick="startScannerActivity"
android:text="@string/start_scan"/>
+ <Button
+ android:id="@+id/read_qrcode"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:onClick="startQRReaderActivity"
+ android:text="@string/read_qrcode"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/Defogger/res/values/strings.xml b/Defogger/res/values/strings.xml
index 30c8fd7..7fd8df3 100644
--- a/Defogger/res/values/strings.xml
+++ b/Defogger/res/values/strings.xml
@@ -7,6 +7,7 @@
<!-- Main -->
<string name="start_scan">Scan for camera</string>
+ <string name="read_qrcode">Scan QR Code</string>
<string name="wificonfig">Show WiFi configuration</string>
<string name="ipconfig">Show IP configuration</string>
<string name="sysinfo">Get system information</string>
diff --git a/Defogger/src/no/mork/android/defogger/MainActivity.java b/Defogger/src/no/mork/android/defogger/MainActivity.java
index e9376ba..4f1f974 100644
--- a/Defogger/src/no/mork/android/defogger/MainActivity.java
+++ b/Defogger/src/no/mork/android/defogger/MainActivity.java
@@ -32,6 +32,11 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
+
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.google.zxing.integration.android.IntentResult;
+
+import java.lang.StringBuilder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -91,6 +96,11 @@ public class MainActivity extends Activity {
super.onActivityResult(requestCode, resultCode, dataIntent);
switch (requestCode) {
+ case IntentIntegrator.REQUEST_CODE:
+ IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, dataIntent);
+ if (scanResult != null)
+ handleQRScanResult(scanResult);
+ break;
case REQUEST_ENABLE_BT:
if (resultCode != RESULT_OK) { // user refused to enable BT?
setStatus("Bluetooth is disabled");
@@ -150,6 +160,40 @@ public class MainActivity extends Activity {
startActivityForResult(intent, REQUEST_GET_DEVICE);
}
+ public void startQRReaderActivity(View view) {
+ IntentIntegrator integrator = new IntentIntegrator(this);
+ integrator.initiateScan();
+ }
+
+ private void handleQRScanResult(IntentResult res) {
+ Log.d(msg, "QR scan resturned: " + res.toString());
+
+ // DCS-8000LH,A3,12345678,B0C554AABBCC,DCS-8000LH-BBCC,123456
+ String[] data = res.getContents().split(",");
+ if (data.length != 6 || data[3].length() != 12 || data[5].length() != 6) {
+ setStatus("Unexpected QR scan result - wrong format");
+ return;
+ }
+
+ pincode = data[5];
+
+ StringBuilder mac = new StringBuilder(data[3]);
+ mac.insert(10, ':');
+ mac.insert(8, ':');
+ mac.insert(6, ':');
+ mac.insert(4, ':');
+ mac.insert(2, ':');
+
+ if (!bluetoothAdapter.checkBluetoothAddress(mac.toString())) {
+ Log.d(msg, "Got invalid MAC address from QR scan:" + mac.toString());
+ return;
+ }
+
+ Log.d(msg, "Will attempt to connect to Bluetooth device " + mac.toString());
+ BluetoothDevice device = bluetoothAdapter.getRemoteDevice(mac.toString());
+ connectDevice(device);
+ }
+
// utilities
private Map<String,String> splitKV(String kv, String splitter)
{