Fix Drawer selection when using BACK
- select the initial Header if needed
Change-Id: I2d884fbab9a49cc3385dbe1b311f9e0853d027d3
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 28ff883..ec4ebc7 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -615,7 +615,7 @@
mInitialTitle = (initialTitleResId > 0) ? getText(initialTitleResId) : getTitle();
setTitle(mInitialTitle);
switchToHeaderInner(initialFragment, initialArguments, true, false, mInitialTitle);
- setSelectedHeaderByTopLevelId(mTopLevelHeaderId);
+ setSelectedHeaderById(mTopLevelHeaderId);
mInitialHeader = mCurrentHeader;
} else {
// If there are headers, then at this point we need to show
@@ -720,6 +720,7 @@
final int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
setTitle(mInitialTitle);
+ setSelectedHeaderById(mInitialHeader.id);
return;
}
FragmentManager.BackStackEntry bse = getFragmentManager().getBackStackEntryAt(count - 1);
@@ -819,17 +820,20 @@
return title;
}
- private void setSelectedHeaderByTopLevelId(int topLevelId) {
+ private void setSelectedHeaderById(long headerId) {
final int count = mHeaders.size();
for (int n = 0; n < count; n++) {
Header h = mHeaders.get(n);
- if (h.id == topLevelId) {
+ if (h.id == headerId) {
setSelectedHeader(h);
return;
}
}
}
+ /**
+ * As the Headers can be rebuilt, their references can change, so use this method with caution!
+ */
private void setSelectedHeader(Header header) {
if (header == null) {
mCurrentHeader = null;
@@ -849,6 +853,18 @@
}
}
+ private void highlightHeader(int id) {
+ if (id != 0) {
+ Integer index = mHeaderIndexMap.get(id);
+ if (index != null) {
+ mDrawer.setItemChecked(index, true);
+ if (mDrawer.getVisibility() == View.VISIBLE) {
+ mDrawer.smoothScrollToPosition(index);
+ }
+ }
+ }
+ }
+
/**
* When in two-pane mode, switch to the fragment pane to show the given
* preference fragment.
@@ -950,18 +966,6 @@
return getIntent().getBooleanExtra(EXTRA_NO_HEADERS, false);
}
- private void highlightHeader(int id) {
- if (id != 0) {
- Integer index = mHeaderIndexMap.get(id);
- if (index != null && mDrawer != null) {
- mDrawer.setItemChecked(index, true);
- if (mDrawer.getVisibility() == View.VISIBLE) {
- mDrawer.smoothScrollToPosition(index);
- }
- }
- }
- }
-
@Override
public Intent getIntent() {
Intent superIntent = super.getIntent();