Filtes out legacy number in call logs

Bug: 10966248
Change-Id: I297925f336114d98c1109158e19546e81f03fe90
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java
index e2b9cce..cb66164 100644
--- a/src/com/android/providers/contacts/CallLogProvider.java
+++ b/src/com/android/providers/contacts/CallLogProvider.java
@@ -33,6 +33,7 @@
 import android.net.Uri;
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.providers.contacts.ContactsDatabaseHelper.Tables;
@@ -40,6 +41,7 @@
 import com.google.common.annotations.VisibleForTesting;
 
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * Call log content provider.
@@ -146,10 +148,16 @@
             }
 
             case CALLS_FILTER: {
-                String phoneNumber = uri.getPathSegments().get(2);
-                qb.appendWhere("PHONE_NUMBERS_EQUAL(number, ");
-                qb.appendWhereEscapeString(phoneNumber);
-                qb.appendWhere(mUseStrictPhoneNumberComparation ? ", 1)" : ", 0)");
+                List<String> pathSegments = uri.getPathSegments();
+                String phoneNumber = pathSegments.size() >= 2 ? pathSegments.get(2) : null;
+                if (!TextUtils.isEmpty(phoneNumber)) {
+                    qb.appendWhere("PHONE_NUMBERS_EQUAL(number, ");
+                    qb.appendWhereEscapeString(phoneNumber);
+                    qb.appendWhere(mUseStrictPhoneNumberComparation ? ", 1)" : ", 0)");
+                } else {
+                    qb.appendWhere(Calls.NUMBER_PRESENTATION + "!="
+                            + Calls.PRESENTATION_ALLOWED);
+                }
                 break;
             }
 
diff --git a/src/com/android/providers/contacts/DefaultCallLogInsertionHelper.java b/src/com/android/providers/contacts/DefaultCallLogInsertionHelper.java
index fcda8f1..9e90197 100644
--- a/src/com/android/providers/contacts/DefaultCallLogInsertionHelper.java
+++ b/src/com/android/providers/contacts/DefaultCallLogInsertionHelper.java
@@ -25,18 +25,24 @@
 import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
 import com.android.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
 
+import com.google.android.collect.Sets;
+
 import java.util.Locale;
+import java.util.Set;
 
 /**
  * Default implementation of {@link CallLogInsertionHelper}.
  * <p>
  * It added the country ISO abbreviation and the geocoded location.
+ * It checks for legacy unknown numbers and updates number presentation.
  * <p>
  * It uses {@link PhoneNumberOfflineGeocoder} to compute the geocoded location of a phone number.
  */
 /*package*/ class DefaultCallLogInsertionHelper implements CallLogInsertionHelper {
     private static DefaultCallLogInsertionHelper sInstance;
 
+    private static final Set<String> LEGACY_UNKNOWN_NUMBERS = Sets.newHashSet("-1", "-2", "-3");
+
     private final CountryMonitor mCountryMonitor;
     private PhoneNumberUtil mPhoneNumberUtil;
     private PhoneNumberOfflineGeocoder mPhoneNumberOfflineGeocoder;
@@ -62,6 +68,12 @@
         // Insert the geocoded location, so that we do not need to compute it on the fly.
         values.put(Calls.GEOCODED_LOCATION,
                 getGeocodedLocationFor(values.getAsString(Calls.NUMBER), countryIso));
+
+        final String number = values.getAsString(Calls.NUMBER);
+        if (LEGACY_UNKNOWN_NUMBERS.contains(number)) {
+            values.put(Calls.NUMBER_PRESENTATION, Calls.PRESENTATION_UNKNOWN);
+            values.put(Calls.NUMBER, "");
+        }
     }
 
     private String getCurrentCountryIso() {