From aca0149b45d96cbac4f59abaa801adfaae091f85 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Tue, 1 Dec 2015 11:39:34 +0100 Subject: [PATCH] use DeviceHelper in DeviceSupportFactory to determine supported device from bt addresses This fixes a bug when Pebble was detected as Mi when unpaired. Since we were not able to read the device name, it was considered MI by duplicated and faulty code. Fixes #177. --- .../activities/ControlCenter.java | 3 +-- .../service/DeviceSupportFactory.java | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java index fa0a719c..de775bae 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenter.java @@ -52,7 +52,6 @@ public class ControlCenter extends Activity { = "nodomain.freeyourgadget.gadgetbridge.controlcenter.action.set_version"; private TextView hintTextView; - private ListView deviceListView; private SwipeRefreshLayout swipeLayout; private GBDeviceAdapter mGBDeviceAdapter; private GBDevice selectedDevice = null; @@ -124,7 +123,7 @@ public class ControlCenter extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_controlcenter); hintTextView = (TextView) findViewById(R.id.hintTextView); - deviceListView = (ListView) findViewById(R.id.deviceListView); + ListView deviceListView = (ListView) findViewById(R.id.deviceListView); mGBDeviceAdapter = new GBDeviceAdapter(this, deviceList); deviceListView.setAdapter(this.mGBDeviceAdapter); deviceListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java index b7981271..bf170d33 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java @@ -14,6 +14,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.MiBandSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleSupport; +import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class DeviceSupportFactory { @@ -74,18 +75,23 @@ public class DeviceSupportFactory { private DeviceSupport createBTDeviceSupport(String deviceAddress) throws GBException { if (mBtAdapter != null && mBtAdapter.isEnabled()) { - GBDevice gbDevice = null; + GBDevice gbDevice; DeviceSupport deviceSupport = null; try { BluetoothDevice btDevice = mBtAdapter.getRemoteDevice(deviceAddress); - if (btDevice.getName() == null || btDevice.getName().startsWith("MI")) { //FIXME: workaround for Miband not being paired - gbDevice = new GBDevice(deviceAddress, "MI", DeviceType.MIBAND); - deviceSupport = new ServiceDeviceSupport(new MiBandSupport(), EnumSet.of(ServiceDeviceSupport.Flags.THROTTLING, ServiceDeviceSupport.Flags.BUSY_CHECKING)); - } else if (btDevice.getName().indexOf("Pebble") == 0) { - gbDevice = new GBDevice(deviceAddress, btDevice.getName(), DeviceType.PEBBLE); - deviceSupport = new ServiceDeviceSupport(new PebbleSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING)); + gbDevice = DeviceHelper.getInstance().toSupportedDevice(btDevice); + if (gbDevice != null) { + switch (gbDevice.getType()) { + case PEBBLE: + deviceSupport = new ServiceDeviceSupport(new PebbleSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING)); + break; + case MIBAND: + deviceSupport = new ServiceDeviceSupport(new MiBandSupport(), EnumSet.of(ServiceDeviceSupport.Flags.THROTTLING, ServiceDeviceSupport.Flags.BUSY_CHECKING)); + break; + } } + if (deviceSupport != null) { deviceSupport.setContext(gbDevice, mBtAdapter, mContext); return deviceSupport;