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

Commit d9ab5a58 authored by Mathias Jeppsson's avatar Mathias Jeppsson Committed by Steve Kondik
Browse files

Fixing memory leak in PreferenceScreen.

Every time the PreferenceScreen is displayed a new ListView is
created and bound to the adapter. As the same adapter is used during
the lifetime of PreferenceScreen and the listviews never gets
unbound, the adapter will contain a list of unused views. The old view
should be unbound from adapter when we create a new view.

Change-Id: I13e2d0dc79c8ff79b58efa650653e3f84c6e53c5
parent 365ce56b
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -81,6 +81,8 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi
    
    private Dialog mDialog;

    private ListView mListView;
    
    /**
     * Do NOT use this constructor, use {@link PreferenceManager#createPreferenceScreen(Context)}.
     * @hide-
@@ -145,15 +147,18 @@ public final class PreferenceScreen extends PreferenceGroup implements AdapterVi
    
    private void showDialog(Bundle state) {
        Context context = getContext();
        ListView listView = new ListView(context);
        bind(listView);
        if (mListView != null) {
            mListView.setAdapter(null);
        }
        mListView = new ListView(context);
        bind(mListView);

        // Set the title bar if title is available, else no title bar
        final CharSequence title = getTitle();
        Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title)
                ? com.android.internal.R.style.Theme_NoTitleBar
                : com.android.internal.R.style.Theme);
        dialog.setContentView(listView);
        dialog.setContentView(mListView);
        if (!TextUtils.isEmpty(title)) {
            dialog.setTitle(title);
        }