From c8733128311ab65ae0be05ed484656693a7c68e0 Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Sat, 14 Jan 2017 02:39:36 +0300 Subject: [PATCH 1/9] Transliterate unsupported Russian characters into English --- app/build.gradle | 1 + .../service/devices/hplus/HPlusSupport.java | 49 +++++++++++++++++++ app/src/main/res/xml/changelog_master.xml | 1 + 3 files changed, 51 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index b6b68af65..7a3175252 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,7 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.4' // compile project(":DaoCore") + compile 'com.google.guava:guava:19.0' } preBuild.dependsOn(":GBDaoGenerator:genSources") 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 4689155d7..a674d6b74 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 @@ -14,6 +14,8 @@ import android.net.Uri; import android.support.v4.content.LocalBroadcastManager; import android.widget.Toast; +import com.google.common.collect.ImmutableMap; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +23,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; +import java.util.Map; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusConstants; @@ -646,6 +649,7 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { private void showIncomingCall(String name, String number) { try { TransactionBuilder builder = performInitialized("incomingCallIcon"); + name = transliterate(name); //Enable call notifications builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_ACTION_INCOMING_CALL, 1}); @@ -703,6 +707,8 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { LOG.debug("Show Notification: "+title+" --> "+body); try { TransactionBuilder builder = performInitialized("notification"); + title = transliterate(title); + body = transliterate(body); byte[] msg = new byte[20]; for (int i = 0; i < msg.length; i++) @@ -777,6 +783,49 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { } } + //replace unsupported symbols to english analog + private String transliterate(String txt){ + StringBuilder message = new StringBuilder(); + char[] chars = txt.toCharArray(); + + for (char c : chars) + { + message.append(transliterate(c)); + } + + return message.toString(); + } + + //replace unsupported symbol to english analog text + private String transliterate(char c){ + Map map = ImmutableMap.builder() + .put('а', "a").put('б', "b").put('в', "v").put('г', "g") + .put('д', "d").put('е', "e").put('ё', "jo").put('ж', "zh") + .put('з', "z").put('и', "i").put('й', "jj").put('к', "k") + .put('л', "l").put('м', "m").put('н', "n").put('о', "o") + .put('п', "p").put('р', "r").put('с', "s").put('т', "t") + .put('у', "u").put('ф', "f").put('х', "kh").put('ц', "c") + .put('ч', "ch").put('ш', "sh").put('щ', "shh").put('ъ', "\"") + .put('ы', "y").put('ь', "'").put('э', "eh").put('ю', "ju") + .put('я', "ja") + .build(); + + char lowerChar = Character.toLowerCase(c); + + if (map.containsKey(lowerChar)) { + String replace = map.get(lowerChar); + + if (lowerChar != c) + { + return replace.toUpperCase(); + } + + return replace; + } + + return String.valueOf(c); + } + @Override public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index c54077e4c..34e61a413 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -16,6 +16,7 @@ HPlus: Near real time Heart rate measurement HPlus: Experimental synchronization of activity data (only sleep, steps and intensity) HPlus: Fix some disconnection issues + HPlus: Transliterate unsupported Russian characters into English New devices: HPlus (e.g. Zeblaze ZeBand), contributed by João Paulo Barraca From b9249065eb4f5fd8d9c7b9a518608b39e3dbb83c Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Sat, 14 Jan 2017 23:01:44 +0300 Subject: [PATCH 2/9] Fix for send message from debug screen --- .../gadgetbridge/service/devices/hplus/HPlusSupport.java | 5 +++++ 1 file changed, 5 insertions(+) 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 a674d6b74..aa1836876 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 @@ -785,7 +785,12 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { //replace unsupported symbols to english analog private String transliterate(String txt){ + if (txt == null || txt.isEmpty()) { + return txt; + } + StringBuilder message = new StringBuilder(); + char[] chars = txt.toCharArray(); for (char c : chars) From 074394cba49aacdf8d0b19df5208f042f9739a73 Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Sun, 15 Jan 2017 12:24:36 +0300 Subject: [PATCH 3/9] Transliteration is moved to a separate class, added settings option --- app/build.gradle | 1 - .../service/devices/hplus/HPlusSupport.java | 65 +++---------------- .../gadgetbridge/util/LanguageUtils.java | 64 ++++++++++++++++++ app/src/main/res/values-ru/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/changelog_master.xml | 3 +- app/src/main/res/xml/preferences.xml | 7 ++ 7 files changed, 87 insertions(+), 57 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java diff --git a/app/build.gradle b/app/build.gradle index 7a3175252..b6b68af65 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,7 +77,6 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.4' // compile project(":DaoCore") - compile 'com.google.guava:guava:19.0' } preBuild.dependsOn(":GBDaoGenerator:genSources") 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 aa1836876..319303dbc 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 @@ -14,8 +14,6 @@ import android.net.Uri; import android.support.v4.content.LocalBroadcastManager; import android.widget.Toast; -import com.google.common.collect.ImmutableMap; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,7 +21,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; -import java.util.Map; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusConstants; @@ -41,10 +38,10 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSuppo import nodomain.freeyourgadget.gadgetbridge.service.btle.GattService; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceStateAction; -import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.AbstractBleProfile; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfo; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfoProfile; import nodomain.freeyourgadget.gadgetbridge.util.GB; +import nodomain.freeyourgadget.gadgetbridge.util.LanguageUtils; public class HPlusSupport extends AbstractBTLEDeviceSupport { @@ -649,7 +646,10 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { private void showIncomingCall(String name, String number) { try { TransactionBuilder builder = performInitialized("incomingCallIcon"); - name = transliterate(name); + + if (LanguageUtils.transliterate()) { + name = LanguageUtils.transliterate(name); + } //Enable call notifications builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_ACTION_INCOMING_CALL, 1}); @@ -707,8 +707,11 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { LOG.debug("Show Notification: "+title+" --> "+body); try { TransactionBuilder builder = performInitialized("notification"); - title = transliterate(title); - body = transliterate(body); + + if (LanguageUtils.transliterate()) { + title = LanguageUtils.transliterate(title); + body = LanguageUtils.transliterate(body); + } byte[] msg = new byte[20]; for (int i = 0; i < msg.length; i++) @@ -783,54 +786,6 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { } } - //replace unsupported symbols to english analog - private String transliterate(String txt){ - if (txt == null || txt.isEmpty()) { - return txt; - } - - StringBuilder message = new StringBuilder(); - - char[] chars = txt.toCharArray(); - - for (char c : chars) - { - message.append(transliterate(c)); - } - - return message.toString(); - } - - //replace unsupported symbol to english analog text - private String transliterate(char c){ - Map map = ImmutableMap.builder() - .put('а', "a").put('б', "b").put('в', "v").put('г', "g") - .put('д', "d").put('е', "e").put('ё', "jo").put('ж', "zh") - .put('з', "z").put('и', "i").put('й', "jj").put('к', "k") - .put('л', "l").put('м', "m").put('н', "n").put('о', "o") - .put('п', "p").put('р', "r").put('с', "s").put('т', "t") - .put('у', "u").put('ф', "f").put('х', "kh").put('ц', "c") - .put('ч', "ch").put('ш', "sh").put('щ', "shh").put('ъ', "\"") - .put('ы', "y").put('ь', "'").put('э', "eh").put('ю', "ju") - .put('я', "ja") - .build(); - - char lowerChar = Character.toLowerCase(c); - - if (map.containsKey(lowerChar)) { - String replace = map.get(lowerChar); - - if (lowerChar != c) - { - return replace.toUpperCase(); - } - - return replace; - } - - return String.valueOf(c); - } - @Override public boolean onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java new file mode 100644 index 000000000..ae41ed3f0 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java @@ -0,0 +1,64 @@ +package nodomain.freeyourgadget.gadgetbridge.util; + +import java.util.HashMap; +import java.util.Map; + +import nodomain.freeyourgadget.gadgetbridge.GBApplication; + +public class LanguageUtils { + //transliteration map with english equivalent for unsupported chars + private static Map transliterateMap = new HashMap(){ + { + //russian chars + put('а', "a"); put('б', "b"); put('в', "v"); put('г', "g"); put('д', "d"); put('е', "e"); put('ё', "jo"); put('ж', "zh"); + put('з', "z"); put('и', "i"); put('й', "jj"); put('к', "k"); put('л', "l"); put('м', "m"); put('н', "n"); put('о', "o"); + put('п', "p"); put('р', "r"); put('с', "s"); put('т', "t"); put('у', "u"); put('ф', "f"); put('х', "kh"); put('ц', "c"); + put('ч', "ch");put('ш', "sh");put('щ', "shh");put('ъ', "\"");put('ы', "y"); put('ь', "'"); put('э', "eh"); put('ю', "ju"); + put('я', "ja"); + + //continue for other languages... + } + }; + + //check transliterate option status + public static boolean transliterate() + { + return GBApplication.getPrefs().getBoolean("transliteration", true); + } + + //replace unsupported symbols to english analog + public static String transliterate(String txt){ + if (txt == null || txt.isEmpty()) { + return txt; + } + + StringBuilder message = new StringBuilder(); + + char[] chars = txt.toCharArray(); + + for (char c : chars) + { + message.append(transliterate(c)); + } + + return message.toString(); + } + + //replace unsupported symbol to english analog text + private static String transliterate(char c){ + char lowerChar = Character.toLowerCase(c); + + if (transliterateMap.containsKey(lowerChar)) { + String replace = transliterateMap.get(lowerChar); + + if (lowerChar != c) + { + return replace.toUpperCase(); + } + + return replace; + } + + return String.valueOf(c); + } +} diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7284db28f..2ed467a6b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -52,6 +52,8 @@ … даже когда экран включён Не беспокоить Предотвращать отправку нежелательных уведомлений в режиме \"Не беспокоить\" + Транслитерация + Используйте, если устройство не может работать с вашим языком всегда когда экран выключен никогда diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 522883d9f..765cc4612 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,6 +80,8 @@ … also when screen is on Do Not Disturb Stop unwanted Notifications from being sent based on the Do Not Disturb mode. + Transliteration + Use, if the device can not work with your language always when screen is off diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 34e61a413..672517f60 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -2,7 +2,8 @@ Add weather support through "Weather Notification" app - Various fixes for K9 mail when using the generic notification receiver + Various fixes for K9 mail when using the generic notification receiver + Added transliteration option for notifications in the settings screen Pebble: Support for build-in weather system app (FW 4.x) Pebble: Add weather support for various watchfaces Pebble: Delete notifications that got dismissed on the phone diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 43985431d..48eb91d87 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -91,6 +91,13 @@ android:key="notifications_generic_whenscreenon" android:title="@string/pref_title_whenscreenon" /> + + Date: Sun, 15 Jan 2017 13:41:38 +0300 Subject: [PATCH 4/9] StyleCop --- app/src/main/res/xml/changelog_master.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 6dac6eb9a..8544188a5 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -2,7 +2,7 @@ Add weather support through "Weather Notification" app - Various fixes for K9 mail when using the generic notification receiver + Various fixes for K9 mail when using the generic notification receiver Added transliteration option for notifications in the settings screen Add a preference to hide the notification icon of Gadgetbridge From 2de9580dea802a77c37d3335d4a92f8f625c9660 Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Sun, 15 Jan 2017 22:10:12 +0300 Subject: [PATCH 5/9] Added diacritic convertation into Transliteration --- .../gadgetbridge/util/LanguageUtils.java | 19 +++++++++++++++++-- app/src/main/res/xml/changelog_master.xml | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java index ae41ed3f0..a9a80aae4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java @@ -2,13 +2,16 @@ package nodomain.freeyourgadget.gadgetbridge.util; import java.util.HashMap; import java.util.Map; - +import java.text.Normalizer; import nodomain.freeyourgadget.gadgetbridge.GBApplication; public class LanguageUtils { //transliteration map with english equivalent for unsupported chars private static Map transliterateMap = new HashMap(){ { + //extended ASCII characters + put('æ', "ae"); put('œ', "oe"); put('ß', "B"); + //russian chars put('а', "a"); put('б', "b"); put('в', "v"); put('г', "g"); put('д', "d"); put('е', "e"); put('ё', "jo"); put('ж', "zh"); put('з', "z"); put('и', "i"); put('й', "jj"); put('к', "k"); put('л', "l"); put('м', "m"); put('н', "n"); put('о', "o"); @@ -41,7 +44,7 @@ public class LanguageUtils { message.append(transliterate(c)); } - return message.toString(); + return flattenToAscii(message.toString()); } //replace unsupported symbol to english analog text @@ -61,4 +64,16 @@ public class LanguageUtils { return String.valueOf(c); } + + //convert diacritic + private static String flattenToAscii(String string) { + char[] out = new char[string.length()]; + string = Normalizer.normalize(string, Normalizer.Form.NFD); + int j = 0; + for (int i = 0, n = string.length(); i < n; ++i) { + char c = string.charAt(i); + if (c <= '\u007F') out[j++] = c; + } + return new String(out); + } } diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 8544188a5..d4b9c14bd 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -2,7 +2,7 @@ Add weather support through "Weather Notification" app - Various fixes for K9 mail when using the generic notification receiver + Various fixes for K9 mail when using the generic notification receiver Added transliteration option for notifications in the settings screen Add a preference to hide the notification icon of Gadgetbridge From bfe24dd9f0356ad571cde123c5810865a2207f9e Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Sun, 15 Jan 2017 22:46:30 +0300 Subject: [PATCH 6/9] Refactoring --- .../gadgetbridge/util/LanguageUtils.java | 10 ++-------- app/src/main/res/xml/changelog_master.xml | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java index a9a80aae4..735dfd1fe 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java @@ -10,7 +10,7 @@ public class LanguageUtils { private static Map transliterateMap = new HashMap(){ { //extended ASCII characters - put('æ', "ae"); put('œ', "oe"); put('ß', "B"); + put('æ', "ae"); put('œ', "oe"); put('ß', "B"); put('ª', "a"); put('º', "o"); //russian chars put('а', "a"); put('б', "b"); put('в', "v"); put('г', "g"); put('д', "d"); put('е', "e"); put('ё', "jo"); put('ж', "zh"); @@ -67,13 +67,7 @@ public class LanguageUtils { //convert diacritic private static String flattenToAscii(String string) { - char[] out = new char[string.length()]; string = Normalizer.normalize(string, Normalizer.Form.NFD); - int j = 0; - for (int i = 0, n = string.length(); i < n; ++i) { - char c = string.charAt(i); - if (c <= '\u007F') out[j++] = c; - } - return new String(out); + return string.replaceAll("\\p{M}", ""); } } diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index d4b9c14bd..8e71c9a0c 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -2,7 +2,7 @@ Add weather support through "Weather Notification" app - Various fixes for K9 mail when using the generic notification receiver + Various fixes for K9 mail when using the generic notification receiver Added transliteration option for notifications in the settings screen Add a preference to hide the notification icon of Gadgetbridge From cbc91e7fef7856379bf3b08a871478490e04e820 Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Tue, 17 Jan 2017 23:07:12 +0300 Subject: [PATCH 7/9] Moving transliteration call from module "HPlus" to common support --- .../service/DeviceCommunicationService.java | 41 +++++++++++++------ .../service/devices/hplus/HPlusSupport.java | 10 ----- .../gadgetbridge/util/LanguageUtils.java | 2 +- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java index 0edf91718..da4fa9a06 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -51,6 +51,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; +import nodomain.freeyourgadget.gadgetbridge.util.LanguageUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_ADD_CALENDAREVENT; @@ -322,21 +323,23 @@ public class DeviceCommunicationService extends Service implements SharedPrefere break; case ACTION_NOTIFICATION: { NotificationSpec notificationSpec = new NotificationSpec(); - notificationSpec.phoneNumber = intent.getStringExtra(EXTRA_NOTIFICATION_PHONENUMBER); - notificationSpec.sender = intent.getStringExtra(EXTRA_NOTIFICATION_SENDER); - notificationSpec.subject = intent.getStringExtra(EXTRA_NOTIFICATION_SUBJECT); - notificationSpec.title = intent.getStringExtra(EXTRA_NOTIFICATION_TITLE); - notificationSpec.body = intent.getStringExtra(EXTRA_NOTIFICATION_BODY); + notificationSpec.phoneNumber = getStringExtra(intent, EXTRA_NOTIFICATION_PHONENUMBER); + notificationSpec.sender = getStringExtra(intent, EXTRA_NOTIFICATION_SENDER); + notificationSpec.subject = getStringExtra(intent, EXTRA_NOTIFICATION_SUBJECT); + notificationSpec.title = getStringExtra(intent, EXTRA_NOTIFICATION_TITLE); + notificationSpec.body = getStringExtra(intent, EXTRA_NOTIFICATION_BODY); + notificationSpec.sourceName = getStringExtra(intent, EXTRA_NOTIFICATION_SOURCENAME); notificationSpec.type = (NotificationType) intent.getSerializableExtra(EXTRA_NOTIFICATION_TYPE); notificationSpec.id = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1); notificationSpec.flags = intent.getIntExtra(EXTRA_NOTIFICATION_FLAGS, 0); - notificationSpec.sourceName = intent.getStringExtra(EXTRA_NOTIFICATION_SOURCENAME); + if (notificationSpec.type == NotificationType.GENERIC_SMS && notificationSpec.phoneNumber != null) { notificationSpec.sender = getContactDisplayNameByNumber(notificationSpec.phoneNumber); notificationSpec.id = mRandom.nextInt(); // FIXME: add this in external SMS Receiver? GBApplication.getIDSenderLookup().add(notificationSpec.id, notificationSpec.phoneNumber); } + if (((notificationSpec.flags & NotificationSpec.FLAG_WEARABLE_REPLY) > 0) || (notificationSpec.type == NotificationType.GENERIC_SMS && notificationSpec.phoneNumber != null)) { // NOTE: maybe not where it belongs @@ -353,6 +356,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere notificationSpec.cannedReplies = replies.toArray(new String[replies.size()]); } } + mDeviceSupport.onNotification(notificationSpec); break; } @@ -366,8 +370,8 @@ public class DeviceCommunicationService extends Service implements SharedPrefere calendarEventSpec.type = intent.getByteExtra(EXTRA_CALENDAREVENT_TYPE, (byte) -1); calendarEventSpec.timestamp = intent.getIntExtra(EXTRA_CALENDAREVENT_TIMESTAMP, -1); calendarEventSpec.durationInSeconds = intent.getIntExtra(EXTRA_CALENDAREVENT_DURATION, -1); - calendarEventSpec.title = intent.getStringExtra(EXTRA_CALENDAREVENT_TITLE); - calendarEventSpec.description = intent.getStringExtra(EXTRA_CALENDAREVENT_DESCRIPTION); + calendarEventSpec.title = getStringExtra(intent, EXTRA_CALENDAREVENT_TITLE); + calendarEventSpec.description = getStringExtra(intent, EXTRA_CALENDAREVENT_DESCRIPTION); mDeviceSupport.onAddCalendarEvent(calendarEventSpec); break; } @@ -412,7 +416,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere case ACTION_CALLSTATE: int command = intent.getIntExtra(EXTRA_CALL_COMMAND, CallSpec.CALL_UNDEFINED); - String phoneNumber = intent.getStringExtra(EXTRA_CALL_PHONENUMBER); + String phoneNumber = getStringExtra(intent, EXTRA_CALL_PHONENUMBER); String callerName = null; if (phoneNumber != null) { callerName = getContactDisplayNameByNumber(phoneNumber); @@ -438,9 +442,9 @@ public class DeviceCommunicationService extends Service implements SharedPrefere break; case ACTION_SETMUSICINFO: MusicSpec musicSpec = new MusicSpec(); - musicSpec.artist = intent.getStringExtra(EXTRA_MUSIC_ARTIST); - musicSpec.album = intent.getStringExtra(EXTRA_MUSIC_ALBUM); - musicSpec.track = intent.getStringExtra(EXTRA_MUSIC_TRACK); + musicSpec.artist = getStringExtra(intent, EXTRA_MUSIC_ARTIST); + musicSpec.album = getStringExtra(intent, EXTRA_MUSIC_ALBUM); + musicSpec.track = getStringExtra(intent, EXTRA_MUSIC_TRACK); musicSpec.duration = intent.getIntExtra(EXTRA_MUSIC_DURATION, 0); musicSpec.trackCount = intent.getIntExtra(EXTRA_MUSIC_TRACKCOUNT, 0); musicSpec.trackNr = intent.getIntExtra(EXTRA_MUSIC_TRACKNR, 0); @@ -703,7 +707,18 @@ public class DeviceCommunicationService extends Service implements SharedPrefere // ignore, just return name below } - return name; + return LanguageUtils.transliterate() + ? LanguageUtils.transliterate(name) + : name; + } + + //Standard method with transliteration + private String getStringExtra(Intent intent, String event){ + String extra = intent.getStringExtra(event); + + return LanguageUtils.transliterate() + ? LanguageUtils.transliterate(extra) + : extra; } @Override 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 319303dbc..8335830f7 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 @@ -41,7 +41,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.SetDeviceStateA import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfo; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfoProfile; import nodomain.freeyourgadget.gadgetbridge.util.GB; -import nodomain.freeyourgadget.gadgetbridge.util.LanguageUtils; public class HPlusSupport extends AbstractBTLEDeviceSupport { @@ -647,10 +646,6 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { try { TransactionBuilder builder = performInitialized("incomingCallIcon"); - if (LanguageUtils.transliterate()) { - name = LanguageUtils.transliterate(name); - } - //Enable call notifications builder.write(ctrlCharacteristic, new byte[]{HPlusConstants.CMD_ACTION_INCOMING_CALL, 1}); @@ -708,11 +703,6 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { try { TransactionBuilder builder = performInitialized("notification"); - if (LanguageUtils.transliterate()) { - title = LanguageUtils.transliterate(title); - body = LanguageUtils.transliterate(body); - } - byte[] msg = new byte[20]; for (int i = 0; i < msg.length; i++) msg[i] = ' '; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java index 735dfd1fe..48359d09f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java @@ -10,7 +10,7 @@ public class LanguageUtils { private static Map transliterateMap = new HashMap(){ { //extended ASCII characters - put('æ', "ae"); put('œ', "oe"); put('ß', "B"); put('ª', "a"); put('º', "o"); + put('æ', "ae"); put('œ', "oe"); put('ß', "B"); put('ª', "a"); put('º', "o"); put('«',"\""); put('»',"\""); //russian chars put('а', "a"); put('б', "b"); put('в', "v"); put('г', "g"); put('д', "d"); put('е', "e"); put('ё', "jo"); put('ж', "zh"); From 0094805359cd99e087318fc3e342f85782835cd0 Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Tue, 17 Jan 2017 23:24:03 +0300 Subject: [PATCH 8/9] ChangeLog --- app/src/main/res/xml/changelog_master.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 8e71c9a0c..6f3a0a33f 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -3,7 +3,8 @@ Add weather support through "Weather Notification" app Various fixes for K9 mail when using the generic notification receiver - Added transliteration option for notifications in the settings screen + Added transliteration support for Russian characters into English + Added transliteration option in the settings screen Add a preference to hide the notification icon of Gadgetbridge Pebble: Support for build-in weather system app (FW 4.x) @@ -19,7 +20,6 @@ HPlus: Near real time Heart rate measurement HPlus: Experimental synchronization of activity data (only sleep, steps and intensity) HPlus: Fix some disconnection issues - HPlus: Transliterate unsupported Russian characters into English New devices: HPlus (e.g. Zeblaze ZeBand), contributed by João Paulo Barraca From c13725911f3cd01f2b05f7a9529617d81092db8a Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Thu, 19 Jan 2017 08:09:36 +0300 Subject: [PATCH 9/9] Transliteration off by default, if setting not exist --- .../freeyourgadget/gadgetbridge/util/LanguageUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java index 48359d09f..59d7aa817 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/LanguageUtils.java @@ -26,7 +26,7 @@ public class LanguageUtils { //check transliterate option status public static boolean transliterate() { - return GBApplication.getPrefs().getBoolean("transliteration", true); + return GBApplication.getPrefs().getBoolean("transliteration", false); } //replace unsupported symbols to english analog