Add fast database populating button for benefit of testing.

Bug: 69431528
Test: On a local device.
PiperOrigin-RevId: 176420058
Change-Id: I3013800d86597b19268723377112286d2e2ceb68
diff --git a/java/com/android/dialer/databasepopulator/CallLogPopulator.java b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
index 7c387ec..eb3328c 100644
--- a/java/com/android/dialer/databasepopulator/CallLogPopulator.java
+++ b/java/com/android/dialer/databasepopulator/CallLogPopulator.java
@@ -26,9 +26,11 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.WorkerThread;
 import com.android.dialer.common.Assert;
+import com.android.dialer.databasepopulator.CallLogPopulator.CallEntry.Builder;
 import com.google.auto.value.AutoValue;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /** Populates the device database with call log entries. */
@@ -84,13 +86,20 @@
   }
 
   @WorkerThread
-  public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) {
+  public static void populateCallLog(
+      @NonNull Context context, boolean isWithoutMissedCalls, boolean fastMode) {
     Assert.isWorkerThread();
     ArrayList<ContentProviderOperation> operations = new ArrayList<>();
     // Do this 4 times to make the call log 4 times bigger.
     long timeMillis = System.currentTimeMillis();
+    List<Builder> callLogs = new ArrayList<>();
+    if (fastMode) {
+      callLogs.add(SIMPLE_CALL_LOG[0]);
+    } else {
+      callLogs = Arrays.asList(SIMPLE_CALL_LOG);
+    }
     for (int i = 0; i < 4; i++) {
-      for (CallEntry.Builder builder : SIMPLE_CALL_LOG) {
+      for (CallEntry.Builder builder : callLogs) {
         CallEntry callEntry = builder.setTimeMillis(timeMillis).build();
         if (isWithoutMissedCalls && builder.build().getType() == Calls.MISSED_TYPE) {
           continue;
@@ -111,6 +120,11 @@
   }
 
   @WorkerThread
+  public static void populateCallLog(@NonNull Context context, boolean isWithoutMissedCalls) {
+    populateCallLog(context, isWithoutMissedCalls, false);
+  }
+
+  @WorkerThread
   public static void deleteAllCallLog(@NonNull Context context) {
     Assert.isWorkerThread();
     try {
diff --git a/java/com/android/dialer/databasepopulator/ContactsPopulator.java b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
index e93c569..79492e9 100644
--- a/java/com/android/dialer/databasepopulator/ContactsPopulator.java
+++ b/java/com/android/dialer/databasepopulator/ContactsPopulator.java
@@ -127,12 +127,19 @@
   };
 
   @WorkerThread
-  public static void populateContacts(@NonNull Context context) {
+  public static void populateContacts(@NonNull Context context, boolean fastMode) {
     Assert.isWorkerThread();
     ArrayList<ContentProviderOperation> operations = new ArrayList<>();
-    for (Contact contact : SIMPLE_CONTACTS) {
+    List<Contact> contacts = new ArrayList<>();
+    if (fastMode) {
+      contacts.add(SIMPLE_CONTACTS[0]);
+    } else {
+      contacts = Arrays.asList(SIMPLE_CONTACTS);
+    }
+    for (Contact contact : contacts) {
       addContact(contact, operations);
     }
+
     try {
       context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
     } catch (RemoteException | OperationApplicationException e) {
@@ -141,6 +148,11 @@
   }
 
   @WorkerThread
+  public static void populateContacts(@NonNull Context context) {
+    populateContacts(context, false);
+  }
+
+  @WorkerThread
   public static void deleteAllContacts(@NonNull Context context) {
     Assert.isWorkerThread();
     try {
diff --git a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
index 9e0f453..3e692eb 100644
--- a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
+++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java
@@ -29,7 +29,11 @@
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import com.android.dialer.common.Assert;
+import com.android.dialer.databasepopulator.VoicemailPopulator.Voicemail.Builder;
 import com.google.auto.value.AutoValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /** Populates the device database with voicemail entries. */
@@ -74,14 +78,19 @@
   };
 
   @WorkerThread
-  public static void populateVoicemail(@NonNull Context context) {
+  public static void populateVoicemail(@NonNull Context context, boolean fastMode) {
     Assert.isWorkerThread();
     enableVoicemail(context);
-
+    List<Builder> voicemails = new ArrayList<>();
+    if (fastMode) {
+      voicemails.add(SIMPLE_VOICEMAILS[0]);
+    } else {
+      voicemails = Arrays.asList(SIMPLE_VOICEMAILS);
+    }
     // Do this 4 times to make the voicemail database 4 times bigger.
     long timeMillis = System.currentTimeMillis();
     for (int i = 0; i < 4; i++) {
-      for (Voicemail.Builder builder : SIMPLE_VOICEMAILS) {
+      for (Voicemail.Builder builder : voicemails) {
         Voicemail voicemail = builder.setTimeMillis(timeMillis).build();
         context
             .getContentResolver()
@@ -94,11 +103,16 @@
   }
 
   @WorkerThread
+  public static void populateVoicemail(@NonNull Context context) {
+    populateVoicemail(context, false);
+  }
+
+  @WorkerThread
   public static void deleteAllVoicemail(@NonNull Context context) {
     Assert.isWorkerThread();
     context
         .getContentResolver()
-        .delete(Voicemails.buildSourceUri(context.getPackageName()), "", new String[] {});
+        .delete(Voicemails.buildSourceUri(context.getPackageName()), null, null);
   }
 
   @VisibleForTesting
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
index e208210..6053a0d 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
@@ -40,6 +40,7 @@
         .addItem("IMS video", SimulatorVideoCall.getActionProvider(context))
         .addItem("Notifications", SimulatorNotifications.getActionProvider(context))
         .addItem("Populate database", () -> populateDatabase(context))
+        .addItem("Fast populate database", () -> fastPopulateDatabase(context))
         .addItem("Clean database", () -> cleanDatabase(context))
         .addItem("clear preferred SIM", () -> clearPreferredSim(context))
         .addItem("Sync voicemail", () -> syncVoicemail(context))
@@ -54,7 +55,15 @@
         .dialerExecutorFactory()
         .createNonUiTaskBuilder(new PopulateDatabaseWorker())
         .build()
-        .executeSerial(context);
+        .executeSerial(new PopulateDatabaseWorkerInput(context, false));
+  }
+
+  private static void fastPopulateDatabase(@NonNull Context context) {
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new PopulateDatabaseWorker())
+        .build()
+        .executeSerial(new PopulateDatabaseWorkerInput(context, true));
   }
 
   private static void cleanDatabase(@NonNull Context context) {
@@ -97,13 +106,13 @@
 
   private SimulatorMainMenu() {}
 
-  private static class PopulateDatabaseWorker implements Worker<Context, Void> {
+  private static class PopulateDatabaseWorker implements Worker<PopulateDatabaseWorkerInput, Void> {
     @Nullable
     @Override
-    public Void doInBackground(Context context) {
-      ContactsPopulator.populateContacts(context);
-      CallLogPopulator.populateCallLog(context);
-      VoicemailPopulator.populateVoicemail(context);
+    public Void doInBackground(PopulateDatabaseWorkerInput input) {
+      ContactsPopulator.populateContacts(input.context, input.fastMode);
+      CallLogPopulator.populateCallLog(input.context, false, input.fastMode);
+      VoicemailPopulator.populateVoicemail(input.context, input.fastMode);
       return null;
     }
   }
@@ -135,4 +144,14 @@
       return PersistentLogger.dumpLogToString();
     }
   }
+
+  private static class PopulateDatabaseWorkerInput {
+    Context context;
+    boolean fastMode;
+
+    PopulateDatabaseWorkerInput(Context context, boolean fastMode) {
+      this.context = context;
+      this.fastMode = fastMode;
+    }
+  }
 }