FilteredNumberProvider authority name & filtered_number_table changes

Authority name for FilteredNumberProvider changed so it can be
overriden in GoogleDialer.
Added UNIQUE constraint to NORMALIZED_NUMBER field.
Added NUMBER field to filtered_number_table (un-normalized number).

Bug: 23424013
Bug: 23424011
Change-Id: I3156cee70ddcaea15b7272650d5f255782e34520
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9263009..672c393 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -298,7 +298,7 @@
 
         <provider
             android:name=".database.FilteredNumberProvider"
-            android:authorities="com.android.dialer"
+            android:authorities="com.android.dialer.database.filterednumberprovider"
             android:exported="false"
             android:multiprocess="false"
             />
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index 8fcbb92..d36a0f6 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -75,7 +75,7 @@
      *   0-98   KitKat
      * </pre>
      */
-    public static final int DATABASE_VERSION = 5;
+    public static final int DATABASE_VERSION = 6;
     public static final String DATABASE_NAME = "dialer.db";
 
     /**
@@ -400,7 +400,8 @@
         // and to be able to guarantee the state of the DB at each upgrade step.
         db.execSQL("CREATE TABLE " + Tables.FILTERED_NUMBER_TABLE + " ("
                 + FilteredNumberColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
-                + FilteredNumberColumns.NORMALIZED_NUMBER + " TEXT,"
+                + FilteredNumberColumns.NORMALIZED_NUMBER + " TEXT UNIQUE,"
+                + FilteredNumberColumns.NUMBER + " TEXT,"
                 + FilteredNumberColumns.COUNTRY_ISO + " TEXT,"
                 + FilteredNumberColumns.TIMES_FILTERED + " INTEGER,"
                 + FilteredNumberColumns.LAST_TIME_FILTERED + " LONG,"
@@ -418,6 +419,7 @@
         db.execSQL("DROP TABLE IF EXISTS " + Tables.PREFIX_TABLE);
         db.execSQL("DROP TABLE IF EXISTS " + Tables.SMARTDIAL_TABLE);
         db.execSQL("DROP TABLE IF EXISTS " + Tables.PROPERTIES);
+        db.execSQL("DROP TABLE IF EXISTS " + Tables.FILTERED_NUMBER_TABLE);
     }
 
     @Override
@@ -438,10 +440,12 @@
             return;
         }
 
-        if (oldVersion < 5) {
+        if (oldVersion < 6) {
+            db.execSQL("DROP TABLE IF EXISTS " + Tables.FILTERED_NUMBER_TABLE);
             db.execSQL("CREATE TABLE " + Tables.FILTERED_NUMBER_TABLE + " ("
                     + FilteredNumberColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
-                    + FilteredNumberColumns.NORMALIZED_NUMBER + " TEXT,"
+                    + FilteredNumberColumns.NORMALIZED_NUMBER + " TEXT UNIQUE,"
+                    + FilteredNumberColumns.NUMBER + " TEXT,"
                     + FilteredNumberColumns.COUNTRY_ISO + " TEXT,"
                     + FilteredNumberColumns.TIMES_FILTERED + " INTEGER,"
                     + FilteredNumberColumns.LAST_TIME_FILTERED + " LONG,"
@@ -449,7 +453,7 @@
                     + FilteredNumberColumns.TYPE + " INTEGER,"
                     + FilteredNumberColumns.SOURCE + " INTEGER"
                     + ");");
-            oldVersion = 5;
+            oldVersion = 6;
         }
 
         if (oldVersion != DATABASE_VERSION) {
diff --git a/src/com/android/dialer/database/FilteredNumberContract.java b/src/com/android/dialer/database/FilteredNumberContract.java
index 1fb2363..0ec171b 100644
--- a/src/com/android/dialer/database/FilteredNumberContract.java
+++ b/src/com/android/dialer/database/FilteredNumberContract.java
@@ -16,8 +16,15 @@
 
 package com.android.dialer.database;
 
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.database.Cursor;
 import android.net.Uri;
 import android.provider.BaseColumns;
+import android.telephony.PhoneNumberUtils;
+
+import com.android.dialerbind.ObjectFactory;
 
 /**
  * <p>
@@ -29,7 +36,7 @@
 public final class FilteredNumberContract {
 
     /** The authority for the filtered numbers provider */
-    public static final String AUTHORITY = "com.android.dialer";
+    public static final String AUTHORITY = ObjectFactory.getFilteredNumberProviderAuthority();
 
     /** A content:// style uri to the authority for the filtered numbers provider */
     public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);
@@ -62,6 +69,13 @@
          */
         static final String NORMALIZED_NUMBER = "normalized_number";
         /**
+         * Represents the number to be filtered, for formatting and
+         * used with country iso for contact lookups.
+         *
+         * TYPE: TEXT
+         */
+        static final String NUMBER = "number";
+        /**
          * The country code representing the country detected when
          * the phone number was added to the database.
          * Most numbers don't have the country code, so a best guess is provided by
@@ -111,7 +125,7 @@
      * <h3>Operations</h3>
      * <dl>
      * <dt><b>Insert</b></dt>
-     * <dd>Required fields: NORMALIZED_NUMBER, TYPE, SOURCE.
+     * <dd>Required fields: NUMBER, NORMALIZED_NUMBER, TYPE, SOURCE.
      * A default value will be used for the other fields if left null.</dd>
      * <dt><b>Update</b></dt>
      * <dt><b>Delete</b></dt>
@@ -144,6 +158,5 @@
          */
         public static final String CONTENT_ITEM_TYPE =
                 "vnd.android.cursor.item/filtered_numbers_table";
-
     }
 }
diff --git a/src/com/android/dialer/database/FilteredNumberProvider.java b/src/com/android/dialer/database/FilteredNumberProvider.java
index 2bacd89..2bea7ca 100644
--- a/src/com/android/dialer/database/FilteredNumberProvider.java
+++ b/src/com/android/dialer/database/FilteredNumberProvider.java
@@ -33,6 +33,7 @@
 import com.android.contacts.common.GeoUtil;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialerbind.DatabaseHelperManager;
+import com.android.dialerbind.ObjectFactory;
 import com.google.common.annotations.VisibleForTesting;
 
 import java.util.Arrays;
@@ -50,14 +51,6 @@
     private static final int FILTERED_NUMBERS_TABLE_ID = 2;
 
     private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-    static {
-        sUriMatcher.addURI(FilteredNumberContract.AUTHORITY,
-                FilteredNumberContract.FilteredNumber.FILTERED_NUMBERS_TABLE,
-                FILTERED_NUMBERS_TABLE);
-        sUriMatcher.addURI(FilteredNumberContract.AUTHORITY,
-                FilteredNumberContract.FilteredNumber.FILTERED_NUMBERS_TABLE + "/#",
-                FILTERED_NUMBERS_TABLE_ID);
-    }
 
     @Override
     public boolean onCreate() {
@@ -65,6 +58,12 @@
         if (mDialerDatabaseHelper == null) {
             return false;
         }
+        sUriMatcher.addURI(ObjectFactory.getFilteredNumberProviderAuthority(),
+                FilteredNumberContract.FilteredNumber.FILTERED_NUMBERS_TABLE,
+                FILTERED_NUMBERS_TABLE);
+        sUriMatcher.addURI(ObjectFactory.getFilteredNumberProviderAuthority(),
+                FilteredNumberContract.FilteredNumber.FILTERED_NUMBERS_TABLE + "/#",
+                FILTERED_NUMBERS_TABLE_ID);
         return true;
     }
 
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index 1a36b05..bace0a6 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -35,6 +35,10 @@
         return null;
     }
 
+    public static String getFilteredNumberProviderAuthority() {
+        return "com.android.dialer.database.filterednumberprovider";
+    }
+
     /**
      * Create a new instance of the call log adapter.
      * @param context The context to use.
diff --git a/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java b/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java
index 94bf6e6..5184930 100644
--- a/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java
+++ b/tests/src/com/android/dialer/database/FilteredNumberProviderTest.java
@@ -32,7 +32,8 @@
     private static final String TIME_ZONE_AMERICA_LOS_ANGELES = "America/Los_Angeles";
     private static final String DEFAULT_TIMEZONE = TIME_ZONE_AMERICA_LOS_ANGELES;
     private static final String DEFAULT_COUNTRY_ISO = "US";
-    private static final String TEST_NUMBER = "+1234567890";
+    private static final String TEST_NUMBER = "234567890";
+    private static final String TEST_NORMALIZED_NUMBER = "+1234567890";
     private static final long TEST_TIME = 1439936706;
 
     public FilteredNumberProviderTest () {
@@ -141,7 +142,7 @@
         v.put(FilteredNumberContract.FilteredNumberColumns.LAST_TIME_FILTERED, TEST_TIME);
         int rows = mResolver.update(FilteredNumberContract.FilteredNumber.CONTENT_URI, v,
                 FilteredNumberContract.FilteredNumberColumns.NORMALIZED_NUMBER + " = ?",
-                new String[]{TEST_NUMBER});
+                new String[]{TEST_NORMALIZED_NUMBER});
         assertEquals(rows, 1);
 
         ContentValues expected = getTestValues(TEST_TIME);
@@ -186,7 +187,9 @@
     private ContentValues getTestValues(Long timeNow) {
         ContentValues v = new ContentValues();
         v.putNull(FilteredNumberContract.FilteredNumberColumns._ID);
-        v.put(FilteredNumberContract.FilteredNumberColumns.NORMALIZED_NUMBER, TEST_NUMBER);
+        v.put(FilteredNumberContract.FilteredNumberColumns.NORMALIZED_NUMBER,
+                TEST_NORMALIZED_NUMBER);
+        v.put(FilteredNumberContract.FilteredNumberColumns.NUMBER, TEST_NUMBER);
         v.put(FilteredNumberContract.FilteredNumberColumns.COUNTRY_ISO, DEFAULT_COUNTRY_ISO);
         v.put(FilteredNumberContract.FilteredNumberColumns.TIMES_FILTERED, 0);
         v.putNull(FilteredNumberContract.FilteredNumberColumns.LAST_TIME_FILTERED);