Add impressions for dual sim features

Bug: 69618691
Test: CallingAccountSelectorTest
PiperOrigin-RevId: 177062349
Change-Id: I4bc9098d06c541b607cca293269cf3489077b6c2
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index c2456d8..2bbce0d 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: 1293
+  // Next Tag: 1308
   enum Type {
     UNKNOWN_AOSP_EVENT_TYPE = 1000;
 
@@ -604,5 +604,22 @@
         1291
 
         ;
+
+    PRECALL_INITIATED = 1293;
+    PRECALL_INITIATED_EXTERNAL = 1294;
+    PRECALL_CANCELED = 1295;
+
+    DUAL_SIM_CHANGE_SIM_PRESSED = 1296;
+    DUAL_SIM_SELECTION_SHOWN = 1297;
+    DUAL_SIM_SELECTION_VOICEMAIL = 1298;
+    DUAL_SIM_SELECTION_IN_CONTACTS = 1299;
+    DUAL_SIM_SELECTION_SUGGESTION_AVAILABLE = 1300;
+    DUAL_SIM_SELECTION_SUGGESTED_CARRIER = 1301;
+    DUAL_SIM_SELECTION_SUGGESTED_FREQUENCY = 1302;
+    DUAL_SIM_SELECTION_SUGGESTED_SIM_SELECTED = 1303;
+    DUAL_SIM_SELECTION_NON_SUGGESTED_SIM_SELECTED = 1304;
+    DUAL_SIM_SELECTION_PREFERRED_SET = 1305;
+    DUAL_SIM_SELECTION_PREFERRED_USED = 1306;
+    DUAL_SIM_SELECTION_GLOBAL_USED = 1307;
   }
 }
diff --git a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
index 121e6a6..a7811fe 100644
--- a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
+++ b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
@@ -23,6 +23,8 @@
 import android.support.annotation.Nullable;
 import com.android.dialer.callintent.CallInitiationType.Type;
 import com.android.dialer.callintent.CallIntentBuilder;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.precall.PreCall;
 
 /**
@@ -47,6 +49,7 @@
   @Override
   public void onCreate(@Nullable Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
+    Logger.get(this).logImpression(DialerImpression.Type.PRECALL_INITIATED_EXTERNAL);
     Intent intent = getIntent();
     CallIntentBuilder builder = new CallIntentBuilder(intent.getData(), Type.EXTERNAL_INITIATION);
     builder
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index 5d928b4..a61a3b1 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -47,6 +47,9 @@
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.DialerImpression.Type;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.precall.PreCallAction;
 import com.android.dialer.precall.PreCallCoordinator;
 import com.android.dialer.precall.PreCallCoordinator.PendingAction;
@@ -116,6 +119,7 @@
     switch (builder.getUri().getScheme()) {
       case PhoneAccount.SCHEME_VOICEMAIL:
         showDialog(coordinator, coordinator.startPendingAction(), null, null, null);
+        Logger.get(coordinator.getActivity()).logImpression(Type.DUAL_SIM_SELECTION_VOICEMAIL);
         break;
       case PhoneAccount.SCHEME_TEL:
         processPreferredAccount(coordinator);
@@ -146,6 +150,8 @@
                 return;
               }
               if (result.phoneAccountHandle.isPresent()) {
+                Logger.get(coordinator.getActivity())
+                    .logImpression(DialerImpression.Type.DUAL_SIM_SELECTION_PREFERRED_USED);
                 coordinator.getBuilder().setPhoneAccountHandle(result.phoneAccountHandle.get());
                 pendingAction.finish();
                 return;
@@ -155,6 +161,8 @@
                       .getSystemService(TelecomManager.class)
                       .getDefaultOutgoingPhoneAccount(builder.getUri().getScheme());
               if (defaultPhoneAccount != null) {
+                Logger.get(coordinator.getActivity())
+                    .logImpression(DialerImpression.Type.DUAL_SIM_SELECTION_GLOBAL_USED);
                 builder.setPhoneAccountHandle(defaultPhoneAccount);
                 pendingAction.finish();
                 return;
@@ -183,6 +191,25 @@
       @Nullable String number,
       @Nullable Suggestion suggestion) {
     Assert.isMainThread();
+    Logger.get(coordinator.getActivity()).logImpression(Type.DUAL_SIM_SELECTION_SHOWN);
+    if (dataId != null) {
+      Logger.get(coordinator.getActivity()).logImpression(Type.DUAL_SIM_SELECTION_IN_CONTACTS);
+    }
+    if (suggestion != null) {
+      Logger.get(coordinator.getActivity())
+          .logImpression(Type.DUAL_SIM_SELECTION_SUGGESTION_AVAILABLE);
+      switch (suggestion.reason) {
+        case INTRA_CARRIER:
+          Logger.get(coordinator.getActivity())
+              .logImpression(Type.DUAL_SIM_SELECTION_SUGGESTED_CARRIER);
+          break;
+        case FREQUENT:
+          Logger.get(coordinator.getActivity())
+              .logImpression(Type.DUAL_SIM_SELECTION_SUGGESTED_FREQUENCY);
+          break;
+        default:
+      }
+    }
     List<PhoneAccountHandle> phoneAccountHandles =
         coordinator
             .getActivity()
@@ -194,7 +221,7 @@
             dataId != null /* canSetDefault */,
             R.string.pre_call_select_phone_account_remember,
             phoneAccountHandles,
-            new SelectedListener(coordinator, pendingAction, dataId, number),
+            new SelectedListener(coordinator, pendingAction, dataId, number, suggestion),
             null /* call ID */,
             buildHint(coordinator.getActivity(), phoneAccountHandles, suggestion));
     selectPhoneAccountDialogFragment.show(
@@ -351,25 +378,39 @@
     private final PreCallCoordinator.PendingAction listener;
     private final String dataId;
     private final String number;
+    private final Suggestion suggestion;
 
     public SelectedListener(
         @NonNull PreCallCoordinator builder,
         @NonNull PreCallCoordinator.PendingAction listener,
         @Nullable String dataId,
-        @Nullable String number) {
+        @Nullable String number,
+        @Nullable Suggestion suggestion) {
       this.coordinator = Assert.isNotNull(builder);
       this.listener = Assert.isNotNull(listener);
       this.dataId = dataId;
       this.number = number;
+      this.suggestion = suggestion;
     }
 
     @MainThread
     @Override
     public void onPhoneAccountSelected(
         PhoneAccountHandle selectedAccountHandle, boolean setDefault, @Nullable String callId) {
+      if (suggestion != null) {
+        if (suggestion.phoneAccountHandle.equals(selectedAccountHandle)) {
+          Logger.get(coordinator.getActivity())
+              .logImpression(DialerImpression.Type.DUAL_SIM_SELECTION_SUGGESTED_SIM_SELECTED);
+        } else {
+          Logger.get(coordinator.getActivity())
+              .logImpression(DialerImpression.Type.DUAL_SIM_SELECTION_NON_SUGGESTED_SIM_SELECTED);
+        }
+      }
       coordinator.getBuilder().setPhoneAccountHandle(selectedAccountHandle);
 
       if (dataId != null && setDefault) {
+        Logger.get(coordinator.getActivity())
+            .logImpression(DialerImpression.Type.DUAL_SIM_SELECTION_PREFERRED_SET);
         DialerExecutorComponent.get(coordinator.getActivity())
             .dialerExecutorFactory()
             .createNonUiTaskBuilder(new WritePreferredAccountWorker())
diff --git a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
index 94ba90d..36af622 100644
--- a/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallCoordinatorImpl.java
@@ -24,6 +24,8 @@
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression.Type;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.precall.PreCallAction;
 import com.android.dialer.precall.PreCallComponent;
 import com.android.dialer.precall.PreCallCoordinator;
@@ -116,6 +118,7 @@
   public void abortCall() {
     Assert.checkState(currentAction != null);
     aborted = true;
+    Logger.get(getActivity()).logImpression(Type.PRECALL_CANCELED);
   }
 
   @NonNull
diff --git a/java/com/android/dialer/precall/impl/PreCallImpl.java b/java/com/android/dialer/precall/impl/PreCallImpl.java
index 1c78bb8..b9c9d88 100644
--- a/java/com/android/dialer/precall/impl/PreCallImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallImpl.java
@@ -21,6 +21,8 @@
 import android.support.annotation.NonNull;
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.precall.PreCall;
 import com.android.dialer.precall.PreCallAction;
 import com.android.dialer.precall.PreCallComponent;
@@ -42,6 +44,7 @@
   @NonNull
   @Override
   public Intent buildIntent(Context context, CallIntentBuilder builder) {
+    Logger.get(context).logImpression(DialerImpression.Type.PRECALL_INITIATED);
     if (!requiresUi(context, builder)) {
       LogUtil.i("PreCallImpl.buildIntent", "No UI requested, running pre-call directly");
       for (PreCallAction action : PreCallComponent.get(context).getPreCall().getActions()) {
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index bd3ba6d..6b316be 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -28,6 +28,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.DialerImpression.Type;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.incallui.InCallCameraManager.Listener;
@@ -318,6 +319,7 @@
   @Override
   public void swapSimClicked() {
     LogUtil.enterBlock("CallButtonPresenter.swapSimClicked");
+    Logger.get(getContext()).logImpression(Type.DUAL_SIM_CHANGE_SIM_PRESSED);
     SwapSimWorker worker =
         new SwapSimWorker(
             getContext(),