From 1585e6726cb58c82dfa1757db768e2e983f575f4 Mon Sep 17 00:00:00 2001 From: Jeremy Goldman Date: Thu, 17 Jun 2021 10:20:42 +0800 Subject: [PATCH] Close AirplaneModeEnabler once lifecycle classes are destroyed. The AirplaneModeEnabler is a ContentObserver, and it must be closed when the object containing it is deleted. Otherwise, it will continue to exist and cause a memory leak. Test: atest -c SettingsUnitTest Bug: 177265744 Change-Id: Idd48b601be1133ee02010e23d8dcb394d1e29bd3 --- .../network/AirplaneModePreferenceController.java | 9 ++++++++- .../settings/network/NetworkProviderSettings.java | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/network/AirplaneModePreferenceController.java b/src/com/android/settings/network/AirplaneModePreferenceController.java index 122b9752ca8..68390379328 100644 --- a/src/com/android/settings/network/AirplaneModePreferenceController.java +++ b/src/com/android/settings/network/AirplaneModePreferenceController.java @@ -35,11 +35,12 @@ import com.android.settings.AirplaneModeEnabler; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; public class AirplaneModePreferenceController extends TogglePreferenceController - implements LifecycleObserver, OnStart, OnStop, + implements LifecycleObserver, OnStart, OnStop, OnDestroy, AirplaneModeEnabler.OnAirplaneModeChangedListener { public static final int REQUEST_CODE_EXIT_ECM = 1; @@ -133,6 +134,12 @@ public class AirplaneModePreferenceController extends TogglePreferenceController } } + @Override + public void onDestroy() { + mAirplaneModeEnabler.close(); + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_EXIT_ECM) { final boolean isChoiceYes = data.getBooleanExtra(EXIT_ECM_RESULT, false); diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index b34d9cd7a63..b9912641547 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -459,6 +459,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment super.onStop(); } + @Override + public void onDestroy() { + mAirplaneModeEnabler.close(); + super.onDestroy(); + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);