diff options
author | Yorke Lee <yorkelee@google.com> | 2014-09-26 14:33:29 -0700 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2014-09-26 14:33:29 -0700 |
commit | 0230ec94a8e1ee7a3a75e9e00883aa6c0ceeae29 (patch) | |
tree | 7fc6261dfefc4cf3d1529be151b8898ecb8ab0d8 | |
parent | 495e70b7ae73100be2d5d2b356a810035b4f45f2 (diff) |
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
-rw-r--r-- | src/com/android/dialer/list/ListsFragment.java | 21 |
1 files changed, 9 insertions, 12 deletions
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 |