From fc69b6daa678396c7bce62fc6c9098b3623bb7e1 Mon Sep 17 00:00:00 2001 From: Alexandros Schillings Date: Wed, 9 Apr 2014 16:54:16 +0100 Subject: [PATCH] Started using an EasyObjectCursor to avoid the screen jumping up and down --- sample_app/libs/EasyCursor-0.1.1.jar | Bin 0 -> 30698 bytes .../btlescan/activities/MainActivity.java | 10 +++--- .../adapters/LeDeviceListAdapter.java | 30 ++++++++++-------- .../containers/BluetoothLeDeviceStore.java | 8 +++++ 4 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 sample_app/libs/EasyCursor-0.1.1.jar diff --git a/sample_app/libs/EasyCursor-0.1.1.jar b/sample_app/libs/EasyCursor-0.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..2e043b5c4f473d5c201fde3edf6a1a9f689db1dc GIT binary patch literal 30698 zcmbTe1C(XWmnWLGZKKk*ZQHhO+qP|6mAGj;v(k2@U5Qu!?wOwMes6vAX3mOO>%_Xh z*eA}uu_I#ZD9V6>!2kh40ReG^M2Q0ZrwbYg3`kB)RftYXUYy};5(r4~e?XytIR8RD z=cW|2|H3W)R1erDysBy;tz7uQ?fF2^b7DZbkwucb1lk@%Pf1x&eI|& zPPCG;vyy5+(ZJ+%PqCg|xiQM9GRi8hdDKD|Gf!{_a`0{`aByg>A2BE?F3RY+4>2(J zF(@*D?`&ROo?ZVj79b!i!~Z&L(7$7Gvtjt3gZ+O4ApRX-;_wd``2WBd*}5{bu>S)T z>%T+Ij9k1-+?-t;od2O0=|A+cc5$%(-x47I2LcYp)@CNI|639y|3JdU$@YKSpYi`! ze!($i94a6fj^-Bq)D(wZF=~eq57%3G}lmsmRf&>zyt|m0!vcv{pRh>~T@&(%# zX8KN}u*CXp%`$W|N

AFgvJQJ$oe)8dM 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≥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 literal 0 HcmV?d00001 diff --git a/sample_app/src/uk/co/alt236/btlescan/activities/MainActivity.java b/sample_app/src/uk/co/alt236/btlescan/activities/MainActivity.java index 3e0a043..eb3a5cd 100644 --- a/sample_app/src/uk/co/alt236/btlescan/activities/MainActivity.java +++ b/sample_app/src/uk/co/alt236/btlescan/activities/MainActivity.java @@ -6,6 +6,7 @@ import uk.co.alt236.btlescan.adapters.LeDeviceListAdapter; import uk.co.alt236.btlescan.containers.BluetoothLeDeviceStore; import uk.co.alt236.btlescan.util.BluetoothLeScanner; import uk.co.alt236.btlescan.util.BluetoothUtils; +import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; import android.app.AlertDialog; import android.app.ListActivity; import android.bluetooth.BluetoothAdapter; @@ -39,12 +40,13 @@ public class MainActivity extends ListActivity { public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { final BluetoothLeDevice deviceLe = new BluetoothLeDevice(device, rssi, scanRecord, System.currentTimeMillis()); + mDeviceStore.addDevice(deviceLe); + final EasyObjectCursor c = mDeviceStore.getDeviceCursor(); runOnUiThread(new Runnable() { @Override public void run() { - mDeviceStore.addDevice(deviceLe); - mLeDeviceListAdapter.replaceData(mDeviceStore.getDeviceList()); + mLeDeviceListAdapter.swapCursor(c); updateItemCount(mLeDeviceListAdapter.getCount()); } }); @@ -119,7 +121,7 @@ public class MainActivity extends ListActivity { @Override protected void onListItemClick(ListView l, View v, int position, long id) { - final BluetoothLeDevice device = mLeDeviceListAdapter.getItem(position); + final BluetoothLeDevice device = (BluetoothLeDevice) mLeDeviceListAdapter.getItem(position); if (device == null) return; @@ -181,7 +183,7 @@ public class MainActivity extends ListActivity { mDeviceStore.clear(); updateItemCount(0); - mLeDeviceListAdapter = new LeDeviceListAdapter(this, mDeviceStore.getDeviceList()); + mLeDeviceListAdapter = new LeDeviceListAdapter(this, mDeviceStore.getDeviceCursor()); setListAdapter(mLeDeviceListAdapter); mBluetoothUtils.askUserToEnableBluetoothIfNeeded(); diff --git a/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java b/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java index f73cedd..38d3892 100644 --- a/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java +++ b/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java @@ -1,34 +1,38 @@ package uk.co.alt236.btlescan.adapters; -import java.util.List; - import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; import uk.co.alt236.bluetoothlelib.device.IBeaconDevice; import uk.co.alt236.bluetoothlelib.util.IBeaconUtils; import uk.co.alt236.btlescan.R; import uk.co.alt236.btlescan.util.Constants; +import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; import android.app.Activity; +import android.support.v4.widget.SimpleCursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; // Adapter for holding devices found through scanning. -public class LeDeviceListAdapter extends ArrayAdapter { +public class LeDeviceListAdapter extends SimpleCursorAdapter { private final LayoutInflater mInflator; private final Activity mActivity; - public LeDeviceListAdapter(Activity activity, List list) { - super(activity, R.layout.list_item_device, list); + public LeDeviceListAdapter(Activity activity, EasyObjectCursor cursor) { + super(activity, R.layout.list_item_device, cursor, new String[0], new int[0], 0); mInflator = activity.getLayoutInflater(); mActivity = activity; } - public void replaceData(List list){ - // TODO: THIS IS REALLY HACKY AND BAD FOR PERFORMACE... - clear(); - addAll(list); + @SuppressWarnings("unchecked") + @Override + public EasyObjectCursor getCursor(){ + return ((EasyObjectCursor) super.getCursor()); + } + + @Override + public BluetoothLeDevice getItem(int i){ + return getCursor().getItem(i); } @Override @@ -60,7 +64,7 @@ public class LeDeviceListAdapter extends ArrayAdapter { viewHolder = (ViewHolder) view.getTag(); } - final BluetoothLeDevice device = getItem(i); + final BluetoothLeDevice device = getCursor().getItem(i); final String deviceName = device.getName(); final double rssi = device.getRssi(); @@ -88,9 +92,9 @@ public class LeDeviceListAdapter extends ArrayAdapter { viewHolder.ibeaconSection.setVisibility(View.GONE); } - final String rssiString = + final String rssiString = mActivity.getString(R.string.formatter_db, String.valueOf(rssi)); - final String runningAverageRssiString = + final String runningAverageRssiString = mActivity.getString(R.string.formatter_db, String.valueOf(device.getRunningAverageRssi())); viewHolder.deviceLastUpdated.setText( diff --git a/sample_app/src/uk/co/alt236/btlescan/containers/BluetoothLeDeviceStore.java b/sample_app/src/uk/co/alt236/btlescan/containers/BluetoothLeDeviceStore.java index aff765a..dabbf0a 100644 --- a/sample_app/src/uk/co/alt236/btlescan/containers/BluetoothLeDeviceStore.java +++ b/sample_app/src/uk/co/alt236/btlescan/containers/BluetoothLeDeviceStore.java @@ -16,6 +16,7 @@ import uk.co.alt236.bluetoothlelib.device.IBeaconDevice; import uk.co.alt236.bluetoothlelib.util.ByteUtils; import uk.co.alt236.bluetoothlelib.util.IBeaconUtils; import uk.co.alt236.btlescan.util.CsvWriterHelper; +import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; import android.content.Context; import android.content.Intent; import android.net.Uri; @@ -60,6 +61,13 @@ public class BluetoothLeDeviceStore { return writer; } + public EasyObjectCursor getDeviceCursor(){ + return new EasyObjectCursor( + BluetoothLeDevice.class, + getDeviceList(), + "address"); + } + public List getDeviceList(){ final List methodResult = new ArrayList(mDeviceMap.values());