summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/list/ListsFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/dialer/list/ListsFragment.java')
-rw-r--r--src/com/android/dialer/list/ListsFragment.java487
1 files changed, 0 insertions, 487 deletions
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
deleted file mode 100644
index 52bf3cbb5..000000000
--- a/src/com/android/dialer/list/ListsFragment.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.dialer.list;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.SharedPreferences;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.Trace;
-import android.preference.PreferenceManager;
-import android.provider.CallLog.Calls;
-import android.support.v13.app.FragmentPagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.support.v4.view.ViewPager.OnPageChangeListener;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AppCompatActivity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.contacts.common.list.ViewPagerTabs;
-import com.android.dialer.DialtactsActivity;
-import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogFragment;
-import com.android.dialer.calllog.CallLogNotificationsHelper;
-import com.android.dialer.calllog.CallLogQueryHandler;
-import com.android.dialer.calllog.VisualVoicemailCallLogFragment;
-import com.android.dialer.logging.Logger;
-import com.android.dialer.logging.ScreenEvent;
-import com.android.dialer.util.DialerUtils;
-import com.android.dialer.voicemail.VisualVoicemailEnabledChecker;
-import com.android.dialer.voicemail.VoicemailStatusHelper;
-import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
-import com.android.dialer.widget.ActionBarController;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Fragment that is used as the main screen of the Dialer.
- *
- * Contains a ViewPager that contains various contact lists like the Speed Dial list and the
- * All Contacts list. This will also eventually contain the logic that allows sliding the
- * ViewPager containing the lists up above the search bar and pin it against the top of the
- * screen.
- */
-public class ListsFragment extends Fragment
- implements ViewPager.OnPageChangeListener, CallLogQueryHandler.Listener {
-
- private static final boolean DEBUG = DialtactsActivity.DEBUG;
- private static final String TAG = "ListsFragment";
-
- public static final int TAB_INDEX_SPEED_DIAL = 0;
- public static final int TAB_INDEX_HISTORY = 1;
- public static final int TAB_INDEX_ALL_CONTACTS = 2;
- public static final int TAB_INDEX_VOICEMAIL = 3;
-
- public static final int TAB_COUNT_DEFAULT = 3;
- public static final int TAB_COUNT_WITH_VOICEMAIL = 4;
-
- public interface HostInterface {
- public ActionBarController getActionBarController();
- }
-
- private ActionBar mActionBar;
- private ViewPager mViewPager;
- private ViewPagerTabs mViewPagerTabs;
- private ViewPagerAdapter mViewPagerAdapter;
- private RemoveView mRemoveView;
- private View mRemoveViewContent;
-
- private SpeedDialFragment mSpeedDialFragment;
- private CallLogFragment mHistoryFragment;
- private AllContactsFragment mAllContactsFragment;
- private CallLogFragment mVoicemailFragment;
-
- private SharedPreferences mPrefs;
- private boolean mHasActiveVoicemailProvider;
- private boolean mHasFetchedVoicemailStatus;
- private boolean mShowVoicemailTabAfterVoicemailStatusIsFetched;
-
- private VoicemailStatusHelper mVoicemailStatusHelper;
- private ArrayList<OnPageChangeListener> mOnPageChangeListeners =
- new ArrayList<OnPageChangeListener>();
-
- private String[] mTabTitles;
- private int[] mTabIcons;
-
- /**
- * The position of the currently selected tab.
- */
- private int mTabIndex = TAB_INDEX_SPEED_DIAL;
- private CallLogQueryHandler mCallLogQueryHandler;
-
- public class ViewPagerAdapter extends FragmentPagerAdapter {
- private final List<Fragment> mFragments = new ArrayList<>();
-
- public ViewPagerAdapter(FragmentManager fm) {
- super(fm);
- for (int i = 0; i < TAB_COUNT_WITH_VOICEMAIL; i++) {
- mFragments.add(null);
- }
- }
-
- @Override
- public long getItemId(int position) {
- return getRtlPosition(position);
- }
-
- @Override
- public Fragment getItem(int position) {
- switch (getRtlPosition(position)) {
- case TAB_INDEX_SPEED_DIAL:
- mSpeedDialFragment = new SpeedDialFragment();
- return mSpeedDialFragment;
- case TAB_INDEX_HISTORY:
- mHistoryFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
- return mHistoryFragment;
- case TAB_INDEX_ALL_CONTACTS:
- mAllContactsFragment = new AllContactsFragment();
- return mAllContactsFragment;
- case TAB_INDEX_VOICEMAIL:
- mVoicemailFragment = new VisualVoicemailCallLogFragment();
- return mVoicemailFragment;
- }
- throw new IllegalStateException("No fragment at position " + position);
- }
-
- @Override
- public Fragment instantiateItem(ViewGroup container, int position) {
- // On rotation the FragmentManager handles rotation. Therefore getItem() isn't called.
- // Copy the fragments that the FragmentManager finds so that we can store them in
- // instance variables for later.
- final Fragment fragment =
- (Fragment) super.instantiateItem(container, position);
- if (fragment instanceof SpeedDialFragment) {
- mSpeedDialFragment = (SpeedDialFragment) fragment;
- } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_HISTORY) {
- mHistoryFragment = (CallLogFragment) fragment;
- } else if (fragment instanceof AllContactsFragment) {
- mAllContactsFragment = (AllContactsFragment) fragment;
- } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_VOICEMAIL) {
- mVoicemailFragment = (CallLogFragment) fragment;
- }
- mFragments.set(position, fragment);
- return fragment;
- }
-
- /**
- * When {@link android.support.v4.view.PagerAdapter#notifyDataSetChanged} is called,
- * this method is called on all pages to determine whether they need to be recreated.
- * When the voicemail tab is removed, the view needs to be recreated by returning
- * POSITION_NONE. If notifyDataSetChanged is called for some other reason, the voicemail
- * tab is recreated only if it is active. All other tabs do not need to be recreated
- * and POSITION_UNCHANGED is returned.
- */
- @Override
- public int getItemPosition(Object object) {
- return !mHasActiveVoicemailProvider &&
- mFragments.indexOf(object) == TAB_INDEX_VOICEMAIL ? POSITION_NONE :
- POSITION_UNCHANGED;
- }
-
- @Override
- public int getCount() {
- return mHasActiveVoicemailProvider ? TAB_COUNT_WITH_VOICEMAIL : TAB_COUNT_DEFAULT;
- }
-
- @Override
- public CharSequence getPageTitle(int position) {
- return mTabTitles[position];
- }
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- Trace.beginSection(TAG + " onCreate");
- super.onCreate(savedInstanceState);
-
- mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
- mHasFetchedVoicemailStatus = false;
-
- mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
- mHasActiveVoicemailProvider = mPrefs.getBoolean(
- VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false);
-
- Trace.endSection();
- }
-
- @Override
- public void onResume() {
- Trace.beginSection(TAG + " onResume");
- super.onResume();
-
- mActionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
- if (getUserVisibleHint()) {
- sendScreenViewForCurrentPosition();
- }
-
- // Fetch voicemail status to determine if we should show the voicemail tab.
- mCallLogQueryHandler =
- new CallLogQueryHandler(getActivity(), getActivity().getContentResolver(), this);
- mCallLogQueryHandler.fetchVoicemailStatus();
- mCallLogQueryHandler.fetchMissedCallsUnreadCount();
- Trace.endSection();
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- Trace.beginSection(TAG + " onCreateView");
- Trace.beginSection(TAG + " inflate view");
- final View parentView = inflater.inflate(R.layout.lists_fragment, container, false);
- Trace.endSection();
- Trace.beginSection(TAG + " setup views");
- mViewPager = (ViewPager) parentView.findViewById(R.id.lists_pager);
- mViewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
- mViewPager.setAdapter(mViewPagerAdapter);
- mViewPager.setOffscreenPageLimit(TAB_COUNT_WITH_VOICEMAIL - 1);
- mViewPager.setOnPageChangeListener(this);
- showTab(TAB_INDEX_SPEED_DIAL);
-
- mTabTitles = new String[TAB_COUNT_WITH_VOICEMAIL];
- mTabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial);
- mTabTitles[TAB_INDEX_HISTORY] = getResources().getString(R.string.tab_history);
- mTabTitles[TAB_INDEX_ALL_CONTACTS] = getResources().getString(R.string.tab_all_contacts);
- mTabTitles[TAB_INDEX_VOICEMAIL] = getResources().getString(R.string.tab_voicemail);
-
- mTabIcons = new int[TAB_COUNT_WITH_VOICEMAIL];
- mTabIcons[TAB_INDEX_SPEED_DIAL] = R.drawable.ic_grade_24dp;
- mTabIcons[TAB_INDEX_HISTORY] = R.drawable.ic_schedule_24dp;
- mTabIcons[TAB_INDEX_ALL_CONTACTS] = R.drawable.ic_people_24dp;
- mTabIcons[TAB_INDEX_VOICEMAIL] = R.drawable.ic_voicemail_24dp;
-
- mViewPagerTabs = (ViewPagerTabs) parentView.findViewById(R.id.lists_pager_header);
- mViewPagerTabs.configureTabIcons(mTabIcons);
- mViewPagerTabs.setViewPager(mViewPager);
- addOnPageChangeListener(mViewPagerTabs);
-
- mRemoveView = (RemoveView) parentView.findViewById(R.id.remove_view);
- mRemoveViewContent = parentView.findViewById(R.id.remove_view_content);
-
- Trace.endSection();
- Trace.endSection();
- return parentView;
- }
-
- public void addOnPageChangeListener(OnPageChangeListener onPageChangeListener) {
- if (!mOnPageChangeListeners.contains(onPageChangeListener)) {
- mOnPageChangeListeners.add(onPageChangeListener);
- }
- }
-
- /**
- * Shows the tab with the specified index. If the voicemail tab index is specified, but the
- * voicemail status hasn't been fetched, it will try to show the tab after the voicemail status
- * has been fetched.
- */
- public void showTab(int index) {
- if (index == TAB_INDEX_VOICEMAIL) {
- if (mHasActiveVoicemailProvider) {
- mViewPager.setCurrentItem(getRtlPosition(TAB_INDEX_VOICEMAIL));
- } else if (!mHasFetchedVoicemailStatus) {
- // Try to show the voicemail tab after the voicemail status returns.
- mShowVoicemailTabAfterVoicemailStatusIsFetched = true;
- }
- } else if (index < getTabCount()){
- mViewPager.setCurrentItem(getRtlPosition(index));
- }
- }
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- mTabIndex = getRtlPosition(position);
-
- final int count = mOnPageChangeListeners.size();
- for (int i = 0; i < count; i++) {
- mOnPageChangeListeners.get(i).onPageScrolled(position, positionOffset,
- positionOffsetPixels);
- }
- }
-
- @Override
- public void onPageSelected(int position) {
- mTabIndex = getRtlPosition(position);
-
- // Show the tab which has been selected instead.
- mShowVoicemailTabAfterVoicemailStatusIsFetched = false;
-
- final int count = mOnPageChangeListeners.size();
- for (int i = 0; i < count; i++) {
- mOnPageChangeListeners.get(i).onPageSelected(position);
- }
- sendScreenViewForCurrentPosition();
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- final int count = mOnPageChangeListeners.size();
- for (int i = 0; i < count; i++) {
- mOnPageChangeListeners.get(i).onPageScrollStateChanged(state);
- }
- }
-
- @Override
- public void onVoicemailStatusFetched(Cursor statusCursor) {
- mHasFetchedVoicemailStatus = true;
-
- if (getActivity() == null || getActivity().isFinishing()) {
- return;
- }
-
- // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed.
- boolean hasActiveVoicemailProvider =
- mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0;
- if (hasActiveVoicemailProvider != mHasActiveVoicemailProvider) {
- mHasActiveVoicemailProvider = hasActiveVoicemailProvider;
- mViewPagerAdapter.notifyDataSetChanged();
-
- if (hasActiveVoicemailProvider) {
- mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL);
- } else {
- mViewPagerTabs.removeTab(TAB_INDEX_VOICEMAIL);
- removeVoicemailFragment();
- }
-
- mPrefs.edit()
- .putBoolean(VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER,
- hasActiveVoicemailProvider)
- .commit();
- }
-
- if (hasActiveVoicemailProvider) {
- mCallLogQueryHandler.fetchVoicemailUnreadCount();
- }
-
- if (mHasActiveVoicemailProvider && mShowVoicemailTabAfterVoicemailStatusIsFetched) {
- mShowVoicemailTabAfterVoicemailStatusIsFetched = false;
- showTab(TAB_INDEX_VOICEMAIL);
- }
- }
-
- @Override
- public void onVoicemailUnreadCountFetched(Cursor cursor) {
- if (getActivity() == null || getActivity().isFinishing() || cursor == null) {
- return;
- }
-
- int count = 0;
- try {
- count = cursor.getCount();
- } finally {
- cursor.close();
- }
-
- mViewPagerTabs.setUnreadCount(count, TAB_INDEX_VOICEMAIL);
- mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL);
- }
-
- @Override
- public void onMissedCallsUnreadCountFetched(Cursor cursor) {
- if (getActivity() == null || getActivity().isFinishing() || cursor == null) {
- return;
- }
-
- int count = 0;
- try {
- count = cursor.getCount();
- } finally {
- cursor.close();
- }
-
- mViewPagerTabs.setUnreadCount(count, TAB_INDEX_HISTORY);
- mViewPagerTabs.updateTab(TAB_INDEX_HISTORY);
- }
-
- @Override
- public boolean onCallsFetched(Cursor statusCursor) {
- // Return false; did not take ownership of cursor
- return false;
- }
-
- public int getCurrentTabIndex() {
- return mTabIndex;
- }
-
- /**
- * External method to update unread count because the unread count changes when the user
- * expands a voicemail in the call log or when the user expands an unread call in the call
- * history tab.
- */
- public void updateTabUnreadCounts() {
- if (mCallLogQueryHandler != null) {
- mCallLogQueryHandler.fetchMissedCallsUnreadCount();
- if (mHasActiveVoicemailProvider) {
- mCallLogQueryHandler.fetchVoicemailUnreadCount();
- }
- }
- }
-
- /**
- * External method to mark all missed calls as read.
- */
- public void markMissedCallsAsReadAndRemoveNotifications() {
- if (mCallLogQueryHandler != null) {
- mCallLogQueryHandler.markMissedCallsAsRead();
- CallLogNotificationsHelper.removeMissedCallNotifications(getActivity());
- }
- }
-
-
- public void showRemoveView(boolean show) {
- mRemoveViewContent.setVisibility(show ? View.VISIBLE : View.GONE);
- mRemoveView.setAlpha(show ? 0 : 1);
- mRemoveView.animate().alpha(show ? 1 : 0).start();
- }
-
- public boolean shouldShowActionBar() {
- // TODO: Update this based on scroll state.
- return mActionBar != null;
- }
-
- public SpeedDialFragment getSpeedDialFragment() {
- return mSpeedDialFragment;
- }
-
- public RemoveView getRemoveView() {
- return mRemoveView;
- }
-
- public int getTabCount() {
- return mViewPagerAdapter.getCount();
- }
-
- private int getRtlPosition(int position) {
- if (DialerUtils.isRtl()) {
- return mViewPagerAdapter.getCount() - 1 - position;
- }
- return position;
- }
-
- public void sendScreenViewForCurrentPosition() {
- if (!isResumed()) {
- return;
- }
-
- int screenType;
- switch (getCurrentTabIndex()) {
- case TAB_INDEX_SPEED_DIAL:
- screenType = ScreenEvent.SPEED_DIAL;
- break;
- case TAB_INDEX_HISTORY:
- screenType = ScreenEvent.CALL_LOG;
- break;
- case TAB_INDEX_ALL_CONTACTS:
- screenType = ScreenEvent.ALL_CONTACTS;
- break;
- case TAB_INDEX_VOICEMAIL:
- screenType = ScreenEvent.VOICEMAIL_LOG;
- default:
- return;
- }
- Logger.logScreenView(screenType, getActivity());
- }
-
- private void removeVoicemailFragment() {
- if (mVoicemailFragment != null) {
- getChildFragmentManager().beginTransaction().remove(mVoicemailFragment)
- .commitAllowingStateLoss();
- mVoicemailFragment = null;
- }
- }
-}