aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaj Yengisetty <rajesh@cyngn.com>2015-03-30 10:07:09 -0700
committerRajesh Yengisetty <rajesh@cyngn.com>2015-03-30 17:08:59 +0000
commit3a7e64a1b55a8cdd0b2053fd6b16c294c3137d05 (patch)
treec9aaca0d44f22e063fb97f5ef563b0c671e66039
parent8b1fef1fb52c2f0f5268e1a99b415e83f0db04a0 (diff)
downloadandroid_packages_apps_CMFileManager-3a7e64a1b55a8cdd0b2053fd6b16c294c3137d05.tar.gz
android_packages_apps_CMFileManager-3a7e64a1b55a8cdd0b2053fd6b16c294c3137d05.tar.bz2
android_packages_apps_CMFileManager-3a7e64a1b55a8cdd0b2053fd6b16c294c3137d05.zip
CMFileManager: account for displayed dialogs during activity tear down
Repro: - Start copying a large file (>100 MB) - Leave CMFM and trigger a config change (e.g. set text size to small in Settings -> Display) - Return to CMFM - Observe: window leak in logcat Change-Id: Ic875d4f86edf0446b889e6442126bd76a692a7c6
-rw-r--r--src/com/cyanogenmod/filemanager/activities/NavigationActivity.java10
-rw-r--r--src/com/cyanogenmod/filemanager/util/DialogHelper.java17
2 files changed, 25 insertions, 2 deletions
diff --git a/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java b/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
index 0eb5ebd3..2de0fa9a 100644
--- a/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
+++ b/src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
@@ -18,6 +18,7 @@ package com.cyanogenmod.filemanager.activities;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.app.SearchManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -466,6 +467,8 @@ public class NavigationActivity extends Activity
private boolean mExitFlag = false;
private long mExitBackTimeout = -1;
+ private Dialog mActiveDialog = null;
+
private int mOrientation;
/**
@@ -684,6 +687,10 @@ public class NavigationActivity extends Activity
Log.d(TAG, "NavigationActivity.onDestroy"); //$NON-NLS-1$
}
+ if (mActiveDialog != null && mActiveDialog.isShowing()) {
+ mActiveDialog.dismiss();
+ }
+
// Unregister the receiver
try {
unregisterReceiver(this.mNotificationReceiver);
@@ -2712,4 +2719,7 @@ public class NavigationActivity extends Activity
theme.setImageDrawable(this, (ButtonItem) v, "ab_delete_drawable"); //$NON-NLS-1$
}
+ public void updateActiveDialog(Dialog dialog) {
+ mActiveDialog = dialog;
+ }
}
diff --git a/src/com/cyanogenmod/filemanager/util/DialogHelper.java b/src/com/cyanogenmod/filemanager/util/DialogHelper.java
index 40464452..a78c81fb 100644
--- a/src/com/cyanogenmod/filemanager/util/DialogHelper.java
+++ b/src/com/cyanogenmod/filemanager/util/DialogHelper.java
@@ -16,6 +16,7 @@
package com.cyanogenmod.filemanager.util;
+import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -35,6 +36,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.cyanogenmod.filemanager.R;
+import com.cyanogenmod.filemanager.activities.NavigationActivity;
import com.cyanogenmod.filemanager.adapters.CheckableListAdapter;
import com.cyanogenmod.filemanager.ui.ThemeManager;
import com.cyanogenmod.filemanager.ui.ThemeManager.Theme;
@@ -580,8 +582,19 @@ public final class DialogHelper {
* @param dialog The dialog to show
*/
public static void delegateDialogShow(Context context, AlertDialog dialog) {
- // Show the dialog
- dialog.show();
+ boolean isActivityFinishing = false;
+ if (context instanceof Activity) {
+ Activity activity = (Activity) context;
+ if (activity instanceof NavigationActivity) {
+ ((NavigationActivity) activity).updateActiveDialog(dialog);
+ }
+ isActivityFinishing = activity.isFinishing();
+ }
+
+ if (!isActivityFinishing) {
+ // Show the dialog
+ dialog.show();
+ }
// Apply theme
Theme theme = ThemeManager.getCurrentTheme(context);