From 06295abcb63376a6e51be455d4657c7d967294af Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Tue, 24 Jan 2017 21:04:06 +0300 Subject: [PATCH 1/2] Simplification of transliteration integration --- .../activities/DebugActivity.java | 7 ++-- .../gadgetbridge/impl/GBDeviceService.java | 23 +++++++++++ .../service/DeviceCommunicationService.java | 38 +++++++------------ 3 files changed, 40 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java index 30d0e631..80363273 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java @@ -180,9 +180,10 @@ public class DebugActivity extends GBActivity { @Override public void onClick(View v) { MusicSpec musicSpec = new MusicSpec(); - musicSpec.artist = editContent.getText().toString() + "(artist)"; - musicSpec.album = editContent.getText().toString() + "(album)"; - musicSpec.track = editContent.getText().toString() + "(track)"; + String testString = editContent.getText().toString(); + musicSpec.artist = testString + "(artist)"; + musicSpec.album = testString + "(album)"; + musicSpec.track = testString + "(track)"; musicSpec.duration = 10; musicSpec.trackCount = 5; musicSpec.trackNr = 2; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java index 949791c7..dea375c6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java @@ -19,10 +19,25 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService; +import nodomain.freeyourgadget.gadgetbridge.util.LanguageUtils; public class GBDeviceService implements DeviceService { protected final Context mContext; private final Class mServiceClass; + private final String[] transliterationExtras = new String[]{ + EXTRA_NOTIFICATION_PHONENUMBER, + EXTRA_NOTIFICATION_SENDER, + EXTRA_NOTIFICATION_SUBJECT, + EXTRA_NOTIFICATION_TITLE, + EXTRA_NOTIFICATION_BODY, + EXTRA_NOTIFICATION_SOURCENAME, + EXTRA_CALL_PHONENUMBER, + EXTRA_MUSIC_ARTIST, + EXTRA_MUSIC_ALBUM, + EXTRA_MUSIC_TRACK, + EXTRA_CALENDAREVENT_TITLE, + EXTRA_CALENDAREVENT_DESCRIPTION + }; public GBDeviceService(Context context) { mContext = context; @@ -34,6 +49,14 @@ public class GBDeviceService implements DeviceService { } protected void invokeService(Intent intent) { + if(LanguageUtils.transliterate()){ + for (String extra: transliterationExtras) { + if (intent.hasExtra(extra)){ + intent.putExtra(extra, LanguageUtils.transliterate(intent.getStringExtra(extra))); + } + } + } + mContext.startService(intent); } 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 da4fa9a0..b35a9417 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -51,7 +51,6 @@ 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; @@ -323,12 +322,12 @@ public class DeviceCommunicationService extends Service implements SharedPrefere break; case ACTION_NOTIFICATION: { NotificationSpec notificationSpec = new NotificationSpec(); - 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.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.sourceName = intent.getStringExtra(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); @@ -370,8 +369,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 = getStringExtra(intent, EXTRA_CALENDAREVENT_TITLE); - calendarEventSpec.description = getStringExtra(intent, EXTRA_CALENDAREVENT_DESCRIPTION); + calendarEventSpec.title = intent.getStringExtra(EXTRA_CALENDAREVENT_TITLE); + calendarEventSpec.description = intent.getStringExtra(EXTRA_CALENDAREVENT_DESCRIPTION); mDeviceSupport.onAddCalendarEvent(calendarEventSpec); break; } @@ -416,7 +415,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere case ACTION_CALLSTATE: int command = intent.getIntExtra(EXTRA_CALL_COMMAND, CallSpec.CALL_UNDEFINED); - String phoneNumber = getStringExtra(intent, EXTRA_CALL_PHONENUMBER); + String phoneNumber = intent.getStringExtra(EXTRA_CALL_PHONENUMBER); String callerName = null; if (phoneNumber != null) { callerName = getContactDisplayNameByNumber(phoneNumber); @@ -442,9 +441,9 @@ public class DeviceCommunicationService extends Service implements SharedPrefere break; case ACTION_SETMUSICINFO: MusicSpec musicSpec = new MusicSpec(); - musicSpec.artist = getStringExtra(intent, EXTRA_MUSIC_ARTIST); - musicSpec.album = getStringExtra(intent, EXTRA_MUSIC_ALBUM); - musicSpec.track = getStringExtra(intent, EXTRA_MUSIC_TRACK); + musicSpec.artist = intent.getStringExtra(EXTRA_MUSIC_ARTIST); + musicSpec.album = intent.getStringExtra(EXTRA_MUSIC_ALBUM); + musicSpec.track = intent.getStringExtra(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); @@ -707,18 +706,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere // ignore, just return name below } - 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; + return name; } @Override From 09539fd9bf0b0848fe248bf4b038a6d7c16c5168 Mon Sep 17 00:00:00 2001 From: ivanovlev Date: Wed, 25 Jan 2017 00:04:05 +0300 Subject: [PATCH 2/2] Add transliteration test --- .../DeviceCommunicationServiceTestCase.java | 17 +++++++++ .../service/TestDeviceService.java | 2 +- .../gadgetbridge/test/LanguageUtilsTest.java | 38 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/LanguageUtilsTest.java diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationServiceTestCase.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationServiceTestCase.java index 58dccd72..11fc855e 100644 --- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationServiceTestCase.java +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationServiceTestCase.java @@ -1,17 +1,21 @@ package nodomain.freeyourgadget.gadgetbridge.service; import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; import org.junit.Test; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.Mockito; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBException; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.test.TestBase; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_BODY; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -97,4 +101,17 @@ public class DeviceCommunicationServiceTestCase extends TestBase { inOrder.verifyNoMoreInteractions(); } + @Test + public void testTransliterationSupport() { + SharedPreferences settings = GBApplication.getPrefs().getPreferences(); + SharedPreferences.Editor editor = settings.edit(); + editor.putBoolean("transliteration", true); + editor.commit(); + + Intent intent = mDeviceService.createIntent().putExtra(EXTRA_NOTIFICATION_BODY, "Прõсто текčт"); + mDeviceService.invokeService(intent); + String result = intent.getStringExtra(EXTRA_NOTIFICATION_BODY); + + assertTrue("Transliteration support fail!", result.equals("Prosto tekct")); + } } diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/TestDeviceService.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/TestDeviceService.java index 8eff6f79..9de950fa 100644 --- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/TestDeviceService.java +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/TestDeviceService.java @@ -29,7 +29,7 @@ class TestDeviceService extends GBDeviceService { // calling though to the service natively does not work with robolectric, // we have to use the ServiceController to do that service.onStartCommand(intent, Service.START_FLAG_REDELIVERY, (int) (Math.random() * 10000)); -// super.invokeService(intent); + super.invokeService(intent); } @Override diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/LanguageUtilsTest.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/LanguageUtilsTest.java new file mode 100644 index 00000000..cfc8ec49 --- /dev/null +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/LanguageUtilsTest.java @@ -0,0 +1,38 @@ +package nodomain.freeyourgadget.gadgetbridge.test; + +import android.content.SharedPreferences; + +import org.junit.Test; + +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.util.LanguageUtils; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Tests LanguageUtils + */ +public class LanguageUtilsTest extends TestBase { + @Test + public void testStringTransliterate() throws Exception { + //input with cyrillic and diacritic letters + String input = "Прõсто текčт"; + String output = LanguageUtils.transliterate(input); + String result = "Prosto tekct"; + + assertTrue(String.format("Transliteration fail! Expected '%s', but found '%s'}", result, output), output.equals(result)); + } + + @Test + public void testTransliterateOption() throws Exception { + assertFalse("Transliteration option fail! Expected 'Off' by default, but result is 'On'", LanguageUtils.transliterate()); + + SharedPreferences settings = GBApplication.getPrefs().getPreferences(); + SharedPreferences.Editor editor = settings.edit(); + editor.putBoolean("transliteration", true); + editor.commit(); + + assertTrue("Transliteration option fail! Expected 'On', but result is 'Off'", LanguageUtils.transliterate()); + } +}