diff --git a/Android/ChorusRFLaptimer/app/build.gradle b/Android/ChorusRFLaptimer/app/build.gradle index d5f02a8..4edae1f 100644 --- a/Android/ChorusRFLaptimer/app/build.gradle +++ b/Android/ChorusRFLaptimer/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "app.andrey_voroshkov.chorus_laptimer" minSdkVersion 16 targetSdkVersion 25 - versionCode 16 - versionName "0.7.4" + versionCode 17 + versionName "0.7.5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" archivesBaseName = "ChorusRFLaptimer" } diff --git a/Android/ChorusRFLaptimer/app/src/main/java/app/andrey_voroshkov/chorus_laptimer/UDPService.java b/Android/ChorusRFLaptimer/app/src/main/java/app/andrey_voroshkov/chorus_laptimer/UDPService.java index e2a9e0a..b29ce45 100644 --- a/Android/ChorusRFLaptimer/app/src/main/java/app/andrey_voroshkov/chorus_laptimer/UDPService.java +++ b/Android/ChorusRFLaptimer/app/src/main/java/app/andrey_voroshkov/chorus_laptimer/UDPService.java @@ -174,10 +174,28 @@ public void run() { private class ListenerThread extends Thread { + String mLastIncompleteChunk = ""; + private void parseAndCallback(String str) { - if (mConnectionListener == null) return; + if (mConnectionListener == null || str.length() == 0) return; + + char lastChar = str.charAt(str.length()-1); + boolean isLastChunkIncomplete = lastChar != '\n'; String[] chunks = TextUtils.split(str, "\n"); + int lastChunkIndex = chunks.length - 1; + + if (!mLastIncompleteChunk.isEmpty()) { + chunks[0] = mLastIncompleteChunk + chunks[0]; + } + + if (isLastChunkIncomplete) { + mLastIncompleteChunk = chunks[lastChunkIndex]; + chunks[lastChunkIndex] = ""; + } else { + mLastIncompleteChunk = ""; + } + for (String chunk : chunks) { if (chunk.isEmpty()) continue; mActivityHandler.sendMessage(composeMessage(MSG_ON_RECEIVE, chunk));