diff options
author | wangqi <wangqi@google.com> | 2018-03-08 14:24:06 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-08 17:04:17 -0800 |
commit | 6b4f264f40a2b3386c4cd1d8134a8d821be94052 (patch) | |
tree | 7537651b60ee929180a9d93233671e3e49b9ba05 /java/com/android/incallui/rtt/impl/RttChatMessage.java | |
parent | db30a13b91ff62021a3a14b30c6b2c1b2f1d5e3d (diff) |
Optimize characters sent to remote party for RTT chat.
Instead of using things provided by Android of onTextChanged, we compare the
text in EditText with the text in bubble before the change and compute the
delta string need to send to remote party. This way we could minimize
characters sent thus reduce latency.
Bug: 67596257
Test: RttChatMessageTest
PiperOrigin-RevId: 188389325
Change-Id: I3023b484c32b2369ca8720104da74cf6906bb46e
Diffstat (limited to 'java/com/android/incallui/rtt/impl/RttChatMessage.java')
-rw-r--r-- | java/com/android/incallui/rtt/impl/RttChatMessage.java | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/java/com/android/incallui/rtt/impl/RttChatMessage.java b/java/com/android/incallui/rtt/impl/RttChatMessage.java index fe30364b8..6c852cf92 100644 --- a/java/com/android/incallui/rtt/impl/RttChatMessage.java +++ b/java/com/android/incallui/rtt/impl/RttChatMessage.java @@ -18,7 +18,6 @@ package com.android.incallui.rtt.impl; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.text.TextWatcher; import com.android.incallui.rtt.protocol.Constants; import com.google.common.base.Splitter; import java.util.ArrayList; @@ -59,10 +58,7 @@ final class RttChatMessage { } /** - * Generates delta change to a text. - * - * <p>This is used to track text change of input. See more details in {@link - * TextWatcher#onTextChanged} + * Computes delta change of two string. * * <p>e.g. "hello world" -> "hello" : "\b\b\b\b\b\b" * @@ -72,16 +68,19 @@ final class RttChatMessage { * * <p>"hello world" -> "hello new world" : "\b\b\b\b\bnew world" */ - static String getChangedString(CharSequence s, int start, int before, int count) { + static String computeChangedString(String oldMessage, String newMesssage) { StringBuilder modify = new StringBuilder(); - char c = '\b'; - int oldLength = s.length() - count + before; - for (int i = 0; i < oldLength - start; i++) { - modify.append(c); + int indexChangeStart = 0; + while (indexChangeStart < oldMessage.length() + && indexChangeStart < newMesssage.length() + && oldMessage.charAt(indexChangeStart) == newMesssage.charAt(indexChangeStart)) { + indexChangeStart++; + } + for (int i = indexChangeStart; i < oldMessage.length(); i++) { + modify.append('\b'); } - modify.append(s, start, start + count); - if (start + count < s.length()) { - modify.append(s, start + count, s.length()); + for (int i = indexChangeStart; i < newMesssage.length(); i++) { + modify.append(newMesssage.charAt(i)); } return modify.toString(); } |