diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 84100b7..b4dd6c9 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -81,6 +81,7 @@
 import com.android.dialer.list.SearchFragment;
 import com.android.dialer.list.SmartDialSearchFragment;
 import com.android.dialer.list.SpeedDialFragment;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.settings.DialerSettingsActivity;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.IntentUtil;
@@ -526,7 +527,7 @@
             // This is only called when the activity goes from resumed -> paused -> resumed, so it
             // will not cause an extra view to be sent out on rotation
             if (mIsDialpadShown) {
-                AnalyticsUtil.sendScreenView(mDialpadFragment, this);
+                Logger.logFragmentView(mDialpadFragment);
             }
             mIsRestarting = false;
         }
@@ -741,7 +742,9 @@
         }
 
         mDialpadFragment.setAnimate(animate);
-        AnalyticsUtil.sendScreenView(mDialpadFragment);
+        // logScreenView is used here explicitly to provide the activity as the DialpadFragment
+        // might not have been attached yet.
+        Logger.logScreenView(DialpadFragment.class.getSimpleName(), this, null);
         ft.commit();
 
         if (animate) {
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index c1923b2..f6defcf 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -40,6 +40,7 @@
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.TransactionSafeActivity;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.util.DialerUtils;
 
 public class CallLogActivity extends TransactionSafeActivity implements ViewPager.OnPageChangeListener {
@@ -222,7 +223,7 @@
     }
 
     private void sendScreenViewForChildFragment(int position) {
-        AnalyticsUtil.sendScreenView(CallLogFragment.class.getSimpleName(), this,
+        Logger.logScreenView(CallLogFragment.class.getSimpleName(), this,
                 getFragmentTagForPosition(position));
     }
 
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 934792c..08a2373 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -45,6 +45,7 @@
 import com.android.dialer.calllog.CallLogFragment;
 import com.android.dialer.calllog.CallLogQueryHandler;
 import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.voicemail.VoicemailStatusHelper;
 import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
@@ -403,21 +404,24 @@
         }
 
         String fragmentName;
+        String tag = null;
         switch (getCurrentTabIndex()) {
             case TAB_INDEX_SPEED_DIAL:
                 fragmentName = SpeedDialFragment.class.getSimpleName();
                 break;
             case TAB_INDEX_HISTORY:
-                fragmentName = CallLogFragment.class.getSimpleName() + "#History";
+                fragmentName = CallLogFragment.class.getSimpleName();
+                tag = "History";
                 break;
             case TAB_INDEX_ALL_CONTACTS:
                 fragmentName = AllContactsFragment.class.getSimpleName();
                 break;
             case TAB_INDEX_VOICEMAIL:
-                fragmentName = CallLogFragment.class.getSimpleName() + "#Voicemail";
+                fragmentName = CallLogFragment.class.getSimpleName();
+                tag = "Voicemail";
             default:
                 return;
         }
-        AnalyticsUtil.sendScreenView(fragmentName, getActivity(), null);
+        Logger.logScreenView(fragmentName, getActivity(), tag);
     }
 }
diff --git a/src/com/android/dialer/list/RegularSearchFragment.java b/src/com/android/dialer/list/RegularSearchFragment.java
index ed88d83..c0807c3 100644
--- a/src/com/android/dialer/list/RegularSearchFragment.java
+++ b/src/com/android/dialer/list/RegularSearchFragment.java
@@ -30,6 +30,7 @@
 import com.android.incallui.Call.LogState;
 
 import com.android.dialer.R;
+import com.android.dialer.logging.Logger;
 import com.android.dialer.service.CachedNumberLookupService;
 import com.android.dialer.widget.EmptyContentView;
 import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
@@ -57,7 +58,7 @@
     @Override
     public void onStart() {
         super.onStart();
-        AnalyticsUtil.sendScreenView(this);
+        Logger.logFragmentView(this);
     }
 
     public void configureDirectorySearch() {
diff --git a/src/com/android/dialer/logging/Logger.java b/src/com/android/dialer/logging/Logger.java
index 3007077..ee23dc8 100644
--- a/src/com/android/dialer/logging/Logger.java
+++ b/src/com/android/dialer/logging/Logger.java
@@ -17,11 +17,18 @@
 package com.android.dialer.logging;
 
 import android.app.Activity;
+import android.app.Fragment;
+import android.text.TextUtils;
 
+import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 import com.android.dialerbind.ObjectFactory;
 import com.android.incallui.Call;
 
+/**
+ * Single entry point for all logging/analytics-related work for all user interactions.
+ */
 public abstract class Logger {
+    public static final String FRAGMENT_TAG_SEPARATOR = "#";
 
     public static Logger getInstance() {
         return ObjectFactory.getLoggerInstance();
@@ -40,19 +47,49 @@
     }
 
     /**
-     * Logs an event indicating that a screen/fragment was displayed.
+     * Logs an event indicating that a fragment was displayed.
      *
-     * @param fragmentName of the displayed fragment.
-     * @param activity Parent activity of the fragment.
-     * @param tag Optional string used to provide additional information about the fragment.
+     * @param fragment to log an event for.
      */
-    public static void logScreenView(String fragmentName, Activity activity, String tag) {
+    public static void logFragmentView(Fragment fragment) {
+        if (fragment == null) {
+            return;
+        }
+
+        logScreenView(fragment.getClass().getSimpleName(), fragment.getActivity(), null);
+    }
+
+    /**
+     * Logs an event indicating that a screen was displayed.
+     *
+     * @param screenName of the displayed screen.
+     * @param activity Parent activity of the displayed screen.
+     * @param tag Optional string used to provide additional information about the screen.
+     */
+    public static void logScreenView(String screenName, Activity activity, String tag) {
         final Logger logger = getInstance();
         if (logger != null) {
-            logger.logScreenViewImpl(fragmentName, activity, tag);
+            logger.logScreenViewImpl(getScreenNameWithTag(screenName, tag));
         }
+
+        AnalyticsUtil.sendScreenView(screenName, activity, tag);
+    }
+
+    /**
+     * Build a tagged version of the provided screenName if the tag is non-empty.
+     *
+     * @param screenName Name of the screen.
+     * @param tag Optional tag describing the screen.
+     * @return the unchanged screenName if the tag is {@code null} or empty, the tagged version of
+     *         the screenName otherwise.
+     */
+    public static String getScreenNameWithTag(String screenName, String tag) {
+        if (TextUtils.isEmpty(tag)) {
+            return screenName;
+        }
+        return screenName + FRAGMENT_TAG_SEPARATOR + tag;
     }
 
     public abstract void logCallImpl(Call call);
-    public abstract void logScreenViewImpl(String fragmentName, Activity activity, String tag);
+    public abstract void logScreenViewImpl(String screenName);
 }
