Fix issue #3306021 NPE at android.app.AlertDialog.getDefaultDialogTheme(AlertDialog.java)
It looks like the dialog fragment was not being removed along with the containing fragment. The containing fragment now checks for when it is being removed and removes its dialog fragment at that point. Also fix issue #3340766 NPE at com.android.settings.applications.RunningProcessesView.startServiceDetailsActivity We need to check if the running processes view is still attached to its owner, since we clear owner when it is paused. In addition, fix a bug where ManageApplications was not persisting its "show background processes" state, and remove the icons from its menu items to make them more understandable in the action bar. Change-Id: I4498ef92023eb60f90758ff18d8eed7b41af79b0
This commit is contained in:
@@ -78,6 +78,17 @@ public class SettingsPreferenceFragment extends PreferenceFragment
|
||||
return getActivity().getPackageManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
if (isRemoving()) {
|
||||
if (mDialogFragment != null) {
|
||||
mDialogFragment.dismiss();
|
||||
mDialogFragment = null;
|
||||
}
|
||||
}
|
||||
super.onDetach();
|
||||
}
|
||||
|
||||
// Dialog management
|
||||
|
||||
protected void showDialog(int dialogId) {
|
||||
|
@@ -184,6 +184,8 @@ public class ManageApplications extends Fragment implements
|
||||
static final String TAB_SDCARD = "OnSdCard";
|
||||
private View mRootView;
|
||||
|
||||
private boolean mShowBackground = false;
|
||||
|
||||
// -------------- Copied from TabActivity --------------
|
||||
|
||||
private TabHost mTabHost;
|
||||
@@ -539,6 +541,7 @@ public class ManageApplications extends Fragment implements
|
||||
mFilterApps = savedInstanceState.getInt("filterApps", mFilterApps);
|
||||
String tmp = savedInstanceState.getString("defaultTabTag");
|
||||
if (tmp != null) defaultTabTag = tmp;
|
||||
mShowBackground = savedInstanceState.getBoolean("showBackground", false);
|
||||
}
|
||||
|
||||
mDefaultTab = defaultTabTag;
|
||||
@@ -631,6 +634,7 @@ public class ManageApplications extends Fragment implements
|
||||
if (mDefaultTab != null) {
|
||||
outState.putString("defautTabTag", mDefaultTab);
|
||||
}
|
||||
outState.putBoolean("showBackground", mShowBackground);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -666,11 +670,13 @@ public class ManageApplications extends Fragment implements
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
Log.i(TAG, "onCreateOptionsMenu in " + this + ": " + menu);
|
||||
mOptionsMenu = menu;
|
||||
// note: icons removed for now because the cause the new action
|
||||
// bar UI to be very confusing.
|
||||
menu.add(0, SORT_ORDER_ALPHA, 1, R.string.sort_order_alpha)
|
||||
.setIcon(android.R.drawable.ic_menu_sort_alphabetically)
|
||||
//.setIcon(android.R.drawable.ic_menu_sort_alphabetically)
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
||||
menu.add(0, SORT_ORDER_SIZE, 2, R.string.sort_order_size)
|
||||
.setIcon(android.R.drawable.ic_menu_sort_by_size)
|
||||
//.setIcon(android.R.drawable.ic_menu_sort_by_size)
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
||||
menu.add(0, SHOW_RUNNING_SERVICES, 3, R.string.show_running_services)
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
|
||||
@@ -722,8 +728,10 @@ public class ManageApplications extends Fragment implements
|
||||
mApplicationsAdapter.rebuild(mFilterApps, mSortOrder);
|
||||
}
|
||||
} else if (menuId == SHOW_RUNNING_SERVICES) {
|
||||
mShowBackground = false;
|
||||
mRunningProcessesView.mAdapter.setShowBackground(false);
|
||||
} else if (menuId == SHOW_BACKGROUND_PROCESSES) {
|
||||
mShowBackground = true;
|
||||
mRunningProcessesView.mAdapter.setShowBackground(true);
|
||||
}
|
||||
updateOptionsMenu();
|
||||
@@ -838,6 +846,7 @@ public class ManageApplications extends Fragment implements
|
||||
} else if (which == VIEW_RUNNING) {
|
||||
if (!mCreatedRunning) {
|
||||
mRunningProcessesView.doCreate(null);
|
||||
mRunningProcessesView.mAdapter.setShowBackground(mShowBackground);
|
||||
mCreatedRunning = true;
|
||||
}
|
||||
boolean haveData = true;
|
||||
|
@@ -431,15 +431,17 @@ public class RunningProcessesView extends FrameLayout
|
||||
|
||||
// utility method used to start sub activity
|
||||
private void startServiceDetailsActivity(RunningState.MergedItem mi) {
|
||||
// start new fragment to display extended information
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(RunningServiceDetails.KEY_UID, mi.mProcess.mUid);
|
||||
args.putString(RunningServiceDetails.KEY_PROCESS, mi.mProcess.mProcessName);
|
||||
args.putBoolean(RunningServiceDetails.KEY_BACKGROUND, mAdapter.mShowBackground);
|
||||
if (mOwner != null) {
|
||||
// start new fragment to display extended information
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(RunningServiceDetails.KEY_UID, mi.mProcess.mUid);
|
||||
args.putString(RunningServiceDetails.KEY_PROCESS, mi.mProcess.mProcessName);
|
||||
args.putBoolean(RunningServiceDetails.KEY_BACKGROUND, mAdapter.mShowBackground);
|
||||
|
||||
PreferenceActivity pa = (PreferenceActivity)mOwner.getActivity();
|
||||
pa.startPreferencePanel(RunningServiceDetails.class.getName(), args,
|
||||
R.string.runningservicedetails_settings_title, null, null, 0);
|
||||
PreferenceActivity pa = (PreferenceActivity)mOwner.getActivity();
|
||||
pa.startPreferencePanel(RunningServiceDetails.class.getName(), args,
|
||||
R.string.runningservicedetails_settings_title, null, null, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void onMovedToScrapHeap(View view) {
|
||||
|
Reference in New Issue
Block a user