From 88a2391f1d72e94916f5e2fc3c53c72c055df80c Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Thu, 2 Aug 2018 16:30:51 -0700 Subject: Make AsyncTask static to prevent memory leak in WorkModeSwitch class Bug: 112163931 Test: Manual testing Change-Id: I17d0cb871103693d9e901758fba2abb2b73874fb --- .../android/launcher3/allapps/WorkModeSwitch.java | 66 +++++++++++++++------- 1 file changed, 45 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher3/allapps/WorkModeSwitch.java b/src/com/android/launcher3/allapps/WorkModeSwitch.java index e7cf09209..d766398ff 100644 --- a/src/com/android/launcher3/allapps/WorkModeSwitch.java +++ b/src/com/android/launcher3/allapps/WorkModeSwitch.java @@ -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,34 +62,57 @@ public class WorkModeSwitch extends Switch { } private void trySetQuietModeEnabledToAllProfilesAsync(boolean enabled) { - new AsyncTask() { + new SetQuietModeEnabledAsyncTask(enabled, new WeakReference<>(this)).execute(); + } + + private static final class SetQuietModeEnabledAsyncTask + extends AsyncTask { + + private final boolean enabled; + private final WeakReference switchWeakReference; - @Override - protected void onPreExecute() { - super.onPreExecute(); - setEnabled(false); + SetQuietModeEnabledAsyncTask(boolean enabled, + WeakReference switchWeakReference) { + this.enabled = enabled; + this.switchWeakReference = switchWeakReference; + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + WorkModeSwitch workModeSwitch = switchWeakReference.get(); + if (workModeSwitch != null) { + workModeSwitch.setEnabled(false); } + } - @Override - protected Boolean doInBackground(Void... voids) { - UserManagerCompat userManager = UserManagerCompat.getInstance(getContext()); - List userProfiles = userManager.getUserProfiles(); - boolean showConfirm = false; - for (UserHandle userProfile : userProfiles) { - if (Process.myUserHandle().equals(userProfile)) { - continue; - } - showConfirm |= !userManager.requestQuietModeEnabled(enabled, userProfile); + @Override + protected Boolean doInBackground(Void... voids) { + WorkModeSwitch workModeSwitch = switchWeakReference.get(); + if (workModeSwitch == null) { + return false; + } + UserManagerCompat userManager = + UserManagerCompat.getInstance(workModeSwitch.getContext()); + List userProfiles = userManager.getUserProfiles(); + boolean showConfirm = false; + for (UserHandle userProfile : userProfiles) { + if (Process.myUserHandle().equals(userProfile)) { + continue; } - return showConfirm; + showConfirm |= !userManager.requestQuietModeEnabled(enabled, userProfile); } + return showConfirm; + } - @Override - protected void onPostExecute(Boolean showConfirm) { - if (showConfirm) { - setEnabled(true); + @Override + protected void onPostExecute(Boolean showConfirm) { + if (showConfirm) { + WorkModeSwitch workModeSwitch = switchWeakReference.get(); + if (workModeSwitch != null) { + workModeSwitch.setEnabled(true); } } - }.execute(); + } } } -- cgit v1.2.3