From 0230ec94a8e1ee7a3a75e9e00883aa6c0ceeae29 Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Fri, 26 Sep 2014 14:33:29 -0700 Subject: Fix crash when switching between LTR/RTL When the language is changed the order of tabs might change but the fragments stored in the fragment manager remains the same (becauase the fragment manager persists fragments across rotation and configuration changes). Retrieve the fragments from the fragment manager in an RTL adjusted fashion in instantiateItem, and also make the logic more resilient to ClassCastExceptions. Bug: 17673059 Change-Id: I1f9b7d85b6a4ecf3ff155c9e6e8cf875ddd51463 --- src/com/android/dialer/list/ListsFragment.java | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'src/com') diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java index 2aa78a2d2..24177f73f 100644 --- a/src/com/android/dialer/list/ListsFragment.java +++ b/src/com/android/dialer/list/ListsFragment.java @@ -205,19 +205,16 @@ public class ListsFragment extends AnalyticsFragment implements CallLogQueryHand // 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); - switch (getRtlPosition(position)) { - case TAB_INDEX_SPEED_DIAL: - mSpeedDialFragment = (SpeedDialFragment) fragment; - return mSpeedDialFragment; - case TAB_INDEX_RECENTS: - mRecentsFragment = (CallLogFragment) fragment; - return mRecentsFragment; - case TAB_INDEX_ALL_CONTACTS: - mAllContactsFragment = (AllContactsFragment) fragment; - return mAllContactsFragment; + final Fragment fragment = + (Fragment) super.instantiateItem(container, getRtlPosition(position)); + if (fragment instanceof SpeedDialFragment) { + mSpeedDialFragment = (SpeedDialFragment) fragment; + } else if (fragment instanceof CallLogFragment) { + mRecentsFragment = (CallLogFragment) fragment; + } else if (fragment instanceof AllContactsFragment) { + mAllContactsFragment = (AllContactsFragment) fragment; } - return super.instantiateItem(container, position); + return fragment; } @Override -- cgit v1.2.3