summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2019-05-22 15:50:27 +0200
committerBjørn Mork <bjorn@mork.no>2019-05-22 15:51:45 +0200
commit1caf2bcaab9e2220fb06913168701f67c7503480 (patch)
treee4b203386e2c6cb96c4849ca690813bd7cbb6108
parentc92e305307d411aa0f19cc6a5364334b817e12c6 (diff)
android wip: scanlistadapter is working
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r--Defogger/res/layout/activity_scanner.xml11
-rw-r--r--Defogger/res/layout/scanitem.xml12
-rw-r--r--Defogger/src/no/mork/android/defogger/ScanListAdapter.java54
-rw-r--r--Defogger/src/no/mork/android/defogger/ScannerActivity.java26
4 files changed, 85 insertions, 18 deletions
diff --git a/Defogger/res/layout/activity_scanner.xml b/Defogger/res/layout/activity_scanner.xml
new file mode 100644
index 0000000..e0a19d6
--- /dev/null
+++ b/Defogger/res/layout/activity_scanner.xml
@@ -0,0 +1,11 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+
+ <ListView
+ android:id="@+id/scanlist_view"
+ android:scrollbars="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+</RelativeLayout>
diff --git a/Defogger/res/layout/scanitem.xml b/Defogger/res/layout/scanitem.xml
new file mode 100644
index 0000000..3d47710
--- /dev/null
+++ b/Defogger/res/layout/scanitem.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/scanitem"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center" />
+</LinearLayout>
diff --git a/Defogger/src/no/mork/android/defogger/ScanListAdapter.java b/Defogger/src/no/mork/android/defogger/ScanListAdapter.java
index c0b8a8d..cc1c4e5 100644
--- a/Defogger/src/no/mork/android/defogger/ScanListAdapter.java
+++ b/Defogger/src/no/mork/android/defogger/ScanListAdapter.java
@@ -2,14 +2,62 @@ package no.mork.android.defogger;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
-import android.widget.ArrayAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+import java.util.ArrayList;
// originally from https://developer.android.com/guide/topics/ui/layout/recyclerview
// but converted to simpler ArrayAdapter using https://developer.android.com/guide/topics/ui/declaring-layout.html#FillingTheLayout
-public class ScanListAdapter extends ArrayAdapter<BluetoothDevice> {
+public class ScanListAdapter extends BaseAdapter {
+ private ArrayList<BluetoothDevice> mObjects;
+ private Context mCtx;
+ private LayoutInflater mInflater;
+ private int mRes;
+ private int mTxtId;
+
public ScanListAdapter(Context context, int resource, int textViewResourceId) {
- super(context, resource, textViewResourceId);
+ mObjects = new ArrayList<BluetoothDevice>();
+ mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ mRes = resource;
+ mTxtId = textViewResourceId;
+ }
+
+ @Override
+ public int getCount() {
+ return mObjects.size() ;
+ }
+
+ @Override
+ public BluetoothDevice getItem(int position) {
+ return mObjects.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return getItem(position).hashCode();
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup container) {
+ BluetoothDevice device = getItem(position);
+
+ if (convertView == null) {
+ convertView = mInflater.inflate(mRes, container, false);
+ }
+
+ ((TextView) convertView.findViewById(mTxtId)).setText(device.getAddress() + " - " + device.getName());
+ return convertView;
+ }
+
+ public void add(BluetoothDevice device) {
+ if (device.getName() != null && mObjects.indexOf(device) < 0) { // avoid duplicates and ignore nameless devices
+ mObjects.add(device);
+ notifyDataSetChanged();
+ }
}
}
diff --git a/Defogger/src/no/mork/android/defogger/ScannerActivity.java b/Defogger/src/no/mork/android/defogger/ScannerActivity.java
index 53eb003..72a85d1 100644
--- a/Defogger/src/no/mork/android/defogger/ScannerActivity.java
+++ b/Defogger/src/no/mork/android/defogger/ScannerActivity.java
@@ -14,6 +14,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelUuid;
import android.util.Log;
+import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
@@ -26,16 +27,14 @@ public class ScannerActivity extends Activity implements Runnable {
// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;
- // private BluetoothLeScanner btScanner;
+ private BluetoothLeScanner btScanner;
private boolean mScanning;
- private Handler mHandler;
private ScanCallback leScanCallback;
-
private ScanListAdapter scanlistAdapter;
private class BtleScanCallback extends ScanCallback {
- private ScanListAdapter mScanResults;
+ private ScanListAdapter mScanResults;
BtleScanCallback(ScanListAdapter scanResults) {
mScanResults = scanResults;
@@ -62,14 +61,11 @@ public class ScannerActivity extends Activity implements Runnable {
}
private void addScanResult(ScanResult result) {
- List<ParcelUuid> uuids = result.getScanRecord().getServiceUuids();
- if (uuids != null && !uuids.isEmpty()) { // uuids.contains(ParcelUuid.fromString("0000d001-0000-1000-8000-00805f9b34fb"))) {
- for (ParcelUuid temp : uuids) {
- Log.d(msg, temp.toString());
- }
- mScanResults.addDevice(result.getDevice());
- }
+ BluetoothDevice device = result.getDevice();
+ Log.d(msg, "adding " + device.toString());
+ mScanResults.add(device);
}
+
};
@Override
@@ -104,7 +100,7 @@ public class ScannerActivity extends Activity implements Runnable {
}
private void startScan() {
- BluetoothLeScanner btScanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
+ btScanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
@@ -123,18 +119,18 @@ public class ScannerActivity extends Activity implements Runnable {
btScanner.startScan(filters, settings, leScanCallback);
- mHandler = new Handler();
+ Handler mHandler = new Handler();
mHandler.postDelayed(this, SCAN_PERIOD);
mScanning = true;
Log.d(msg, "started scanning");
}
private void stopScan() {
- BluetoothLeScanner btScanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
btScanner.stopScan(leScanCallback);
leScanCallback = null;
- mHandler = null;
mScanning = false;
Log.d(msg, "stopped scanning");
}
+
+
}