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

Commit 3a0c4475 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
(cherry picked from commit 3a7e64a1)
(cherry picked from commit af634726)
parent 2f17f627
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.cyanogenmod.filemanager.activities;
import android.app.ActionBar;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.SearchManager;
import android.app.SearchManager;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
@@ -474,6 +475,8 @@ public class NavigationActivity extends Activity
    private boolean mExitFlag = false;
    private boolean mExitFlag = false;
    private long mExitBackTimeout = -1;
    private long mExitBackTimeout = -1;


    private Dialog mActiveDialog = null;

    private int mOrientation;
    private int mOrientation;


    /**
    /**
@@ -692,6 +695,10 @@ public class NavigationActivity extends Activity
            Log.d(TAG, "NavigationActivity.onDestroy"); //$NON-NLS-1$
            Log.d(TAG, "NavigationActivity.onDestroy"); //$NON-NLS-1$
        }
        }


        if (mActiveDialog != null && mActiveDialog.isShowing()) {
            mActiveDialog.dismiss();
        }

        // Unregister the receiver
        // Unregister the receiver
        try {
        try {
            unregisterReceiver(this.mNotificationReceiver);
            unregisterReceiver(this.mNotificationReceiver);
@@ -2709,4 +2716,7 @@ public class NavigationActivity extends Activity
        theme.setImageDrawable(this, (ButtonItem) v, "ab_delete_drawable"); //$NON-NLS-1$
        theme.setImageDrawable(this, (ButtonItem) v, "ab_delete_drawable"); //$NON-NLS-1$
    }
    }


    public void updateActiveDialog(Dialog dialog) {
        mActiveDialog = dialog;
    }
}
}
+15 −2
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.cyanogenmod.filemanager.util;
package com.cyanogenmod.filemanager.util;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface;
@@ -35,6 +36,7 @@ import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toast;


import com.cyanogenmod.filemanager.R;
import com.cyanogenmod.filemanager.R;
import com.cyanogenmod.filemanager.activities.NavigationActivity;
import com.cyanogenmod.filemanager.adapters.CheckableListAdapter;
import com.cyanogenmod.filemanager.adapters.CheckableListAdapter;
import com.cyanogenmod.filemanager.ui.ThemeManager;
import com.cyanogenmod.filemanager.ui.ThemeManager;
import com.cyanogenmod.filemanager.ui.ThemeManager.Theme;
import com.cyanogenmod.filemanager.ui.ThemeManager.Theme;
@@ -580,8 +582,19 @@ public final class DialogHelper {
     * @param dialog The dialog to show
     * @param dialog The dialog to show
     */
     */
    public static void delegateDialogShow(Context context, AlertDialog dialog) {
    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
            // Show the dialog
            dialog.show();
            dialog.show();
        }


        // Apply theme
        // Apply theme
        Theme theme = ThemeManager.getCurrentTheme(context);
        Theme theme = ThemeManager.getCurrentTheme(context);