Improve Dialer analytics

* Send screen view for first fragment loaded inside ListsFragment
* Send screen view for voicemail playback fragment
* Send screen view for currently active fragment when activity is restarted
* Don't send spurious screen views on rotation
* Send screen views for call log fragments in call log activity, and
differentiate between them with a tag

Bug: 18158037

Change-Id: I09fda53db33f6a6acc4a3b477de992aa94921c71
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 241080f..9c8137e 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -182,6 +182,7 @@
      * be commited.
      */
     private boolean mStateSaved;
+    private boolean mIsRestarting;
     private boolean mInDialpadSearch;
     private boolean mInRegularSearch;
     private boolean mClearSearchOnPause;
@@ -477,12 +478,27 @@
             mShowDialpadOnResume = false;
         }
         mFirstLaunch = false;
+
+        if (mIsRestarting) {
+            // 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);
+            }
+            mIsRestarting = false;
+        }
         prepareVoiceSearchButton();
         mDialerDatabaseHelper.startSmartDialUpdateThread();
         updateFloatingActionButtonControllerAlignment(false /* animate */);
     }
 
     @Override
+    protected void onRestart() {
+        super.onRestart();
+        mIsRestarting = true;
+    }
+
+    @Override
     protected void onPause() {
         if (mClearSearchOnPause) {
             hideDialpadAndSearchUi();
@@ -624,6 +640,7 @@
         }
         mIsDialpadShown = true;
         mDialpadFragment.setAnimate(animate);
+        mListsFragment.setUserVisibleHint(false);
         AnalyticsUtil.sendScreenView(mDialpadFragment);
 
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
@@ -672,6 +689,8 @@
         }
         mIsDialpadShown = false;
         mDialpadFragment.setAnimate(animate);
+        mListsFragment.setUserVisibleHint(true);
+        mListsFragment.sendScreenViewForCurrentPosition();
 
         updateSearchFragmentPosition();
 
@@ -898,6 +917,7 @@
         transaction.commit();
 
         mListsFragment.getView().animate().alpha(0).withLayer();
+        mListsFragment.setUserVisibleHint(false);
     }
 
     /**
@@ -923,6 +943,14 @@
         transaction.commit();
 
         mListsFragment.getView().animate().alpha(1).withLayer();
+        if (!mDialpadFragment.isVisible()) {
+            // If the dialpad fragment wasn't previously visible, then send a screen view because
+            // we are exiting regular search. Otherwise, the screen view will be sent by
+            // {@link #hideDialpadFragment}.
+            mListsFragment.sendScreenViewForCurrentPosition();
+            mListsFragment.setUserVisibleHint(true);
+        }
+
         mActionBarController.onSearchUiExited();
     }