am b48f64c8: Merge "Improve Dialer analytics" into lmp-mr1-dev

* commit 'b48f64c8dc3a7b17801222fe3be2c584054dcb66':
  Improve Dialer analytics
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 5e20793..4b5b198 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();
 
@@ -899,6 +918,7 @@
         transaction.commit();
 
         mListsFragment.getView().animate().alpha(0).withLayer();
+        mListsFragment.setUserVisibleHint(false);
     }
 
     /**
@@ -924,6 +944,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();
     }
 
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index c7862ae..1131b0e 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -34,12 +34,14 @@
 
 import com.android.contacts.common.interactions.TouchPointManager;
 import com.android.contacts.common.list.ViewPagerTabs;
+import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.voicemail.VoicemailStatusHelper;
 import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 
-public class CallLogActivity extends Activity implements CallLogQueryHandler.Listener {
+public class CallLogActivity extends Activity implements CallLogQueryHandler.Listener,
+    ViewPager.OnPageChangeListener {
     private Handler mHandler;
     private ViewPager mViewPager;
     private ViewPagerTabs mViewPagerTabs;
@@ -149,9 +151,9 @@
         mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
         mViewPager.setAdapter(mViewPagerAdapter);
         mViewPager.setOffscreenPageLimit(2);
+        mViewPager.setOnPageChangeListener(this);
 
         mViewPagerTabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
-        mViewPager.setOnPageChangeListener(mViewPagerTabs);
 
         if (startingTab == TAB_INDEX_VOICEMAIL) {
             // The addition of the voicemail tab is an asynchronous process, so wait till the tab
@@ -174,6 +176,7 @@
         CallLogQueryHandler callLogQueryHandler =
                 new CallLogQueryHandler(this.getContentResolver(), this);
         callLogQueryHandler.fetchVoicemailStatus();
+        sendScreenViewForChildFragment(mViewPager.getCurrentItem());
     }
 
     @Override
@@ -238,4 +241,43 @@
         // Return false; did not take ownership of cursor
         return false;
     }
+
+    @Override
+    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+        mViewPagerTabs.onPageScrolled(position, positionOffset, positionOffsetPixels);
+    }
+
+    @Override
+    public void onPageSelected(int position) {
+        if (isResumed()) {
+            sendScreenViewForChildFragment(position);
+        }
+        mViewPagerTabs.onPageSelected(position);
+    }
+
+    @Override
+    public void onPageScrollStateChanged(int state) {
+        mViewPagerTabs.onPageScrollStateChanged(state);
+    }
+
+    private void sendScreenViewForChildFragment(int position) {
+        AnalyticsUtil.sendScreenView(CallLogFragment.class.getSimpleName(), this,
+                getFragmentTagForPosition(position));
+    }
+
+    /**
+     * Returns the fragment located at the given position in the {@link ViewPagerAdapter}. May
+     * be null if the position is invalid.
+     */
+    private String getFragmentTagForPosition(int position) {
+        switch (position) {
+            case TAB_INDEX_ALL:
+                return "All";
+            case TAB_INDEX_MISSED:
+                return "Missed";
+            case TAB_INDEX_VOICEMAIL:
+                return "Voicemail";
+        }
+        return null;
+    }
 }
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 916c034..408d5b1 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -248,11 +248,6 @@
     }
 
     @Override
-    public void onStart() {
-        super.onStart();
-    }
-
-    @Override
     public void onResume() {
         super.onResume();
         final SharedPreferences prefs = getActivity().getSharedPreferences(
@@ -261,6 +256,9 @@
         mActionBar = getActivity().getActionBar();
         fetchCalls();
         mCallLogAdapter.setLoading(true);
+        if (getUserVisibleHint()) {
+            sendScreenViewForPosition(mViewPager.getCurrentItem());
+        }
     }
 
     @Override
@@ -359,17 +357,11 @@
 
     @Override
     public void onPageSelected(int position) {
-        if (position == TAB_INDEX_SPEED_DIAL && mSpeedDialFragment != null) {
-            AnalyticsUtil.sendScreenView(mSpeedDialFragment);
-        } else if (position == TAB_INDEX_RECENTS && mRecentsFragment != null) {
-            AnalyticsUtil.sendScreenView(mRecentsFragment);
-        } else if (position == TAB_INDEX_ALL_CONTACTS && mAllContactsFragment != null) {
-            AnalyticsUtil.sendScreenView(mAllContactsFragment);
-        }
         final int count = mOnPageChangeListeners.size();
         for (int i = 0; i < count; i++) {
             mOnPageChangeListeners.get(i).onPageSelected(position);
         }
+        sendScreenViewForPosition(position);
     }
 
     @Override
@@ -430,4 +422,29 @@
         }
         return position;
     }
+
+    public void sendScreenViewForCurrentPosition() {
+        sendScreenViewForPosition(mViewPager.getCurrentItem());
+    }
+
+    private void sendScreenViewForPosition(int position) {
+        if (!isResumed()) {
+            return;
+        }
+        String fragmentName;
+        switch (getRtlPosition(position)) {
+            case TAB_INDEX_SPEED_DIAL:
+                fragmentName = SpeedDialFragment.class.getSimpleName();
+                break;
+            case TAB_INDEX_RECENTS:
+                fragmentName = CallLogFragment.class.getSimpleName();
+                break;
+            case TAB_INDEX_ALL_CONTACTS:
+                fragmentName = AllContactsFragment.class.getSimpleName();
+                break;
+            default:
+                return;
+        }
+        AnalyticsUtil.sendScreenView(fragmentName, getActivity(), null);
+    }
 }
diff --git a/src/com/android/dialer/list/RegularSearchFragment.java b/src/com/android/dialer/list/RegularSearchFragment.java
index 9f4e6be..19c7321 100644
--- a/src/com/android/dialer/list/RegularSearchFragment.java
+++ b/src/com/android/dialer/list/RegularSearchFragment.java
@@ -20,6 +20,7 @@
 
 import com.android.contacts.common.list.ContactEntryListAdapter;
 import com.android.contacts.common.list.PinnedHeaderListView;
+import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 import com.android.dialerbind.ObjectFactory;
 import com.android.dialer.service.CachedNumberLookupService;
 
@@ -34,6 +35,12 @@
         configureDirectorySearch();
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+        AnalyticsUtil.sendScreenView(this);
+    }
+
     public void configureDirectorySearch() {
         setDirectorySearchEnabled(true);
         setDirectoryResultLimit(SEARCH_DIRECTORY_RESULT_LIMIT);
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index c655bbe..e50d0d8 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -70,7 +70,6 @@
         setDarkTheme(false);
         setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */));
         setUseCallableUri(true);
-        AnalyticsUtil.sendScreenView(this);
 
         try {
             mActivityScrollListener = (OnListFragmentScrolledListener) activity;
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
index 51c15f4..31db177 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
@@ -40,11 +40,13 @@
 import android.widget.TextView;
 
 import com.android.common.io.MoreCloseables;
+import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 import com.android.dialer.ProximitySensorAware;
 import com.android.dialer.R;
 import com.android.dialer.util.AsyncTaskExecutors;
 import com.android.ex.variablespeed.MediaPlayerProxy;
 import com.android.ex.variablespeed.VariableSpeed;
+
 import com.google.common.base.Preconditions;
 
 import java.util.concurrent.Executors;
@@ -112,6 +114,12 @@
     }
 
     @Override
+    public void onStart() {
+        super.onStart();
+        AnalyticsUtil.sendScreenView(this);
+    }
+
+    @Override
     public void onDestroy() {
         shutdownMediaPlayer();
         mPresenter.onDestroy();