Remove duplicate code when constructing PhotoInfo proto.

Bug: 79770053
Test: Existing tests
PiperOrigin-RevId: 197192087
Change-Id: I44c60d13c83b3e23dc141fd9e9b88e108687bf96
diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index 66d29a7..72e9e0f 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -32,7 +32,7 @@
 import com.android.dialer.calllog.datasources.CallLogDataSource;
 import com.android.dialer.calllog.datasources.CallLogMutations;
 import com.android.dialer.calllog.datasources.util.RowCombiner;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.NumberAttributesBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -598,6 +598,6 @@
   private void updateContentValues(ContentValues contentValues, PhoneLookupInfo phoneLookupInfo) {
     contentValues.put(
         AnnotatedCallLog.NUMBER_ATTRIBUTES,
-        NumberAttributesConverter.fromPhoneLookupInfo(phoneLookupInfo).build().toByteArray());
+        NumberAttributesBuilder.fromPhoneLookupInfo(phoneLookupInfo).build().toByteArray());
   }
 }
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
index fccd8b9..357c623 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
@@ -21,7 +21,6 @@
 import android.provider.CallLog.Calls;
 import android.support.annotation.ColorInt;
 import android.support.annotation.DrawableRes;
-import android.support.v4.os.BuildCompat;
 import android.support.v7.widget.RecyclerView;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
@@ -35,8 +34,8 @@
 import com.android.dialer.calllog.ui.menu.NewCallLogMenu;
 import com.android.dialer.calllogutils.CallLogEntryText;
 import com.android.dialer.calllogutils.CallLogRowActions;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
 import com.android.dialer.calllogutils.PhoneAccountUtils;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.compat.AppCompatConstants;
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
@@ -162,15 +161,7 @@
   }
 
   private void setPhoto(CoalescedRow row) {
-    contactPhotoView.setPhoto(
-        NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
-            .setFormattedNumber(row.getFormattedNumber())
-            .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
-            .setIsRtt(
-                BuildCompat.isAtLeastP()
-                    && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
-            .setIsVoicemail(row.getIsVoicemailCall())
-            .build());
+    contactPhotoView.setPhoto(PhotoInfoBuilder.fromCoalescedRow(row).build());
   }
 
   private void setFeatureIcons(CoalescedRow row) {
diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
index c5148d9..df5270d 100644
--- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
+++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java
@@ -24,7 +24,7 @@
 import android.util.ArrayMap;
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.calllog.model.CoalescedRow;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.NumberAttributesBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
@@ -203,7 +203,7 @@
     // TODO(linyuh): Improve the comparison instead.
     return row.toBuilder()
         .setNumberAttributes(
-            NumberAttributesConverter.fromPhoneLookupInfo(phoneLookupInfo)
+            NumberAttributesBuilder.fromPhoneLookupInfo(phoneLookupInfo)
                 .setIsCp2InfoIncomplete(row.getNumberAttributes().getIsCp2InfoIncomplete())
                 .build())
         .build();
diff --git a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
index 4e25ced..25ae476 100644
--- a/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
+++ b/java/com/android/dialer/calllog/ui/menu/BottomSheetHeader.java
@@ -17,11 +17,9 @@
 package com.android.dialer.calllog.ui.menu;
 
 import android.content.Context;
-import android.provider.CallLog.Calls;
-import android.support.v4.os.BuildCompat;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllogutils.CallLogEntryText;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.historyitemactions.HistoryItemBottomSheetHeaderInfo;
 
 /** Configures the top row in the bottom sheet. */
@@ -30,15 +28,7 @@
   static HistoryItemBottomSheetHeaderInfo fromRow(Context context, CoalescedRow row) {
     return HistoryItemBottomSheetHeaderInfo.newBuilder()
         .setNumber(row.getNumber())
-        .setPhotoInfo(
-            NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
-                .setFormattedNumber(row.getFormattedNumber())
-                .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
-                .setIsVoicemail(row.getIsVoicemailCall())
-                .setIsRtt(
-                    BuildCompat.isAtLeastP()
-                        && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
-                .build())
+        .setPhotoInfo(PhotoInfoBuilder.fromCoalescedRow(row))
         .setPrimaryText(CallLogEntryText.buildPrimaryText(context, row).toString())
         .setSecondaryText(
             CallLogEntryText.buildSecondaryTextForBottomSheet(context, row).toString())
diff --git a/java/com/android/dialer/calllog/ui/menu/Modules.java b/java/com/android/dialer/calllog/ui/menu/Modules.java
index cfeca10..ded4958 100644
--- a/java/com/android/dialer/calllog/ui/menu/Modules.java
+++ b/java/com/android/dialer/calllog/ui/menu/Modules.java
@@ -17,15 +17,12 @@
 package com.android.dialer.calllog.ui.menu;
 
 import android.content.Context;
-import android.provider.CallLog.Calls;
-import android.support.v4.os.BuildCompat;
 import android.text.TextUtils;
 import com.android.dialer.calldetails.CallDetailsActivity;
 import com.android.dialer.calldetails.CallDetailsHeaderInfo;
 import com.android.dialer.calllog.model.CoalescedRow;
 import com.android.dialer.calllogutils.CallLogEntryText;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
-import com.android.dialer.glidephotomanager.PhotoInfo;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.historyitemactions.HistoryItemActionModule;
 import com.android.dialer.historyitemactions.HistoryItemActionModuleInfo;
 import com.android.dialer.historyitemactions.HistoryItemActionModulesBuilder;
@@ -91,24 +88,13 @@
       Context context, CoalescedRow row) {
     return CallDetailsHeaderInfo.newBuilder()
         .setDialerPhoneNumber(row.getNumber())
-        .setPhotoInfo(createPhotoInfoFromRow(row))
+        .setPhotoInfo(PhotoInfoBuilder.fromCoalescedRow(row))
         .setPrimaryText(CallLogEntryText.buildPrimaryText(context, row).toString())
         .setSecondaryText(
             CallLogEntryText.buildSecondaryTextForBottomSheet(context, row).toString())
         .build();
   }
 
-  private static PhotoInfo createPhotoInfoFromRow(CoalescedRow row) {
-    return NumberAttributesConverter.toPhotoInfoBuilder(row.getNumberAttributes())
-        .setFormattedNumber(row.getFormattedNumber())
-        .setIsVideo((row.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
-        .setIsRtt(
-            BuildCompat.isAtLeastP()
-                && (row.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT)
-        .setIsVoicemail(row.getIsVoicemailCall())
-        .build();
-  }
-
   private static boolean canSupportAssistedDialing(CoalescedRow row) {
     return !TextUtils.isEmpty(row.getNumberAttributes().getLookupUri());
   }
diff --git a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java b/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
similarity index 74%
rename from java/com/android/dialer/calllogutils/NumberAttributesConverter.java
rename to java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
index 8081c4b..015d59f 100644
--- a/java/com/android/dialer/calllogutils/NumberAttributesConverter.java
+++ b/java/com/android/dialer/calllogutils/NumberAttributesBuilder.java
@@ -18,26 +18,13 @@
 
 import android.text.TextUtils;
 import com.android.dialer.NumberAttributes;
-import com.android.dialer.glidephotomanager.PhotoInfo;
 import com.android.dialer.phonelookup.PhoneLookupInfo;
 import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator;
 
-/** Converts {@link NumberAttributes} to {@link PhotoInfo} */
-public final class NumberAttributesConverter {
+/** Builds {@link NumberAttributes} from other data types. */
+public final class NumberAttributesBuilder {
 
-  /** Converts {@link NumberAttributes} to {@link PhotoInfo.Builder} */
-  public static PhotoInfo.Builder toPhotoInfoBuilder(NumberAttributes numberAttributes) {
-    return PhotoInfo.newBuilder()
-        .setName(numberAttributes.getName())
-        .setPhotoUri(numberAttributes.getPhotoUri())
-        .setPhotoId(numberAttributes.getPhotoId())
-        .setLookupUri(numberAttributes.getLookupUri())
-        .setIsBusiness(numberAttributes.getIsBusiness())
-        .setIsSpam(numberAttributes.getIsSpam())
-        .setIsBlocked(numberAttributes.getIsBlocked());
-  }
-
-  /** Converts {@link PhoneLookupInfo} to {@link NumberAttributes.Builder} */
+  /** Returns a {@link NumberAttributes.Builder} with info from {@link PhoneLookupInfo}. */
   public static NumberAttributes.Builder fromPhoneLookupInfo(PhoneLookupInfo phoneLookupInfo) {
     PhoneLookupInfoConsolidator phoneLookupInfoConsolidator =
         new PhoneLookupInfoConsolidator(phoneLookupInfo);
diff --git a/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java b/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
new file mode 100644
index 0000000..8d193bf
--- /dev/null
+++ b/java/com/android/dialer/calllogutils/PhotoInfoBuilder.java
@@ -0,0 +1,57 @@
+/*
+ * 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.calllogutils;
+
+import android.provider.CallLog.Calls;
+import android.support.v4.os.BuildCompat;
+import com.android.dialer.NumberAttributes;
+import com.android.dialer.calllog.model.CoalescedRow;
+import com.android.dialer.glidephotomanager.PhotoInfo;
+import com.android.dialer.voicemail.model.VoicemailEntry;
+
+/** Builds {@link PhotoInfo} from other data types. */
+public final class PhotoInfoBuilder {
+
+  /** Returns a {@link PhotoInfo.Builder} with info from {@link CoalescedRow}. */
+  public static PhotoInfo.Builder fromCoalescedRow(CoalescedRow coalescedRow) {
+    return fromNumberAttributes(coalescedRow.getNumberAttributes())
+        .setFormattedNumber(coalescedRow.getFormattedNumber())
+        .setIsVoicemail(coalescedRow.getIsVoicemailCall())
+        .setIsVideo((coalescedRow.getFeatures() & Calls.FEATURES_VIDEO) == Calls.FEATURES_VIDEO)
+        .setIsRtt(
+            BuildCompat.isAtLeastP()
+                && (coalescedRow.getFeatures() & Calls.FEATURES_RTT) == Calls.FEATURES_RTT);
+  }
+
+  /** Returns a {@link PhotoInfo.Builder} with info from {@link VoicemailEntry}. */
+  public static PhotoInfo.Builder fromVoicemailEntry(VoicemailEntry voicemailEntry) {
+    return fromNumberAttributes(voicemailEntry.getNumberAttributes())
+        .setFormattedNumber(voicemailEntry.getFormattedNumber());
+  }
+
+  /** Returns a {@link PhotoInfo.Builder} with info from {@link NumberAttributes}. */
+  private static PhotoInfo.Builder fromNumberAttributes(NumberAttributes numberAttributes) {
+    return PhotoInfo.newBuilder()
+        .setName(numberAttributes.getName())
+        .setPhotoUri(numberAttributes.getPhotoUri())
+        .setPhotoId(numberAttributes.getPhotoId())
+        .setLookupUri(numberAttributes.getLookupUri())
+        .setIsBusiness(numberAttributes.getIsBusiness())
+        .setIsBlocked(numberAttributes.getIsBlocked())
+        .setIsSpam(numberAttributes.getIsSpam());
+  }
+}
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
index c001c00..ba851eb 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
@@ -36,7 +36,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener;
@@ -147,7 +147,8 @@
     menuButton.setOnClickListener(
         NewVoicemailMenu.createOnClickListener(context, voicemailEntryOfViewHolder));
 
-    setPhoto(voicemailEntryOfViewHolder);
+    contactPhotoView.setPhoto(
+        PhotoInfoBuilder.fromVoicemailEntry(voicemailEntryOfViewHolder).build());
 
     // Update the expanded/collapsed state of this view holder
     // Only update the binding of the mediaPlayerView of the expanded view holder
@@ -206,13 +207,6 @@
     }
   }
 
-  private void setPhoto(VoicemailEntry voicemailEntry) {
-    contactPhotoView.setPhoto(
-        NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.getNumberAttributes())
-            .setFormattedNumber(voicemailEntry.getFormattedNumber())
-            .build());
-  }
-
   void collapseViewHolder() {
     LogUtil.i(
         "NewVoicemailViewHolder.collapseViewHolder",
diff --git a/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java b/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java
index bf86278..deca7bd 100644
--- a/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java
+++ b/java/com/android/dialer/voicemail/listui/menu/BottomSheetHeader.java
@@ -17,7 +17,7 @@
 package com.android.dialer.voicemail.listui.menu;
 
 import android.text.TextUtils;
-import com.android.dialer.calllogutils.NumberAttributesConverter;
+import com.android.dialer.calllogutils.PhotoInfoBuilder;
 import com.android.dialer.historyitemactions.HistoryItemBottomSheetHeaderInfo;
 import com.android.dialer.voicemail.model.VoicemailEntry;
 
@@ -27,10 +27,7 @@
   static HistoryItemBottomSheetHeaderInfo fromVoicemailEntry(VoicemailEntry voicemailEntry) {
     return HistoryItemBottomSheetHeaderInfo.newBuilder()
         .setNumber(voicemailEntry.getNumber())
-        .setPhotoInfo(
-            NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.getNumberAttributes())
-                .setFormattedNumber(voicemailEntry.getFormattedNumber())
-                .build())
+        .setPhotoInfo(PhotoInfoBuilder.fromVoicemailEntry(voicemailEntry))
         .setPrimaryText(buildPrimaryVoicemailText(voicemailEntry))
         .setSecondaryText(buildSecondaryVoicemailText(voicemailEntry))
         .build();