Use Calls.CACHED_FORMATTED_NUMBER in new call log.

I debated re-implementing formatting but I'm assuming that the "cached" columns need to continue to be populated (via our legacy code or as part of NUI, TBD). If that's the case, reading them to display the new call log seems to be the right thing to do.

Bug: 34672501
Test: yes
PiperOrigin-RevId: 166553457
Change-Id: I0e53d2be0809b5a0bc5a82b32cdd2a598880637e
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index 507a51a..78c329a 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -39,6 +39,7 @@
           .append(AnnotatedCallLog._ID + " integer primary key, ")
           .append(AnnotatedCallLog.TIMESTAMP + " integer, ")
           .append(AnnotatedCallLog.NAME + " string, ")
+          .append(AnnotatedCallLog.FORMATTED_NUMBER + " string, ")
           .append(AnnotatedCallLog.NEW + " integer, ")
           .append(AnnotatedCallLog.TYPE + " integer, ")
           .append(AnnotatedCallLog.CONTACT_PHOTO_URI + " string, ")
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index c669bda..be891c5 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -53,6 +53,13 @@
     String NAME = "name";
 
     /**
+     * Copied from {@link android.provider.CallLog.Calls#CACHED_FORMATTED_NUMBER}.
+     *
+     * <p>Type: TEXT
+     */
+    String FORMATTED_NUMBER = "formatted_number";
+
+    /**
      * Local photo URI for the contact associated with the phone number, if it exists.
      *
      * <p>Photos currently only come from local contacts database and not caller ID sources. If
@@ -136,6 +143,7 @@
           _ID,
           TIMESTAMP,
           NAME,
+          FORMATTED_NUMBER,
           CONTACT_PHOTO_URI,
           NUMBER_TYPE_LABEL,
           IS_READ,
@@ -213,14 +221,6 @@
     public static final String NUMBER_CALLS = "number_calls";
 
     /**
-     * The phone number formatted in a way suitable for display to the user. This value is generated
-     * on the fly when the {@link CoalescedAnnotatedCallLog} is generated.
-     *
-     * <p>Type: TEXT
-     */
-    public static final String FORMATTED_NUMBER = "formatted_number";
-
-    /**
      * The call types of the most recent 3 calls, encoded as a CallTypes proto.
      *
      * <p>TYPE: BLOB
@@ -232,7 +232,7 @@
      * AnnotatedCallLog}.
      */
     private static final String[] COLUMNS_ONLY_IN_COALESCED_CALL_LOG =
-        new String[] {NUMBER_CALLS, FORMATTED_NUMBER, CALL_TYPES};
+        new String[] {NUMBER_CALLS, CALL_TYPES};
 
     /** All columns in the {@link CoalescedAnnotatedCallLog}. */
     public static final String[] ALL_COLUMNS =
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 7bf2972..e4af417 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -38,7 +38,6 @@
 import android.text.TextUtils;
 import android.util.ArraySet;
 import com.android.dialer.CallTypes;
-import com.android.dialer.DialerPhoneNumber;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.CoalescedAnnotatedCallLog;
 import com.android.dialer.calllog.datasources.CallLogDataSource;
@@ -52,7 +51,6 @@
 import com.android.dialer.theme.R;
 import com.android.dialer.util.PermissionsUtil;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.protobuf.InvalidProtocolBufferException;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
@@ -160,18 +158,9 @@
             .useMostRecentLong(AnnotatedCallLog.NEW)
             .useMostRecentString(AnnotatedCallLog.NUMBER_TYPE_LABEL)
             .useMostRecentString(AnnotatedCallLog.GEOCODED_LOCATION)
+            .useMostRecentString(AnnotatedCallLog.FORMATTED_NUMBER)
             .combine();
 
-    // All phone numbers in the provided group should be equivalent (but could be formatted
-    // differently). Arbitrarily show the raw phone number of the most recent call.
-    DialerPhoneNumber mostRecentPhoneNumber =
-        getMostRecentPhoneNumber(individualRowsSortedByTimestampDesc);
-    if (mostRecentPhoneNumber != null) {
-      coalescedValues.put(
-          CoalescedAnnotatedCallLog.FORMATTED_NUMBER,
-          mostRecentPhoneNumber.getRawInput().getNumber());
-    }
-
     CallTypes.Builder callTypes = CallTypes.newBuilder();
     // Store a maximum of 3 call types since that's all we show to users via icons.
     for (int i = 0; i < 3 && i < individualRowsSortedByTimestampDesc.size(); i++) {
@@ -183,23 +172,6 @@
     return coalescedValues;
   }
 
-  @Nullable
-  private static DialerPhoneNumber getMostRecentPhoneNumber(
-      List<ContentValues> individualRowsSortedByTimestampDesc) {
-    byte[] protoBytes =
-        individualRowsSortedByTimestampDesc.get(0).getAsByteArray(AnnotatedCallLog.NUMBER);
-    if (protoBytes == null) {
-      return null;
-    }
-    DialerPhoneNumber dialerPhoneNumber;
-    try {
-      dialerPhoneNumber = DialerPhoneNumber.parseFrom(protoBytes);
-    } catch (InvalidProtocolBufferException e) {
-      throw Assert.createAssertionFailException("couldn't parse DialerPhoneNumber", e);
-    }
-    return dialerPhoneNumber;
-  }
-
   @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
   private void handleInsertsAndUpdates(
       Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) {
@@ -223,6 +195,7 @@
                   Calls.NUMBER,
                   Calls.TYPE,
                   Calls.COUNTRY_ISO,
+                  Calls.CACHED_FORMATTED_NUMBER,
                   Calls.CACHED_NUMBER_TYPE,
                   Calls.CACHED_NUMBER_LABEL,
                   Calls.IS_READ,
@@ -253,6 +226,8 @@
         int numberColumn = cursor.getColumnIndexOrThrow(Calls.NUMBER);
         int typeColumn = cursor.getColumnIndexOrThrow(Calls.TYPE);
         int countryIsoColumn = cursor.getColumnIndexOrThrow(Calls.COUNTRY_ISO);
+        int cachedFormattedNumberColumn =
+            cursor.getColumnIndexOrThrow(Calls.CACHED_FORMATTED_NUMBER);
         int cachedNumberTypeColumn = cursor.getColumnIndexOrThrow(Calls.CACHED_NUMBER_TYPE);
         int cachedNumberLabelColumn = cursor.getColumnIndexOrThrow(Calls.CACHED_NUMBER_LABEL);
         int isReadColumn = cursor.getColumnIndexOrThrow(Calls.IS_READ);
@@ -272,7 +247,7 @@
           String numberAsStr = cursor.getString(numberColumn);
           long type = cursor.getType(typeColumn);
           String countryIso = cursor.getString(countryIsoColumn);
-          // TODO(zachh): Decide if should use "cached" columns from call log or recompute.
+          String formattedNumber = cursor.getString(cachedFormattedNumberColumn);
           int cachedNumberType = cursor.getInt(cachedNumberTypeColumn);
           String cachedNumberLabel = cursor.getString(cachedNumberLabelColumn);
           int isRead = cursor.getInt(isReadColumn);
@@ -293,6 +268,7 @@
           }
 
           contentValues.put(AnnotatedCallLog.TYPE, type);
+          contentValues.put(AnnotatedCallLog.FORMATTED_NUMBER, formattedNumber);
 
           // Phone.getTypeLabel returns "Custom" if given (0, null) which is not of any use. Just
           // omit setting the label if there's no information for it.
diff --git a/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java b/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
index 6545916..488e8f4 100644
--- a/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
+++ b/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
@@ -31,18 +31,18 @@
 
   private static final int TIMESTAMP = 1;
   private static final int NAME = 2;
-  private static final int CONTACT_PHOTO_URI = 3;
-  private static final int NUMBER_TYPE_LABEL = 4;
-  private static final int IS_READ = 5;
-  private static final int NEW = 6;
-  private static final int GEOCODED_LOCATION = 7;
-  private static final int PHONE_ACCOUNT_LABEL = 8;
-  private static final int PHONE_ACCOUNT_COLOR = 9;
-  private static final int FEATURES = 10;
-  private static final int IS_BUSINESS = 11;
-  private static final int IS_VOICEMAIL = 12;
-  private static final int NUMBER_CALLS = 13;
-  private static final int FORMATTED_NUMBER = 14;
+  private static final int FORMATTED_NUMBER = 3;
+  private static final int CONTACT_PHOTO_URI = 4;
+  private static final int NUMBER_TYPE_LABEL = 5;
+  private static final int IS_READ = 6;
+  private static final int NEW = 7;
+  private static final int GEOCODED_LOCATION = 8;
+  private static final int PHONE_ACCOUNT_LABEL = 9;
+  private static final int PHONE_ACCOUNT_COLOR = 10;
+  private static final int FEATURES = 11;
+  private static final int IS_BUSINESS = 12;
+  private static final int IS_VOICEMAIL = 13;
+  private static final int NUMBER_CALLS = 14;
   private static final int CALL_TYPES = 15;
 
   /** Convenience class for accessing values using an abbreviated syntax. */