Fix bug #13394626 Settings app crashes on changing orientation to landscape mode

- fix NPE on mInitialHeader.id

Change-Id: Ic1017f5a8a20755bf7f36b1f3406d45dcc80ae8f
This commit is contained in:
Fabrice Di Meglio
2014-03-10 12:18:39 -07:00
parent 75eabc20b9
commit b643cbf6d6

View File

@@ -133,7 +133,6 @@ public class SettingsActivity extends Activity
// Constants for state save/restore // Constants for state save/restore
private static final String SAVE_KEY_HEADERS_TAG = ":settings:headers"; 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_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 * 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 // We are restarting from a previous saved state; used that to
// initialize, instead of starting fresh. // initialize, instead of starting fresh.
mInitialTitle = getTitle(); mInitialTitle = getTitle();
setTitleFromBackStack();
ArrayList<Header> headers = ArrayList<Header> headers =
savedInstanceState.getParcelableArrayList(SAVE_KEY_HEADERS_TAG); savedInstanceState.getParcelableArrayList(SAVE_KEY_HEADERS_TAG);
@@ -599,6 +597,7 @@ public class SettingsActivity extends Activity
setSelectedHeader(mHeaders.get(curHeader)); setSelectedHeader(mHeaders.get(curHeader));
mInitialHeader = mCurrentHeader; mInitialHeader = mCurrentHeader;
} }
setTitleFromBackStack();
} }
} else { } else {
String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT); String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
@@ -713,18 +712,23 @@ public class SettingsActivity extends Activity
@Override @Override
public void onBackStackChanged() { public void onBackStackChanged() {
setTitleFromBackStack(); if (setTitleFromBackStack() == 0) {
setSelectedHeaderById(mInitialHeader.id);
}
} }
private void setTitleFromBackStack() { private int setTitleFromBackStack() {
final int count = getFragmentManager().getBackStackEntryCount(); final int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) { if (count == 0) {
setTitle(mInitialTitle); setTitle(mInitialTitle);
setSelectedHeaderById(mInitialHeader.id); return 0;
return;
} }
FragmentManager.BackStackEntry bse = getFragmentManager().getBackStackEntryAt(count - 1); FragmentManager.BackStackEntry bse = getFragmentManager().getBackStackEntryAt(count - 1);
setTitleFromBackStackEntry(bse); setTitleFromBackStackEntry(bse);
return count;
} }
private void setTitleFromBackStackEntry(FragmentManager.BackStackEntry bse) { private void setTitleFromBackStackEntry(FragmentManager.BackStackEntry bse) {