From b643cbf6d60bb4cd43d3191106d68680fffe97b5 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Mon, 10 Mar 2014 12:18:39 -0700 Subject: [PATCH] Fix bug #13394626 Settings app crashes on changing orientation to landscape mode - fix NPE on mInitialHeader.id Change-Id: Ic1017f5a8a20755bf7f36b1f3406d45dcc80ae8f --- src/com/android/settings/SettingsActivity.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index ec4ebc73855..8582bc67ab8 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -133,7 +133,6 @@ public class SettingsActivity extends Activity // Constants for state save/restore private static final String SAVE_KEY_HEADERS_TAG = ":settings:headers"; private static final String SAVE_KEY_CURRENT_HEADER_TAG = ":settings:cur_header"; - private static final String SAVE_KEY_TITLES_TAG = ":settings:titles"; /** * When starting this activity, the invoking Intent can contain this extra @@ -587,7 +586,6 @@ public class SettingsActivity extends Activity // We are restarting from a previous saved state; used that to // initialize, instead of starting fresh. mInitialTitle = getTitle(); - setTitleFromBackStack(); ArrayList
headers = savedInstanceState.getParcelableArrayList(SAVE_KEY_HEADERS_TAG); @@ -599,6 +597,7 @@ public class SettingsActivity extends Activity setSelectedHeader(mHeaders.get(curHeader)); mInitialHeader = mCurrentHeader; } + setTitleFromBackStack(); } } else { String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT); @@ -713,18 +712,23 @@ public class SettingsActivity extends Activity @Override public void onBackStackChanged() { - setTitleFromBackStack(); + if (setTitleFromBackStack() == 0) { + setSelectedHeaderById(mInitialHeader.id); + } } - private void setTitleFromBackStack() { + private int setTitleFromBackStack() { final int count = getFragmentManager().getBackStackEntryCount(); + if (count == 0) { setTitle(mInitialTitle); - setSelectedHeaderById(mInitialHeader.id); - return; + return 0; } + FragmentManager.BackStackEntry bse = getFragmentManager().getBackStackEntryAt(count - 1); setTitleFromBackStackEntry(bse); + + return count; } private void setTitleFromBackStackEntry(FragmentManager.BackStackEntry bse) {