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
This commit is contained in:
@@ -1536,6 +1536,10 @@
|
|||||||
<action android:name="android.settings.SYNC_SETTINGS" />
|
<action android:name="android.settings.SYNC_SETTINGS" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
|
android:value="com.android.settings.accounts.AccountSyncSettings" />
|
||||||
|
<meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
|
||||||
|
android:resource="@id/account_settings" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name="com.android.settings.accounts.AddAccountSettings"
|
<activity android:name="com.android.settings.accounts.AddAccountSettings"
|
||||||
|
@@ -613,9 +613,9 @@ public class SettingsActivity extends Activity
|
|||||||
// the headers.
|
// the headers.
|
||||||
final int initialTitleResId = getIntent().getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE, 0);
|
final int initialTitleResId = getIntent().getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE, 0);
|
||||||
mInitialTitle = (initialTitleResId > 0) ? getText(initialTitleResId) : getTitle();
|
mInitialTitle = (initialTitleResId > 0) ? getText(initialTitleResId) : getTitle();
|
||||||
|
setTitle(mInitialTitle);
|
||||||
switchToHeader(initialFragment, initialArguments, true, mInitialTitle);
|
switchToHeaderInner(initialFragment, initialArguments, true, false, mInitialTitle);
|
||||||
setSelectedHeaderByFragmentName(initialFragment);
|
setSelectedHeaderByTopLevelId(mTopLevelHeaderId);
|
||||||
mInitialHeader = mCurrentHeader;
|
mInitialHeader = mCurrentHeader;
|
||||||
} else {
|
} else {
|
||||||
// If there are headers, then at this point we need to show
|
// 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) {
|
private CharSequence getHeaderTitle(Header header) {
|
||||||
|
if (header == null || header.fragment == null) return getTitle();
|
||||||
final CharSequence title;
|
final CharSequence title;
|
||||||
if (header.fragment.equals(DashboardSummary.class.getName())) {
|
if (header.fragment.equals(DashboardSummary.class.getName())) {
|
||||||
title = getResources().getString(R.string.settings_label);
|
title = getResources().getString(R.string.settings_label);
|
||||||
@@ -809,12 +810,11 @@ public class SettingsActivity extends Activity
|
|||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setSelectedHeaderByTopLevelId(int topLevelId) {
|
||||||
private void setSelectedHeaderByFragmentName(String fragmentName) {
|
|
||||||
final int count = mHeaders.size();
|
final int count = mHeaders.size();
|
||||||
for (int n = 0; n < count; n++) {
|
for (int n = 0; n < count; n++) {
|
||||||
Header h = mHeaders.get(n);
|
Header h = mHeaders.get(n);
|
||||||
if (h.fragment != null && h.fragment.equals(fragmentName)) {
|
if (h.id == topLevelId) {
|
||||||
setSelectedHeader(h);
|
setSelectedHeader(h);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -855,7 +855,16 @@ public class SettingsActivity extends Activity
|
|||||||
// For switching to another Header it should be a different one
|
// For switching to another Header it should be a different one
|
||||||
if (mCurrentHeader == null || header.id != mCurrentHeader.id) {
|
if (mCurrentHeader == null || header.id != mCurrentHeader.id) {
|
||||||
if (header.fragment != null) {
|
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,
|
switchToHeaderInner(header.fragment, header.fragmentArguments, validate,
|
||||||
addToBackStack, getHeaderTitle(header));
|
addToBackStack, getHeaderTitle(header));
|
||||||
setSelectedHeader(header);
|
setSelectedHeader(header);
|
||||||
|
Reference in New Issue
Block a user