From 1caf2bcaab9e2220fb06913168701f67c7503480 Mon Sep 17 00:00:00 2001 From: Bjørn Mork Date: Wed, 22 May 2019 15:50:27 +0200 Subject: android wip: scanlistadapter is working MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bjørn Mork --- Defogger/res/layout/activity_scanner.xml | 11 +++++ Defogger/res/layout/scanitem.xml | 12 +++++ .../no/mork/android/defogger/ScanListAdapter.java | 54 ++++++++++++++++++++-- .../no/mork/android/defogger/ScannerActivity.java | 26 +++++------ 4 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 Defogger/res/layout/activity_scanner.xml create mode 100644 Defogger/res/layout/scanitem.xml 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 @@ + + + + + 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 @@ + + + + + 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 { +public class ScanListAdapter extends BaseAdapter { + private ArrayList 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(); + 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 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"); } + + } -- cgit v1.2.3