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

Commit 20104b77 authored by weijiaxu's avatar weijiaxu Committed by android-build-merger
Browse files

Merge changes Ia54e3421,Id2176e6e,I0311770e,I79f99c34,I8579afff, ... am: ced93f2d am: 9466c243

am: e55d51b0

Change-Id: I0ab4755839f1dc3a353bb6d72d8ba108c4e7c70a
parents 3e9f2530 e55d51b0
Loading
Loading
Loading
Loading
+0 −22
Original line number Diff line number Diff line
@@ -64,7 +64,6 @@ import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter.OnVoicemailDe
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.calldetails.CallDetailsEntries;
import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.calllogutils.CallbackActionHelper.CallbackAction;
import com.android.dialer.calllogutils.PhoneCallDetails;
import com.android.dialer.common.Assert;
@@ -407,28 +406,7 @@ public class CallLogAdapter extends GroupingListAdapter
              }
            }
            expandViewHolderActions(viewHolder);

            if (isDuoCallButtonVisible(viewHolder.videoCallButtonView)) {
              CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
            }
          }
        }

        private boolean isDuoCallButtonVisible(View videoCallButtonView) {
          if (videoCallButtonView == null) {
            return false;
          }
          if (videoCallButtonView.getVisibility() != View.VISIBLE) {
            return false;
          }
          IntentProvider intentProvider = (IntentProvider) videoCallButtonView.getTag();
          if (intentProvider == null) {
            return false;
          }
          return DuoComponent.get(activity)
              .getDuo()
              .getIntentType(intentProvider.getIntent(activity))
              .isPresent();
        }
      };

+17 −47
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.dialer.app.calllog;
import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@@ -51,7 +50,6 @@ import android.view.ViewStub;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.contacts.common.dialog.CallSubjectDialog;
import com.android.dialer.app.DialtactsActivity;
import com.android.dialer.app.R;
@@ -96,7 +94,6 @@ import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.CallUtil;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.UriUtils;
import com.google.common.base.Optional;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
@@ -550,7 +547,8 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
      case CallbackAction.DUO:
        if (showDuoPrimaryButton()) {
          CallIntentBuilder.increaseLightbringerCallButtonAppearInCollapsedCallLogItemCount();
          primaryActionButtonView.setTag(IntentProvider.getDuoVideoIntentProvider(number));
          primaryActionButtonView.setTag(
              IntentProvider.getDuoVideoIntentProvider(number, isNonContactEntry(info)));
        } else {
          primaryActionButtonView.setTag(IntentProvider.getReturnVideoCallIntentProvider(number));
        }
@@ -684,14 +682,17 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder

        boolean identifiedSpamCall = isSpamFeatureEnabled && isSpam;
        if (duo.isReachable(context, number)) {
          videoCallButtonView.setTag(IntentProvider.getDuoVideoIntentProvider(number));
          videoCallButtonView.setTag(
              IntentProvider.getDuoVideoIntentProvider(number, isNonContactEntry(info)));
          videoCallButtonView.setVisibility(View.VISIBLE);
          CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
        } else if (duo.isActivated(context) && !identifiedSpamCall) {
          if (ConfigProviderBindings.get(context)
              .getBoolean("enable_call_log_duo_invite_button", false)) {
            inviteVideoButtonView.setTag(IntentProvider.getDuoInviteIntentProvider(number));
            inviteVideoButtonView.setVisibility(View.VISIBLE);
            Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_INVITE_SHOWN);
            CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
          }
        } else if (duo.isEnabled(context) && !identifiedSpamCall) {
          if (!duo.isInstalled(context)) {
@@ -701,6 +702,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
              setUpVideoButtonView.setVisibility(View.VISIBLE);
              Logger.get(context)
                  .logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_INSTALL_SHOWN);
              CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
            }
          } else {
            if (ConfigProviderBindings.get(context)
@@ -709,6 +711,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
              setUpVideoButtonView.setVisibility(View.VISIBLE);
              Logger.get(context)
                  .logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_ACTIVATE_SHOWN);
              CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
            }
          }
        }
@@ -782,7 +785,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder

    callComposeButtonView.setVisibility(isCallComposerCapable ? View.VISIBLE : View.GONE);

    updateBlockReportActions(isVoicemailNumber);
    updateBlockReportActions(canPlaceCallToNumber, isVoicemailNumber);
  }

  private boolean isFullyUndialableVoicemail() {
@@ -1024,20 +1027,13 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
    if (intentProvider == null) {
      return;
    }

    intentProvider.logInteraction(context);
    final Intent intent = intentProvider.getIntent(context);
    // See IntentProvider.getCallDetailIntentProvider() for why this may be null.
    if (intent == null) {
      return;
    }

    // We check to see if we are starting a Duo intent. The reason is Duo
    // intents need to be started using startActivityForResult instead of the usual startActivity
    Optional<Duo.IntentType> duoIntentType =
        DuoComponent.get(context).getDuo().getIntentType(intent);
    if (duoIntentType.isPresent()) {
      startDuoActivity(intent, duoIntentType.get());
    } else if (OldCallDetailsActivity.isLaunchIntent(intent)) {
    if (OldCallDetailsActivity.isLaunchIntent(intent)) {
      PerformanceReport.recordClick(UiAction.Type.OPEN_CALL_DETAIL);
      ((Activity) context)
          .startActivityForResult(intent, ActivityRequestCodes.DIALTACTS_CALL_DETAILS);
@@ -1046,9 +1042,6 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
          && intent.getIntExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE, -1)
              == VideoProfile.STATE_BIDIRECTIONAL) {
        Logger.get(context).logImpression(DialerImpression.Type.IMS_VIDEO_REQUESTED_FROM_CALL_LOG);
      } else if (intent.filterEquals(
          DuoComponent.get(context).getDuo().getInstallDuoIntent().orNull())) {
        Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_INSTALL);
      }

      DialerUtils.startActivityWithErrorToast(context, intent);
@@ -1062,32 +1055,6 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
    return false;
  }

  private void startDuoActivity(Intent intent, Duo.IntentType intentType) {
    switch (intentType) {
      case CALL:
        Logger.get(context)
            .logImpression(DialerImpression.Type.LIGHTBRINGER_VIDEO_REQUESTED_FROM_CALL_LOG);
        if (isNonContactEntry(info)) {
          Logger.get(context)
              .logImpression(
                  DialerImpression.Type.LIGHTBRINGER_NON_CONTACT_VIDEO_REQUESTED_FROM_CALL_LOG);
        }
        break;
      case INVITE:
        Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_INVITE);
        break;
      case ACTIVATE:
        Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_ACTIVATE);
        break;
    }
    try {
      Activity activity = (Activity) context;
      activity.startActivityForResult(intent, ActivityRequestCodes.DIALTACTS_DUO);
    } catch (ActivityNotFoundException e) {
      Toast.makeText(context, R.string.activity_not_available, Toast.LENGTH_SHORT).show();
    }
  }

  private DialerContact buildContact() {
    DialerContact.Builder contact = DialerContact.newBuilder();
    contact.setPhotoId(info.photoId);
@@ -1172,14 +1139,15 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder
    }
  }

  private void updateBlockReportActions(boolean isVoicemailNumber) {
  private void updateBlockReportActions(boolean canPlaceCallToNumber, boolean isVoicemailNumber) {
    // Set block/spam actions.
    blockReportView.setVisibility(View.GONE);
    blockView.setVisibility(View.GONE);
    unblockView.setVisibility(View.GONE);
    reportNotSpamView.setVisibility(View.GONE);
    String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
    if (isVoicemailNumber
    if (!canPlaceCallToNumber
        || isVoicemailNumber
        || !FilteredNumbersUtil.canBlockNumber(context, e164Number, number)
        || !FilteredNumberCompat.canAttemptBlockOperations(context)) {
      return;
@@ -1260,7 +1228,9 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder

    String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
    boolean isVoicemailNumber = callLogCache.isVoicemailNumber(accountHandle, number);
    if (!isVoicemailNumber
    boolean canPlaceCallToNumber = PhoneNumberHelper.canPlaceCallsTo(number, numberPresentation);
    if (canPlaceCallToNumber
        && !isVoicemailNumber
        && FilteredNumbersUtil.canBlockNumber(context, e164Number, number)
        && FilteredNumberCompat.canAttemptBlockOperations(context)) {
      boolean isBlocked = blockId != null;
+36 −2
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.dialercontact.DialerContact;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.precall.PreCall;
import com.android.dialer.util.IntentUtil;
import java.util.ArrayList;
@@ -93,11 +95,26 @@ public abstract class IntentProvider {
    };
  }

  public static IntentProvider getDuoVideoIntentProvider(String number) {
  public static IntentProvider getDuoVideoIntentProvider(String number, boolean isNonContact) {
    return new IntentProvider() {
      @Override
      public Intent getIntent(Context context) {
        return DuoComponent.get(context).getDuo().getCallIntent(number).orNull();
        return PreCall.getIntent(
            context,
            new CallIntentBuilder(number, CallInitiationType.Type.CALL_LOG)
                .setIsDuoCall(true)
                .setIsVideoCall(true));
      }

      @Override
      public void logInteraction(Context context) {
        Logger.get(context)
            .logImpression(DialerImpression.Type.LIGHTBRINGER_VIDEO_REQUESTED_FROM_CALL_LOG);
        if (isNonContact) {
          Logger.get(context)
              .logImpression(
                  DialerImpression.Type.LIGHTBRINGER_NON_CONTACT_VIDEO_REQUESTED_FROM_CALL_LOG);
        }
      }
    };
  }
@@ -108,6 +125,11 @@ public abstract class IntentProvider {
      public Intent getIntent(Context context) {
        return DuoComponent.get(context).getDuo().getInstallDuoIntent().orNull();
      }

      @Override
      public void logInteraction(Context context) {
        Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_INSTALL);
      }
    };
  }

@@ -117,6 +139,11 @@ public abstract class IntentProvider {
      public Intent getIntent(Context context) {
        return DuoComponent.get(context).getDuo().getActivateIntent().orNull();
      }

      @Override
      public void logInteraction(Context context) {
        Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_ACTIVATE);
      }
    };
  }

@@ -126,6 +153,11 @@ public abstract class IntentProvider {
      public Intent getIntent(Context context) {
        return DuoComponent.get(context).getDuo().getInviteIntent(number).orNull();
      }

      @Override
      public void logInteraction(Context context) {
        Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_INVITE);
      }
    };
  }

@@ -244,4 +276,6 @@ public abstract class IntentProvider {
  }

  public abstract Intent getIntent(Context context);

  public void logInteraction(Context context) {}
}
+5 −19
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.dialer.calldetails;
import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
@@ -35,7 +34,6 @@ import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Toast;
import com.android.dialer.assisteddialing.ui.AssistedDialingSettingActivity;
import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.callintent.CallInitiationType;
@@ -48,9 +46,6 @@ 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;
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;
@@ -63,7 +58,6 @@ 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.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import com.google.i18n.phonenumbers.NumberParseException;
@@ -327,19 +321,11 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
    public void placeDuoVideoCall(String phoneNumber) {
      Logger.get(getActivity())
          .logImpression(DialerImpression.Type.CALL_DETAILS_LIGHTBRINGER_CALL_BACK);
      Duo duo = DuoComponent.get(getActivity()).getDuo();
      Optional<Intent> intentOptional = duo.getCallIntent(phoneNumber);
      if (!duo.isReachable(getActivity(), phoneNumber) || !intentOptional.isPresent()) {
        placeImsVideoCall(phoneNumber);
        return;
      }

      try {
        getActivity()
            .startActivityForResult(intentOptional.get(), ActivityRequestCodes.DIALTACTS_DUO);
      } catch (ActivityNotFoundException e) {
        Toast.makeText(getActivity(), R.string.activity_not_available, Toast.LENGTH_SHORT).show();
      }
      PreCall.start(
          getActivity(),
          new CallIntentBuilder(phoneNumber, CallInitiationType.Type.CALL_DETAILS)
              .setIsDuoCall(true)
              .setIsVideoCall(true));
    }

    @Override
+7 −1
Original line number Diff line number Diff line
@@ -190,7 +190,13 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
        .loadQuickContactBadge(contactPhoto, headerInfo.getPhotoInfo());

    nameView.setText(headerInfo.getPrimaryText());
    if (!headerInfo.getSecondaryText().isEmpty()) {
      numberView.setVisibility(View.VISIBLE);
      numberView.setText(headerInfo.getSecondaryText());
    } else {
      numberView.setVisibility(View.GONE);
      numberView.setText(null);
    }

    setCallbackAction(callbackAction);
  }
Loading