@Override protected void onResuming() { App.holder().init(); App.holder() .subscribeBlData( new ActionBlDataSub(null, IBlDataSubscriber.class, null) .getHandlerImpl(IBlDataSubscriber.class)); App.holder() .access( App.holder().new HolderAccess() { @Override public void onRun() { ActScan.this.runOnUiThread( new Runnable() { @Override public void run() { Iterator<BlData> it = getData(); while (it.hasNext()) { BlData b = it.next(); if (b.isActive()) { rcycAdaptDevices.getBlData().add(b); } } rcycAdaptDevices.notifyItemInserted(0); checkVisibleScans(); } }); } }); registerReceiver(brcstRcvrBlAdapt, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); }
private void updateHolderData(String macAddress, UUID uuid, byte[] value) { App.holder() .access( App.holder().new HolderAccess() { public String macAddress; public UUID uuid; public byte[] value; public HolderBlData.HolderAccess init(String macAddress, UUID uuid, byte[] value) { this.macAddress = macAddress; this.uuid = uuid; this.value = value; return this; } @Override public void onRun() { Iterator<BlData> i = getData(); while (i.hasNext()) { BlData d = i.next(); if (d.getAddress().equals(macAddress)) { boolean found = false; for (GattData g : d.getGattData()) { if (g.getUuid().equals(uuid)) { g.setData(value); found = true; break; } } if (!found) { d.getGattData().add(new GattData(uuid, value)); } ActScan.this.runOnUiThread( new Runnable() { public BlData d; public Runnable init(BlData d) { this.d = d; return this; } @Override public void run() { AdaptScans.ViewHolder viewHolder = (AdaptScans.ViewHolder) rcycDevices.findViewHolderForAdapterPosition( rcycAdaptDevices.getBlData().indexOf(d)); if (viewHolder != null) { viewHolder.parseData(d); } } }.init(d)); break; } } } }.init(macAddress, uuid, value)); }
@Override public void onRefreshedScanReceived(ScanResult result) { App.holder() .access( App.holder().new HolderAccess() { private ScanResult result; public HolderBlData.HolderAccess init(ScanResult result) { this.result = result; return this; } @Override public void onRun() { boolean found = false; Iterator<BlData> i = getData(); while (i.hasNext()) { BlData b = i.next(); if (b.getAddress().equals(result.getDevice().getAddress())) { if (!b.isActive()) { Intent showIntent = new Intent(getString(R.string.intent_advert_gatt_connect)); showIntent.putExtra(getString(R.string.bndl_bl_scan_result), result); LocalBroadcastManager.getInstance(ActScan.this).sendBroadcast(showIntent); } b.setActive(true); b.setRssi(result.getRssi()); found = true; break; } } if (!found) { BlData data = new BlData(); data.setActive(true); data.setAddress(result.getDevice().getAddress()); data.setRssi(result.getRssi()); //noinspection ConstantConditions data.setAdvertisement( result.getScanRecord().getServiceData(Constants.UUID_ADVERT_SERVICE_MULTI)); Log.d( TAG, "Already found Display not found in Data and will be added: " + data.getAddress()); SoundPlayer.playExampleBeep(440, 1, 0); VibratorBuilder.vibrate(VibratorBuilder.SHORT_SHORT); addData(data); Intent showIntent = new Intent(getString(R.string.intent_advert_gatt_connect)); showIntent.putExtra(getString(R.string.bndl_bl_scan_result), result); LocalBroadcastManager.getInstance(ActScan.this).sendBroadcast(showIntent); } } }.init(result)); }
@Override public void onScanLost(ScanResult lostResult) { App.holder() .access( App.holder().new HolderAccess() { private ScanResult result; public HolderBlData.HolderAccess init(ScanResult result) { this.result = result; return this; } @Override public void onRun() { Iterator<BlData> i = getData(); while (i.hasNext()) { BlData b = i.next(); if (b.getAddress().equals(result.getDevice().getAddress())) { b.setActive(false); } ActScan.this.runOnUiThread( new Runnable() { @Override public void run() { for (int i = 0; i < rcycAdaptDevices.getBlData().size(); i++) { BlData b = rcycAdaptDevices.getBlData().get(i); if (!b.isActive() && b.getAddress().equals(result.getDevice().getAddress())) { rcycAdaptDevices.getBlData().remove(b); rcycAdaptDevices.notifyDataSetChanged(); } } } }); } } }.init(lostResult)); }
@Override public void onScanResultReceived(ScanResult result) { Log.d(TAG, "onScanResultReceived: " + result.getDevice().getAddress()); findViewById(R.id.txt_headline_displays).setVisibility(View.VISIBLE); for (BlData b : rcycAdaptDevices.getBlData()) { if (b.isActive() && b.getAddress().equals(result.getDevice().getAddress())) { return; } } BlData data = new BlData(); data.setActive(true); data.setAddress(result.getDevice().getAddress()); data.setRssi(result.getRssi()); //noinspection ConstantConditions data.setAdvertisement( result.getScanRecord().getServiceData(Constants.UUID_ADVERT_SERVICE_MULTI)); App.holder() .access( App.holder().new HolderAccess() { private BlData data; private ScanResult result; public HolderBlData.HolderAccess init(BlData data, ScanResult result) { this.data = data; this.result = result; return this; } @Override public void onRun() { Iterator<BlData> i = getData(); boolean found = false; while (i.hasNext()) { BlData b = i.next(); if (b.getAddress().equals(data.getAddress())) { if (!b.isActive()) { Intent showIntent = new Intent(getString(R.string.intent_advert_gatt_connect)); showIntent.putExtra(getString(R.string.bndl_bl_scan_result), result); LocalBroadcastManager.getInstance(ActScan.this).sendBroadcast(showIntent); } b.setActive(true); found = true; break; } } if (!found) { Log.d(TAG, "Display not found and will be added: " + data.getAddress()); SoundPlayer.playExampleBeep(440, 1, 0); VibratorBuilder.vibrate(VibratorBuilder.SHORT_SHORT); addData(data); Intent showIntent = new Intent(getString(R.string.intent_advert_gatt_connect)); showIntent.putExtra(getString(R.string.bndl_bl_scan_result), result); LocalBroadcastManager.getInstance(ActScan.this).sendBroadcast(showIntent); } } }.init(data, result)); if (gattListenWeather == null) { gattProviderWeather = service.subscribeGattConnection( Constants.WEATHER.GATT_SERVICE_WEATHER.getUuid(), gattListenWeather = new GattWeather()); } if (gattListenShout == null) { gattProviderShout = service.subscribeGattConnection( Constants.SHOUT.GATT_SERVICE_SHOUT.getUuid(), gattListenShout = new GattShout()); } if (gattListenNews == null) { gattProviderNews = service.subscribeGattConnection( Constants.NEWS.GATT_SERVICE_NEWS.getUuid(), gattListenNews = new GattNews()); } if (gattListenBooking == null) { gattProviderBooking = service.subscribeGattConnection( Constants.BOOKING.GATT_SERVICE_BOOKING.getUuid(), gattListenBooking = new GattBooking()); } }