diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 293ebed..ff64ba1 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -116,9 +116,10 @@
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.InteractionEvent;
 import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.LoggingBindings;
 import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.logging.UiAction;
+import com.android.dialer.metrics.Metrics;
+import com.android.dialer.metrics.MetricsComponent;
 import com.android.dialer.p13n.inference.P13nRanking;
 import com.android.dialer.p13n.inference.protocol.P13nRanker;
 import com.android.dialer.p13n.inference.protocol.P13nRanker.P13nRefreshCompleteListener;
@@ -612,8 +613,9 @@
       // add 1 sec delay to get memory snapshot so that dialer wont react slowly on resume.
       ThreadUtil.postDelayedOnUiThread(
           () ->
-              Logger.get(this)
-                  .logRecordMemory(LoggingBindings.ACTIVITY_ON_RESUME_MEMORY_EVENT_NAME),
+              MetricsComponent.get(this)
+                  .metrics()
+                  .recordMemory(Metrics.DIALTACTS_ON_RESUME_MEMORY_EVENT_NAME),
           1000);
     }
 
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 6b6239d..ee564e2 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -63,7 +63,7 @@
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.LoggingBindings;
+import com.android.dialer.metrics.Metrics;
 import com.android.dialer.metrics.MetricsComponent;
 import com.android.dialer.metrics.jank.RecyclerViewJankLogger;
 import com.android.dialer.oem.CequintCallerIdManager;
@@ -311,8 +311,7 @@
     recyclerView.setHasFixedSize(true);
     recyclerView.addOnScrollListener(
         new RecyclerViewJankLogger(
-            MetricsComponent.get(getContext()).metrics(),
-            LoggingBindings.OLD_CALL_LOG_JANK_EVENT_NAME));
+            MetricsComponent.get(getContext()).metrics(), Metrics.OLD_CALL_LOG_JANK_EVENT_NAME));
     layoutManager = new LinearLayoutManager(getActivity());
     recyclerView.setLayoutManager(layoutManager);
     PerformanceReport.logOnScrollStateChange(recyclerView);
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
index bbd16fb..bb1a730 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
@@ -33,7 +33,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DefaultFutureCallback;
 import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.logging.LoggingBindings;
+import com.android.dialer.metrics.Metrics;
 import com.android.dialer.metrics.MetricsComponent;
 import com.android.dialer.metrics.jank.RecyclerViewJankLogger;
 import com.google.common.util.concurrent.Futures;
@@ -175,8 +175,7 @@
     recyclerView = view.findViewById(R.id.new_call_log_recycler_view);
     recyclerView.addOnScrollListener(
         new RecyclerViewJankLogger(
-            MetricsComponent.get(getContext()).metrics(),
-            LoggingBindings.NEW_CALL_LOG_JANK_EVENT_NAME));
+            MetricsComponent.get(getContext()).metrics(), Metrics.NEW_CALL_LOG_JANK_EVENT_NAME));
 
     getLoaderManager().restartLoader(0, null, this);
 
diff --git a/java/com/android/dialer/logging/LoggingBindings.java b/java/com/android/dialer/logging/LoggingBindings.java
index a093c4f..ca9a053 100644
--- a/java/com/android/dialer/logging/LoggingBindings.java
+++ b/java/com/android/dialer/logging/LoggingBindings.java
@@ -20,18 +20,6 @@
 /** Allows the container application to gather analytics. */
 public interface LoggingBindings {
 
-  String ON_CREATE_PRIMES_EVENT_NAME = "Application.onCreate";
-  String ACTIVITY_ON_CREATE_PRIMES_EVENT_NAME = "GoogleDialtactsActivity.onCreate";
-  String ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_INCOMING =
-      "CallList.onCallAdded_To_InCallActivity.onCreate_Incoming";
-  String ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_OUTGOING =
-      "CallList.onCallAdded_To_InCallActivity.onCreate_Outgoing";
-  String ACTIVITY_ON_RESUME_MEMORY_EVENT_NAME = "GoogleDialtactsActivity.onResume";
-  String INCALL_ACTIVITY_ON_RESUME_MEMORY_EVENT_NAME = "IncallActivity.OnResume";
-  String INCALL_ACTIVITY_ON_STOP_MEMORY_EVENT_NAME = "IncallActivity.OnStop";
-  String OLD_CALL_LOG_JANK_EVENT_NAME = "OldCallLog.Jank";
-  String NEW_CALL_LOG_JANK_EVENT_NAME = "NewCallLog.Jank";
-
   /**
    * Logs an DialerImpression event that's not associated with a specific call.
    *
@@ -99,13 +87,4 @@
 
   /** Logs successful People Api lookup result */
   void logSuccessfulPeopleApiLookupReport(long latency, int httpResponseCode);
-
-  /** Log start a latency timer */
-  void logStartLatencyTimer(String timerEventName);
-
-  /** Log end a latency timer */
-  void logStopLatencyTimer(String timerEventName);
-
-  /** Log get a memory snapshot */
-  void logRecordMemory(String memoryEventName);
 }
diff --git a/java/com/android/dialer/logging/LoggingBindingsStub.java b/java/com/android/dialer/logging/LoggingBindingsStub.java
index 74ac294..2dbcc3f 100644
--- a/java/com/android/dialer/logging/LoggingBindingsStub.java
+++ b/java/com/android/dialer/logging/LoggingBindingsStub.java
@@ -61,13 +61,4 @@
 
   @Override
   public void logSuccessfulPeopleApiLookupReport(long latency, int httpResponseCode) {}
-
-  @Override
-  public void logStartLatencyTimer(String timerEventName) {}
-
-  @Override
-  public void logStopLatencyTimer(String timerEventName) {}
-
-  @Override
-  public void logRecordMemory(String memoryEventName) {}
 }
diff --git a/java/com/android/dialer/metrics/Metrics.java b/java/com/android/dialer/metrics/Metrics.java
index 7cdfa22..9488f30 100644
--- a/java/com/android/dialer/metrics/Metrics.java
+++ b/java/com/android/dialer/metrics/Metrics.java
@@ -17,13 +17,24 @@
 package com.android.dialer.metrics;
 
 import android.app.Application;
-import android.content.Context;
 
 /** Logs metrics. */
 public interface Metrics {
 
+  String APPLICATION_ON_CREATE_EVENT_NAME = "Application.onCreate";
+  String DIALTACTS_ON_CREATE_EVENT_NAME = "GoogleDialtactsActivity.onCreate";
+  String ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_INCOMING =
+      "CallList.onCallAdded_To_InCallActivity.onCreate_Incoming";
+  String ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_OUTGOING =
+      "CallList.onCallAdded_To_InCallActivity.onCreate_Outgoing";
+  String DIALTACTS_ON_RESUME_MEMORY_EVENT_NAME = "GoogleDialtactsActivity.onResume";
+  String INCALL_ACTIVITY_ON_RESUME_MEMORY_EVENT_NAME = "IncallActivity.OnResume";
+  String INCALL_ACTIVITY_ON_STOP_MEMORY_EVENT_NAME = "IncallActivity.OnStop";
+  String OLD_CALL_LOG_JANK_EVENT_NAME = "OldCallLog.Jank";
+  String NEW_CALL_LOG_JANK_EVENT_NAME = "NewCallLog.Jank";
+
   /** Start a timer. */
-  void startTimer(Context context, String timerEventName);
+  void startTimer(String timerEventName);
 
   /** Stop a timer. */
   void stopTimer(String timerEventName);
diff --git a/java/com/android/dialer/metrics/StubMetrics.java b/java/com/android/dialer/metrics/StubMetrics.java
index f4d41e2..99c3d76 100644
--- a/java/com/android/dialer/metrics/StubMetrics.java
+++ b/java/com/android/dialer/metrics/StubMetrics.java
@@ -16,7 +16,6 @@
 
 package com.android.dialer.metrics;
 
-import android.content.Context;
 import javax.inject.Inject;
 
 /** Stub {@link Metrics}. */
@@ -26,7 +25,7 @@
   StubMetrics() {}
 
   @Override
-  public void startTimer(Context context, String timerEventName) {}
+  public void startTimer(String timerEventName) {}
 
   @Override
   public void stopTimer(String timerEventName) {}
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 3fc7f6c..f842aed 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -61,8 +61,9 @@
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.LoggingBindings;
 import com.android.dialer.logging.ScreenEvent;
+import com.android.dialer.metrics.Metrics;
+import com.android.dialer.metrics.MetricsComponent;
 import com.android.dialer.util.ViewUtil;
 import com.android.incallui.answer.bindings.AnswerBindings;
 import com.android.incallui.answer.protocol.AnswerScreen;
@@ -249,10 +250,12 @@
     pseudoBlackScreenOverlay = findViewById(R.id.psuedo_black_screen_overlay);
     sendBroadcast(CallPendingActivity.getFinishBroadcast());
     Trace.endSection();
-    Logger.get(this)
-        .logStopLatencyTimer(LoggingBindings.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_INCOMING);
-    Logger.get(this)
-        .logStopLatencyTimer(LoggingBindings.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_OUTGOING);
+    MetricsComponent.get(this)
+        .metrics()
+        .stopTimer(Metrics.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_INCOMING);
+    MetricsComponent.get(this)
+        .metrics()
+        .stopTimer(Metrics.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_OUTGOING);
   }
 
   private void setWindowFlags() {
@@ -470,8 +473,9 @@
     // add 1 sec delay to get memory snapshot so that dialer wont react slowly on resume.
     ThreadUtil.postDelayedOnUiThread(
         () ->
-            Logger.get(this)
-                .logRecordMemory(LoggingBindings.INCALL_ACTIVITY_ON_RESUME_MEMORY_EVENT_NAME),
+            MetricsComponent.get(this)
+                .metrics()
+                .recordMemory(Metrics.INCALL_ACTIVITY_ON_RESUME_MEMORY_EVENT_NAME),
         1000);
   }
 
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index e594808..9a09026 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -36,7 +36,8 @@
 import com.android.dialer.enrichedcall.EnrichedCallManager;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.LoggingBindings;
+import com.android.dialer.metrics.Metrics;
+import com.android.dialer.metrics.MetricsComponent;
 import com.android.dialer.shortcuts.ShortcutUsageReporter;
 import com.android.dialer.spam.Spam;
 import com.android.dialer.spam.SpamComponent;
@@ -119,11 +120,13 @@
       final Context context, final android.telecom.Call telecomCall, LatencyReport latencyReport) {
     Trace.beginSection("CallList.onCallAdded");
     if (telecomCall.getState() == Call.STATE_CONNECTING) {
-      Logger.get(context)
-          .logStartLatencyTimer(LoggingBindings.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_OUTGOING);
+      MetricsComponent.get(context)
+          .metrics()
+          .startTimer(Metrics.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_OUTGOING);
     } else if (telecomCall.getState() == Call.STATE_RINGING) {
-      Logger.get(context)
-          .logStartLatencyTimer(LoggingBindings.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_INCOMING);
+      MetricsComponent.get(context)
+          .metrics()
+          .startTimer(Metrics.ON_CALL_ADDED_TO_ON_INCALL_UI_SHOWN_INCOMING);
     }
     if (uiListeners != null) {
       uiListeners.onCallAdded();
