mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 00:06:47 +00:00
Make AsyncTask static to prevent memory leak in WorkModeSwitch class
Bug: 112163931 Test: Manual testing Change-Id: I17d0cb871103693d9e901758fba2abb2b73874fb
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user