Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6b10d55 authored by wangqi's avatar wangqi Committed by Copybara-Service
Browse files

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
parent 9ef6d8c8
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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);
+49 −1
Original line number Diff line number Diff line
@@ -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));
    }
+3 −0
Original line number Diff line number Diff line
@@ -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();
  }
+17 −0
Original line number Diff line number Diff line
@@ -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) {
+1 −0
Original line number Diff line number Diff line
@@ -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;
Loading