Allow SimSuggestionProvider to auto select phone account.

Bug: 70503524
Test: Unit tests.
PiperOrigin-RevId: 181400523
Change-Id: I07f2f2cd7c1402d1acb6bfbde9db8d90c888edf6
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index a17d365..705420c 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -12,7 +12,7 @@
   // Event enums to be used for Impression Logging in Dialer.
   // It's perfectly acceptable for this enum to be large
   // Values should be from 1000 to 100000.
-  // Next Tag: 1322
+  // Next Tag: 1323
   enum Type {
     UNKNOWN_AOSP_EVENT_TYPE = 1000;
 
@@ -648,5 +648,7 @@
     BUBBLE_V2_BOTTOM_ACTION_DISMISS = 1320;
     // Drag bubble to bottom and end call
     BUBBLE_V2_BOTTOM_ACTION_END_CALL = 1321;
+
+    DUAL_SIM_SELECTION_SUGGESTION_AUTO_SELECTED = 1322;
   }
 }
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index d407296..9397d18 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -175,6 +175,16 @@
                 LogUtil.i(
                     "CallingAccountSelector.processPreferredAccount",
                     "SIM suggested: " + result.suggestion.get().reason);
+                if (result.suggestion.get().shouldAutoSelect) {
+                  Logger.get(coordinator.getActivity())
+                      .logImpression(
+                          DialerImpression.Type.DUAL_SIM_SELECTION_SUGGESTION_AUTO_SELECTED);
+                  LogUtil.i(
+                      "CallingAccountSelector.processPreferredAccount", "Auto selected suggestion");
+                  builder.setPhoneAccountHandle(result.suggestion.get().phoneAccountHandle);
+                  pendingAction.finish();
+                  return;
+                }
               }
               showDialog(
                   coordinator,
diff --git a/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java b/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java
index 61a831b..c1114b3 100644
--- a/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java
+++ b/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java
@@ -32,17 +32,25 @@
     // The SIM has the same carrier as the callee.
     INTRA_CARRIER,
     // The user has selected the SIM for the callee multiple times.
-    FREQUENT
+    FREQUENT,
+    // The user has select the SIM for this category of calls (contacts from certain accounts,
+    // etc.).
+    USER_SET,
   }
 
   /** The suggestion. */
   class Suggestion {
     @NonNull public final PhoneAccountHandle phoneAccountHandle;
     @NonNull public final Reason reason;
+    public final boolean shouldAutoSelect;
 
-    public Suggestion(@NonNull PhoneAccountHandle phoneAccountHandle, @NonNull Reason reason) {
+    public Suggestion(
+        @NonNull PhoneAccountHandle phoneAccountHandle,
+        @NonNull Reason reason,
+        boolean shouldAutoSelect) {
       this.phoneAccountHandle = Assert.isNotNull(phoneAccountHandle);
       this.reason = Assert.isNotNull(reason);
+      this.shouldAutoSelect = shouldAutoSelect;
     }
   }
 
@@ -55,4 +63,7 @@
       @NonNull Context context,
       @NonNull String number,
       @NonNull PhoneAccountHandle phoneAccountHandle);
+
+  @WorkerThread
+  void reportIncorrectSuggestion(@NonNull Context context, @NonNull String number);
 }
diff --git a/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java b/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java
index e324044..6fb73ac 100644
--- a/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java
+++ b/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java
@@ -41,4 +41,7 @@
       @NonNull Context context,
       @NonNull String number,
       @NonNull PhoneAccountHandle phoneAccountHandle) {}
+
+  @Override
+  public void reportIncorrectSuggestion(@NonNull Context context, @NonNull String number) {}
 }
diff --git a/java/com/android/incallui/multisim/SwapSimWorker.java b/java/com/android/incallui/multisim/SwapSimWorker.java
index 73c18c4..28cf293 100644
--- a/java/com/android/incallui/multisim/SwapSimWorker.java
+++ b/java/com/android/incallui/multisim/SwapSimWorker.java
@@ -31,6 +31,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.preferredsim.suggestion.SimSuggestionComponent;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.DialerCall;
@@ -99,6 +100,10 @@
   @SuppressWarnings("MissingPermission")
   public Void doInBackground(Void unused) {
     try {
+      SimSuggestionComponent.get(context)
+          .getSuggestionProvider()
+          .reportIncorrectSuggestion(context, number);
+
       if (!PermissionsUtil.hasPhonePermissions(context)) {
         LogUtil.e("SwapSimWorker.doInBackground", "missing phone permission");
         return null;