From 5529d29f6c22e9f28444ca1c0aa9ea2534264220 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Tue, 11 Feb 2014 19:52:28 -0800 Subject: [PATCH] Fix title when changing from portrait to landscape configuration - save the titles stack during onSaveInstanceState(...) - set it back when creating the activity if there is a savedInstanceState and restore the title to the last item in the stack Change-Id: Ic6c2714f5474275c9f55cc4d6c70d14f6a8cd993 --- .../android/settings/SettingsActivity.java | 63 ++++++++++++++++--- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 74fe86e3e56..213bc181e97 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -133,6 +133,7 @@ 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 @@ -313,11 +314,35 @@ public class SettingsActivity extends Activity private final ArrayList
mHeaders = new ArrayList
(); private HeaderAdapter mHeaderAdapter; - private class TitlePair extends Pair { + static private class TitlePair extends Pair implements Parcelable { public TitlePair(Integer first, CharSequence second) { super(first, second); } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(first); + TextUtils.writeToParcel(second, dest, flags); + } + + TitlePair(Parcel in) { + super(in.readInt(), TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in)); + } + + public static final Creator CREATOR = new Creator() { + public TitlePair createFromParcel(Parcel source) { + return new TitlePair(source); + } + public TitlePair[] newArray(int size) { + return new TitlePair[size]; + } + }; } private final ArrayList mTitleStack = new ArrayList(); @@ -528,6 +553,18 @@ public class SettingsActivity extends Activity if (savedInstanceState != null) { // We are restarting from a previous saved state; used that to // initialize, instead of starting fresh. + + ArrayList titles = + savedInstanceState.getParcelableArrayList(SAVE_KEY_TITLES_TAG); + if (titles != null) { + mTitleStack.addAll(titles); + } + final int lastTitle = mTitleStack.size() - 1; + if (lastTitle >= 0) { + final TitlePair last = mTitleStack.get(lastTitle); + setTitleFromPair(last); + } + ArrayList
headers = savedInstanceState.getParcelableArrayList(SAVE_KEY_HEADERS_TAG); if (headers != null) { @@ -643,19 +680,21 @@ public class SettingsActivity extends Activity if (size > 0) { last = mTitleStack.size() - 1; pair = mTitleStack.get(last); - if (pair != null) { - final CharSequence title; - if (pair.first > 0) { - title = getText(pair.first); - } else { - title = pair.second; - } - setTitle(title); - } + setTitleFromPair(pair); } } } + private void setTitleFromPair(TitlePair pair) { + final CharSequence title; + if (pair.first > 0) { + title = getText(pair.first); + } else { + title = pair.second; + } + setTitle(title); + } + /** * Returns the Header list */ @@ -676,6 +715,10 @@ public class SettingsActivity extends Activity } } } + + if (mTitleStack.size() > 0) { + outState.putParcelableList(SAVE_KEY_TITLES_TAG, mTitleStack); + } } @Override