Bug 4879032: NPE fix when restarting Settings.
Change-Id: I65b9fb220bf51357c02555902cdb263df7db1016
This commit is contained in:
@@ -81,7 +81,7 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
mInLocalHeaderSwitch = false;
|
mInLocalHeaderSwitch = false;
|
||||||
|
|
||||||
if (!onIsHidingHeaders() && onIsMultiPane()) {
|
if (isMultiPane()) {
|
||||||
highlightHeader();
|
highlightHeader();
|
||||||
// Force the title so that it doesn't get overridden by a direct launch of
|
// Force the title so that it doesn't get overridden by a direct launch of
|
||||||
// a specific settings screen.
|
// a specific settings screen.
|
||||||
@@ -193,7 +193,7 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
|
|
||||||
// If it is not launched from history, then reset to top-level
|
// If it is not launched from history, then reset to top-level
|
||||||
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0
|
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0
|
||||||
&& mFirstHeader != null) {
|
&& mFirstHeader != null && isMultiPane()) {
|
||||||
switchToHeaderLocal(mFirstHeader);
|
switchToHeaderLocal(mFirstHeader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,7 +211,7 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
public Intent getIntent() {
|
public Intent getIntent() {
|
||||||
Intent superIntent = super.getIntent();
|
Intent superIntent = super.getIntent();
|
||||||
String startingFragment = getStartingFragmentClass(superIntent);
|
String startingFragment = getStartingFragmentClass(superIntent);
|
||||||
if (startingFragment != null && !onIsMultiPane()) {
|
if (startingFragment != null && !isMultiPane()) {
|
||||||
Intent modIntent = new Intent(superIntent);
|
Intent modIntent = new Intent(superIntent);
|
||||||
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, startingFragment);
|
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, startingFragment);
|
||||||
Bundle args = superIntent.getExtras();
|
Bundle args = superIntent.getExtras();
|
||||||
@@ -263,17 +263,7 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find first non-category header
|
return mFirstHeader;
|
||||||
int position = 0;
|
|
||||||
while (position < mHeaders.size()) {
|
|
||||||
Header header = mHeaders.get(position);
|
|
||||||
if (HeaderAdapter.getHeaderType(header) != HeaderAdapter.HEADER_TYPE_CATEGORY)
|
|
||||||
return header;
|
|
||||||
position++;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.e(LOG_TAG, "Unable to find a non-category header");
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -326,7 +316,10 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
// Increment if the current one wasn't removed by the Utils code.
|
// Increment if the current one wasn't removed by the Utils code.
|
||||||
if (target.get(i) == header) {
|
if (target.get(i) == header) {
|
||||||
// Hold on to the first header, when we need to reset to the top-level
|
// Hold on to the first header, when we need to reset to the top-level
|
||||||
if (i == 0) mFirstHeader = header;
|
if (mFirstHeader == null &&
|
||||||
|
HeaderAdapter.getHeaderType(header) != HeaderAdapter.HEADER_TYPE_CATEGORY) {
|
||||||
|
mFirstHeader = header;
|
||||||
|
}
|
||||||
mHeaderIndexMap.put(id, i);
|
mHeaderIndexMap.put(id, i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -428,7 +421,7 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
super(context, 0, objects);
|
super(context, 0, objects);
|
||||||
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
|
||||||
// These Switches are provided as placeholder until the adapter replaces these with actual
|
// Temp Switches provided as placeholder until the adapter replaces these with actual
|
||||||
// Switches inflated from their layouts. Must be done before adapter is set in super
|
// Switches inflated from their layouts. Must be done before adapter is set in super
|
||||||
mWifiEnabler = new WifiEnabler(context, new Switch(context));
|
mWifiEnabler = new WifiEnabler(context, new Switch(context));
|
||||||
mBluetoothEnabler = new BluetoothEnabler(context, new Switch(context));
|
mBluetoothEnabler = new BluetoothEnabler(context, new Switch(context));
|
||||||
@@ -445,23 +438,31 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
|
|||||||
holder = new HeaderViewHolder();
|
holder = new HeaderViewHolder();
|
||||||
switch (headerType) {
|
switch (headerType) {
|
||||||
case HEADER_TYPE_CATEGORY:
|
case HEADER_TYPE_CATEGORY:
|
||||||
view = new TextView(getContext(), null, android.R.attr.listSeparatorTextViewStyle);
|
view = new TextView(getContext(), null,
|
||||||
|
android.R.attr.listSeparatorTextViewStyle);
|
||||||
holder.title = (TextView) view;
|
holder.title = (TextView) view;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HEADER_TYPE_SWITCH:
|
case HEADER_TYPE_SWITCH:
|
||||||
view = mInflater.inflate(R.layout.preference_header_switch_item, parent, false);
|
view = mInflater.inflate(R.layout.preference_header_switch_item, parent,
|
||||||
|
false);
|
||||||
holder.icon = (ImageView) view.findViewById(R.id.icon);
|
holder.icon = (ImageView) view.findViewById(R.id.icon);
|
||||||
holder.title = (TextView) view.findViewById(com.android.internal.R.id.title);
|
holder.title = (TextView)
|
||||||
holder.summary = (TextView) view.findViewById(com.android.internal.R.id.summary);
|
view.findViewById(com.android.internal.R.id.title);
|
||||||
|
holder.summary = (TextView)
|
||||||
|
view.findViewById(com.android.internal.R.id.summary);
|
||||||
holder.switch_ = (Switch) view.findViewById(R.id.switchWidget);
|
holder.switch_ = (Switch) view.findViewById(R.id.switchWidget);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HEADER_TYPE_NORMAL:
|
case HEADER_TYPE_NORMAL:
|
||||||
view = mInflater.inflate(com.android.internal.R.layout.preference_header_item, parent, false);
|
view = mInflater.inflate(
|
||||||
|
com.android.internal.R.layout.preference_header_item, parent,
|
||||||
|
false);
|
||||||
holder.icon = (ImageView) view.findViewById(com.android.internal.R.id.icon);
|
holder.icon = (ImageView) view.findViewById(com.android.internal.R.id.icon);
|
||||||
holder.title = (TextView) view.findViewById(com.android.internal.R.id.title);
|
holder.title = (TextView)
|
||||||
holder.summary = (TextView) view.findViewById(com.android.internal.R.id.summary);
|
view.findViewById(com.android.internal.R.id.title);
|
||||||
|
holder.summary = (TextView)
|
||||||
|
view.findViewById(com.android.internal.R.id.summary);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
view.setTag(holder);
|
view.setTag(holder);
|
||||||
|
Reference in New Issue
Block a user