summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRajeev Kumar <rajekumar@google.com>2018-08-02 16:30:51 -0700
committerRajeev Kumar <rajekumar@google.com>2018-08-03 12:16:10 -0700
commit88a2391f1d72e94916f5e2fc3c53c72c055df80c (patch)
treec9dfc60b80ddd68af775605a30f3e028d7060f4e /src
parentdc26977a267edafacabcf9ec5bdc3f2f7a5b96ca (diff)
downloadandroid_packages_apps_Trebuchet-88a2391f1d72e94916f5e2fc3c53c72c055df80c.tar.gz
android_packages_apps_Trebuchet-88a2391f1d72e94916f5e2fc3c53c72c055df80c.tar.bz2
android_packages_apps_Trebuchet-88a2391f1d72e94916f5e2fc3c53c72c055df80c.zip
Make AsyncTask static to prevent memory leak in WorkModeSwitch class
Bug: 112163931 Test: Manual testing Change-Id: I17d0cb871103693d9e901758fba2abb2b73874fb
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();
+ }
}
}