diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java index 202787a62..d4b555c38 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java @@ -47,7 +47,7 @@ public class GBDeviceAdapter extends ArrayAdapter { ImageView deviceImageView = (ImageView) view.findViewById(R.id.device_image); ProgressBar busyIndicator = (ProgressBar) view.findViewById(R.id.device_busy_indicator); - deviceNameLabel.setText(device.getName()); + deviceNameLabel.setText(getUniqueDeviceName(device)); deviceInfoLabel.setText(device.getInfoString()); if (device.isBusy()) { @@ -93,4 +93,25 @@ public class GBDeviceAdapter extends ArrayAdapter { return view; } + + private String getUniqueDeviceName(GBDevice device) { + String deviceName = device.getName(); + if (!isUniqueDeviceName(device, deviceName)) { + deviceName = deviceName + " " + device.getShortAddress(); + } + return deviceName; + } + + private boolean isUniqueDeviceName(GBDevice device, String deviceName) { + for (int i = 0; i < getCount(); i++) { + GBDevice item = getItem(i); + if (item == device) { + continue; + } + if (deviceName.equals(item.getName())) { + return false; + } + } + return true; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java index 8bb6fddf0..382230042 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.NonNull; import android.support.v4.content.LocalBroadcastManager; import org.slf4j.Logger; @@ -309,6 +310,22 @@ public class GBDevice implements Parcelable { return "Device " + getName() + ", " + getAddress() + ", " + getStateString(); } + /** + * Returns a shortened form of the device's address, in order to form a + * unique name in companion with #getName(). + */ + @NonNull + public String getShortAddress() { + String address = getAddress(); + if (address != null) { + if (address.length() > 5) { + return address.substring(address.length() - 5); + } + return address; + } + return ""; + } + public enum State { // Note: the order is important! NOT_CONNECTED, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java index 444cc81bc..a78b37f86 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java @@ -408,6 +408,8 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { } catch (IOException ex) { LOG.error("Unable to set time on MI device", ex); } + //TODO: once we have a common strategy for sending events (e.g. EventHandler), remove this call from here. Meanwhile it does no harm. + sendCalendarEvents(); } /** @@ -796,7 +798,10 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { LOG.info("MI Band pairing result: " + value); } - private void sendEvents() { + /** + * Fetch the events from the android device calendars and set the alarms on the miband. + */ + private void sendCalendarEvents() { try { TransactionBuilder builder = performInitialized("Send upcoming events"); BluetoothGattCharacteristic characteristic = getCharacteristic(MiBandService.UUID_CHARACTERISTIC_CONTROL_POINT); @@ -811,16 +816,17 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { int iteration = 0; ArrayList alarmList = new ArrayList<>(); for(CalendarEvents.CalendarEvent mEvt : mEvents) { - if (iteration >= availableSlots) { + if (iteration >= availableSlots || iteration > 2) { break; } + int slotToUse = 2 - iteration; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(mEvt.getBegin()); byte[] calBytes = MiBandDateConverter.calendarToRawBytes(calendar); byte[] alarmMessage = new byte[]{ MiBandService.COMMAND_SET_TIMER, - (byte)(2-iteration), + (byte) slotToUse, (byte) 1, calBytes[0], calBytes[1], diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java index dd749043e..c29460da9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerPebStyle.java @@ -54,22 +54,33 @@ public class AppMessageHandlerPebStyle extends AppMessageHandler { private byte[] encodePebStyleConfig() { ArrayList> pairs = new ArrayList<>(); //settings that give good legibility on pebble time - pairs.add(new Pair<>(KEY_MAIN_CLOCK, (Object) 1)); //0 analog pairs.add(new Pair<>(KEY_SECOND_HAND, (Object) 0)); //1 enabled pairs.add(new Pair<>(KEY_BLUETOOTH_ALERT, (Object) 0)); //1 silent, 2 weak, up to 5 pairs.add(new Pair<>(KEY_TEMPERATURE_FORMAT, (Object) 1)); //0 fahrenheit pairs.add(new Pair<>(KEY_LOCATION_SERVICE, (Object) 2)); //0 uto, 1 manual - pairs.add(new Pair<>(KEY_SECONDARY_INFO_TYPE, (Object) 3)); //1 time, 2 location pairs.add(new Pair<>(KEY_SIDEBAR_LOCATION, (Object) 1)); //0 right pairs.add(new Pair<>(KEY_COLOR_SELECTION, (Object) 1)); //1 custom pairs.add(new Pair<>(KEY_MAIN_COLOR, (Object) PebbleColor.Black)); pairs.add(new Pair<>(KEY_MAIN_BG_COLOR, (Object) PebbleColor.White)); - pairs.add(new Pair<>(KEY_WEATHER_TEMP, (Object) 10)); //2 = Deutsch + pairs.add(new Pair<>(KEY_SIDEBAR_BG_COLOR, (Object) PebbleColor.MediumSpringGreen)); + + //DIGITAL settings /* - pairs.add(new Pair<>(KEY_SETTING_COLOR_SIDEBAR, (Object) Color.parseColor("#00aaff"))); + pairs.add(new Pair<>(KEY_MAIN_CLOCK, (Object) 1)); //0 analog + pairs.add(new Pair<>(KEY_SECONDARY_INFO_TYPE, (Object) 3)); //1 time, 2 location + */ + //ANALOG + DIGITAL settings + pairs.add(new Pair<>(KEY_MAIN_CLOCK, (Object) 0)); //0 analog, 1 digital + pairs.add(new Pair<>(KEY_SECONDARY_INFO_TYPE, (Object) 1)); //1 time, 2 location -*/ + //WEATHER + /* + //comment the same key in the general section above! + pairs.add(new Pair<>(KEY_LOCATION_SERVICE, (Object) 0)); //0 auto, 1 manual + pairs.add(new Pair<>(KEY_WEATHER_CODE, (Object) 3)); + pairs.add(new Pair<>(KEY_WEATHER_TEMP, (Object) 10)); + */ byte[] testMessage = mPebbleProtocol.encodeApplicationMessagePush(PebbleProtocol.ENDPOINT_APPLICATIONMESSAGE, mUUID, pairs);