From cd915598b03f728953568be416754fa3758f673c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joa=CC=83o=20Paulo=20Barraca?= Date: Fri, 23 Dec 2016 11:46:20 +0000 Subject: [PATCH] HPlus: Improved handling of incomming calls --- .../devices/hplus/HPlusConstants.java | 9 ++- .../service/devices/hplus/HPlusSupport.java | 75 ++++++++++++++++++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java index a22990b8..7f8ac3ba 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java @@ -59,7 +59,7 @@ public final class HPlusConstants { public static final byte COMMAND_SET_DISPLAY_ALERT = 0x23; public static final byte COMMAND_SET_PREF_ALLDAYHR = 53; - public static final byte COMMAND_SET_INCOMMING_CALL = 65; + public static final byte COMMAND_SET_INCOMING_CALL = 0x41; public static final byte[] COMMAND_FACTORY_RESET = new byte[] {-74, 90}; public static final byte COMMAND_SET_CONF_SAVE = 0x17; @@ -75,8 +75,13 @@ public final class HPlusConstants { public static final byte DATA_SLEEP = 0x1A; public static final byte COMMAND_ACTION_INCOMING_SOCIAL = 0x31; - public static final byte COMMAND_ACTION_INCOMMING_SMS = 0x40; + public static final byte COMMAND_ACTION_INCOMING_SMS = 0x40; public static final byte COMMAND_ACTION_DISPLAY_TEXT = 0x43; + public static final byte[] COMMAND_ACTION_INCOMING_CALL = new byte[] {6, -86}; + public static final byte COMMAND_ACTION_DISPLAY_TEXT_CENTER = 0x23; + public static final byte COMMAND_ACTION_DISPLAY_TEXT_NAME = 0x3F; + public static final byte COMMAND_ACTION_DISPLAY_TEXT_NAME_CN = 0x3E; //Text in GB2312? + public static final String PREF_HPLUS_SCREENTIME = "hplus_screentime"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java index c3669729..4797ce5a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java @@ -462,7 +462,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { public void onSetCallState(CallSpec callSpec) { switch (callSpec.command) { case CallSpec.CALL_INCOMING: { - showText(callSpec.name, callSpec.number); + showIncomingCall(callSpec.name, callSpec.number); break; } } @@ -636,6 +636,79 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { } + private void showIncomingCall(String name, String number){ + LOG.debug("Show Incoming Call"); + + try { + TransactionBuilder builder = performInitialized("incomingCallIcon"); + + //Enable call notifications + builder.write(ctrlCharacteristic, new byte[] {HPlusConstants.COMMAND_SET_INCOMING_CALL, 1 }); + + //Show Call Icon + builder.write(ctrlCharacteristic, HPlusConstants.COMMAND_ACTION_INCOMING_CALL); + + //builder = performInitialized("incomingCallText"); + builder.queue(getQueue()); + + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + byte[] msg = new byte[13]; + + builder = performInitialized("incomingCallNumber"); + + //Show call number + for (int i = 0; i < msg.length; i++) + msg[i] = ' '; + + for(int i = 0; i < number.length() && i < (msg.length - 1); i++) + msg[i + 1] = (byte) number.charAt(i); + + + msg[0] = HPlusConstants.COMMAND_ACTION_DISPLAY_TEXT_CENTER; + + builder.write(ctrlCharacteristic, msg); + builder.queue(getQueue()); + + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + builder = performInitialized("incomingCallText"); + + //Show call name + //Must call twice, otherwise nothing happens + for (int i = 0; i < msg.length; i++) + msg[i] = ' '; + + for(int i = 0; i < name.length() && i < (msg.length - 1); i++) + msg[i + 1] = (byte) name.charAt(i); + + msg[0] = HPlusConstants.COMMAND_ACTION_DISPLAY_TEXT_NAME; + builder.write(ctrlCharacteristic, msg); + + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + msg[0] = HPlusConstants.COMMAND_ACTION_DISPLAY_TEXT_NAME_CN; + builder.write(ctrlCharacteristic, msg); + + builder.queue(getQueue()); + }catch(IOException e){ + GB.toast(getContext(), "Error showing incoming call: " + e.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR); + + } + } + private void showText(String message) { showText(null, message); }