summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-03-09 19:38:40 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-09 19:38:40 +0000
commit187363d7823242f87cc64f04bbe86ed150e1e1b2 (patch)
treea8fe62c062534b95caeeb29cdfe74e5c39dd686b /java
parent93a51cc5d641c45bcc4d8bcd47b715919935b918 (diff)
parent93d27d0a5db53bc7cb7b03c58889667887d5816b (diff)
Merge "Save RTT chat history during the call."
Diffstat (limited to 'java')
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatAdapter.java24
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatFragment.java12
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatMessage.java41
3 files changed, 73 insertions, 4 deletions
diff --git a/java/com/android/incallui/rtt/impl/RttChatAdapter.java b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
index 912314945..7e2b571c1 100644
--- a/java/com/android/incallui/rtt/impl/RttChatAdapter.java
+++ b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
@@ -17,6 +17,9 @@
package com.android.incallui.rtt.impl;
import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
@@ -33,15 +36,26 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
void newMessageAdded();
}
+ private static final String KEY_MESSAGE_DATA = "key_message_data";
+ private static final String KEY_LAST_REMOTE_MESSAGE = "key_last_remote_message";
+ private static final String KEY_LAST_LOCAL_MESSAGE = "key_last_local_message";
+
private final Context context;
- private final List<RttChatMessage> rttMessages = new ArrayList<>();
+ private final List<RttChatMessage> rttMessages;
private int lastIndexOfLocalMessage = -1;
private int lastIndexOfRemoteMessage = -1;
private final MessageListener messageListener;
- RttChatAdapter(Context context, MessageListener listener) {
+ RttChatAdapter(Context context, MessageListener listener, @Nullable Bundle savedInstanceState) {
this.context = context;
this.messageListener = listener;
+ if (savedInstanceState == null) {
+ rttMessages = new ArrayList<>();
+ } else {
+ rttMessages = savedInstanceState.getParcelableArrayList(KEY_MESSAGE_DATA);
+ lastIndexOfRemoteMessage = savedInstanceState.getInt(KEY_LAST_REMOTE_MESSAGE);
+ lastIndexOfLocalMessage = savedInstanceState.getInt(KEY_LAST_LOCAL_MESSAGE);
+ }
}
@Override
@@ -161,4 +175,10 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
messageListener.newMessageAdded();
}
}
+
+ void onSaveInstanceState(@NonNull Bundle bundle) {
+ bundle.putParcelableArrayList(KEY_MESSAGE_DATA, (ArrayList<RttChatMessage>) rttMessages);
+ bundle.putInt(KEY_LAST_REMOTE_MESSAGE, lastIndexOfRemoteMessage);
+ bundle.putInt(KEY_LAST_LOCAL_MESSAGE, lastIndexOfLocalMessage);
+ }
}
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index f9c91e5fb..9e8a24a48 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -124,6 +124,8 @@ public class RttChatFragment extends Fragment
if (savedInstanceState != null) {
inCallButtonUiDelegate.onRestoreInstanceState(savedInstanceState);
}
+ // Prevent updating local message until UI is ready.
+ isClearingInput = true;
}
@Override
@@ -158,7 +160,7 @@ public class RttChatFragment extends Fragment
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(false);
- adapter = new RttChatAdapter(getContext(), this);
+ adapter = new RttChatAdapter(getContext(), this, savedInstanceState);
recyclerView.setAdapter(adapter);
recyclerView.addOnScrollListener(onScrollListener);
submitButton = view.findViewById(R.id.rtt_chat_submit_button);
@@ -242,13 +244,21 @@ public class RttChatFragment extends Fragment
public void onStart() {
LogUtil.enterBlock("RttChatFragment.onStart");
super.onStart();
+ isClearingInput = false;
onRttScreenStart();
}
@Override
+ public void onSaveInstanceState(@NonNull Bundle bundle) {
+ super.onSaveInstanceState(bundle);
+ adapter.onSaveInstanceState(bundle);
+ }
+
+ @Override
public void onStop() {
LogUtil.enterBlock("RttChatFragment.onStop");
super.onStop();
+ isClearingInput = true;
if (overflowMenu.isShowing()) {
overflowMenu.dismiss();
}
diff --git a/java/com/android/incallui/rtt/impl/RttChatMessage.java b/java/com/android/incallui/rtt/impl/RttChatMessage.java
index 6c852cf92..fd83fb82f 100644
--- a/java/com/android/incallui/rtt/impl/RttChatMessage.java
+++ b/java/com/android/incallui/rtt/impl/RttChatMessage.java
@@ -16,6 +16,8 @@
package com.android.incallui.rtt.impl;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.android.incallui.rtt.protocol.Constants;
@@ -25,7 +27,7 @@ import java.util.Iterator;
import java.util.List;
/** Message class that holds one RTT chat content. */
-final class RttChatMessage {
+final class RttChatMessage implements Parcelable {
private static final Splitter SPLITTER = Splitter.on(Constants.BUBBLE_BREAKER);
@@ -119,4 +121,41 @@ final class RttChatMessage {
return messageList;
}
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(getContent());
+ boolean[] values = new boolean[2];
+ values[0] = isRemote;
+ values[1] = isFinished;
+ dest.writeBooleanArray(values);
+ }
+
+ public static final Parcelable.Creator<RttChatMessage> CREATOR =
+ new Parcelable.Creator<RttChatMessage>() {
+ @Override
+ public RttChatMessage createFromParcel(Parcel in) {
+ return new RttChatMessage(in);
+ }
+
+ @Override
+ public RttChatMessage[] newArray(int size) {
+ return new RttChatMessage[size];
+ }
+ };
+
+ private RttChatMessage(Parcel in) {
+ content.append(in.readString());
+ boolean[] values = new boolean[2];
+ in.readBooleanArray(values);
+ isRemote = values[0];
+ isFinished = values[1];
+ }
+
+ RttChatMessage() {}
}