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

Commit 88a2391f authored by Rajeev Kumar's avatar Rajeev Kumar
Browse files

Make AsyncTask static to prevent memory leak in WorkModeSwitch class

Bug: 112163931
Test: Manual testing
Change-Id: I17d0cb871103693d9e901758fba2abb2b73874fb
parent dc26977a
Loading
Loading
Loading
Loading
+45 −21
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.widget.Switch;

import com.android.launcher3.compat.UserManagerCompat;

import java.lang.ref.WeakReference;
import java.util.List;

public class WorkModeSwitch extends Switch {
@@ -61,17 +62,38 @@ public class WorkModeSwitch extends Switch {
    }

    private void trySetQuietModeEnabledToAllProfilesAsync(boolean enabled) {
        new AsyncTask<Void, Void, Boolean>() {
        new SetQuietModeEnabledAsyncTask(enabled, new WeakReference<>(this)).execute();
    }

    private static final class SetQuietModeEnabledAsyncTask
            extends AsyncTask<Void, Void, Boolean> {

        private final boolean enabled;
        private final WeakReference<WorkModeSwitch> switchWeakReference;

        SetQuietModeEnabledAsyncTask(boolean enabled,
                                     WeakReference<WorkModeSwitch> switchWeakReference) {
            this.enabled = enabled;
            this.switchWeakReference = switchWeakReference;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
                setEnabled(false);
            WorkModeSwitch workModeSwitch = switchWeakReference.get();
            if (workModeSwitch != null) {
                workModeSwitch.setEnabled(false);
            }
        }

        @Override
        protected Boolean doInBackground(Void... voids) {
                UserManagerCompat userManager = UserManagerCompat.getInstance(getContext());
            WorkModeSwitch workModeSwitch = switchWeakReference.get();
            if (workModeSwitch == null) {
                return false;
            }
            UserManagerCompat userManager =
                    UserManagerCompat.getInstance(workModeSwitch.getContext());
            List<UserHandle> userProfiles = userManager.getUserProfiles();
            boolean showConfirm = false;
            for (UserHandle userProfile : userProfiles) {
@@ -86,9 +108,11 @@ public class WorkModeSwitch extends Switch {
        @Override
        protected void onPostExecute(Boolean showConfirm) {
            if (showConfirm) {
                    setEnabled(true);
                WorkModeSwitch workModeSwitch = switchWeakReference.get();
                if (workModeSwitch != null) {
                    workModeSwitch.setEnabled(true);
                }
            }
        }
        }.execute();
    }
}