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(),
