Check empty number before querying data ID for preferred account

In call UI might use PreferredAccountWorker with a voicemail URI that has no numbers.

Bug: 76205637
Test: Unit tests
PiperOrigin-RevId: 190298082
Change-Id: I9949de5499958c408d6e1bf18cab6e77852d2487
diff --git a/java/com/android/dialer/commandline/impl/CallCommand.java b/java/com/android/dialer/commandline/impl/CallCommand.java
index a6d78f4..b3ea860 100644
--- a/java/com/android/dialer/commandline/impl/CallCommand.java
+++ b/java/com/android/dialer/commandline/impl/CallCommand.java
@@ -53,7 +53,10 @@
   @NonNull
   @Override
   public String getUsage() {
-    return "call number\n\nuse 'voicemail' to call voicemail";
+    return "call [flags --] number\n"
+        + "\nuse 'voicemail' to call voicemail"
+        + "\n\nflags:"
+        + "\n--direct send intent to telecom instead of pre call";
   }
 
   @Override
@@ -73,11 +76,16 @@
     } else {
       callIntentBuilder = new CallIntentBuilder(number, CallInitiationType.Type.DIALPAD);
     }
-
-    Intent intent = PreCall.getIntent(appContext, callIntentBuilder);
-    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-    appContext.startActivity(intent);
-
+    if (args.getBoolean("direct", false)) {
+      Intent intent = callIntentBuilder.build();
+      appContext
+          .getSystemService(TelecomManager.class)
+          .placeCall(intent.getData(), intent.getExtras());
+    } else {
+      Intent intent = PreCall.getIntent(appContext, callIntentBuilder);
+      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+      appContext.startActivity(intent);
+    }
     return Futures.immediateFuture("Calling " + number);
   }
 }
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
index aa61788..df743c3 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountWorker.java
@@ -34,6 +34,7 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.annotation.WorkerThread;
 import android.telecom.PhoneAccountHandle;
+import android.text.TextUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
@@ -128,6 +129,9 @@
   private static Optional<String> getDataId(
       @NonNull Context context, @Nullable String phoneNumber) {
     Assert.isWorkerThread();
+    if (TextUtils.isEmpty(phoneNumber)) {
+      return Optional.absent();
+    }
     try (Cursor cursor =
         context
             .getContentResolver()