diff options
author | Eric Erfanian <erfanian@google.com> | 2017-04-06 23:10:13 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-04-06 23:10:13 +0000 |
commit | 01a86435499d66b267765f89b7dd9c83c158ddfe (patch) | |
tree | 8d08d4f2292aa84dc435d455891e7ab633d95a25 /java/com/android/dialer/app/list/ListsFragment.java | |
parent | a21467406351a08813a3fedbdd361fcc18a51d89 (diff) | |
parent | d8046e520a866b9948ee9ba47cf642b441ca8e23 (diff) |
Update AOSP Dialer source from internal google3 repository at cl/152373142.
am: d8046e520a
Change-Id: I1155c69ffb6c96513e5820df18d1ecdcdaea8582
Diffstat (limited to 'java/com/android/dialer/app/list/ListsFragment.java')
-rw-r--r-- | java/com/android/dialer/app/list/ListsFragment.java | 274 |
1 files changed, 60 insertions, 214 deletions
diff --git a/java/com/android/dialer/app/list/ListsFragment.java b/java/com/android/dialer/app/list/ListsFragment.java index 3b94e1562..bf29ef310 100644 --- a/java/com/android/dialer/app/list/ListsFragment.java +++ b/java/com/android/dialer/app/list/ListsFragment.java @@ -13,11 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.android.dialer.app.list; -import android.app.Activity; +import static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_COUNT_WITH_VOICEMAIL; +import static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_ALL_CONTACTS; +import static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_HISTORY; +import static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL; +import static com.android.dialer.app.list.DialtactsPagerAdapter.TAB_INDEX_VOICEMAIL; + import android.app.Fragment; -import android.app.FragmentManager; import android.content.SharedPreferences; import android.database.ContentObserver; import android.database.Cursor; @@ -26,8 +31,6 @@ import android.os.Handler; import android.os.Trace; import android.preference.PreferenceManager; import android.provider.VoicemailContract; -import android.support.annotation.Nullable; -import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.LayoutInflater; @@ -37,7 +40,6 @@ import com.android.contacts.common.list.ViewPagerTabs; import com.android.dialer.app.R; import com.android.dialer.app.calllog.CallLogFragment; import com.android.dialer.app.calllog.CallLogNotificationsService; -import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment; import com.android.dialer.app.voicemail.error.VoicemailStatusCorruptionHandler; import com.android.dialer.app.voicemail.error.VoicemailStatusCorruptionHandler.Source; import com.android.dialer.common.LogUtil; @@ -45,11 +47,10 @@ import com.android.dialer.database.CallLogQueryHandler; import com.android.dialer.logging.Logger; import com.android.dialer.logging.nano.DialerImpression; import com.android.dialer.logging.nano.ScreenEvent; -import com.android.dialer.util.ViewUtil; +import com.android.dialer.speeddial.SpeedDialFragment; import com.android.dialer.voicemailstatus.VisualVoicemailEnabledChecker; import com.android.dialer.voicemailstatus.VoicemailStatusHelper; import java.util.ArrayList; -import java.util.List; /** * Fragment that is used as the main screen of the Dialer. @@ -61,51 +62,18 @@ import java.util.List; public class ListsFragment extends Fragment implements ViewPager.OnPageChangeListener, CallLogQueryHandler.Listener { - /** Every fragment in the list show implement this interface. */ - public interface ListsPage { - - /** - * Called when the page is resumed, including selecting the page or activity resume. Note: This - * is called before the page fragment is attached to a activity. - * - * @param activity the activity hosting the ListFragment - */ - void onPageResume(@Nullable Activity activity); - - /** - * Called when the page is paused, including selecting another page or activity pause. Note: - * This is called after the page fragment is detached from a activity. - * - * @param activity the activity hosting the ListFragment - */ - void onPagePause(@Nullable Activity activity); - } - - 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; private static final String TAG = "ListsFragment"; private ViewPager mViewPager; private ViewPagerTabs mViewPagerTabs; - private ViewPagerAdapter mViewPagerAdapter; + private DialtactsPagerAdapter mAdapter; private RemoveView mRemoveView; private View mRemoveViewContent; - private SpeedDialFragment mSpeedDialFragment; - private CallLogFragment mHistoryFragment; - private AllContactsFragment mAllContactsFragment; - private CallLogFragment mVoicemailFragment; - private ListsPage mCurrentPage; + private Fragment mCurrentPage; private SharedPreferences mPrefs; - private boolean mHasActiveVoicemailProvider; private boolean mHasFetchedVoicemailStatus; private boolean mShowVoicemailTabAfterVoicemailStatusIsFetched; private VoicemailStatusHelper mVoicemailStatusHelper; private final ArrayList<OnPageChangeListener> mOnPageChangeListeners = new ArrayList<>(); - private String[] mTabTitles; - private int[] mTabIcons; /** The position of the currently selected tab. */ private int mTabIndex = TAB_INDEX_SPEED_DIAL; @@ -125,15 +93,8 @@ public class ListsFragment extends Fragment LogUtil.d("ListsFragment.onCreate", null); Trace.beginSection(TAG + " onCreate"); super.onCreate(savedInstanceState); - mVoicemailStatusHelper = new VoicemailStatusHelper(); - mHasFetchedVoicemailStatus = false; - mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); - mHasActiveVoicemailProvider = - mPrefs.getBoolean( - VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false); - Trace.endSection(); } @@ -153,17 +114,17 @@ public class ListsFragment extends Fragment mCallLogQueryHandler.fetchVoicemailStatus(); mCallLogQueryHandler.fetchMissedCallsUnreadCount(); Trace.endSection(); - mCurrentPage = getListsPage(mViewPager.getCurrentItem()); - if (mCurrentPage != null) { - mCurrentPage.onPageResume(getActivity()); + mCurrentPage = mAdapter.getItem(mViewPager.getCurrentItem()); + if (mCurrentPage instanceof CallLogFragment) { + ((CallLogFragment) mCurrentPage).onVisible(); } } @Override public void onPause() { LogUtil.d("ListsFragment.onPause", null); - if (mCurrentPage != null) { - mCurrentPage.onPagePause(getActivity()); + if (mCurrentPage instanceof CallLogFragment) { + ((CallLogFragment) mCurrentPage).onNotVisible(); } super.onPause(); } @@ -183,27 +144,34 @@ public class ListsFragment extends Fragment final View parentView = inflater.inflate(R.layout.lists_fragment, container, false); Trace.endSection(); Trace.beginSection(TAG + " setup views"); + + String[] tabTitles = new String[TAB_COUNT_WITH_VOICEMAIL]; + tabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial); + tabTitles[TAB_INDEX_HISTORY] = getResources().getString(R.string.tab_history); + tabTitles[TAB_INDEX_ALL_CONTACTS] = getResources().getString(R.string.tab_all_contacts); + tabTitles[TAB_INDEX_VOICEMAIL] = getResources().getString(R.string.tab_voicemail); + + int[] tabIcons = new int[TAB_COUNT_WITH_VOICEMAIL]; + tabIcons[TAB_INDEX_SPEED_DIAL] = R.drawable.quantum_ic_grade_white_24; + tabIcons[TAB_INDEX_HISTORY] = R.drawable.quantum_ic_schedule_white_24; + tabIcons[TAB_INDEX_ALL_CONTACTS] = R.drawable.quantum_ic_people_white_24; + tabIcons[TAB_INDEX_VOICEMAIL] = R.drawable.quantum_ic_voicemail_white_24; + mViewPager = (ViewPager) parentView.findViewById(R.id.lists_pager); - mViewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager()); - mViewPager.setAdapter(mViewPagerAdapter); + mAdapter = + new DialtactsPagerAdapter( + getContext(), + getChildFragmentManager(), + tabTitles, + mPrefs.getBoolean( + VisualVoicemailEnabledChecker.PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER, false)); + mViewPager.setAdapter(mAdapter); mViewPager.setOffscreenPageLimit(TAB_COUNT_WITH_VOICEMAIL - 1); mViewPager.addOnPageChangeListener(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.configureTabIcons(tabIcons); mViewPagerTabs.setViewPager(mViewPager); addOnPageChangeListener(mViewPagerTabs); @@ -239,20 +207,20 @@ public class ListsFragment extends Fragment */ public void showTab(int index) { if (index == TAB_INDEX_VOICEMAIL) { - if (mHasActiveVoicemailProvider) { - mViewPager.setCurrentItem(getRtlPosition(TAB_INDEX_VOICEMAIL)); + if (mAdapter.hasActiveVoicemailProvider()) { + mViewPager.setCurrentItem(mAdapter.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)); + mViewPager.setCurrentItem(mAdapter.getRtlPosition(index)); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - mTabIndex = getRtlPosition(position); + mTabIndex = mAdapter.getRtlPosition(position); final int count = mOnPageChangeListeners.size(); for (int i = 0; i < count; i++) { @@ -263,7 +231,7 @@ public class ListsFragment extends Fragment @Override public void onPageSelected(int position) { LogUtil.i("ListsFragment.onPageSelected", "position: %d", position); - mTabIndex = getRtlPosition(position); + mTabIndex = mAdapter.getRtlPosition(position); // Show the tab which has been selected instead. mShowVoicemailTabAfterVoicemailStatusIsFetched = false; @@ -274,12 +242,12 @@ public class ListsFragment extends Fragment } sendScreenViewForCurrentPosition(); - if (mCurrentPage != null) { - mCurrentPage.onPagePause(getActivity()); + if (mCurrentPage instanceof CallLogFragment) { + ((CallLogFragment) mCurrentPage).onNotVisible(); } - mCurrentPage = getListsPage(position); - if (mCurrentPage != null) { - mCurrentPage.onPageResume(getActivity()); + mCurrentPage = mAdapter.getItem(position); + if (mCurrentPage instanceof CallLogFragment) { + ((CallLogFragment) mCurrentPage).onVisible(); } } @@ -302,19 +270,19 @@ public class ListsFragment extends Fragment VoicemailStatusCorruptionHandler.maybeFixVoicemailStatus( getContext(), statusCursor, Source.Activity); - // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed. + // Update hasActiveVoicemailProvider, which controls the number of tabs displayed. boolean hasActiveVoicemailProvider = mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0; - if (hasActiveVoicemailProvider != mHasActiveVoicemailProvider) { - mHasActiveVoicemailProvider = hasActiveVoicemailProvider; - mViewPagerAdapter.notifyDataSetChanged(); + if (hasActiveVoicemailProvider != mAdapter.hasActiveVoicemailProvider()) { + mAdapter.setHasActiveVoicemailProvider(hasActiveVoicemailProvider); + mAdapter.notifyDataSetChanged(); if (hasActiveVoicemailProvider) { Logger.get(getContext()).logImpression(DialerImpression.Type.VVM_TAB_VISIBLE); mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL); } else { mViewPagerTabs.removeTab(TAB_INDEX_VOICEMAIL); - removeVoicemailFragment(); + mAdapter.removeVoicemailFragment(getChildFragmentManager()); } mPrefs @@ -329,7 +297,7 @@ public class ListsFragment extends Fragment mCallLogQueryHandler.fetchVoicemailUnreadCount(); } - if (mHasActiveVoicemailProvider && mShowVoicemailTabAfterVoicemailStatusIsFetched) { + if (mAdapter.hasActiveVoicemailProvider() && mShowVoicemailTabAfterVoicemailStatusIsFetched) { mShowVoicemailTabAfterVoicemailStatusIsFetched = false; showTab(TAB_INDEX_VOICEMAIL); } @@ -386,7 +354,7 @@ public class ListsFragment extends Fragment public void updateTabUnreadCounts() { if (mCallLogQueryHandler != null) { mCallLogQueryHandler.fetchMissedCallsUnreadCount(); - if (mHasActiveVoicemailProvider) { + if (mAdapter.hasActiveVoicemailProvider()) { mCallLogQueryHandler.fetchVoicemailUnreadCount(); } } @@ -406,8 +374,11 @@ public class ListsFragment extends Fragment mRemoveView.animate().alpha(show ? 1 : 0).start(); } - public SpeedDialFragment getSpeedDialFragment() { - return mSpeedDialFragment; + public boolean hasFrequents() { + Fragment page = mAdapter.getItem(mAdapter.getRtlPosition(TAB_INDEX_SPEED_DIAL)); + return page instanceof OldSpeedDialFragment + ? ((OldSpeedDialFragment) page).hasFrequents() + : ((SpeedDialFragment) page).hasFrequents(); } public RemoveView getRemoveView() { @@ -415,14 +386,7 @@ public class ListsFragment extends Fragment } public int getTabCount() { - return mViewPagerAdapter.getCount(); - } - - private int getRtlPosition(int position) { - if (ViewUtil.isRtl()) { - return mViewPagerAdapter.getCount() - 1 - position; - } - return position; + return mAdapter.getCount(); } public void sendScreenViewForCurrentPosition() { @@ -449,122 +413,4 @@ public class ListsFragment extends Fragment } Logger.get(getActivity()).logScreenView(screenType, getActivity()); } - - private void removeVoicemailFragment() { - if (mVoicemailFragment != null) { - getChildFragmentManager() - .beginTransaction() - .remove(mVoicemailFragment) - .commitAllowingStateLoss(); - mVoicemailFragment = null; - } - } - - private ListsPage getListsPage(int position) { - switch (getRtlPosition(position)) { - case TAB_INDEX_SPEED_DIAL: - return mSpeedDialFragment; - case TAB_INDEX_HISTORY: - return mHistoryFragment; - case TAB_INDEX_ALL_CONTACTS: - return mAllContactsFragment; - case TAB_INDEX_VOICEMAIL: - return mVoicemailFragment; - } - throw new IllegalStateException("No fragment at position " + position); - } - - 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) { - LogUtil.d("ViewPagerAdapter.getItem", "position: %d", position); - switch (getRtlPosition(position)) { - case TAB_INDEX_SPEED_DIAL: - if (mSpeedDialFragment == null) { - mSpeedDialFragment = new SpeedDialFragment(); - } - return mSpeedDialFragment; - case TAB_INDEX_HISTORY: - if (mHistoryFragment == null) { - mHistoryFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL); - } - return mHistoryFragment; - case TAB_INDEX_ALL_CONTACTS: - if (mAllContactsFragment == null) { - mAllContactsFragment = new AllContactsFragment(); - } - return mAllContactsFragment; - case TAB_INDEX_VOICEMAIL: - if (mVoicemailFragment == null) { - mVoicemailFragment = new VisualVoicemailCallLogFragment(); - LogUtil.v( - "ViewPagerAdapter.getItem", - "new VisualVoicemailCallLogFragment: %s", - mVoicemailFragment); - } - return mVoicemailFragment; - } - throw new IllegalStateException("No fragment at position " + position); - } - - @Override - public Fragment instantiateItem(ViewGroup container, int position) { - LogUtil.d("ViewPagerAdapter.instantiateItem", "position: %d", 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; - LogUtil.v("ViewPagerAdapter.instantiateItem", mVoicemailFragment.toString()); - } - 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]; - } - } } |