summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangqi <wangqi@google.com>2018-04-26 10:57:09 -0700
committerCopybara-Service <copybara-piper@google.com>2018-04-26 20:36:24 -0700
commit305f7df04262dd01c41aa3d45676d5bcb874b9a1 (patch)
tree4e83cde662ce56e2fa9cfbac24787d1f0a99202d
parent52a161148b057ebd4b0c86228b82cba305f1102d (diff)
Add advisory text to RTT call about transcript storage.
Bug: 78519871 Test: RttChatFragmentTest.java PiperOrigin-RevId: 194421459 Change-Id: I4d04ee3045afdd4d5553032d7434ead280810543
-rw-r--r--assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml25
-rw-r--r--java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java29
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatAdapter.java107
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatFragment.java1
-rw-r--r--java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml2
-rw-r--r--java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml41
-rw-r--r--java/com/android/incallui/rtt/impl/res/values/strings.xml3
7 files changed, 192 insertions, 16 deletions
diff --git a/assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml
new file mode 100644
index 000000000..f607d5312
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_question_answer_vd_theme_24.xml
@@ -0,0 +1,25 @@
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M21,6h-2v9L6,15v2c0,0.55 0.45,1 1,1h11l4,4L22,7c0,-0.55 -0.45,-1 -1,-1zM17,12L17,3c0,-0.55 -0.45,-1 -1,-1L3,2c-0.55,0 -1,0.45 -1,1v14l4,-4h10c0.55,0 1,-0.45 1,-1z"/>
+</vector>
diff --git a/java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java b/java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java
new file mode 100644
index 000000000..8f081bebf
--- /dev/null
+++ b/java/com/android/incallui/rtt/impl/AdvisoryViewHolder.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.incallui.rtt.impl;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView.ViewHolder;
+import android.view.View;
+
+/** ViewHolder class for RTT advisory text. */
+public class AdvisoryViewHolder extends ViewHolder {
+
+ public AdvisoryViewHolder(@NonNull View itemView) {
+ super(itemView);
+ }
+}
diff --git a/java/com/android/incallui/rtt/impl/RttChatAdapter.java b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
index 692266335..f1cde759c 100644
--- a/java/com/android/incallui/rtt/impl/RttChatAdapter.java
+++ b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
@@ -18,8 +18,10 @@ package com.android.incallui.rtt.impl;
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.RecyclerView.ViewHolder;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -27,11 +29,29 @@ import android.view.ViewGroup;
import com.android.dialer.common.LogUtil;
import com.android.dialer.rtt.RttTranscript;
import com.android.dialer.rtt.RttTranscriptMessage;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
/** Adapter class for holding RTT chat data. */
-public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolder> {
+public class RttChatAdapter extends RecyclerView.Adapter<ViewHolder> {
+
+ /** IntDef for the different types of rows that can be shown in the call log. */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ RowType.ADVISORY,
+ RowType.MESSAGE,
+ })
+ @interface RowType {
+ /** The transcript advisory message. */
+ int ADVISORY = 1;
+
+ /** RTT chat message. */
+ int MESSAGE = 2;
+ }
+
+ private static final int POSITION_ADVISORY = 0;
private Drawable avatarDrawable;
@@ -45,6 +65,7 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
private List<RttChatMessage> rttMessages = new ArrayList<>();
private int lastIndexOfLocalMessage = -1;
private final MessageListener messageListener;
+ private boolean shouldShowAdvisory;
RttChatAdapter(Context context, MessageListener listener) {
this.context = context;
@@ -52,29 +73,54 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
}
@Override
- public RttChatMessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ public ViewHolder onCreateViewHolder(ViewGroup parent, @RowType int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
- View view = layoutInflater.inflate(R.layout.rtt_chat_list_item, parent, false);
- return new RttChatMessageViewHolder(view);
+ switch (viewType) {
+ case RowType.ADVISORY:
+ View view = layoutInflater.inflate(R.layout.rtt_transcript_advisory, parent, false);
+ return new AdvisoryViewHolder(view);
+ case RowType.MESSAGE:
+ view = layoutInflater.inflate(R.layout.rtt_chat_list_item, parent, false);
+ return new RttChatMessageViewHolder(view);
+ default:
+ throw new RuntimeException("Unknown row type.");
+ }
}
@Override
public int getItemViewType(int position) {
- return super.getItemViewType(position);
+ if (shouldShowAdvisory && position == POSITION_ADVISORY) {
+ return RowType.ADVISORY;
+ } else {
+ return RowType.MESSAGE;
+ }
}
@Override
- public void onBindViewHolder(RttChatMessageViewHolder rttChatMessageViewHolder, int i) {
- boolean isSameGroup = false;
- if (i > 0) {
- isSameGroup = rttMessages.get(i).isRemote == rttMessages.get(i - 1).isRemote;
+ public void onBindViewHolder(ViewHolder viewHolder, int itemPosition) {
+ switch (getItemViewType(itemPosition)) {
+ case RowType.ADVISORY:
+ return;
+ case RowType.MESSAGE:
+ RttChatMessageViewHolder rttChatMessageViewHolder = (RttChatMessageViewHolder) viewHolder;
+ int messagePosition = toMessagePosition(itemPosition);
+ boolean isSameGroup = false;
+ if (messagePosition > 0) {
+ isSameGroup =
+ rttMessages.get(messagePosition).isRemote
+ == rttMessages.get(messagePosition - 1).isRemote;
+ }
+ rttChatMessageViewHolder.setMessage(
+ rttMessages.get(messagePosition), isSameGroup, avatarDrawable);
+ return;
+ default:
+ throw new RuntimeException("Unknown row type.");
}
- rttChatMessageViewHolder.setMessage(rttMessages.get(i), isSameGroup, avatarDrawable);
}
@Override
public int getItemCount() {
- return rttMessages.size();
+ return shouldShowAdvisory ? rttMessages.size() + 1 : rttMessages.size();
}
private void updateCurrentLocalMessage(String newMessage) {
@@ -96,11 +142,31 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
notifyItemRemoved(lastIndexOfLocalMessage);
lastIndexOfLocalMessage = -1;
} else {
- notifyItemChanged(lastIndexOfLocalMessage);
+ notifyItemChanged(toItemPosition(lastIndexOfLocalMessage));
}
}
}
+ private int toMessagePosition(int itemPosition) {
+ if (shouldShowAdvisory) {
+ return itemPosition - 1;
+ } else {
+ return itemPosition;
+ }
+ }
+
+ // Converts position in message list into item position in adapter.
+ private int toItemPosition(int messagePosition) {
+ if (messagePosition < 0) {
+ return messagePosition;
+ }
+ if (shouldShowAdvisory) {
+ return messagePosition + 1;
+ } else {
+ return messagePosition;
+ }
+ }
+
private void updateCurrentRemoteMessage(String newMessage) {
RttChatMessage.updateRemoteRttChatMessage(rttMessages, newMessage);
lastIndexOfLocalMessage = RttChatMessage.getLastIndexLocalMessage(rttMessages);
@@ -110,14 +176,14 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
void addLocalMessage(String message) {
updateCurrentLocalMessage(message);
if (messageListener != null) {
- messageListener.onUpdateLocalMessage(lastIndexOfLocalMessage);
+ messageListener.onUpdateLocalMessage(toItemPosition(lastIndexOfLocalMessage));
}
}
void submitLocalMessage() {
LogUtil.enterBlock("RttChatAdapater.submitLocalMessage");
rttMessages.get(lastIndexOfLocalMessage).finish();
- notifyItemChanged(lastIndexOfLocalMessage);
+ notifyItemChanged(toItemPosition(lastIndexOfLocalMessage));
lastIndexOfLocalMessage = -1;
}
@@ -139,10 +205,21 @@ public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolde
}
updateCurrentRemoteMessage(message);
if (messageListener != null) {
- messageListener.onUpdateRemoteMessage(RttChatMessage.getLastIndexRemoteMessage(rttMessages));
+ messageListener.onUpdateRemoteMessage(
+ toItemPosition(RttChatMessage.getLastIndexRemoteMessage(rttMessages)));
}
}
+ void hideAdvisory() {
+ shouldShowAdvisory = false;
+ notifyItemRemoved(POSITION_ADVISORY);
+ }
+
+ void showAdvisory() {
+ shouldShowAdvisory = true;
+ notifyItemInserted(POSITION_ADVISORY);
+ }
+
/**
* Retrieve last local message and update the index. This is used when deleting to previous
* message bubble.
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index 47036cd43..13e013fd3 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -467,6 +467,7 @@ public class RttChatFragment extends Fragment
if (editText.requestFocus()) {
UiUtil.openKeyboardFrom(getContext(), editText);
}
+ adapter.showAdvisory();
}
if (primaryCallState.state() == State.DIALING) {
showWaitingForJoinBanner();
diff --git a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
index f995185b1..cff2b3f38 100644
--- a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
+++ b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
@@ -23,7 +23,7 @@
android:id="@+id/rtt_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="70dp"
+ android:paddingTop="56dp"
android:paddingBottom="70dp"
android:clipToPadding="false"/>
diff --git a/java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml b/java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml
new file mode 100644
index 000000000..a2cf3e74f
--- /dev/null
+++ b/java/com/android/incallui/rtt/impl/res/layout/rtt_transcript_advisory.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2018 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="24dp"
+ android:paddingBottom="16dp"
+ android:orientation="vertical">
+ <ImageView
+ android:layout_width="16dp"
+ android:layout_height="16dp"
+ android:layout_gravity="center_horizontal"
+ android:src="@drawable/quantum_ic_question_answer_vd_theme_24"
+ android:tint="#DEFFFFFF"
+ android:tintMode="src_in"/>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="4dp"
+ android:paddingBottom="9dp"
+ android:paddingStart="64dp"
+ android:paddingEnd="64dp"
+ android:gravity="center_horizontal"
+ android:text="@string/rtt_transcript_advisory"
+ android:textColor="#FFFFFF"
+ android:textSize="12sp"/>
+</LinearLayout> \ No newline at end of file
diff --git a/java/com/android/incallui/rtt/impl/res/values/strings.xml b/java/com/android/incallui/rtt/impl/res/values/strings.xml
index 1d09f5446..462eea563 100644
--- a/java/com/android/incallui/rtt/impl/res/values/strings.xml
+++ b/java/com/android/incallui/rtt/impl/res/values/strings.xml
@@ -30,4 +30,7 @@
<!-- Text for status banner. [CHAR LIMIT=100] -->
<string name="rtt_status_banner_text">Waiting for <xliff:g id="name">%s</xliff:g> to join RTT call&#8230;</string>
+ <!-- Text for RTT transcript advisory. [CHAR LIMIT=NONE] -->
+ <string name="rtt_transcript_advisory">The other party can see you typing. Transcripts stored on your device in the call history.</string>
+
</resources> \ No newline at end of file