diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 02dd0cb..ef249c2 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -519,5 +519,16 @@
 
     // Bubble collapse initiated by user, i.e. no hiding after collapse
     BUBBLE_COLLAPSE_BY_USER = 1260;
+
+    // In in-call UI
+    IN_CALL_SHOW_DIALPAD_BUTTON_PRESSED = 1261;
+    IN_CALL_ADD_CALL_BUTTON_PRESSED = 1262;
+    IN_CALL_MERGE_BUTTON_PRESSED = 1263;
+    IN_CALL_SWAP_SECONDARY_BUTTON_PRESSED = 1264;
+
+    // In in-call dialpad
+    IN_CALL_DIALPAD_NUMBER_BUTTON_PRESSED = 1265;
+    IN_CALL_DIALPAD_HANG_UP_BUTTON_PRESSED = 1266;
+    IN_CALL_DIALPAD_CLOSE_BUTTON_PRESSED = 1267;
   }
 }
diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java
index 4da227c..658ae64 100644
--- a/java/com/android/incallui/CallButtonPresenter.java
+++ b/java/com/android/incallui/CallButtonPresenter.java
@@ -252,11 +252,21 @@
 
   @Override
   public void mergeClicked() {
+    Logger.get(mContext)
+        .logCallImpression(
+            DialerImpression.Type.IN_CALL_MERGE_BUTTON_PRESSED,
+            mCall.getUniqueCallId(),
+            mCall.getTimeAddedMs());
     TelecomAdapter.getInstance().merge(mCall.getId());
   }
 
   @Override
   public void addCallClicked() {
+    Logger.get(mContext)
+        .logCallImpression(
+            DialerImpression.Type.IN_CALL_ADD_CALL_BUTTON_PRESSED,
+            mCall.getUniqueCallId(),
+            mCall.getTimeAddedMs());
     // Automatically mute the current call
     mAutomaticallyMuted = true;
     mPreviousMuteState = AudioModeProvider.getInstance().getAudioState().isMuted();
@@ -267,6 +277,11 @@
 
   @Override
   public void showDialpadClicked(boolean checked) {
+    Logger.get(mContext)
+        .logCallImpression(
+            DialerImpression.Type.IN_CALL_SHOW_DIALPAD_BUTTON_PRESSED,
+            mCall.getUniqueCallId(),
+            mCall.getTimeAddedMs());
     LogUtil.v("CallButtonPresenter", "show dialpad " + String.valueOf(checked));
     getActivity().showDialpadFragment(checked /* show */, true /* animate */);
   }
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index 06b59c0..653b51a 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -1006,6 +1006,11 @@
       return;
     }
 
+    Logger.get(mContext)
+        .logCallImpression(
+            DialerImpression.Type.IN_CALL_SWAP_SECONDARY_BUTTON_PRESSED,
+            mPrimary.getUniqueCallId(),
+            mPrimary.getTimeAddedMs());
     LogUtil.i(
         "CallCardPresenter.onSecondaryInfoClicked", "swapping call to foreground: " + mSecondary);
     mSecondary.unhold();
diff --git a/java/com/android/incallui/DialpadFragment.java b/java/com/android/incallui/DialpadFragment.java
index c614d84..fbcd407 100644
--- a/java/com/android/incallui/DialpadFragment.java
+++ b/java/com/android/incallui/DialpadFragment.java
@@ -35,6 +35,8 @@
 import com.android.dialer.dialpadview.DialpadKeyButton;
 import com.android.dialer.dialpadview.DialpadKeyButton.OnPressedListener;
 import com.android.dialer.dialpadview.DialpadView;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import com.android.incallui.DialpadPresenter.DialpadUi;
 import com.android.incallui.baseui.BaseFragment;
 import java.util.Map;
@@ -87,6 +89,8 @@
   @Override
   public void onClick(View v) {
     if (v.getId() == R.id.dialpad_back) {
+      Logger.get(getContext())
+          .logImpression(DialerImpression.Type.IN_CALL_DIALPAD_CLOSE_BUTTON_PRESSED);
       getActivity().onBackPressed();
     }
   }
@@ -107,6 +111,7 @@
           case KeyEvent.ACTION_UP:
             getPresenter().stopDtmf();
             break;
+          default: // fall out
         }
         // do not return true [handled] here, since we want the
         // press / click animation to be handled by the framework.
@@ -261,6 +266,8 @@
   @Override
   public void onPressed(View view, boolean pressed) {
     if (pressed && mDisplayMap.containsKey(view.getId())) {
+      Logger.get(getContext())
+          .logImpression(DialerImpression.Type.IN_CALL_DIALPAD_NUMBER_BUTTON_PRESSED);
       Log.d(this, "onPressed: " + pressed + " " + mDisplayMap.get(view.getId()));
       getPresenter().processDtmf(mDisplayMap.get(view.getId()));
     }
@@ -315,7 +322,7 @@
      * Overrides the characters used in {@link DialerKeyListener#CHARACTERS} These are the valid
      * dtmf characters.
      */
-    public final char[] DTMF_CHARACTERS =
+    public final char[] dtmfCharacters =
         new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '#', '*'};
 
     private DTMFKeyListener() {
@@ -325,7 +332,7 @@
     /** Overriden to return correct DTMF-dialable characters. */
     @Override
     protected char[] getAcceptedChars() {
-      return DTMF_CHARACTERS;
+      return dtmfCharacters;
     }
 
     /** special key listener ignores backspace. */
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index f9abf20..d91b5f2 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -231,6 +231,8 @@
   public void onClick(View view) {
     if (view == endCallButton) {
       LogUtil.i("InCallFragment.onClick", "end call button clicked");
+      Logger.get(getContext())
+          .logImpression(DialerImpression.Type.IN_CALL_DIALPAD_HANG_UP_BUTTON_PRESSED);
       inCallScreenDelegate.onEndCallClicked();
     } else {
       LogUtil.e("InCallFragment.onClick", "unknown view: " + view);
