Fix bug #12991557 User taken to previously closed setting option
- fix behavior when we are closing the Drawer. Now will not trigger twice the same action - fix selection in the Drawer for "Add Account": it basically should never be selected as it is more like a button - fix also Titles stack when launching an Intent - remove some dead code Change-Id: I196ad9fcd0599703f2abb902b088fbda9b4690a0
This commit is contained in:
@@ -405,8 +405,11 @@ public class SettingsActivity extends Activity
|
|||||||
public void onDrawerClosed(View drawerView) {
|
public void onDrawerClosed(View drawerView) {
|
||||||
mDrawerToggle.onDrawerClosed(drawerView);
|
mDrawerToggle.onDrawerClosed(drawerView);
|
||||||
// Cannot process clicks when the App is finishing
|
// Cannot process clicks when the App is finishing
|
||||||
if (isFinishing()) return;
|
if (isFinishing() || mSelectedHeader == null) {
|
||||||
onHeaderClick(mSelectedHeader);
|
return;
|
||||||
|
}
|
||||||
|
switchToHeader(mSelectedHeader, false);
|
||||||
|
mSelectedHeader = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -594,12 +597,8 @@ public class SettingsActivity extends Activity
|
|||||||
// them and, depending on the screen, we may also show in-line
|
// them and, depending on the screen, we may also show in-line
|
||||||
// the currently selected preference fragment.
|
// the currently selected preference fragment.
|
||||||
if (mHeaders.size() > 0) {
|
if (mHeaders.size() > 0) {
|
||||||
if (initialFragment == null) {
|
|
||||||
Header h = onGetInitialHeader();
|
Header h = onGetInitialHeader();
|
||||||
switchToHeader(h, false);
|
switchToHeader(h, false);
|
||||||
} else {
|
|
||||||
switchToHeader(initialFragment, initialArguments, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -785,31 +784,54 @@ public class SettingsActivity extends Activity
|
|||||||
* @param validate true means that the fragment's Header needs to be validated
|
* @param validate true means that the fragment's Header needs to be validated
|
||||||
*/
|
*/
|
||||||
private void switchToHeader(Header header, boolean validate) {
|
private void switchToHeader(Header header, boolean validate) {
|
||||||
if (mCurrentHeader == header) {
|
if (header == null) {
|
||||||
// This is the header we are currently displaying. Just make sure
|
return;
|
||||||
|
}
|
||||||
|
if (header != null && mCurrentHeader != null && header.id == mCurrentHeader.id &&
|
||||||
|
header.id != R.id.account_add) {
|
||||||
|
// This is the header we are currently displaying (except "Add Account"). Just make sure
|
||||||
// to pop the stack up to its root state.
|
// to pop the stack up to its root state.
|
||||||
getFragmentManager().popBackStack(BACK_STACK_PREFS,
|
getFragmentManager().popBackStack(BACK_STACK_PREFS,
|
||||||
FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
||||||
} else {
|
} else {
|
||||||
|
if (header.fragment != null) {
|
||||||
mTitleStack.clear();
|
mTitleStack.clear();
|
||||||
if (header.fragment == null) {
|
|
||||||
throw new IllegalStateException("can't switch to header that has no fragment");
|
|
||||||
}
|
|
||||||
switchToHeaderInner(header.fragment, header.fragmentArguments, validate);
|
switchToHeaderInner(header.fragment, header.fragmentArguments, validate);
|
||||||
setSelectedHeader(header);
|
setSelectedHeader(header);
|
||||||
|
final TitlePair pair = new TitlePair(0, getHeaderTitle(header));
|
||||||
|
mTitleStack.add(pair);
|
||||||
|
setTitle(pair.second);
|
||||||
|
} else if (header.intent != null) {
|
||||||
|
setSelectedHeader(header);
|
||||||
|
mTitleStack.clear();
|
||||||
|
startActivity(header.intent);
|
||||||
|
} else {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Can't switch to header that has no Fragment nor Intent");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private CharSequence getHeaderTitle(Header header) {
|
||||||
final CharSequence title;
|
final CharSequence title;
|
||||||
if (header.fragment.equals("com.android.settings.dashboard.DashboardSummary")) {
|
if (header.fragment.equals(DashboardSummary.class.getName())) {
|
||||||
title = getResources().getString(R.string.settings_label);
|
title = getResources().getString(R.string.settings_label);
|
||||||
} else {
|
} else {
|
||||||
title = header.getTitle(getResources());
|
title = header.getTitle(getResources());
|
||||||
}
|
}
|
||||||
final TitlePair pair = new TitlePair(0, title);
|
return title;
|
||||||
mTitleStack.add(pair);
|
|
||||||
setTitle(title);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSelectedHeader(Header header) {
|
private void setSelectedHeader(Header header) {
|
||||||
|
if (header == null) {
|
||||||
|
mCurrentHeader = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Update selected Header into Drawer only if it is not "Add Account"
|
||||||
|
if (header.id == R.id.account_add) {
|
||||||
|
mDrawer.clearChoices();
|
||||||
|
return;
|
||||||
|
}
|
||||||
mCurrentHeader = header;
|
mCurrentHeader = header;
|
||||||
int index = mHeaders.indexOf(header);
|
int index = mHeaders.indexOf(header);
|
||||||
if (mDrawer != null) {
|
if (mDrawer != null) {
|
||||||
@@ -1623,24 +1645,6 @@ public class SettingsActivity extends Activity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the user selects an item in the header list. The default
|
|
||||||
* implementation will call either
|
|
||||||
* {@link #startWithFragment(String, android.os.Bundle, android.app.Fragment, int, int, CharSequence)}
|
|
||||||
* or {@link #switchToHeader(com.android.settings.SettingsActivity.Header, boolean)}
|
|
||||||
* as appropriate.
|
|
||||||
*
|
|
||||||
* @param header The header that was selected.
|
|
||||||
*/
|
|
||||||
private void onHeaderClick(Header header) {
|
|
||||||
if (header == null) return;
|
|
||||||
if (header.fragment != null) {
|
|
||||||
switchToHeader(header, false);
|
|
||||||
} else if (header.intent != null) {
|
|
||||||
startActivity(header.intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldUpRecreateTask(Intent targetIntent) {
|
public boolean shouldUpRecreateTask(Intent targetIntent) {
|
||||||
return super.shouldUpRecreateTask(new Intent(this, SettingsActivity.class));
|
return super.shouldUpRecreateTask(new Intent(this, SettingsActivity.class));
|
||||||
|
Reference in New Issue
Block a user