diff options
author | wangqi <wangqi@google.com> | 2018-04-17 14:48:03 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-17 15:55:51 -0700 |
commit | e00bbaeceb399da24f06c8f1a626cbbf07eab4ad (patch) | |
tree | 2f18f4411d650f4a162d03da62936e05bdaa088f /java/com/android/dialer/calldetails | |
parent | 9a14f6a71206add856193cd90971d94c39f079fa (diff) | |
download | android_packages_apps_Dialer-e00bbaeceb399da24f06c8f1a626cbbf07eab4ad.tar.gz android_packages_apps_Dialer-e00bbaeceb399da24f06c8f1a626cbbf07eab4ad.tar.bz2 android_packages_apps_Dialer-e00bbaeceb399da24f06c8f1a626cbbf07eab4ad.zip |
Add RTT transcript screen.
Bug: 67596257
Test: CallDetailsCursorLoaderTest
PiperOrigin-RevId: 193259769
Change-Id: I8c6a8eb9a6bf06e9c1c25c45fc035f8db8ae5a65
Diffstat (limited to 'java/com/android/dialer/calldetails')
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; |