Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a7e64a1 authored by Raj Yengisetty's avatar Raj Yengisetty Committed by Rajesh Yengisetty
Browse files

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
parent 8b1fef1f
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+15 −2
Original line number Diff line number Diff line
@@ -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) {
        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);