OSDN Git Service

Fix issue #3306021 NPE at android.app.AlertDialog.getDefaultDialogTheme(AlertDialog...
authorDianne Hackborn <hackbod@google.com>
Tue, 25 Jan 2011 00:22:13 +0000 (16:22 -0800)
committerDianne Hackborn <hackbod@google.com>
Tue, 25 Jan 2011 05:18:41 +0000 (21:18 -0800)
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

src/com/android/settings/SettingsPreferenceFragment.java
src/com/android/settings/applications/ManageApplications.java
src/com/android/settings/applications/RunningProcessesView.java

index 47e31ee..09faf41 100644 (file)
@@ -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) {
index 37efefc..e0233be 100644 (file)
@@ -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;
index ef5adac..1f91c33 100644 (file)
@@ -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);
-
-        PreferenceActivity pa = (PreferenceActivity)mOwner.getActivity();
-        pa.startPreferencePanel(RunningServiceDetails.class.getName(), args,
-                R.string.runningservicedetails_settings_title, null, null, 0);
+        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);
+        }
     }
     
     public void onMovedToScrapHeap(View view) {