Make AsyncTask static to prevent memory leak in WorkModeSwitch class

Bug: 112163931
Test: Manual testing
Change-Id: I17d0cb871103693d9e901758fba2abb2b73874fb
This commit is contained in:
Rajeev Kumar
2018-08-02 16:30:51 -07:00
parent dc26977a26
commit 88a2391f1d

View File

@@ -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<Void, Void, Boolean>() {
new SetQuietModeEnabledAsyncTask(enabled, new WeakReference<>(this)).execute();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
setEnabled(false);
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();
WorkModeSwitch workModeSwitch = switchWeakReference.get();
if (workModeSwitch != null) {
workModeSwitch.setEnabled(false);
}
}
@Override
protected Boolean doInBackground(Void... voids) {
UserManagerCompat userManager = UserManagerCompat.getInstance(getContext());
List<UserHandle> 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<UserHandle> 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();
}
}
}