diff options
author | Sarmad Hashmi <mhashmi@google.com> | 2016-03-02 20:14:29 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-03-02 20:14:29 +0000 |
commit | aedcdf42e52c70c9b5c59e718a0ae970f649cfca (patch) | |
tree | 87c0b067f144470d7293c4426736166a4d067f15 | |
parent | cff7b2b4d57d398d38923a5dc84f817bf95ead06 (diff) | |
parent | 32085106969a45718b1b432377bbbbf9a92937f2 (diff) |
Merge "Fix voicemail tab showing even after being disabled." into nyc-dev am: 24c02ee4ec
am: 3208510696
* commit '32085106969a45718b1b432377bbbbf9a92937f2':
Fix voicemail tab showing even after being disabled.
-rw-r--r-- | src/com/android/dialer/list/ListsFragment.java | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java index 5b7c950bf..52bf3cbb5 100644 --- a/src/com/android/dialer/list/ListsFragment.java +++ b/src/com/android/dialer/list/ListsFragment.java @@ -48,6 +48,7 @@ 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. @@ -106,8 +107,13 @@ public class ListsFragment extends Fragment 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 @@ -135,7 +141,7 @@ public class ListsFragment extends Fragment } @Override - public Object instantiateItem(ViewGroup container, int position) { + 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. @@ -150,9 +156,25 @@ public class ListsFragment extends 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; @@ -313,6 +335,7 @@ public class ListsFragment extends Fragment mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL); } else { mViewPagerTabs.removeTab(TAB_INDEX_VOICEMAIL); + removeVoicemailFragment(); } mPrefs.edit() @@ -453,4 +476,12 @@ public class ListsFragment extends Fragment } Logger.logScreenView(screenType, getActivity()); } + + private void removeVoicemailFragment() { + if (mVoicemailFragment != null) { + getChildFragmentManager().beginTransaction().remove(mVoicemailFragment) + .commitAllowingStateLoss(); + mVoicemailFragment = null; + } + } } |