From 9e8b6733962641d137c4d084b843c069b6545953 Mon Sep 17 00:00:00 2001 From: linyuh Date: Tue, 6 Mar 2018 12:13:27 -0800 Subject: Covnert @AutoValue PhotoInfo into a proto. Bug: 74202944 Test: Existing tests PiperOrigin-RevId: 188060790 Change-Id: I4d79a353abf767935383d4149f261f5e96fd7acb --- .../dialer/calllog/ui/NewCallLogViewHolder.java | 14 +-- .../dialer/calllog/ui/menu/PrimaryAction.java | 16 ++-- .../calllogutils/NumberAttributesConverter.java | 2 +- .../dialer/glidephotomanager/PhotoInfo.java | 100 --------------------- .../impl/GlidePhotoManagerImpl.java | 30 ++++--- .../dialer/glidephotomanager/photo_info.proto | 44 +++++++++ .../voicemail/listui/NewVoicemailViewHolder.java | 13 +-- .../voicemail/listui/menu/PrimaryAction.java | 12 ++- 8 files changed, 97 insertions(+), 134 deletions(-) delete mode 100644 java/com/android/dialer/glidephotomanager/PhotoInfo.java create mode 100644 java/com/android/dialer/glidephotomanager/photo_info.proto (limited to 'java') diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java index cf016083f..4c2d124d7 100644 --- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java +++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java @@ -22,6 +22,7 @@ import android.database.Cursor; import android.provider.CallLog.Calls; import android.support.annotation.DrawableRes; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.QuickContactBadge; @@ -35,6 +36,7 @@ import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.compat.AppCompatConstants; import com.android.dialer.compat.telephony.TelephonyManagerCompat; import com.android.dialer.glidephotomanager.GlidePhotoManager; +import com.android.dialer.glidephotomanager.PhotoInfo; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.time.Clock; import com.google.common.util.concurrent.FutureCallback; @@ -150,11 +152,13 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { } private void setPhoto(CoalescedRow row) { - glidePhotoManager.loadQuickContactBadge( - quickContactBadge, - NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()) - .setFormattedNumber(row.formattedNumber()) - .build()); + PhotoInfo.Builder photoInfoBuilder = + NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()); + if (!TextUtils.isEmpty(row.formattedNumber())) { + photoInfoBuilder.setFormattedNumber(row.formattedNumber()); + } + + glidePhotoManager.loadQuickContactBadge(quickContactBadge, photoInfoBuilder.build()); } private void setFeatureIcons(CoalescedRow row) { diff --git a/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java b/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java index de4a70c30..aec4dc6d8 100644 --- a/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java +++ b/java/com/android/dialer/calllog/ui/menu/PrimaryAction.java @@ -18,10 +18,12 @@ package com.android.dialer.calllog.ui.menu; import android.content.Context; import android.provider.CallLog.Calls; +import android.text.TextUtils; import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.calllogutils.CallLogEntryText; import com.android.dialer.calllogutils.CallLogIntents; import com.android.dialer.calllogutils.NumberAttributesConverter; +import com.android.dialer.glidephotomanager.PhotoInfo; import com.android.dialer.historyitemactions.HistoryItemPrimaryActionInfo; /** Configures the primary action row (top row) for the bottom sheet. */ @@ -29,13 +31,17 @@ final class PrimaryAction { static HistoryItemPrimaryActionInfo fromRow(Context context, CoalescedRow row) { CharSequence primaryText = CallLogEntryText.buildPrimaryText(context, row); + + PhotoInfo.Builder photoInfoBuilder = + NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()) + .setIsVideo((row.features() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO); + if (!TextUtils.isEmpty(row.formattedNumber())) { + photoInfoBuilder.setFormattedNumber(row.formattedNumber()); + } + return HistoryItemPrimaryActionInfo.builder() .setNumber(row.number()) - .setPhotoInfo( - NumberAttributesConverter.toPhotoInfoBuilder(row.numberAttributes()) - .setFormattedNumber(row.formattedNumber()) - .setIsVideo((row.features() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO) - .build()) + .setPhotoInfo(photoInfoBuilder.build()) .setPrimaryText(primaryText) .setSecondaryText(CallLogEntryText.buildSecondaryTextForBottomSheet(context, row)) .setIntent(CallLogIntents.getCallBackIntent(context, row)) diff --git a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java b/java/com/android/dialer/calllogutils/NumberAttributesConverter.java index a9376bb98..df6b680db 100644 --- a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java +++ b/java/com/android/dialer/calllogutils/NumberAttributesConverter.java @@ -27,7 +27,7 @@ public final class NumberAttributesConverter { /** Converts {@link NumberAttributes} to {@link PhotoInfo.Builder} */ public static PhotoInfo.Builder toPhotoInfoBuilder(NumberAttributes numberAttributes) { - return PhotoInfo.builder() + return PhotoInfo.newBuilder() .setName(numberAttributes.getName()) .setPhotoUri(numberAttributes.getPhotoUri()) .setPhotoId(numberAttributes.getPhotoId()) diff --git a/java/com/android/dialer/glidephotomanager/PhotoInfo.java b/java/com/android/dialer/glidephotomanager/PhotoInfo.java deleted file mode 100644 index 016221f40..000000000 --- a/java/com/android/dialer/glidephotomanager/PhotoInfo.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.dialer.glidephotomanager; - -import android.support.annotation.Nullable; -import com.google.auto.value.AutoValue; - -/** The number information used to create the photo.. */ -@AutoValue -public abstract class PhotoInfo { - - /** The display name of the number */ - @Nullable - public abstract String name(); - - /** The number displayed to the user. */ - @Nullable - public abstract String formattedNumber(); - - /** The URI to the photo */ - @Nullable - public abstract String photoUri(); - - /** Value of {@link android.provider.ContactsContract.CommonDataKinds.Photo#_ID} */ - public abstract long photoId(); - - /** The contacts provider lookup URI for the contact associated with the number */ - @Nullable - public abstract String lookupUri(); - - /** Should a business icon be displayed */ - public abstract boolean isBusiness(); - - /** Should a voicemail icon be displayed */ - public abstract boolean isVoicemail(); - - /** Should a blocked icon be displayed */ - public abstract boolean isBlocked(); - - /** Should a spam icon be displayed */ - public abstract boolean isSpam(); - - /** - * Should the photo be badged as video call. - * - *

Defaults to false. - */ - public abstract boolean isVideo(); - - /** Builder for {@link PhotoInfo} */ - @AutoValue.Builder - public abstract static class Builder { - - public abstract Builder setName(@Nullable String name); - - public abstract Builder setFormattedNumber(@Nullable String formattedNumber); - - public abstract Builder setPhotoUri(@Nullable String uri); - - public abstract Builder setPhotoId(long id); - - public abstract Builder setLookupUri(@Nullable String uri); - - public abstract Builder setIsBusiness(boolean isBusiness); - - public abstract Builder setIsVoicemail(boolean isVoicemail); - - public abstract Builder setIsBlocked(boolean isBlocked); - - public abstract Builder setIsSpam(boolean isSpam); - - public abstract Builder setIsVideo(boolean isVideo); - - public abstract PhotoInfo build(); - } - - public static PhotoInfo.Builder builder() { - return new AutoValue_PhotoInfo.Builder() - .setPhotoId(0) - .setIsBusiness(false) - .setIsVoicemail(false) - .setIsBlocked(false) - .setIsSpam(false) - .setIsVideo(false); - } -} diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java index e14e604a1..45af4e3e2 100644 --- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java +++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java @@ -49,7 +49,7 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager { @Override public void loadQuickContactBadge(QuickContactBadge badge, PhotoInfo photoInfo) { Assert.isMainThread(); - badge.assignContactUri(parseUri(photoInfo.lookupUri())); + badge.assignContactUri(parseUri(photoInfo.getLookupUri())); badge.setOverlay(null); GlideRequest request = buildRequest(GlideApp.with(badge), photoInfo); request.into(badge); @@ -62,20 +62,20 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager { GlideRequest request; boolean circleCrop = true; // Photos are cropped to a circle by default. - if (photoInfo.isBlocked()) { + if (photoInfo.getIsBlocked()) { // Whether the number is blocked takes precedence over the spam status. request = requestManager.load(R.drawable.ic_block_grey_48dp); - } else if (photoInfo.isSpam()) { + } else if (photoInfo.getIsSpam()) { request = requestManager.load(R.drawable.quantum_ic_report_vd_red_24); circleCrop = false; // The spam icon is an octagon so we don't crop it. - } else if (!TextUtils.isEmpty(photoInfo.photoUri())) { - request = requestManager.load(parseUri(photoInfo.photoUri())); + } else if (!TextUtils.isEmpty(photoInfo.getPhotoUri())) { + request = requestManager.load(parseUri(photoInfo.getPhotoUri())); - } else if (photoInfo.photoId() != 0) { + } else if (photoInfo.getPhotoId() != 0) { request = - requestManager.load(ContentUris.withAppendedId(Data.CONTENT_URI, photoInfo.photoId())); + requestManager.load(ContentUris.withAppendedId(Data.CONTENT_URI, photoInfo.getPhotoId())); } else { // load null to indicate fallback should be used. @@ -102,23 +102,25 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager { LetterTileDrawable letterTileDrawable = new LetterTileDrawable(appContext.getResources()); String displayName; String identifier; - if (TextUtils.isEmpty(photoInfo.lookupUri())) { + if (TextUtils.isEmpty(photoInfo.getLookupUri())) { // Use generic avatar instead of letter for non-contacts. displayName = null; identifier = - TextUtils.isEmpty(photoInfo.name()) ? photoInfo.formattedNumber() : photoInfo.name(); + TextUtils.isEmpty(photoInfo.getName()) + ? photoInfo.getFormattedNumber() + : photoInfo.getName(); } else { - displayName = photoInfo.name(); - identifier = photoInfo.lookupUri(); + displayName = photoInfo.getName(); + identifier = photoInfo.getLookupUri(); } letterTileDrawable.setCanonicalDialerLetterTileDetails( displayName, identifier, LetterTileDrawable.SHAPE_CIRCLE, LetterTileDrawable.getContactTypeFromPrimitives( - photoInfo.isVoicemail(), - photoInfo.isSpam(), - photoInfo.isBusiness(), + photoInfo.getIsVoicemail(), + photoInfo.getIsSpam(), + photoInfo.getIsBusiness(), TelecomManager.PRESENTATION_ALLOWED, // TODO(twyen):implement false)); // TODO(twyen):implement return letterTileDrawable; diff --git a/java/com/android/dialer/glidephotomanager/photo_info.proto b/java/com/android/dialer/glidephotomanager/photo_info.proto new file mode 100644 index 000000000..447cfe83f --- /dev/null +++ b/java/com/android/dialer/glidephotomanager/photo_info.proto @@ -0,0 +1,44 @@ +syntax = "proto2"; + +option java_package = "com.android.dialer.glidephotomanager"; +option java_multiple_files = true; +option optimize_for = LITE_RUNTIME; + + +package com.android.dialer.glidephotomanager; + +// Contains information associated with a number, which is used to create the +// photo. +// Next ID: 11 +message PhotoInfo { + // The display name of the number. + optional string name = 1; + + // The number presented to the user. + optional string formatted_number = 2; + + // The URI of the photo. + optional string photo_uri = 3; + + // Value of android.provider.ContactsContract.CommonDataKinds.Photo#_ID + optional int64 photo_id = 4; + + // The Contacts Provider lookup URI for the contact associated with the + // number. + optional string lookup_uri = 5; + + // Whether a business icon should be displayed. + optional bool is_business = 6; + + // Whether a voicemail icon should be displayed. + optional bool is_voicemail = 7; + + // Whether a "blocked" icon should be displayed. + optional bool is_blocked = 8; + + // Whether a "spam" icon should be displayed. + optional bool is_spam = 9; + + // Whether the photo should be badged as video call. + optional bool is_video = 10; +} diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java index 5328dd33e..1d42e647a 100644 --- a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java +++ b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java @@ -45,6 +45,7 @@ import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.compat.android.provider.VoicemailCompat; import com.android.dialer.glidephotomanager.GlidePhotoManager; +import com.android.dialer.glidephotomanager.PhotoInfo; import com.android.dialer.time.Clock; import com.android.dialer.voicemail.listui.menu.NewVoicemailMenu; import com.android.dialer.voicemail.model.VoicemailEntry; @@ -210,11 +211,13 @@ final class NewVoicemailViewHolder extends RecyclerView.ViewHolder implements On } private void setPhoto(VoicemailEntry voicemailEntry) { - glidePhotoManager.loadQuickContactBadge( - quickContactBadge, - NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.numberAttributes()) - .setFormattedNumber(voicemailEntry.formattedNumber()) - .build()); + PhotoInfo.Builder photoInfoBuilder = + NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.numberAttributes()); + if (!TextUtils.isEmpty(voicemailEntry.formattedNumber())) { + photoInfoBuilder.setFormattedNumber(voicemailEntry.formattedNumber()); + } + + glidePhotoManager.loadQuickContactBadge(quickContactBadge, photoInfoBuilder.build()); } void collapseViewHolder() { diff --git a/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java b/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java index 9a5aa1886..dbc417c6c 100644 --- a/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java +++ b/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java @@ -19,6 +19,7 @@ package com.android.dialer.voicemail.listui.menu; import android.content.Context; import android.text.TextUtils; import com.android.dialer.calllogutils.NumberAttributesConverter; +import com.android.dialer.glidephotomanager.PhotoInfo; import com.android.dialer.historyitemactions.HistoryItemPrimaryActionInfo; import com.android.dialer.voicemail.model.VoicemailEntry; @@ -33,12 +34,15 @@ final class PrimaryAction { // setSecondaryText - check in with UX static HistoryItemPrimaryActionInfo fromVoicemailEntry( Context context, VoicemailEntry voicemailEntry) { + PhotoInfo.Builder photoInfoBuilder = + NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.numberAttributes()); + if (!TextUtils.isEmpty(voicemailEntry.formattedNumber())) { + photoInfoBuilder.setFormattedNumber(voicemailEntry.formattedNumber()); + } + return HistoryItemPrimaryActionInfo.builder() .setNumber(voicemailEntry.number()) - .setPhotoInfo( - NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.numberAttributes()) - .setFormattedNumber(voicemailEntry.formattedNumber()) - .build()) + .setPhotoInfo(photoInfoBuilder.build()) .setPrimaryText(buildPrimaryVoicemailText(context, voicemailEntry)) .setSecondaryText(buildSecondaryVoicemailText(voicemailEntry)) .build(); -- cgit v1.2.3