summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calldetails
diff options
context:
space:
mode:
authorwangqi <wangqi@google.com>2018-04-17 14:48:03 -0700
committerCopybara-Service <copybara-piper@google.com>2018-04-17 15:55:51 -0700
commite00bbaeceb399da24f06c8f1a626cbbf07eab4ad (patch)
tree2f18f4411d650f4a162d03da62936e05bdaa088f /java/com/android/dialer/calldetails
parent9a14f6a71206add856193cd90971d94c39f079fa (diff)
Add RTT transcript screen.
Bug: 67596257 Test: CallDetailsCursorLoaderTest PiperOrigin-RevId: 193259769 Change-Id: I8c6a8eb9a6bf06e9c1c25c45fc035f8db8ae5a65
Diffstat (limited to 'java/com/android/dialer/calldetails')
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsActivity.java3
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsActivityCommon.java31
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsAdapter.java14
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java15
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsCursorLoader.java5
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java19
-rw-r--r--java/com/android/dialer/calldetails/OldCallDetailsActivity.java3
-rw-r--r--java/com/android/dialer/calldetails/OldCallDetailsAdapter.java33
-rw-r--r--java/com/android/dialer/calldetails/proto/call_details_entries.proto8
9 files changed, 127 insertions, 4 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivity.java b/java/com/android/dialer/calldetails/CallDetailsActivity.java
index 4fab7fd85..f1d0d8487 100644
--- a/java/com/android/dialer/calldetails/CallDetailsActivity.java
+++ b/java/com/android/dialer/calldetails/CallDetailsActivity.java
@@ -23,6 +23,7 @@ import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import com.android.dialer.CoalescedIds;
+import com.android.dialer.calldetails.CallDetailsEntryViewHolder.CallDetailsEntryListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.ReportCallIdListener;
import com.android.dialer.calldetails.CallDetailsHeaderViewHolder.CallDetailsHeaderListener;
@@ -89,6 +90,7 @@ public final class CallDetailsActivity extends CallDetailsActivityCommon {
@Override
protected CallDetailsAdapterCommon createAdapter(
+ CallDetailsEntryListener callDetailsEntryListener,
CallDetailsHeaderListener callDetailsHeaderListener,
ReportCallIdListener reportCallIdListener,
DeleteCallDetailsListener deleteCallDetailsListener) {
@@ -96,6 +98,7 @@ public final class CallDetailsActivity extends CallDetailsActivityCommon {
this,
headerInfo,
getCallDetailsEntries(),
+ callDetailsEntryListener,
callDetailsHeaderListener,
reportCallIdListener,
deleteCallDetailsListener);
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
index 15a010eba..dec1230bd 100644
--- a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
+++ b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
@@ -55,12 +55,14 @@ import com.android.dialer.duo.DuoComponent;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
+import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.UiAction;
import com.android.dialer.performancereport.PerformanceReport;
import com.android.dialer.postcall.PostCall;
import com.android.dialer.precall.PreCall;
+import com.android.dialer.rtt.RttTranscriptActivity;
import com.android.dialer.rtt.RttTranscriptUtil;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
@@ -84,6 +86,8 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
public static final String EXTRA_CAN_REPORT_CALLER_ID = "can_report_caller_id";
public static final String EXTRA_CAN_SUPPORT_ASSISTED_DIALING = "can_support_assisted_dialing";
+ private final CallDetailsEntryViewHolder.CallDetailsEntryListener callDetailsEntryListener =
+ new CallDetailsEntryListener(this);
private final CallDetailsHeaderViewHolder.CallDetailsHeaderListener callDetailsHeaderListener =
new CallDetailsHeaderListener(this);
private final CallDetailsFooterViewHolder.DeleteCallDetailsListener deleteCallDetailsListener =
@@ -106,6 +110,7 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
/** Creates an adapter for {@link OldCallDetailsActivity} or {@link CallDetailsActivity}. */
protected abstract CallDetailsAdapterCommon createAdapter(
+ CallDetailsEntryViewHolder.CallDetailsEntryListener callDetailsEntryListener,
CallDetailsHeaderViewHolder.CallDetailsHeaderListener callDetailsHeaderListener,
CallDetailsFooterViewHolder.ReportCallIdListener reportCallIdListener,
CallDetailsFooterViewHolder.DeleteCallDetailsListener deleteCallDetailsListener);
@@ -212,7 +217,11 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
private void setupRecyclerViewForEntries() {
adapter =
- createAdapter(callDetailsHeaderListener, reportCallIdListener, deleteCallDetailsListener);
+ createAdapter(
+ callDetailsEntryListener,
+ callDetailsHeaderListener,
+ reportCallIdListener,
+ deleteCallDetailsListener);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
@@ -288,6 +297,26 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
}
}
+ private static final class CallDetailsEntryListener
+ implements CallDetailsEntryViewHolder.CallDetailsEntryListener {
+ private final WeakReference<CallDetailsActivityCommon> activityWeakReference;
+
+ CallDetailsEntryListener(CallDetailsActivityCommon activity) {
+ this.activityWeakReference = new WeakReference<>(activity);
+ }
+
+ @Override
+ public void showRttTranscript(String transcriptId, String primaryText, PhotoInfo photoInfo) {
+ getActivity()
+ .startActivity(
+ RttTranscriptActivity.getIntent(getActivity(), transcriptId, primaryText, photoInfo));
+ }
+
+ private CallDetailsActivityCommon getActivity() {
+ return Preconditions.checkNotNull(activityWeakReference.get());
+ }
+ }
+
private static final class CallDetailsHeaderListener
implements CallDetailsHeaderViewHolder.CallDetailsHeaderListener {
private final WeakReference<CallDetailsActivityCommon> activityWeakReference;
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
index 2a4c1efca..40d856fa7 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
@@ -20,8 +20,10 @@ package com.android.dialer.calldetails;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
+import com.android.dialer.calldetails.CallDetailsEntryViewHolder.CallDetailsEntryListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
import com.android.dialer.calldetails.CallDetailsHeaderViewHolder.CallDetailsHeaderListener;
+import com.android.dialer.glidephotomanager.PhotoInfo;
/**
* A {@link RecyclerView.Adapter} for {@link CallDetailsActivity}.
@@ -38,12 +40,14 @@ final class CallDetailsAdapter extends CallDetailsAdapterCommon {
Context context,
CallDetailsHeaderInfo calldetailsHeaderInfo,
CallDetailsEntries callDetailsEntries,
+ CallDetailsEntryListener callDetailsEntryListener,
CallDetailsHeaderListener callDetailsHeaderListener,
CallDetailsFooterViewHolder.ReportCallIdListener reportCallIdListener,
DeleteCallDetailsListener deleteCallDetailsListener) {
super(
context,
callDetailsEntries,
+ callDetailsEntryListener,
callDetailsHeaderListener,
reportCallIdListener,
deleteCallDetailsListener);
@@ -72,4 +76,14 @@ final class CallDetailsAdapter extends CallDetailsAdapterCommon {
protected String getNumber() {
return headerInfo.getDialerPhoneNumber().getNormalizedNumber();
}
+
+ @Override
+ protected String getPrimaryText() {
+ return headerInfo.getPrimaryText();
+ }
+
+ @Override
+ protected PhotoInfo getPhotoInfo() {
+ return headerInfo.getPhotoInfo();
+ }
}
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java b/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java
index a79642bad..ec9263f1f 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java
@@ -25,6 +25,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
+import com.android.dialer.calldetails.CallDetailsEntryViewHolder.CallDetailsEntryListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.ReportCallIdListener;
import com.android.dialer.calldetails.CallDetailsHeaderViewHolder.CallDetailsHeaderListener;
@@ -33,6 +34,7 @@ import com.android.dialer.calllogutils.CallbackActionHelper;
import com.android.dialer.calllogutils.CallbackActionHelper.CallbackAction;
import com.android.dialer.common.Assert;
import com.android.dialer.duo.DuoComponent;
+import com.android.dialer.glidephotomanager.PhotoInfo;
/**
* Contains common logic shared between {@link OldCallDetailsAdapter} and {@link
@@ -44,6 +46,7 @@ abstract class CallDetailsAdapterCommon extends RecyclerView.Adapter<RecyclerVie
private static final int CALL_ENTRY_VIEW_TYPE = 2;
private static final int FOOTER_VIEW_TYPE = 3;
+ private final CallDetailsEntryListener callDetailsEntryListener;
private final CallDetailsHeaderListener callDetailsHeaderListener;
private final ReportCallIdListener reportCallIdListener;
private final DeleteCallDetailsListener deleteCallDetailsListener;
@@ -60,13 +63,21 @@ abstract class CallDetailsAdapterCommon extends RecyclerView.Adapter<RecyclerVie
/** Returns the phone number of the call details. */
protected abstract String getNumber();
+ /** Returns the primary text shown on call details toolbar, usually contact name or number. */
+ protected abstract String getPrimaryText();
+
+ /** Returns {@link PhotoInfo} of the contact. */
+ protected abstract PhotoInfo getPhotoInfo();
+
CallDetailsAdapterCommon(
Context context,
CallDetailsEntries callDetailsEntries,
+ CallDetailsEntryListener callDetailsEntryListener,
CallDetailsHeaderListener callDetailsHeaderListener,
ReportCallIdListener reportCallIdListener,
DeleteCallDetailsListener deleteCallDetailsListener) {
this.callDetailsEntries = callDetailsEntries;
+ this.callDetailsEntryListener = callDetailsEntryListener;
this.callDetailsHeaderListener = callDetailsHeaderListener;
this.reportCallIdListener = reportCallIdListener;
this.deleteCallDetailsListener = deleteCallDetailsListener;
@@ -84,7 +95,7 @@ abstract class CallDetailsAdapterCommon extends RecyclerView.Adapter<RecyclerVie
inflater.inflate(R.layout.contact_container, parent, false), callDetailsHeaderListener);
case CALL_ENTRY_VIEW_TYPE:
return new CallDetailsEntryViewHolder(
- inflater.inflate(R.layout.call_details_entry, parent, false));
+ inflater.inflate(R.layout.call_details_entry, parent, false), callDetailsEntryListener);
case FOOTER_VIEW_TYPE:
return new CallDetailsFooterViewHolder(
inflater.inflate(R.layout.call_details_footer, parent, false),
@@ -108,6 +119,8 @@ abstract class CallDetailsAdapterCommon extends RecyclerView.Adapter<RecyclerVie
CallDetailsEntry entry = callDetailsEntries.getEntries(position - 1);
viewHolder.setCallDetails(
getNumber(),
+ getPrimaryText(),
+ getPhotoInfo(),
entry,
callTypeHelper,
!entry.getHistoryResultsList().isEmpty() && position != getItemCount() - 2);
diff --git a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
index 3b8af4026..c22ec7318 100644
--- a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
+++ b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
@@ -139,7 +139,10 @@ public final class CallDetailsCursorLoader extends CursorLoader {
.setFeatures(cursor.getInt(FEATURES))
.setDate(cursor.getLong(TIMESTAMP))
.setDuration(cursor.getLong(DURATION))
- .setDataUsage(cursor.getLong(DATA_USAGE));
+ .setDataUsage(cursor.getLong(DATA_USAGE))
+
+ .setCallMappingId(String.valueOf(cursor.getLong(TIMESTAMP)));
+
String phoneAccountComponentName = cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME);
entry.setIsDuoCall(
diff --git a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
index 5c4a196fa..37b212a63 100644
--- a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java
@@ -37,6 +37,7 @@ import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.AppCompatConstants;
import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult.Type;
+import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.oem.MotorolaUtils;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.IntentUtil;
@@ -44,6 +45,14 @@ import com.android.dialer.util.IntentUtil;
/** ViewHolder for call entries in {@link OldCallDetailsActivity} or {@link CallDetailsActivity}. */
public class CallDetailsEntryViewHolder extends ViewHolder {
+ /** Listener for the call details header */
+ interface CallDetailsEntryListener {
+ /** Shows RTT transcript. */
+ void showRttTranscript(String transcriptId, String primaryText, PhotoInfo photoInfo);
+ }
+
+ private final CallDetailsEntryListener callDetailsEntryListener;
+
private final CallTypeIconsView callTypeIcon;
private final TextView callTypeText;
private final TextView callTime;
@@ -65,7 +74,8 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
private final Context context;
- public CallDetailsEntryViewHolder(View container) {
+ public CallDetailsEntryViewHolder(
+ View container, CallDetailsEntryListener callDetailsEntryListener) {
super(container);
context = container.getContext();
@@ -83,10 +93,13 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
multimediaAttachmentsNumber =
(TextView) container.findViewById(R.id.multimedia_attachments_number);
rttTranscript = container.findViewById(R.id.rtt_transcript);
+ this.callDetailsEntryListener = callDetailsEntryListener;
}
void setCallDetails(
String number,
+ String primaryText,
+ PhotoInfo photoInfo,
CallDetailsEntry entry,
CallTypeHelper callTypeHelper,
boolean showMultimediaDivider) {
@@ -133,6 +146,10 @@ public class CallDetailsEntryViewHolder extends ViewHolder {
rttTranscript.setText(R.string.rtt_transcript_link);
rttTranscript.setTextAppearance(R.style.RttTranscriptLink);
rttTranscript.setClickable(true);
+ rttTranscript.setOnClickListener(
+ v ->
+ callDetailsEntryListener.showRttTranscript(
+ entry.getCallMappingId(), primaryText, photoInfo));
} else {
rttTranscript.setText(R.string.rtt_transcript_not_available);
rttTranscript.setTextAppearance(R.style.RttTranscriptMessage);
diff --git a/java/com/android/dialer/calldetails/OldCallDetailsActivity.java b/java/com/android/dialer/calldetails/OldCallDetailsActivity.java
index c97436759..26217ab8a 100644
--- a/java/com/android/dialer/calldetails/OldCallDetailsActivity.java
+++ b/java/com/android/dialer/calldetails/OldCallDetailsActivity.java
@@ -18,6 +18,7 @@ package com.android.dialer.calldetails;
import android.content.Context;
import android.content.Intent;
+import com.android.dialer.calldetails.CallDetailsEntryViewHolder.CallDetailsEntryListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.ReportCallIdListener;
import com.android.dialer.calldetails.CallDetailsHeaderViewHolder.CallDetailsHeaderListener;
@@ -76,6 +77,7 @@ public final class OldCallDetailsActivity extends CallDetailsActivityCommon {
@Override
protected CallDetailsAdapterCommon createAdapter(
+ CallDetailsEntryListener callDetailsEntryListener,
CallDetailsHeaderListener callDetailsHeaderListener,
ReportCallIdListener reportCallIdListener,
DeleteCallDetailsListener deleteCallDetailsListener) {
@@ -83,6 +85,7 @@ public final class OldCallDetailsActivity extends CallDetailsActivityCommon {
/* context = */ this,
contact,
getCallDetailsEntries(),
+ callDetailsEntryListener,
callDetailsHeaderListener,
reportCallIdListener,
deleteCallDetailsListener);
diff --git a/java/com/android/dialer/calldetails/OldCallDetailsAdapter.java b/java/com/android/dialer/calldetails/OldCallDetailsAdapter.java
index 010f5cd6c..878803cc3 100644
--- a/java/com/android/dialer/calldetails/OldCallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/OldCallDetailsAdapter.java
@@ -20,9 +20,12 @@ package com.android.dialer.calldetails;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
+import com.android.dialer.calldetails.CallDetailsEntryViewHolder.CallDetailsEntryListener;
import com.android.dialer.calldetails.CallDetailsFooterViewHolder.DeleteCallDetailsListener;
import com.android.dialer.calldetails.CallDetailsHeaderViewHolder.CallDetailsHeaderListener;
import com.android.dialer.dialercontact.DialerContact;
+import com.android.dialer.glidephotomanager.PhotoInfo;
+import com.android.dialer.lettertile.LetterTileDrawable;
/**
* A {@link RecyclerView.Adapter} for {@link OldCallDetailsActivity}.
@@ -39,12 +42,14 @@ final class OldCallDetailsAdapter extends CallDetailsAdapterCommon {
Context context,
DialerContact contact,
CallDetailsEntries callDetailsEntries,
+ CallDetailsEntryListener callDetailsEntryListener,
CallDetailsHeaderListener callDetailsHeaderListener,
CallDetailsFooterViewHolder.ReportCallIdListener reportCallIdListener,
DeleteCallDetailsListener deleteCallDetailsListener) {
super(
context,
callDetailsEntries,
+ callDetailsEntryListener,
callDetailsHeaderListener,
reportCallIdListener,
deleteCallDetailsListener);
@@ -70,4 +75,32 @@ final class OldCallDetailsAdapter extends CallDetailsAdapterCommon {
protected String getNumber() {
return contact.getNumber();
}
+
+ @Override
+ protected String getPrimaryText() {
+ return contact.getNameOrNumber();
+ }
+
+ @Override
+ protected PhotoInfo getPhotoInfo() {
+ PhotoInfo.Builder builder =
+ PhotoInfo.newBuilder()
+ .setPhotoUri(contact.getPhotoUri())
+ .setPhotoId(contact.getPhotoId())
+ .setName(contact.getNameOrNumber())
+ .setLookupUri(contact.getContactUri());
+ switch (contact.getContactType()) {
+ case LetterTileDrawable.TYPE_VOICEMAIL:
+ builder.setIsVoicemail(true);
+ break;
+ case LetterTileDrawable.TYPE_BUSINESS:
+ builder.setIsBusiness(true);
+ break;
+ case LetterTileDrawable.TYPE_SPAM:
+ builder.setIsSpam(true);
+ break;
+ default: // fall out
+ }
+ return builder.build();
+ }
}
diff --git a/java/com/android/dialer/calldetails/proto/call_details_entries.proto b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
index e0202cda1..0f11b537e 100644
--- a/java/com/android/dialer/calldetails/proto/call_details_entries.proto
+++ b/java/com/android/dialer/calldetails/proto/call_details_entries.proto
@@ -20,6 +20,14 @@ message CallDetailsEntries {
repeated enrichedcall.historyquery.proto.HistoryResult history_results = 7;
optional bool is_duo_call = 8;
optional bool has_rtt_transcript = 9;
+ // A unique ID that could be used to map a call log entry to a {@link
+ // android.telecom.Call}. This is different from call_id which is id of call
+ // log entry.
+ // On pre-Q this will be {@link android.provider.CallLog.Calls#DATE} which
+ // is same as {@link com.android.telecom.Call#getCreationTimeMillis()}.
+ // Starting from Q this will be a call UUID generated by system to associate
+ // a call log to a telecom call.
+ optional string call_mapping_id = 10;
}
repeated CallDetailsEntry entries = 1;