1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/*
2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2013 The Android Open Source Project
3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License");
5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License.
6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at
7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *      http://www.apache.org/licenses/LICENSE-2.0
9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software
11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS,
12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and
14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License.
15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */
16d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian
17ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpackage com.android.dialer.app.list;
18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
19d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanianimport static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL;
20d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanianimport static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS;
21d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanianimport static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_HISTORY;
22d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanianimport static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL;
23d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanianimport static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL;
24d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian
253331545bd3fb769ae3f9246c0bd92fe35c6308absailimport android.app.Fragment;
26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.SharedPreferences;
27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.database.ContentObserver;
28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.database.Cursor;
29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.os.Bundle;
30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.os.Handler;
31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.os.Trace;
32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.preference.PreferenceManager;
33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.provider.VoicemailContract;
34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.v4.view.ViewPager.OnPageChangeListener;
35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.view.LayoutInflater;
36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.view.View;
37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.view.ViewGroup;
38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.contacts.common.list.ViewPagerTabs;
39ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.app.R;
40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.app.calllog.CallLogFragment;
41d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport com.android.dialer.app.calllog.CallLogNotificationsService;
42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.app.voicemail.error.VoicemailStatusCorruptionHandler;
43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.app.voicemail.error.VoicemailStatusCorruptionHandler.Source;
44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.common.LogUtil;
45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.database.CallLogQueryHandler;
462f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanianimport com.android.dialer.database.CallLogQueryHandler.Listener;
478369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport com.android.dialer.logging.DialerImpression;
48ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.logging.Logger;
498369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanianimport com.android.dialer.logging.ScreenEvent;
502f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanianimport com.android.dialer.logging.UiAction;
512f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanianimport com.android.dialer.performancereport.PerformanceReport;
52d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanianimport com.android.dialer.speeddial.SpeedDialFragment;
53c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanianimport com.android.dialer.util.PermissionsUtil;
54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker;
55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.voicemailstatus.VoicemailStatusHelper;
56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.util.ArrayList;
57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
58ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/**
59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Fragment that is used as the main screen of the Dialer.
60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian *
61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * <p>Contains a ViewPager that contains various contact lists like the Speed Dial list and the All
62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Contacts list. This will also eventually contain the logic that allows sliding the ViewPager
63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * containing the lists up above the search bar and pin it against the top of the screen.
64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */
652f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanianpublic class ListsFragment extends Fragment implements OnPageChangeListener, Listener {
66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
67ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private static final String TAG = "ListsFragment";
682f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian
692f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian  private DialerViewPager mViewPager;
70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private ViewPagerTabs mViewPagerTabs;
71d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian  private DialtactsPagerAdapter mAdapter;
72ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private RemoveView mRemoveView;
73ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private View mRemoveViewContent;
74d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian  private Fragment mCurrentPage;
75ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private SharedPreferences mPrefs;
76ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private boolean mHasFetchedVoicemailStatus;
77ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private boolean mShowVoicemailTabAfterVoicemailStatusIsFetched;
78d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian  private final ArrayList<OnPageChangeListener> mOnPageChangeListeners = new ArrayList<>();
79ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  /** The position of the currently selected tab. */
80ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private int mTabIndex = TAB_INDEX_SPEED_DIAL;
81cded3beaf28a703e1ef8f71bbc6836e6806c3736Tobias Thierer
822f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian  private boolean mPaused;
83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private CallLogQueryHandler mCallLogQueryHandler;
84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
852f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian  private UiAction.Type[] actionTypeList;
862f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian
87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  private final ContentObserver mVoicemailStatusObserver =
88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      new ContentObserver(new Handler()) {
89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        @Override
90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        public void onChange(boolean selfChange) {
91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          super.onChange(selfChange);
92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          mCallLogQueryHandler.fetchVoicemailStatus();
93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        }
94ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      };
95ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
96ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
97ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onCreate(Bundle savedInstanceState) {
98ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    LogUtil.d("ListsFragment.onCreate", null);
99ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.beginSection(TAG + " onCreate");
100ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onCreate(savedInstanceState);
101ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
102ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.endSection();
103ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
104ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
105ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
106ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onResume() {
107ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    LogUtil.d("ListsFragment.onResume", null);
108ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.beginSection(TAG + " onResume");
109ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onResume();
110ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
1118369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian    mPaused = false;
1128369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian
113ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (getUserVisibleHint()) {
114ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      sendScreenViewForCurrentPosition();
115ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
116ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
117ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // Fetch voicemail status to determine if we should show the voicemail tab.
118ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mCallLogQueryHandler =
119ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        new CallLogQueryHandler(getActivity(), getActivity().getContentResolver(), this);
120ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mCallLogQueryHandler.fetchVoicemailStatus();
121ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mCallLogQueryHandler.fetchMissedCallsUnreadCount();
122ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.endSection();
123d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mCurrentPage = mAdapter.getItem(mViewPager.getCurrentItem());
124d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    if (mCurrentPage instanceof CallLogFragment) {
125d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      ((CallLogFragment) mCurrentPage).onVisible();
126ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
127ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
128ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
129ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
130ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onPause() {
131ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    LogUtil.d("ListsFragment.onPause", null);
132d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    if (mCurrentPage instanceof CallLogFragment) {
133d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      ((CallLogFragment) mCurrentPage).onNotVisible();
134ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
135ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onPause();
1368369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian
1378369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian    mPaused = true;
138ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
139ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
140ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
141ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onDestroyView() {
142ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onDestroyView();
143ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPager.removeOnPageChangeListener(this);
144ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
145ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
146ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
147ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public View onCreateView(
148ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
149ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    LogUtil.d("ListsFragment.onCreateView", null);
150ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.beginSection(TAG + " onCreateView");
151ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.beginSection(TAG + " inflate view");
152ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final View parentView = inflater.inflate(R.layout.lists_fragment, container, false);
153ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.endSection();
154ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.beginSection(TAG + " setup views");
155d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian
1562f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    actionTypeList = new UiAction.Type[TAB_COUNT_WITH_VOICEMAIL];
1572f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    actionTypeList[TAB_INDEX_SPEED_DIAL] = UiAction.Type.CHANGE_TAB_TO_FAVORITE;
1582f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    actionTypeList[TAB_INDEX_HISTORY] = UiAction.Type.CHANGE_TAB_TO_CALL_LOG;
1592f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    actionTypeList[TAB_INDEX_ALL_CONTACTS] = UiAction.Type.CHANGE_TAB_TO_CONTACTS;
1602f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    actionTypeList[TAB_INDEX_VOICEMAIL] = UiAction.Type.CHANGE_TAB_TO_VOICEMAIL;
1612f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian
162d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    String[] tabTitles = new String[TAB_COUNT_WITH_VOICEMAIL];
163d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial);
164d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabTitles[TAB_INDEX_HISTORY] = getResources().getString(R.string.tab_history);
165d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabTitles[TAB_INDEX_ALL_CONTACTS] = getResources().getString(R.string.tab_all_contacts);
166d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabTitles[TAB_INDEX_VOICEMAIL] = getResources().getString(R.string.tab_voicemail);
167d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian
168d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    int[] tabIcons = new int[TAB_COUNT_WITH_VOICEMAIL];
169d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabIcons[TAB_INDEX_SPEED_DIAL] = R.drawable.quantum_ic_grade_white_24;
170d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabIcons[TAB_INDEX_HISTORY] = R.drawable.quantum_ic_schedule_white_24;
171d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabIcons[TAB_INDEX_ALL_CONTACTS] = R.drawable.quantum_ic_people_white_24;
172d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    tabIcons[TAB_INDEX_VOICEMAIL] = R.drawable.quantum_ic_voicemail_white_24;
173d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian
1742f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    mViewPager = (DialerViewPager) parentView.findViewById(R.id.lists_pager);
175d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mAdapter =
176d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian        new DialtactsPagerAdapter(
177d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian            getContext(),
178d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian            getChildFragmentManager(),
179d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian            tabTitles,
180d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian            mPrefs.getBoolean(
181d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian                VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false));
182d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mViewPager.setAdapter(mAdapter);
183ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPager.setOffscreenPageLimit(TAB_COUNT_WITH_VOICEMAIL - 1);
184ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPager.addOnPageChangeListener(this);
185ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    showTab(TAB_INDEX_SPEED_DIAL);
186ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
187ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPagerTabs = (ViewPagerTabs) parentView.findViewById(R.id.lists_pager_header);
188d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mViewPagerTabs.configureTabIcons(tabIcons);
189ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPagerTabs.setViewPager(mViewPager);
190ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    addOnPageChangeListener(mViewPagerTabs);
191ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mRemoveView = (RemoveView) parentView.findViewById(R.id.remove_view);
192ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mRemoveViewContent = parentView.findViewById(R.id.remove_view_content);
193ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
194c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian    if (PermissionsUtil.hasReadVoicemailPermissions(getContext())
195c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian        && PermissionsUtil.hasAddVoicemailPermissions(getContext())) {
196c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian      getActivity()
197c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian          .getContentResolver()
198c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian          .registerContentObserver(
199c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian              VoicemailContract.Status.CONTENT_URI, true, mVoicemailStatusObserver);
200c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian    } else {
2012f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian      LogUtil.w("ListsFragment.onCreateView", "no voicemail read permissions");
202c857f90590e7d7fcffa89511982eb33afd34805fEric Erfanian    }
203ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
204ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.endSection();
205ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Trace.endSection();
206ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    return parentView;
207ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
208ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
209ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
210ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onDestroy() {
211ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    getActivity().getContentResolver().unregisterContentObserver(mVoicemailStatusObserver);
212ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    super.onDestroy();
213ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
214ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
215ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void addOnPageChangeListener(OnPageChangeListener onPageChangeListener) {
216ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (!mOnPageChangeListeners.contains(onPageChangeListener)) {
217ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mOnPageChangeListeners.add(onPageChangeListener);
218ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
219ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
220ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
221ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  /**
222ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian   * Shows the tab with the specified index. If the voicemail tab index is specified, but the
2232f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian   * voicemail status hasn't been fetched, it will show the speed dial tab and try to show the
2242f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian   * voicemail tab after the voicemail status has been fetched.
225ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian   */
226ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void showTab(int index) {
227ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (index == TAB_INDEX_VOICEMAIL) {
228d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      if (mAdapter.hasActiveVoicemailProvider()) {
229d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian        mViewPager.setCurrentItem(mAdapter.getRtlPosition(TAB_INDEX_VOICEMAIL));
230ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      } else if (!mHasFetchedVoicemailStatus) {
231ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        // Try to show the voicemail tab after the voicemail status returns.
232ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        mShowVoicemailTabAfterVoicemailStatusIsFetched = true;
233ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      }
234ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    } else if (index < getTabCount()) {
235d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      mViewPager.setCurrentItem(mAdapter.getRtlPosition(index));
236ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
237ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
238ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
239ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
240ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
241d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mTabIndex = mAdapter.getRtlPosition(position);
242ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
243ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final int count = mOnPageChangeListeners.size();
244ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    for (int i = 0; i < count; i++) {
245ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mOnPageChangeListeners.get(i).onPageScrolled(position, positionOffset, positionOffsetPixels);
246ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
247ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
248ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
249ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
250ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onPageSelected(int position) {
2512f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    PerformanceReport.recordClick(actionTypeList[position]);
2522f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian
253ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    LogUtil.i("ListsFragment.onPageSelected", "position: %d", position);
254d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mTabIndex = mAdapter.getRtlPosition(position);
255ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
256ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // Show the tab which has been selected instead.
257ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mShowVoicemailTabAfterVoicemailStatusIsFetched = false;
258ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
259ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final int count = mOnPageChangeListeners.size();
260ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    for (int i = 0; i < count; i++) {
261ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mOnPageChangeListeners.get(i).onPageSelected(position);
262ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
263ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    sendScreenViewForCurrentPosition();
264ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
265d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    if (mCurrentPage instanceof CallLogFragment) {
266d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      ((CallLogFragment) mCurrentPage).onNotVisible();
267ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
268d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    mCurrentPage = mAdapter.getItem(position);
269d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    if (mCurrentPage instanceof CallLogFragment) {
270d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      ((CallLogFragment) mCurrentPage).onVisible();
271ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
272ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
273ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
274ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
275ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onPageScrollStateChanged(int state) {
276ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    final int count = mOnPageChangeListeners.size();
277ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    for (int i = 0; i < count; i++) {
278ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mOnPageChangeListeners.get(i).onPageScrollStateChanged(state);
279ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
280ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
281ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
282ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
283ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onVoicemailStatusFetched(Cursor statusCursor) {
284ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mHasFetchedVoicemailStatus = true;
285ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
2868369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian    if (getActivity() == null || mPaused) {
287ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      return;
288ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
289ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
290ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    VoicemailStatusCorruptionHandler.maybeFixVoicemailStatus(
291ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        getContext(), statusCursor, Source.Activity);
292ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
293d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    // Update hasActiveVoicemailProvider, which controls the number of tabs displayed.
294ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    boolean hasActiveVoicemailProvider =
29510ae593a59aa50963e1d3159747da2d65ca79bedEric Erfanian        VoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0;
296d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    if (hasActiveVoicemailProvider != mAdapter.hasActiveVoicemailProvider()) {
297d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      mAdapter.setHasActiveVoicemailProvider(hasActiveVoicemailProvider);
298d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      mAdapter.notifyDataSetChanged();
299ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
300ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      if (hasActiveVoicemailProvider) {
3019a090c89e7a0c43a668bd6e2ac5e5e680f323aedEric Erfanian        Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_TAB_VISIBLE);
302ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL);
303ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      } else {
304ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        mViewPagerTabs.removeTab(TAB_INDEX_VOICEMAIL);
305d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian        mAdapter.removeVoicemailFragment(getChildFragmentManager());
306ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      }
307ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
308ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mPrefs
309ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          .edit()
310ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian          .putBoolean(
311ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER,
312ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian              hasActiveVoicemailProvider)
313d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian          .apply();
314ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
315ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
316ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (hasActiveVoicemailProvider) {
317ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mCallLogQueryHandler.fetchVoicemailUnreadCount();
318ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
319ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
320d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    if (mAdapter.hasActiveVoicemailProvider() && mShowVoicemailTabAfterVoicemailStatusIsFetched) {
321ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mShowVoicemailTabAfterVoicemailStatusIsFetched = false;
322ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      showTab(TAB_INDEX_VOICEMAIL);
323ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
324ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
325ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
326ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
327ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onVoicemailUnreadCountFetched(Cursor cursor) {
328ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (getActivity() == null || getActivity().isFinishing() || cursor == null) {
329ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      return;
330ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
331ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
332ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    int count = 0;
333ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    try {
334ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      count = cursor.getCount();
335ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    } finally {
336ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      cursor.close();
337ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
338ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
339ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPagerTabs.setUnreadCount(count, TAB_INDEX_VOICEMAIL);
340ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL);
341ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
342ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
343ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
344ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void onMissedCallsUnreadCountFetched(Cursor cursor) {
345ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (getActivity() == null || getActivity().isFinishing() || cursor == null) {
346ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      return;
347ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
348ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
349ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    int count = 0;
350ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    try {
351ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      count = cursor.getCount();
352ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    } finally {
353ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      cursor.close();
354ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
355ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
356ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPagerTabs.setUnreadCount(count, TAB_INDEX_HISTORY);
357ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mViewPagerTabs.updateTab(TAB_INDEX_HISTORY);
358ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
359ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
360ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  @Override
361ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public boolean onCallsFetched(Cursor statusCursor) {
362ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    // Return false; did not take ownership of cursor
363ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    return false;
364ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
365ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
366ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public int getCurrentTabIndex() {
367ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    return mTabIndex;
368ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
369ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
370ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  /**
371ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian   * External method to update unread count because the unread count changes when the user expands a
372ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian   * voicemail in the call log or when the user expands an unread call in the call history tab.
373ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian   */
374ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void updateTabUnreadCounts() {
375ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (mCallLogQueryHandler != null) {
376ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mCallLogQueryHandler.fetchMissedCallsUnreadCount();
377d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian      if (mAdapter.hasActiveVoicemailProvider()) {
378ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        mCallLogQueryHandler.fetchVoicemailUnreadCount();
379ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      }
380ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
381ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
382ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
383ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  /** External method to mark all missed calls as read. */
384ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void markMissedCallsAsReadAndRemoveNotifications() {
385ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (mCallLogQueryHandler != null) {
386ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      mCallLogQueryHandler.markMissedCallsAsRead();
3872f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian      CallLogNotificationsService.cancelAllMissedCalls(getContext());
388ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
389ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
390ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
391ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void showRemoveView(boolean show) {
392ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mRemoveViewContent.setVisibility(show ? View.VISIBLE : View.GONE);
393ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mRemoveView.setAlpha(show ? 0 : 1);
394ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    mRemoveView.animate().alpha(show ? 1 : 0).start();
395ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
396ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
3972f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian  public void showMultiSelectRemoveView(boolean show) {
3982f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    mViewPagerTabs.setVisibility(show ? View.GONE : View.VISIBLE);
3992f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian    mViewPager.setEnableSwipingPages(!show);
4002f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian  }
4012f1c7586bcce334ca69022eb8dc6d8965ceb6a05Eric Erfanian
402d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian  public boolean hasFrequents() {
403d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    Fragment page = mAdapter.getItem(mAdapter.getRtlPosition(TAB_INDEX_SPEED_DIAL));
404d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    return page instanceof OldSpeedDialFragment
405d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian        ? ((OldSpeedDialFragment) page).hasFrequents()
406d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian        : ((SpeedDialFragment) page).hasFrequents();
407ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
408ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
409ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public RemoveView getRemoveView() {
410ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    return mRemoveView;
411ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
412ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
413ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public int getTabCount() {
414d8046e520a866b9948ee9ba47cf642b441ca8e23Eric Erfanian    return mAdapter.getCount();
415ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
416ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
417ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  public void sendScreenViewForCurrentPosition() {
418ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    if (!isResumed()) {
419ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      return;
420ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
421ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian
4228369df095a73a77b3715f8ae7ba06089cebca4ceEric Erfanian    ScreenEvent.Type screenType;
423ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    switch (getCurrentTabIndex()) {
424ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      case TAB_INDEX_SPEED_DIAL:
425ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        screenType = ScreenEvent.Type.SPEED_DIAL;
426ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
427ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      case TAB_INDEX_HISTORY:
428ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        screenType = ScreenEvent.Type.CALL_LOG;
429ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
430ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      case TAB_INDEX_ALL_CONTACTS:
431ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        screenType = ScreenEvent.Type.ALL_CONTACTS;
432ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
433ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      case TAB_INDEX_VOICEMAIL:
434ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        screenType = ScreenEvent.Type.VOICEMAIL_LOG;
435ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        break;
436ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian      default:
437ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian        return;
438ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    }
439ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian    Logger.get(getActivity()).logScreenView(screenType, getActivity());
440ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian  }
441ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian}
442