diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
index 5eeb0fb..64f63d9 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
@@ -92,7 +92,7 @@
 
   private final FragmentManager fragmentManager;
   /** A valid id for {@link VoicemailEntry} is greater than 0 */
-  private int currentlyExpandedViewHolderId = -1;
+  private long currentlyExpandedViewHolderId = -1;
 
   private VoicemailErrorMessage voicemailErrorMessage;
 
@@ -114,7 +114,7 @@
    * will always ensure there is only (up-to-date) view holder corresponding to a view holder id,
    * unlike the newVoicemailViewHolderSet.
    */
-  private final ArrayMap<Integer, NewVoicemailViewHolder> newVoicemailViewHolderArrayMap =
+  private final ArrayMap<Long, NewVoicemailViewHolder> newVoicemailViewHolderArrayMap =
       new ArrayMap<>();
 
   // A single instance of a media player re-used across the expanded view holders.
@@ -440,7 +440,7 @@
 
     if (!newVoicemailViewHolderArrayMap.isEmpty()) {
       String ids = "";
-      for (int id : newVoicemailViewHolderArrayMap.keySet()) {
+      for (long id : newVoicemailViewHolderArrayMap.keySet()) {
         ids = ids + id + " ";
       }
       LogUtil.i("NewVoicemailAdapter.printArrayMap", "ids are " + ids);
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java b/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java
index 52f3d0a..f821f4f 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java
@@ -154,11 +154,11 @@
       NewVoicemailViewHolderListener listener) {
 
     Assert.isNotNull(voicemailEntryFromAdapter);
-    Uri uri = Uri.parse(voicemailEntryFromAdapter.voicemailUri());
+    Uri uri = Uri.parse(voicemailEntryFromAdapter.getVoicemailUri());
 
-    numberVoicemailFrom = voicemailEntryFromAdapter.number().getNormalizedNumber();
-    phoneAccountId = voicemailEntryFromAdapter.phoneAccountId();
-    phoneAccountComponentName = voicemailEntryFromAdapter.phoneAccountComponentName();
+    numberVoicemailFrom = voicemailEntryFromAdapter.getNumber().getNormalizedNumber();
+    phoneAccountId = voicemailEntryFromAdapter.getPhoneAccountId();
+    phoneAccountComponentName = voicemailEntryFromAdapter.getPhoneAccountComponentName();
 
     Assert.isNotNull(viewHolder);
     Assert.isNotNull(uri);
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
index 1f85784..d42c255 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailViewHolder.java
@@ -45,7 +45,6 @@
 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;
@@ -64,7 +63,7 @@
   private final ImageView menuButton;
   private final Clock clock;
   private boolean isViewHolderExpanded;
-  private int viewHolderId;
+  private long viewHolderId;
   private VoicemailEntry voicemailEntryOfViewHolder;
   @NonNull private Uri viewHolderVoicemailUri;
   private final NewVoicemailViewHolderListener voicemailViewHolderListener;
@@ -117,7 +116,7 @@
       FragmentManager fragmentManager,
       NewVoicemailMediaPlayer mediaPlayer,
       int position,
-      int currentlyExpandedViewHolderId) {
+      long currentlyExpandedViewHolderId) {
 
     LogUtil.i(
         "NewVoicemailViewHolder.bindViewHolderValuesFromAdapter",
@@ -128,16 +127,16 @@
         cursor.getCount());
 
     voicemailEntryOfViewHolder = VoicemailCursorLoader.toVoicemailEntry(cursor);
-    viewHolderId = voicemailEntryOfViewHolder.id();
+    viewHolderId = voicemailEntryOfViewHolder.getId();
     LogUtil.i(
         "NewVoicemailViewHolder.bindViewHolderValuesFromAdapter", "viewholderId:%d", viewHolderId);
-    viewHolderVoicemailUri = Uri.parse(voicemailEntryOfViewHolder.voicemailUri());
+    viewHolderVoicemailUri = Uri.parse(voicemailEntryOfViewHolder.getVoicemailUri());
     primaryTextView.setText(
         VoicemailEntryText.buildPrimaryVoicemailText(context, voicemailEntryOfViewHolder));
     secondaryTextView.setText(
         VoicemailEntryText.buildSecondaryVoicemailText(context, clock, voicemailEntryOfViewHolder));
 
-    String voicemailTranscription = voicemailEntryOfViewHolder.transcription();
+    String voicemailTranscription = voicemailEntryOfViewHolder.getTranscription();
 
     if (TextUtils.isEmpty(voicemailTranscription)) {
       transcriptionTextView.setVisibility(GONE);
@@ -204,10 +203,10 @@
     LogUtil.v(
         "NewVoicemailViewHolder.boldViewHolderIfUnread",
         "id:%d, isRead:%d",
-        voicemailEntryOfViewHolder.id(),
-        voicemailEntryOfViewHolder.isRead());
+        voicemailEntryOfViewHolder.getId(),
+        voicemailEntryOfViewHolder.getIsRead());
 
-    if (voicemailEntryOfViewHolder.isRead() == 0) {
+    if (voicemailEntryOfViewHolder.getIsRead() == 0) {
       primaryTextView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
       secondaryTextView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
       transcriptionTextView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
@@ -215,13 +214,11 @@
   }
 
   private void setPhoto(VoicemailEntry voicemailEntry) {
-    PhotoInfo.Builder photoInfoBuilder =
-        NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.numberAttributes());
-    if (!TextUtils.isEmpty(voicemailEntry.formattedNumber())) {
-      photoInfoBuilder.setFormattedNumber(voicemailEntry.formattedNumber());
-    }
-
-    glidePhotoManager.loadQuickContactBadge(quickContactBadge, photoInfoBuilder.build());
+    glidePhotoManager.loadQuickContactBadge(
+        quickContactBadge,
+        NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.getNumberAttributes())
+            .setFormattedNumber(voicemailEntry.getFormattedNumber())
+            .build());
   }
 
   void collapseViewHolder() {
@@ -293,9 +290,9 @@
 
     Assert.isNotNull(voicemailViewHolderListener);
     Assert.checkArgument(
-        voicemailEntry.id() == viewHolderId, "ensure that the adapter binding has taken place");
+        voicemailEntry.getId() == viewHolderId, "ensure that the adapter binding has taken place");
     Assert.checkArgument(
-        Uri.parse(voicemailEntry.voicemailUri()).equals(viewHolderVoicemailUri),
+        Uri.parse(voicemailEntry.getVoicemailUri()).equals(viewHolderVoicemailUri),
         "ensure that the adapter binding has taken place");
     LogUtil.i(
         "NewVoicemailViewHolder.expandAndBindViewHolderAndMediaPlayerViewWithAdapterValues",
@@ -305,15 +302,15 @@
         isViewHolderExpanded,
         String.valueOf(viewHolderVoicemailUri),
         String.valueOf(mediaPlayerView.getVoicemailUri()),
-        voicemailEntry.isRead());
+        voicemailEntry.getIsRead());
 
-    if (voicemailEntry.isRead() == 0) {
+    if (voicemailEntry.getIsRead() == 0) {
       // update as read.
       primaryTextView.setTypeface(Typeface.DEFAULT, Typeface.NORMAL);
       secondaryTextView.setTypeface(Typeface.DEFAULT, Typeface.NORMAL);
       transcriptionTextView.setTypeface(Typeface.DEFAULT, Typeface.NORMAL);
 
-      Uri uri = Uri.parse(voicemailEntry.voicemailUri());
+      Uri uri = Uri.parse(voicemailEntry.getVoicemailUri());
 
       Worker<Pair<Context, Uri>, Integer> markVoicemailRead = this::markVoicemailAsRead;
       SuccessListener<Integer> markedAsReadVoicemailCallBack = this::onVoicemailMarkedAsRead;
@@ -344,8 +341,8 @@
   }
 
   private void updateBrandingText(VoicemailEntry voicemailEntry) {
-    if (voicemailEntry.transcriptionState() == VoicemailCompat.TRANSCRIPTION_AVAILABLE
-        && !TextUtils.isEmpty(voicemailEntry.transcription())) {
+    if (voicemailEntry.getTranscriptionState() == VoicemailCompat.TRANSCRIPTION_AVAILABLE
+        && !TextUtils.isEmpty(voicemailEntry.getTranscription())) {
       transcriptionBrandingTextView.setVisibility(VISIBLE);
     } else {
       transcriptionBrandingTextView.setVisibility(GONE);
@@ -435,7 +432,7 @@
     return isViewHolderExpanded;
   }
 
-  public int getViewHolderId() {
+  public long getViewHolderId() {
     return viewHolderId;
   }
 
diff --git a/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java b/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
index 5f717cf..f242484 100644
--- a/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
+++ b/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
@@ -20,6 +20,7 @@
 import android.database.Cursor;
 import android.provider.CallLog.Calls;
 import android.support.v4.content.CursorLoader;
+import android.text.TextUtils;
 import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.NumberAttributes;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
@@ -99,22 +100,48 @@
         "CP2 info incomplete for number: %s",
         LogUtil.sanitizePii(number.getNormalizedNumber()));
 
-    return VoicemailEntry.builder()
-        .setId(cursor.getInt(ID))
-        .setTimestamp(cursor.getLong(TIMESTAMP))
-        .setNumber(number)
-        .setFormattedNumber(cursor.getString(FORMATTED_NUMBER))
-        .setDuration(cursor.getLong(DURATION))
-        .setTranscription(cursor.getString(TRANSCRIPTION))
-        .setVoicemailUri(cursor.getString(VOICEMAIL_URI))
-        .setGeocodedLocation(cursor.getString(GEOCODED_LOCATION))
-        .setCallType(cursor.getInt(CALL_TYPE))
-        .setIsRead(cursor.getInt(IS_READ))
-        .setNumberAttributes(numberAttributes)
-        .setTranscriptionState(cursor.getInt(TRANSCRIPTION_STATE))
-        .setPhoneAccountComponentName(cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME))
-        .setPhoneAccountId(cursor.getString(PHONE_ACCOUNT_ID))
-        .build();
+    VoicemailEntry.Builder voicemailEntryBuilder =
+        VoicemailEntry.newBuilder()
+            .setId(cursor.getInt(ID))
+            .setTimestamp(cursor.getLong(TIMESTAMP))
+            .setNumber(number)
+            .setDuration(cursor.getLong(DURATION))
+            .setCallType(cursor.getInt(CALL_TYPE))
+            .setIsRead(cursor.getInt(IS_READ))
+            .setNumberAttributes(numberAttributes)
+            .setTranscriptionState(cursor.getInt(TRANSCRIPTION_STATE));
+
+    String formattedNumber = cursor.getString(FORMATTED_NUMBER);
+    if (!TextUtils.isEmpty(formattedNumber)) {
+      voicemailEntryBuilder.setFormattedNumber(formattedNumber);
+    }
+
+    String geocodedLocation = cursor.getString(GEOCODED_LOCATION);
+    if (!TextUtils.isEmpty(geocodedLocation)) {
+      voicemailEntryBuilder.setGeocodedLocation(geocodedLocation);
+    }
+
+    String transcription = cursor.getString(TRANSCRIPTION);
+    if (!TextUtils.isEmpty(transcription)) {
+      voicemailEntryBuilder.setTranscription(transcription);
+    }
+
+    String voicemailUri = cursor.getString(VOICEMAIL_URI);
+    if (!TextUtils.isEmpty(voicemailUri)) {
+      voicemailEntryBuilder.setVoicemailUri(voicemailUri);
+    }
+
+    String phoneAccountComponentName = cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME);
+    if (!TextUtils.isEmpty(phoneAccountComponentName)) {
+      voicemailEntryBuilder.setPhoneAccountComponentName(phoneAccountComponentName);
+    }
+
+    String phoneAccountId = cursor.getString(PHONE_ACCOUNT_ID);
+    if (!TextUtils.isEmpty(phoneAccountId)) {
+      voicemailEntryBuilder.setPhoneAccountId(phoneAccountId);
+    }
+
+    return voicemailEntryBuilder.build();
   }
 
   static long getTimestamp(Cursor cursor) {
diff --git a/java/com/android/dialer/voicemail/listui/VoicemailEntryText.java b/java/com/android/dialer/voicemail/listui/VoicemailEntryText.java
index 4aaf2d1..973f9b1 100644
--- a/java/com/android/dialer/voicemail/listui/VoicemailEntryText.java
+++ b/java/com/android/dialer/voicemail/listui/VoicemailEntryText.java
@@ -33,10 +33,10 @@
 
   public static String buildPrimaryVoicemailText(Context context, VoicemailEntry data) {
     StringBuilder primaryText = new StringBuilder();
-    if (!TextUtils.isEmpty(data.numberAttributes().getName())) {
-      primaryText.append(data.numberAttributes().getName());
-    } else if (!TextUtils.isEmpty(data.formattedNumber())) {
-      primaryText.append(data.formattedNumber());
+    if (!TextUtils.isEmpty(data.getNumberAttributes().getName())) {
+      primaryText.append(data.getNumberAttributes().getName());
+    } else if (!TextUtils.isEmpty(data.getFormattedNumber())) {
+      primaryText.append(data.getFormattedNumber());
     } else {
       // TODO(uabdullah): Handle CallLog.Calls.PRESENTATION_*, including Verizon restricted numbers.
       primaryText.append(context.getText(R.string.voicemail_entry_unknown));
@@ -71,7 +71,7 @@
   private static String secondaryTextPrefix(
       Context context, Clock clock, VoicemailEntry voicemailEntry) {
     StringBuilder secondaryText = new StringBuilder();
-    String location = voicemailEntry.geocodedLocation();
+    String location = voicemailEntry.getGeocodedLocation();
     if (!TextUtils.isEmpty(location)) {
       secondaryText.append(location);
     }
@@ -80,9 +80,9 @@
     }
     secondaryText.append(
         CallLogDates.newCallLogTimestampLabel(
-            context, clock.currentTimeMillis(), voicemailEntry.timestamp()));
+            context, clock.currentTimeMillis(), voicemailEntry.getTimestamp()));
 
-    long duration = voicemailEntry.duration();
+    long duration = voicemailEntry.getDuration();
     if (duration >= 0) {
       secondaryText.append(" • ");
       String formattedDuration = getVoicemailDuration(context, voicemailEntry);
@@ -92,15 +92,17 @@
   }
 
   static String getVoicemailDuration(Context context, VoicemailEntry voicemailEntry) {
-    long minutes = TimeUnit.SECONDS.toMinutes(voicemailEntry.duration());
-    long seconds = voicemailEntry.duration() - TimeUnit.MINUTES.toSeconds(minutes);
+    long minutes = TimeUnit.SECONDS.toMinutes(voicemailEntry.getDuration());
+    long seconds = voicemailEntry.getDuration() - TimeUnit.MINUTES.toSeconds(minutes);
 
     // The format for duration is "MM:SS" and we never expect the duration to be > 5 minutes
     // However an incorrect duration could be set by the framework/someone to be >99, and in that
     // case cap it at 99, for the UI to still be able to display it in "MM:SS" format.
     if (minutes > 99) {
       LogUtil.w(
-          "VoicemailEntryText.getVoicemailDuration", "Duration was %d", voicemailEntry.duration());
+          "VoicemailEntryText.getVoicemailDuration",
+          "Duration was %d",
+          voicemailEntry.getDuration());
       minutes = 99;
     }
     return context.getString(R.string.voicemailDurationFormat, minutes, seconds);
diff --git a/java/com/android/dialer/voicemail/listui/menu/Modules.java b/java/com/android/dialer/voicemail/listui/menu/Modules.java
index c3c883c..226063c 100644
--- a/java/com/android/dialer/voicemail/listui/menu/Modules.java
+++ b/java/com/android/dialer/voicemail/listui/menu/Modules.java
@@ -43,11 +43,11 @@
     Optional<HistoryItemActionModule> moduleForAddingContacts =
         SharedModules.createModuleForAddingToContacts(
             context,
-            voicemailEntry.number(),
-            voicemailEntry.numberAttributes().getName(),
-            voicemailEntry.numberAttributes().getLookupUri(),
-            voicemailEntry.numberAttributes().getIsBlocked(),
-            voicemailEntry.numberAttributes().getIsSpam());
+            voicemailEntry.getNumber(),
+            voicemailEntry.getNumberAttributes().getName(),
+            voicemailEntry.getNumberAttributes().getLookupUri(),
+            voicemailEntry.getNumberAttributes().getIsBlocked(),
+            voicemailEntry.getNumberAttributes().getIsSpam());
     if (moduleForAddingContacts.isPresent()) {
       modules.add(moduleForAddingContacts.get());
     }
@@ -55,8 +55,8 @@
     Optional<HistoryItemActionModule> moduleForSendingTextMessage =
         SharedModules.createModuleForSendingTextMessage(
             context,
-            voicemailEntry.number().getNormalizedNumber(),
-            voicemailEntry.numberAttributes().getIsBlocked());
+            voicemailEntry.getNumber().getNormalizedNumber(),
+            voicemailEntry.getNumberAttributes().getIsBlocked());
     if (moduleForSendingTextMessage.isPresent()) {
       modules.add(moduleForSendingTextMessage.get());
     }
@@ -67,23 +67,23 @@
 
     BlockReportSpamDialogInfo blockReportSpamDialogInfo =
         BlockReportSpamDialogInfo.newBuilder()
-            .setNormalizedNumber(voicemailEntry.number().getNormalizedNumber())
-            .setCountryIso(voicemailEntry.number().getCountryIso())
-            .setCallType(voicemailEntry.callType())
+            .setNormalizedNumber(voicemailEntry.getNumber().getNormalizedNumber())
+            .setCountryIso(voicemailEntry.getNumber().getCountryIso())
+            .setCallType(voicemailEntry.getCallType())
             .setReportingLocation(ReportingLocation.Type.VOICEMAIL_HISTORY)
-            .setContactSource(voicemailEntry.numberAttributes().getContactSource())
+            .setContactSource(voicemailEntry.getNumberAttributes().getContactSource())
             .build();
     modules.addAll(
         SharedModules.createModulesHandlingBlockedOrSpamNumber(
             context,
             blockReportSpamDialogInfo,
-            voicemailEntry.numberAttributes().getIsBlocked(),
-            voicemailEntry.numberAttributes().getIsSpam()));
+            voicemailEntry.getNumberAttributes().getIsBlocked(),
+            voicemailEntry.getNumberAttributes().getIsSpam()));
 
     // TODO(zachh): Module for CallComposer.
     Optional<HistoryItemActionModule> moduleForCopyingNumber =
         SharedModules.createModuleForCopyingNumber(
-            context, voicemailEntry.number().getNormalizedNumber());
+            context, voicemailEntry.getNumber().getNormalizedNumber());
     if (moduleForCopyingNumber.isPresent()) {
       modules.add(moduleForCopyingNumber.get());
     }
diff --git a/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java b/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java
index dbc417c..14c8356 100644
--- a/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java
+++ b/java/com/android/dialer/voicemail/listui/menu/PrimaryAction.java
@@ -19,7 +19,6 @@
 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;
 
@@ -34,30 +33,27 @@
   // 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(photoInfoBuilder.build())
+        .setNumber(voicemailEntry.getNumber())
+        .setPhotoInfo(
+            NumberAttributesConverter.toPhotoInfoBuilder(voicemailEntry.getNumberAttributes())
+                .setFormattedNumber(voicemailEntry.getFormattedNumber())
+                .build())
         .setPrimaryText(buildPrimaryVoicemailText(context, voicemailEntry))
         .setSecondaryText(buildSecondaryVoicemailText(voicemailEntry))
         .build();
   }
 
   private static CharSequence buildSecondaryVoicemailText(VoicemailEntry voicemailEntry) {
-    return voicemailEntry.geocodedLocation();
+    return voicemailEntry.getGeocodedLocation();
   }
 
   public static String buildPrimaryVoicemailText(Context context, VoicemailEntry data) {
     StringBuilder primaryText = new StringBuilder();
-    if (!TextUtils.isEmpty(data.numberAttributes().getName())) {
-      primaryText.append(data.numberAttributes().getName());
-    } else if (!TextUtils.isEmpty(data.formattedNumber())) {
-      primaryText.append(data.formattedNumber());
+    if (!TextUtils.isEmpty(data.getNumberAttributes().getName())) {
+      primaryText.append(data.getNumberAttributes().getName());
+    } else if (!TextUtils.isEmpty(data.getFormattedNumber())) {
+      primaryText.append(data.getFormattedNumber());
     } else {
       // TODO(uabdullah): Handle CallLog.Calls.PRESENTATION_*, including Verizon restricted numbers.
       // primaryText.append(context.getText(R.string.voicemail_unknown));
diff --git a/java/com/android/dialer/voicemail/model/VoicemailEntry.java b/java/com/android/dialer/voicemail/model/VoicemailEntry.java
deleted file mode 100644
index 2f554b1..0000000
--- a/java/com/android/dialer/voicemail/model/VoicemailEntry.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2017 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.voicemail.model;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import com.android.dialer.DialerPhoneNumber;
-import com.android.dialer.NumberAttributes;
-import com.android.dialer.compat.android.provider.VoicemailCompat;
-import com.google.auto.value.AutoValue;
-
-/** Data class containing the contents of a voicemail entry from the AnnotatedCallLog. */
-@AutoValue
-public abstract class VoicemailEntry {
-
-  public static Builder builder() {
-    return new AutoValue_VoicemailEntry.Builder()
-        .setId(0)
-        .setTimestamp(0)
-        .setNumber(DialerPhoneNumber.getDefaultInstance())
-        .setNumberAttributes(NumberAttributes.getDefaultInstance())
-        .setDuration(0)
-        .setCallType(0)
-        .setIsRead(0)
-        .setTranscriptionState(VoicemailCompat.TRANSCRIPTION_NOT_STARTED);
-  }
-
-  public abstract int id();
-
-  public abstract long timestamp();
-
-  @NonNull
-  public abstract DialerPhoneNumber number();
-
-  @Nullable
-  public abstract String formattedNumber();
-
-  @Nullable
-  public abstract String geocodedLocation();
-
-  public abstract long duration();
-
-  @Nullable
-  public abstract String transcription();
-
-  @Nullable
-  public abstract String voicemailUri();
-
-  public abstract int callType();
-
-  public abstract int isRead();
-
-  public abstract NumberAttributes numberAttributes();
-
-  public abstract int transcriptionState();
-
-  @Nullable
-  public abstract String phoneAccountComponentName();
-
-  @Nullable
-  public abstract String phoneAccountId();
-
-  /** Builder for {@link VoicemailEntry}. */
-  @AutoValue.Builder
-  public abstract static class Builder {
-
-    public abstract Builder setId(int id);
-
-    public abstract Builder setTimestamp(long timestamp);
-
-    public abstract Builder setNumber(@NonNull DialerPhoneNumber number);
-
-    public abstract Builder setFormattedNumber(@Nullable String formattedNumber);
-
-    public abstract Builder setDuration(long duration);
-
-    public abstract Builder setTranscription(@Nullable String transcription);
-
-    public abstract Builder setVoicemailUri(@Nullable String voicemailUri);
-
-    public abstract Builder setGeocodedLocation(@Nullable String geocodedLocation);
-
-    public abstract Builder setCallType(int callType);
-
-    public abstract Builder setIsRead(int isRead);
-
-    public abstract Builder setNumberAttributes(NumberAttributes numberAttributes);
-
-    public abstract Builder setTranscriptionState(int transcriptionState);
-
-    public abstract Builder setPhoneAccountComponentName(
-        @Nullable String phoneAccountComponentName);
-
-    public abstract Builder setPhoneAccountId(@Nullable String phoneAccountId);
-
-    public abstract VoicemailEntry build();
-  }
-}
diff --git a/java/com/android/dialer/voicemail/model/voicemail_entry.proto b/java/com/android/dialer/voicemail/model/voicemail_entry.proto
new file mode 100644
index 0000000..c9ca352
--- /dev/null
+++ b/java/com/android/dialer/voicemail/model/voicemail_entry.proto
@@ -0,0 +1,56 @@
+syntax = "proto2";
+
+option java_package = "com.android.dialer.voicemail.model";
+option java_multiple_files = true;
+option optimize_for = LITE_RUNTIME;
+
+
+package com.android.dialer.voicemail.model;
+
+import "java/com/android/dialer/calllog/database/contract/number_attributes.proto";
+import "java/com/android/dialer/phonenumberproto/dialer_phone_number.proto";
+
+// Contains contents of a voicemail entry from the AnnotatedCallLog.
+message VoicemailEntry {
+  // Value in column AnnotatedCallLog._ID
+  optional int64 id = 1;
+
+  // Value in column AnnotatedCallLog.TIMESTAMP
+  optional int64 timestamp = 2;
+
+  // Value in column AnnotatedCallLog.NUMBER
+  optional com.android.dialer.DialerPhoneNumber number = 3;
+
+  // Value in column AnnotatedCallLog.FORMATTED_NUMBER
+  optional string formatted_number = 4;
+
+  // Value in column AnnotatedCallLog.GEOCODED_LOCATION
+  optional string geocoded_location = 5;
+
+  // Value in column AnnotatedCallLog.DURATION
+  optional int64 duration = 6;
+
+  // Value in column AnnotatedCallLog.TRANSCRIPTION
+  optional string transcription = 7;
+
+  // Value in column AnnotatedCallLog.VOICEMAIL_URI
+  optional string voicemail_uri = 8;
+
+  // Value in column AnnotatedCallLog.CALL_TYPE
+  optional int32 call_type = 9;
+
+  // Value in column AnnotatedCallLog.IS_READ
+  optional int32 is_read = 10;
+
+  // Value in column AnnotatedCallLog.NUMBER_ATTRIBUTES
+  optional com.android.dialer.NumberAttributes number_attributes = 11;
+
+  // Value in column AnnotatedCallLog.TRANSCRIPTION_STATE
+  optional int32 transcription_state = 12;
+
+  // Value in column AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME
+  optional string phone_account_component_name = 13;
+
+  // Value in column AnnotatedCallLog.PHONE_ACCOUNT_ID
+  optional string phone_account_id = 14;
+}
