diff options
Diffstat (limited to 'src/com/android/dialer/calllog/CallLogActivity.java')
-rw-r--r-- | src/com/android/dialer/calllog/CallLogActivity.java | 77 |
1 files changed, 67 insertions, 10 deletions
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java index c7862aee6..33e72bc12 100644 --- a/src/com/android/dialer/calllog/CallLogActivity.java +++ b/src/com/android/dialer/calllog/CallLogActivity.java @@ -31,15 +31,18 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; +import android.view.ViewGroup; 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; @@ -81,19 +84,34 @@ public class CallLogActivity extends Activity implements CallLogQueryHandler.Lis public Fragment getItem(int position) { switch (position) { case TAB_INDEX_ALL: - mAllCallsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL); - return mAllCallsFragment; + return new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL); case TAB_INDEX_MISSED: - mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE); - return mMissedCallsFragment; + return new CallLogFragment(Calls.MISSED_TYPE); case TAB_INDEX_VOICEMAIL: - mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE); - return mVoicemailFragment; + return new CallLogFragment(Calls.VOICEMAIL_TYPE); } throw new IllegalStateException("No fragment at position " + position); } @Override + public Object instantiateItem(ViewGroup container, int position) { + final CallLogFragment fragment = + (CallLogFragment) super.instantiateItem(container, position); + switch (position) { + case TAB_INDEX_ALL: + mAllCallsFragment = fragment; + break; + case TAB_INDEX_MISSED: + mMissedCallsFragment = fragment; + break; + case TAB_INDEX_VOICEMAIL: + mVoicemailFragment = fragment; + break; + } + return fragment; + } + + @Override public CharSequence getPageTitle(int position) { return mTabTitles[position]; } @@ -149,9 +167,9 @@ public class CallLogActivity extends Activity implements CallLogQueryHandler.Lis 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 +192,7 @@ public class CallLogActivity extends Activity implements CallLogQueryHandler.Lis CallLogQueryHandler callLogQueryHandler = new CallLogQueryHandler(this.getContentResolver(), this); callLogQueryHandler.fetchVoicemailStatus(); + sendScreenViewForChildFragment(mViewPager.getCurrentItem()); } @Override @@ -186,9 +205,8 @@ public class CallLogActivity extends Activity implements CallLogQueryHandler.Lis @Override public boolean onPrepareOptionsMenu(Menu menu) { final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all); - - // If onPrepareOptionsMenu is called before fragments loaded. Don't do anything. if (mAllCallsFragment != null && itemDeleteAll != null) { + // If onPrepareOptionsMenu is called before fragments are loaded, don't do anything. final CallLogAdapter adapter = mAllCallsFragment.getAdapter(); itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty()); } @@ -238,4 +256,43 @@ public class CallLogActivity extends Activity implements CallLogQueryHandler.Lis // 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; + } } |