summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/app
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-05-10 01:14:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-05-10 01:14:47 +0000
commitced93f2d22bffce3b4cfb9c3bfce862b385537dd (patch)
tree2b4715070bcf45b8a8395ee0ae5c7fbb0ef8274c /java/com/android/dialer/app
parentc49c914e53500fc661ec47e365621c9d33e046ca (diff)
parent2f4a0075e9f546514359eda60a24ac9cd49ea80a (diff)
Merge changes Ia54e3421,Id2176e6e,I0311770e,I79f99c34,I8579afff, ...
* changes: Add some annotations that won't influence aosp. Update answer button logic. Hide new after call spam blocking promo behind an additional flag. Allow the TextView for call log primary text to adjust size when recycled. Format callback phone number. Added getLoggingName() to CallLogDataSource and PhoneLookup interfaces. Do not show bubble for outgoing call if it's not a background call. Always fetch status onResume and add logging for voicemail status in OldMainPeer and Place Duo calls with PreCall Creating CallIntent, AutoValue builder, to replace CallIntentBuilder. Set the DisplayNameSource to PHONE in DefaultLookupUriGenerator. Config correct layout boundaries to accommodate long text (call log & bottom sheet) Use info from EmergencyPhoneLookup to render UI for an emergency number. Implement EmergencyPhoneLookup for checking if a number is an emergency number. Add GlobalSpamListStatus and UserSpamListStatus Move SpamStatus classes into subpackage Delete obsolete checkSpamStatus(Listener) API Update callers of checkSpamStatus to use Future based API Fix bug that showing block option for private number. Add a null check for digitsHint. Don't commit fragment transactions if it's not safe. Add ListenableFuture based APIs for checkSpamStatus Pass activity between new call log's adapter/view holder. Replace assert checks with safety checks instead. Add SimpleSpamStatus and use it in FakeSpam and SpamStub Show calls to/from emergency numbers as "Emergency number" in call log & call details
Diffstat (limited to 'java/com/android/dialer/app')
-rw-r--r--java/com/android/dialer/app/calllog/CallLogAdapter.java22
-rw-r--r--java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java64
-rw-r--r--java/com/android/dialer/app/calllog/IntentProvider.java38
3 files changed, 53 insertions, 71 deletions
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index b99cef11f..c2c753e43 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -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();
}
};
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index 54748387e..9b7741df4 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -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;
diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java
index 1bc726f64..21f341815 100644
--- a/java/com/android/dialer/app/calllog/IntentProvider.java
+++ b/java/com/android/dialer/app/calllog/IntentProvider.java
@@ -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) {}
}