Merge "Don't manually close the database."
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 905a87a..256abd4 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -746,8 +746,6 @@
     private final CountryMonitor mCountryMonitor;
     private StringBuilder mSb = new StringBuilder();
 
-    private boolean mReopenDatabase = false;
-
     private static ContactsDatabaseHelper sSingleton = null;
 
     private boolean mUseStrictPhoneNumberComparison;
@@ -765,11 +763,11 @@
     }
 
     /**
-     * Private constructor, callers except unit tests should obtain an instance through
-     * {@link #getInstance(android.content.Context)} instead.
+     * Returns a new instance for unit tests.
      */
-    ContactsDatabaseHelper(Context context) {
-        this(context, null, false);
+    @NeededForTesting
+    static ContactsDatabaseHelper getNewInstanceForTest(Context context) {
+        return new ContactsDatabaseHelper(context, null, false);
     }
 
     protected ContactsDatabaseHelper(
@@ -1336,11 +1334,6 @@
             db.execSQL("ANALYZE;");
 
             updateSqliteStats(db);
-
-            // We need to close and reopen the database connection so that the stats are
-            // taken into account. Make a note of it and do the actual reopening in the
-            // getWritableDatabase method.
-            mReopenDatabase = true;
         }
 
         ContentResolver.requestSync(null /* all accounts */,
@@ -2390,7 +2383,6 @@
             createContactsIndexes(db);
             updateSqliteStats(db);
             upgradeLegacyApiSupport = true;
-            mReopenDatabase = true;
         }
 
         if (upgradeLegacyApiSupport) {
@@ -3877,6 +3869,8 @@
             updateIndexStats(db, "search_index_segdir",
                     "sqlite_autoindex_search_index_segdir_1", "9 5 1");
 
+            // Force sqlite to reload sqlite_stat1.
+            db.execSQL("ANALYZE sqlite_master;");
         } catch (SQLException e) {
             Log.e(TAG, "Could not update index stats", e);
         }
@@ -3902,17 +3896,6 @@
                 new String[] { table, index, stats });
     }
 
-    @Override
-    public synchronized SQLiteDatabase getWritableDatabase() {
-        SQLiteDatabase db = super.getWritableDatabase();
-        if (mReopenDatabase) {
-            mReopenDatabase = false;
-            close();
-            db = super.getWritableDatabase();
-        }
-        return db;
-    }
-
     /**
      * Wipes all data except mime type and package lookup tables.
      */
diff --git a/src/com/android/providers/contacts/ContactsUpgradeReceiver.java b/src/com/android/providers/contacts/ContactsUpgradeReceiver.java
index 1439c21..e259ffe 100644
--- a/src/com/android/providers/contacts/ContactsUpgradeReceiver.java
+++ b/src/com/android/providers/contacts/ContactsUpgradeReceiver.java
@@ -74,11 +74,9 @@
                     }
                     helper.getWritableDatabase();
                 }
-                helper.close();
 
                 ProfileDatabaseHelper profileHelper = ProfileDatabaseHelper.getInstance(context);
                 profileHelper.getWritableDatabase();
-                helper.close();
 
                 // Log the total time taken for the receiver to perform the operation
                 EventLogTags.writeContactsUpgradeReceiver(System.currentTimeMillis() - startTime);
diff --git a/src/com/android/providers/contacts/ProfileDatabaseHelper.java b/src/com/android/providers/contacts/ProfileDatabaseHelper.java
index e2e5c90..9b707a3 100644
--- a/src/com/android/providers/contacts/ProfileDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ProfileDatabaseHelper.java
@@ -16,6 +16,8 @@
 
 package com.android.providers.contacts;
 
+import com.android.providers.contacts.util.NeededForTesting;
+
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
@@ -37,11 +39,11 @@
     private static ProfileDatabaseHelper sSingleton = null;
 
     /**
-     * Private constructor, callers except unit tests should obtain an instance through
-     * {@link #getInstance(android.content.Context)} instead.
+     * Returns a new instance for unit tests.
      */
-    ProfileDatabaseHelper(Context context) {
-        this(context, null, false);
+    @NeededForTesting
+    public static ProfileDatabaseHelper getNewInstanceForTest(Context context) {
+        return new ProfileDatabaseHelper(context, null, false);
     }
 
     private ProfileDatabaseHelper(
diff --git a/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java b/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java
index 6a45872..bd0e814 100644
--- a/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java
+++ b/tests/src/com/android/providers/contacts/BaseVoicemailProviderTest.java
@@ -157,7 +157,7 @@
 
         @Override
         protected ContactsDatabaseHelper getDatabaseHelper(Context context) {
-            return new ContactsDatabaseHelper(context);
+            return ContactsDatabaseHelper.getNewInstanceForTest(context);
         }
 
         @Override
diff --git a/tests/src/com/android/providers/contacts/CallLogProviderTest.java b/tests/src/com/android/providers/contacts/CallLogProviderTest.java
index b005d5d..02aebb7 100644
--- a/tests/src/com/android/providers/contacts/CallLogProviderTest.java
+++ b/tests/src/com/android/providers/contacts/CallLogProviderTest.java
@@ -337,7 +337,7 @@
         @Override
         protected ContactsDatabaseHelper getDatabaseHelper(final Context context) {
             if (mDbHelper == null) {
-                mDbHelper = new ContactsDatabaseHelper(context);
+                mDbHelper = ContactsDatabaseHelper.getNewInstanceForTest(context);
             }
             return mDbHelper;
         }
diff --git a/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java b/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java
index 39293c5..5dc5cdf 100644
--- a/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java
+++ b/tests/src/com/android/providers/contacts/SynchronousContactsProvider2.java
@@ -40,7 +40,7 @@
     @Override
     protected ContactsDatabaseHelper getDatabaseHelper(final Context context) {
         if (mDbHelper == null) {
-            mDbHelper = new ContactsDatabaseHelper(context);
+            mDbHelper = ContactsDatabaseHelper.getNewInstanceForTest(context);
         }
         return mDbHelper;
     }
diff --git a/tests/src/com/android/providers/contacts/SynchronousProfileProvider.java b/tests/src/com/android/providers/contacts/SynchronousProfileProvider.java
index 6c55f5d..bde6dc9 100644
--- a/tests/src/com/android/providers/contacts/SynchronousProfileProvider.java
+++ b/tests/src/com/android/providers/contacts/SynchronousProfileProvider.java
@@ -35,7 +35,7 @@
     @Override
     protected ProfileDatabaseHelper getDatabaseHelper(final Context context) {
         if (mDbHelper == null) {
-            mDbHelper = new ProfileDatabaseHelper(context);
+            mDbHelper = ProfileDatabaseHelper.getNewInstanceForTest(context);
         }
         return mDbHelper;
     }