Route all existing screen view events through the Logger

* The logger is responsible for sending it to its logging
implementation, and also to AnalyicsUtil.
* Standardize logic for creating a tagged version of a screen
name

Bug: 23164804
Change-Id: I9b817fba5359f78340f2d9fdba54af9ea73cdb37
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index dabe590..4fa4bc2 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);
 }