From 832e54618588fdd31397b1779411af06e58565d7 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Thu, 6 Mar 2014 19:12:14 -0800 Subject: [PATCH] Fix bug #13322417 stability-sys: Java crash in com.android.settings: ...java.lang.NullPointerException: Attempt to read from field ... 'long com.android.settings.SettingsActivity$Header.id' on a null object reference - fix the AndroidManifest for missing meta data - fix NPE causes in getHeaderTitle() - update how we are putting Fragments on the BackStack Change-Id: Ifc0bba744c3b2a0603c2f11f711ef493cbacc9d2 --- AndroidManifest.xml | 4 ++++ .../android/settings/SettingsActivity.java | 23 +++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ff9047450be..cc1208e2a02 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1536,6 +1536,10 @@ + + 0) ? getText(initialTitleResId) : getTitle(); - - switchToHeader(initialFragment, initialArguments, true, mInitialTitle); - setSelectedHeaderByFragmentName(initialFragment); + setTitle(mInitialTitle); + switchToHeaderInner(initialFragment, initialArguments, true, false, mInitialTitle); + setSelectedHeaderByTopLevelId(mTopLevelHeaderId); mInitialHeader = mCurrentHeader; } else { // If there are headers, then at this point we need to show @@ -800,6 +800,7 @@ public class SettingsActivity extends Activity } private CharSequence getHeaderTitle(Header header) { + if (header == null || header.fragment == null) return getTitle(); final CharSequence title; if (header.fragment.equals(DashboardSummary.class.getName())) { title = getResources().getString(R.string.settings_label); @@ -809,12 +810,11 @@ public class SettingsActivity extends Activity return title; } - - private void setSelectedHeaderByFragmentName(String fragmentName) { + private void setSelectedHeaderByTopLevelId(int topLevelId) { final int count = mHeaders.size(); for (int n = 0; n < count; n++) { Header h = mHeaders.get(n); - if (h.fragment != null && h.fragment.equals(fragmentName)) { + if (h.id == topLevelId) { setSelectedHeader(h); return; } @@ -855,7 +855,16 @@ public class SettingsActivity extends Activity // For switching to another Header it should be a different one if (mCurrentHeader == null || header.id != mCurrentHeader.id) { if (header.fragment != null) { - boolean addToBackStack = !initial && header.id != mInitialHeader.id; + boolean addToBackStack; + if (initial) { + addToBackStack = false; + } else { + if (header.id != mInitialHeader.id) { + addToBackStack = true; + } else { + addToBackStack = (mTopLevelHeaderId > 0); + } + } switchToHeaderInner(header.fragment, header.fragmentArguments, validate, addToBackStack, getHeaderTitle(header)); setSelectedHeader(header);