Handles special numbers in call details page.

Some numbers (unknown, private, payphones, and voicemails) should be
shown using text instead of the row number strings.

Change-Id: I297d44bd762548f08c975adc1ba56fc4a9edd146
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index 6542f7d..fc96a89 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -17,6 +17,7 @@
 package com.android.contacts;
 
 import com.android.contacts.format.FormatUtils;
+import com.android.internal.telephony.CallerInfo;
 
 import android.content.res.Resources;
 import android.graphics.Typeface;
@@ -33,6 +34,7 @@
  */
 public class PhoneCallDetailsHelper {
     private final Resources mResources;
+    private final String mVoicemailNumber;
     private final String mTypeIncomingText;
     private final String mTypeOutgoingText;
     private final String mTypeMissedText;
@@ -44,8 +46,9 @@
      *
      * @param resources used to look up strings
      */
-    public PhoneCallDetailsHelper(Resources resources) {
+    public PhoneCallDetailsHelper(Resources resources, String voicemailNumber) {
         mResources = resources;
+        mVoicemailNumber = voicemailNumber;
         mTypeIncomingText = mResources.getString(R.string.type_incoming);
         mTypeOutgoingText = mResources.getString(R.string.type_outgoing);
         mTypeMissedText = mResources.getString(R.string.type_missed);
@@ -98,11 +101,11 @@
         CharSequence nameText;
         CharSequence numberText;
         if (TextUtils.isEmpty(name)) {
-            nameText = number;
+            nameText = getDisplayNumber(number);
             numberText = "";
         } else {
             nameText = name;
-            numberText = number;
+            numberText = getDisplayNumber(number);
             if (callType != 0 && numberFormattedLabel != null) {
                 numberText = FormatUtils.applyStyleToSpan(Typeface.BOLD,
                         numberFormattedLabel + " " + number, 0,
@@ -124,4 +127,23 @@
             views.mNumberView.setVisibility(View.GONE);
         }
     }
+
+    private CharSequence getDisplayNumber(CharSequence number) {
+        if (TextUtils.isEmpty(number)) {
+            return "";
+        }
+        if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
+            return mResources.getString(R.string.unknown);
+        }
+        if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
+            return mResources.getString(R.string.private_num);
+        }
+        if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
+            return mResources.getString(R.string.payphone);
+        }
+        if (PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber)) {
+            return mResources.getString(R.string.voicemail);
+        }
+        return number;
+    }
 }