diff options
author | wangqi <wangqi@google.com> | 2018-04-12 14:44:06 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-12 16:20:40 -0700 |
commit | d6b10d559f345eab2dd3dd89b07cfc3fd79c59bc (patch) | |
tree | 0f1f4cc08e164cde9f891f83749edff34eb94a89 /java/com/android/dialer/calldetails | |
parent | 9ef6d8c84b7b33e069258d41db9eef16e3d2b9fa (diff) | |
download | android_packages_apps_Dialer-d6b10d559f345eab2dd3dd89b07cfc3fd79c59bc.tar.gz android_packages_apps_Dialer-d6b10d559f345eab2dd3dd89b07cfc3fd79c59bc.tar.bz2 android_packages_apps_Dialer-d6b10d559f345eab2dd3dd89b07cfc3fd79c59bc.zip |
Add RTT transcript to call details.
1. Save RTT transcript when call is destroyed
2. Show RTT transcript link when it's available
Bug: 67596257,77717594
Test: manual
PiperOrigin-RevId: 192673172
Change-Id: If541ad9137c965166548d2fb449e835b95566727
Diffstat (limited to 'java/com/android/dialer/calldetails')
8 files changed, 112 insertions, 15 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivity.java b/java/com/android/dialer/calldetails/CallDetailsActivity.java index 4dc294e76..f0f9711ca 100644 --- a/java/com/android/dialer/calldetails/CallDetailsActivity.java +++ b/java/com/android/dialer/calldetails/CallDetailsActivity.java @@ -134,7 +134,6 @@ public final class CallDetailsActivity extends CallDetailsActivityCommon { private void updateCallDetailsEntries(CallDetailsEntries newEntries) { activity.setCallDetailsEntries(newEntries); - activity.getAdapter().updateCallDetailsEntries(newEntries); EnrichedCallComponent.get(activity) .getEnrichedCallManager() .requestAllHistoricalData(activity.getNumber(), newEntries); diff --git a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java index dea1b8cda..46705eb2a 100644 --- a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java +++ b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java @@ -26,9 +26,11 @@ import android.os.Bundle; import android.provider.CallLog; import android.provider.CallLog.Calls; import android.support.annotation.CallSuper; +import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresPermission; +import android.support.annotation.WorkerThread; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -45,6 +47,7 @@ import com.android.dialer.common.concurrent.DialerExecutor.FailureListener; import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener; import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.common.concurrent.DialerExecutorComponent; +import com.android.dialer.common.concurrent.UiListener; import com.android.dialer.common.database.Selection; import com.android.dialer.constants.ActivityRequestCodes; import com.android.dialer.duo.Duo; @@ -58,7 +61,9 @@ 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.RttTranscriptUtil; import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ListenableFuture; import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; @@ -91,6 +96,7 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity { private CallDetailsAdapterCommon adapter; private CallDetailsEntries callDetailsEntries; + private UiListener<CallDetailsEntries> checkRttTranscriptAvailabilityListener; /** * Handles the intent that launches {@link OldCallDetailsActivity} or {@link CallDetailsActivity}, @@ -121,6 +127,9 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity { }); handleIntent(getIntent()); setupRecyclerViewForEntries(); + checkRttTranscriptAvailabilityListener = + DialerExecutorComponent.get(this) + .createUiListener(getFragmentManager(), "Query RTT transcript availability"); } @Override @@ -143,6 +152,40 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity { EnrichedCallComponent.get(this) .getEnrichedCallManager() .requestAllHistoricalData(getNumber(), callDetailsEntries); + checkRttTranscriptAvailabilityListener.listen( + this, + checkRttTranscriptAvailability(), + this::setCallDetailsEntries, + throwable -> { + throw new RuntimeException(throwable); + }); + } + + private ListenableFuture<CallDetailsEntries> checkRttTranscriptAvailability() { + return DialerExecutorComponent.get(this) + .backgroundExecutor() + .submit(() -> checkRttTranscriptAvailabilityInBackground(callDetailsEntries)); + } + + /** + * Check RTT transcript availability. + * + * @param input the original {@link CallDetailsEntries} + * @return {@link CallDetailsEntries} with updated RTT transcript availability. + */ + @WorkerThread + private CallDetailsEntries checkRttTranscriptAvailabilityInBackground( + @Nullable CallDetailsEntries input) { + RttTranscriptUtil rttTranscriptUtil = new RttTranscriptUtil(this); + + CallDetailsEntries.Builder mutableCallDetailsEntries = CallDetailsEntries.newBuilder(); + for (CallDetailsEntry entry : input.getEntriesList()) { + CallDetailsEntry.Builder newEntry = CallDetailsEntry.newBuilder().mergeFrom(entry); + newEntry.setHasRttTranscript( + rttTranscriptUtil.checkRttTranscriptAvailability(String.valueOf(entry.getDate()))); + mutableCallDetailsEntries.addEntries(newEntry.build()); + } + return mutableCallDetailsEntries.build(); } @Override @@ -185,8 +228,13 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity { super.onBackPressed(); } + @MainThread protected final void setCallDetailsEntries(CallDetailsEntries entries) { + Assert.isMainThread(); this.callDetailsEntries = entries; + if (adapter != null) { + adapter.updateCallDetailsEntries(entries); + } } protected final CallDetailsEntries getCallDetailsEntries() { @@ -415,7 +463,7 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity { Map<CallDetailsEntry, List<HistoryResult>> mappedResults = getAllHistoricalData(activity.getNumber(), activity.callDetailsEntries); - activity.adapter.updateCallDetailsEntries( + activity.setCallDetailsEntries( generateAndMapNewCallDetailsEntriesHistoryResults( activity.getNumber(), activity.callDetailsEntries, mappedResults)); } diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java b/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java index 27feff89d..a79642bad 100644 --- a/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java +++ b/java/com/android/dialer/calldetails/CallDetailsAdapterCommon.java @@ -18,6 +18,7 @@ package com.android.dialer.calldetails; import android.content.Context; import android.support.annotation.CallSuper; +import android.support.annotation.MainThread; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.LayoutInflater; @@ -137,7 +138,9 @@ abstract class CallDetailsAdapterCommon extends RecyclerView.Adapter<RecyclerVie return callDetailsEntries; } + @MainThread final void updateCallDetailsEntries(CallDetailsEntries entries) { + Assert.isMainThread(); callDetailsEntries = entries; notifyDataSetChanged(); } diff --git a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java index edf25df99..5c4a196fa 100644 --- a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java +++ b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java @@ -55,6 +55,7 @@ public class CallDetailsEntryViewHolder extends ViewHolder { private final TextView multimediaDetails; private final TextView postCallNote; + private final TextView rttTranscript; private final ImageView multimediaImage; @@ -81,6 +82,7 @@ public class CallDetailsEntryViewHolder extends ViewHolder { multimediaImage = (ImageView) container.findViewById(R.id.multimedia_image); multimediaAttachmentsNumber = (TextView) container.findViewById(R.id.multimedia_attachments_number); + rttTranscript = container.findViewById(R.id.rtt_transcript); } void setCallDetails( @@ -94,6 +96,9 @@ public class CallDetailsEntryViewHolder extends ViewHolder { (entry.getFeatures() & Calls.FEATURES_PULLED_EXTERNALLY) == Calls.FEATURES_PULLED_EXTERNALLY; boolean isDuoCall = entry.getIsDuoCall(); + boolean isRttCall = + BuildCompat.isAtLeastP() + && (entry.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT; callTime.setTextColor(getColorForCallType(context, callType)); callTypeIcon.clear(); @@ -123,6 +128,18 @@ public class CallDetailsEntryViewHolder extends ViewHolder { context, entry.getDuration(), entry.getDataUsage())); } setMultimediaDetails(number, entry, showMultimediaDivider); + if (isRttCall) { + if (entry.getHasRttTranscript()) { + rttTranscript.setText(R.string.rtt_transcript_link); + rttTranscript.setTextAppearance(R.style.RttTranscriptLink); + rttTranscript.setClickable(true); + } else { + rttTranscript.setText(R.string.rtt_transcript_not_available); + rttTranscript.setTextAppearance(R.style.RttTranscriptMessage); + rttTranscript.setClickable(false); + } + rttTranscript.setVisibility(View.VISIBLE); + } } private void setMultimediaDetails(String number, CallDetailsEntry entry, boolean showDivider) { 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 7a5700b1c..e0202cda1 100644 --- a/java/com/android/dialer/calldetails/proto/call_details_entries.proto +++ b/java/com/android/dialer/calldetails/proto/call_details_entries.proto @@ -19,6 +19,7 @@ message CallDetailsEntries { optional int64 data_usage = 6; repeated enrichedcall.historyquery.proto.HistoryResult history_results = 7; optional bool is_duo_call = 8; + optional bool has_rtt_transcript = 9; } repeated CallDetailsEntry entries = 1; diff --git a/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml b/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml index 3d4750d09..1e989966a 100644 --- a/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml +++ b/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml @@ -30,60 +30,71 @@ <TextView android:id="@+id/call_type" + style="@style/PrimaryText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/call_entry_text_left_margin" android:layout_marginEnd="16dp" android:layout_toStartOf="@+id/call_duration" android:gravity="start" - android:maxLines="100" - style="@style/PrimaryText"/> + android:maxLines="100"/> <TextView android:id="@+id/call_time" + style="@style/SecondaryText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/call_entry_text_left_margin" - android:layout_below="@+id/call_type" android:layout_marginBottom="@dimen/call_entry_bottom_padding" - style="@style/SecondaryText"/> + android:layout_marginStart="@dimen/call_entry_text_left_margin" + android:layout_below="@+id/call_type"/> <TextView android:id="@+id/call_duration" + style="@style/PrimaryText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentEnd="true" android:layout_marginEnd="@dimen/call_entry_padding" - style="@style/PrimaryText"/> + android:layout_alignParentEnd="true"/> <include - layout="@layout/ec_data_container" android:id="@+id/ec_container" - android:layout_height="@dimen/ec_container_height" + layout="@layout/ec_data_container" android:layout_width="match_parent" + android:layout_height="@dimen/ec_container_height" android:layout_below="@+id/call_time" android:visibility="gone"/> <TextView android:id="@+id/post_call_note" + style="@style/SecondaryText" android:layout_width="match_parent" android:layout_height="@dimen/ec_container_height" android:layout_below="@+id/ec_container" android:paddingStart="@dimen/call_entry_text_left_margin" + android:background="?attr/selectableItemBackground" android:gravity="center_vertical" android:maxLines="2" - android:visibility="gone" - android:background="?attr/selectableItemBackground" - style="@style/SecondaryText"/> + android:visibility="gone"/> + <TextView + android:id="@+id/rtt_transcript" + style="@style/SecondaryText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/call_entry_bottom_padding" + android:layout_marginStart="@dimen/call_entry_text_left_margin" + android:layout_marginEnd="@dimen/call_entry_padding" + android:layout_below="@id/post_call_note" + android:maxLines="2" + android:visibility="gone"/> <View android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="1dp" - android:layout_below="@id/post_call_note" android:layout_marginTop="@dimen/ec_divider_top_bottom_margin" android:layout_marginBottom="@dimen/ec_divider_top_bottom_margin" android:layout_marginStart="@dimen/call_entry_text_left_margin" + android:layout_below="@id/rtt_transcript" android:background="#12000000" android:visibility="gone"/> </RelativeLayout>
\ No newline at end of file diff --git a/java/com/android/dialer/calldetails/res/values/strings.xml b/java/com/android/dialer/calldetails/res/values/strings.xml index f81696034..c3fff20bc 100644 --- a/java/com/android/dialer/calldetails/res/values/strings.xml +++ b/java/com/android/dialer/calldetails/res/values/strings.xml @@ -55,4 +55,10 @@ <!-- A fallback string for the assisted dialing header incase parsing failes.. [CHAR LIMIT=NONE] --> <string name="assisted_dialing_country_code_entry_failure">Assisted dialing was used</string> + + <!-- String shown when RTT transcript is not available for any reason. [CHAR LIMIT=NONE] --> + <string name="rtt_transcript_not_available">Transcript available only for calls with messaging</string> + + <!-- String shown when RTT transcript is available. [CHAR LIMIT=NONE] --> + <string name="rtt_transcript_link">See transcript</string> </resources> diff --git a/java/com/android/dialer/calldetails/res/values/styles.xml b/java/com/android/dialer/calldetails/res/values/styles.xml index 1a2b52994..93567ef73 100644 --- a/java/com/android/dialer/calldetails/res/values/styles.xml +++ b/java/com/android/dialer/calldetails/res/values/styles.xml @@ -27,4 +27,16 @@ <item name="android:textColor">#8A000000</item> <item name="android:textSize">14sp</item> </style> + + <style name="RttTranscriptLink"> + <item name="android:fontFamily">sans-serif-medium</item> + <item name="android:textColor">@color/dialer_link_color</item> + <item name="android:textAllCaps">true</item> + <item name="textAllCaps">true</item> + </style> + <style name="RttTranscriptMessage" parent="SecondaryText"> + <item name="android:fontFamily">sans-serif</item> + <item name="android:textAllCaps">false</item> + <item name="textAllCaps">false</item> + </style> </resources>
\ No newline at end of file |