Fix bug #13394626 Settings app crashes on changing orientation to landscape mode
- fix NPE on mInitialHeader.id
Change-Id: Ic1017f5a8a20755bf7f36b1f3406d45dcc80ae8f
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index ec4ebc7..8582bc6 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -133,7 +133,6 @@
// 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 @@
// We are restarting from a previous saved state; used that to
// initialize, instead of starting fresh.
mInitialTitle = getTitle();
- setTitleFromBackStack();
ArrayList<Header> headers =
savedInstanceState.getParcelableArrayList(SAVE_KEY_HEADERS_TAG);
@@ -599,6 +597,7 @@
setSelectedHeader(mHeaders.get(curHeader));
mInitialHeader = mCurrentHeader;
}
+ setTitleFromBackStack();
}
} else {
String initialFragment = getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT);
@@ -713,18 +712,23 @@
@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) {