From 21b13e2975180744020b0fb8c150e4a74c45e30c Mon Sep 17 00:00:00 2001 From: linyuh Date: Thu, 8 Feb 2018 10:44:50 -0800 Subject: Show icon and label for a spam number in the new call log. Bug: 73077158 Test: CallLogEntryTextTest, GlidePhotoManagerImplTest, PhoneLookupInfoConsolidatorTest PiperOrigin-RevId: 185017362 Change-Id: I113472482da2213d17a847054272a22249edc578 --- .../database/contract/number_attributes.proto | 6 +++- .../phonelookup/PhoneLookupDataSource.java | 1 + .../dialer/calllog/ui/NewCallLogAdapter.java | 7 +++- .../dialer/calllog/ui/NewCallLogViewHolder.java | 38 ++++++++++------------ .../dialer/calllog/ui/RealtimeRowProcessor.java | 1 + .../dialer/calllog/ui/menu/NewCallLogMenu.java | 9 +++-- .../dialer/calllog/ui/menu/PrimaryAction.java | 12 ++----- 7 files changed, 40 insertions(+), 34 deletions(-) (limited to 'java/com/android/dialer/calllog') diff --git a/java/com/android/dialer/calllog/database/contract/number_attributes.proto b/java/com/android/dialer/calllog/database/contract/number_attributes.proto index b1a756650..594e6764c 100644 --- a/java/com/android/dialer/calllog/database/contract/number_attributes.proto +++ b/java/com/android/dialer/calllog/database/contract/number_attributes.proto @@ -22,6 +22,7 @@ option optimize_for = LITE_RUNTIME; package com.android.dialer; // Information related to the phone number of the call. +// Next ID: 12 message NumberAttributes { // The name (which may be a person's name or business name, but not a number) // formatted exactly as it should appear to the user. If the user's locale or @@ -59,6 +60,9 @@ message NumberAttributes { // display time. optional bool is_cp2_info_incomplete = 9; - // The number is blocked. + // Whether the number is blocked. optional bool is_blocked = 10; + + // Whether the number is spam. + optional bool is_spam = 11; } \ No newline at end of file diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java index 8fa6b67cc..52570c05e 100644 --- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java +++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java @@ -586,6 +586,7 @@ public final class PhoneLookupDataSource .setIsBusiness(phoneLookupInfoConsolidator.isBusiness()) .setIsVoicemail(phoneLookupInfoConsolidator.isVoicemail()) .setIsBlocked(phoneLookupInfoConsolidator.isBlocked()) + .setIsSpam(phoneLookupInfoConsolidator.isSpam()) .setCanReportAsInvalidNumber(phoneLookupInfoConsolidator.canReportAsInvalidNumber()) .setIsCp2InfoIncomplete(phoneLookupInfoConsolidator.isCp2LocalInfoIncomplete()) .build() diff --git a/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java b/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java index 05a339978..f7ba9efde 100644 --- a/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java +++ b/java/com/android/dialer/calllog/ui/NewCallLogAdapter.java @@ -25,6 +25,8 @@ import android.view.LayoutInflater; import android.view.ViewGroup; import com.android.dialer.calllogutils.CallLogDates; import com.android.dialer.common.Assert; +import com.android.dialer.glidephotomanager.GlidePhotoManager; +import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent; import com.android.dialer.time.Clock; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -53,6 +55,7 @@ final class NewCallLogAdapter extends RecyclerView.Adapter { private final Clock clock; private final RealtimeRowProcessor realtimeRowProcessor; + private final GlidePhotoManager glidePhotoManager; private Cursor cursor; @@ -69,6 +72,7 @@ final class NewCallLogAdapter extends RecyclerView.Adapter { this.cursor = cursor; this.clock = clock; this.realtimeRowProcessor = CallLogUiComponent.get(context).realtimeRowProcessor(); + this.glidePhotoManager = GlidePhotoManagerComponent.get(context).glidePhotoManager(); setHeaderPositions(); } @@ -138,7 +142,8 @@ final class NewCallLogAdapter extends RecyclerView.Adapter { LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.new_call_log_entry, viewGroup, false), clock, - realtimeRowProcessor); + realtimeRowProcessor, + glidePhotoManager); default: throw Assert.createUnsupportedOperationFailException("Unsupported view type: " + viewType); } diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java index ee114b5f9..cf016083f 100644 --- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java +++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java @@ -19,26 +19,22 @@ import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; import android.database.Cursor; -import android.net.Uri; import android.provider.CallLog.Calls; import android.support.annotation.DrawableRes; -import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.QuickContactBadge; import android.widget.TextView; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.calllog.ui.menu.NewCallLogMenu; -import com.android.dialer.calllogutils.CallLogContactTypes; import com.android.dialer.calllogutils.CallLogEntryText; import com.android.dialer.calllogutils.CallLogIntents; +import com.android.dialer.calllogutils.NumberAttributesConverter; import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.compat.AppCompatConstants; import com.android.dialer.compat.telephony.TelephonyManagerCompat; -import com.android.dialer.contactphoto.ContactPhotoManager; -import com.android.dialer.contactphoto.NumberAttributeConverter; +import com.android.dialer.glidephotomanager.GlidePhotoManager; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.time.Clock; import com.google.common.util.concurrent.FutureCallback; @@ -65,9 +61,15 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { private final RealtimeRowProcessor realtimeRowProcessor; private final ExecutorService uiExecutorService; + private final GlidePhotoManager glidePhotoManager; + private int currentRowId; - NewCallLogViewHolder(View view, Clock clock, RealtimeRowProcessor realtimeRowProcessor) { + NewCallLogViewHolder( + View view, + Clock clock, + RealtimeRowProcessor realtimeRowProcessor, + GlidePhotoManager glidePhotoManager) { super(view); this.context = view.getContext(); primaryTextView = view.findViewById(R.id.primary_text); @@ -83,6 +85,7 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { this.clock = clock; this.realtimeRowProcessor = realtimeRowProcessor; + this.glidePhotoManager = glidePhotoManager; uiExecutorService = DialerExecutorComponent.get(context).uiExecutor(); } @@ -147,19 +150,11 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { } private void setPhoto(CoalescedRow row) { - ContactPhotoManager.getInstance(context) - .loadDialerThumbnailOrPhoto( - quickContactBadge, - parseUri(row.numberAttributes().getLookupUri()), - row.numberAttributes().getPhotoId(), - NumberAttributeConverter.getPhotoUri(context, row.numberAttributes()), - CallLogEntryText.buildPrimaryText(context, row).toString(), - CallLogContactTypes.getContactType(row)); - } - - @Nullable - private static Uri parseUri(@Nullable String uri) { - return TextUtils.isEmpty(uri) ? null : Uri.parse(uri); + glidePhotoManager.loadQuickContactBadge( + quickContactBadge, + NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()) + .setFormattedNumber(row.formattedNumber()) + .build()); } private void setFeatureIcons(CoalescedRow row) { @@ -254,7 +249,8 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { } private void setOnClickListenerForMenuButon(CoalescedRow row) { - menuButton.setOnClickListener(NewCallLogMenu.createOnClickListener(context, row)); + menuButton.setOnClickListener( + NewCallLogMenu.createOnClickListener(context, row, glidePhotoManager)); } private class RealtimeRowFutureCallback implements FutureCallback { diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java index 421c35f55..5083a95c5 100644 --- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java +++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java @@ -212,6 +212,7 @@ public final class RealtimeRowProcessor { .setIsBusiness(phoneLookupInfoConsolidator.isBusiness()) .setIsVoicemail(phoneLookupInfoConsolidator.isVoicemail()) .setIsBlocked(phoneLookupInfoConsolidator.isBlocked()) + .setIsSpam(phoneLookupInfoConsolidator.isSpam()) .setCanReportAsInvalidNumber(phoneLookupInfoConsolidator.canReportAsInvalidNumber()) .build()) .build(); diff --git a/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java b/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java index 2ae823e7f..81c05135f 100644 --- a/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java +++ b/java/com/android/dialer/calllog/ui/menu/NewCallLogMenu.java @@ -20,14 +20,19 @@ import android.content.Context; import android.view.View; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.contactactions.ContactActionBottomSheet; +import com.android.dialer.glidephotomanager.GlidePhotoManager; /** Handles configuration of the bottom sheet menus for call log entries. */ public final class NewCallLogMenu { /** Creates and returns the OnClickListener which opens the menu for the provided row. */ - public static View.OnClickListener createOnClickListener(Context context, CoalescedRow row) { + public static View.OnClickListener createOnClickListener( + Context context, CoalescedRow row, GlidePhotoManager glidePhotoManager) { return (view) -> ContactActionBottomSheet.show( - context, PrimaryAction.fromRow(context, row), Modules.fromRow(context, row)); + context, + PrimaryAction.fromRow(context, row), + Modules.fromRow(context, row), + glidePhotoManager); } } diff --git a/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java b/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java index 2a43a3ca5..92a8453f4 100644 --- a/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java +++ b/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java @@ -19,12 +19,10 @@ package com.android.dialer.calllog.ui.menu; import android.content.Context; import android.provider.CallLog.Calls; import com.android.dialer.calllog.model.CoalescedRow; -import com.android.dialer.calllogutils.CallLogContactTypes; import com.android.dialer.calllogutils.CallLogEntryText; import com.android.dialer.calllogutils.CallLogIntents; +import com.android.dialer.calllogutils.NumberAttributesConverter; import com.android.dialer.contactactions.ContactPrimaryActionInfo; -import com.android.dialer.contactactions.ContactPrimaryActionInfo.PhotoInfo; -import com.android.dialer.contactphoto.NumberAttributeConverter; /** Configures the primary action row (top row) for the bottom sheet. */ final class PrimaryAction { @@ -34,13 +32,9 @@ final class PrimaryAction { return ContactPrimaryActionInfo.builder() .setNumber(row.number()) .setPhotoInfo( - PhotoInfo.builder() - .setPhotoId(row.numberAttributes().getPhotoId()) - .setPhotoUri(NumberAttributeConverter.getPhotoUri(context, row.numberAttributes())) - .setLookupUri(row.numberAttributes().getLookupUri()) + NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()) + .setFormattedNumber(row.formattedNumber()) .setIsVideo((row.features() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO) - .setContactType(CallLogContactTypes.getContactType(row)) - .setDisplayName(primaryText.toString()) .build()) .setPrimaryText(primaryText) .setSecondaryText(CallLogEntryText.buildSecondaryTextForBottomSheet(context, row)) -- cgit v1.2.3