summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRajeev Kumar <rajekumar@google.com>2018-08-06 21:04:42 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-08-06 21:04:42 +0000
commit6e1f150c824203b0f6d688da534b5389103bc743 (patch)
tree2f2ccadcef2a7f6c064932f97e3133d657cfd614 /src
parent589f53cf89788a53f72f451bb50fa0d905da23c0 (diff)
parent88a2391f1d72e94916f5e2fc3c53c72c055df80c (diff)
downloadandroid_packages_apps_Trebuchet-6e1f150c824203b0f6d688da534b5389103bc743.tar.gz
android_packages_apps_Trebuchet-6e1f150c824203b0f6d688da534b5389103bc743.tar.bz2
android_packages_apps_Trebuchet-6e1f150c824203b0f6d688da534b5389103bc743.zip
Merge "Make AsyncTask static to prevent memory leak in WorkModeSwitch class" into ub-launcher3-master
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/allapps/WorkModeSwitch.java66
1 files changed, 45 insertions, 21 deletions
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<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;
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- setEnabled(false);
+ 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();
+ }
}
}