From 88cafbaa2446f8ecb61298522614a3434960b854 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Thu, 6 May 2021 05:48:20 +0800 Subject: [PATCH] [Provider Model] Fix settings crash issue - The GlobalSettingsChangeListener needs to be closed after the life cycle is destroyed Bug: 185756174 Bug: 186404332 Bug: 186591527 Test: manual test atest -c InternetUpdaterTest Change-Id: I9fbad3b303055c6c7a61ccad8efe69cefef56c58 --- src/com/android/settings/network/InternetUpdater.java | 7 +++++++ .../com/android/settings/network/InternetUpdaterTest.java | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/com/android/settings/network/InternetUpdater.java b/src/com/android/settings/network/InternetUpdater.java index dd70cef62af..cb8d32ca161 100644 --- a/src/com/android/settings/network/InternetUpdater.java +++ b/src/com/android/settings/network/InternetUpdater.java @@ -20,6 +20,7 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; +import static androidx.lifecycle.Lifecycle.Event.ON_DESTROY; import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE; import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; @@ -191,6 +192,12 @@ public class InternetUpdater implements AirplaneModeEnabler.OnAirplaneModeChange mContext.unregisterReceiver(mWifiStateReceiver); } + /** @OnLifecycleEvent(ON_DESTROY) */ + @OnLifecycleEvent(ON_DESTROY) + public void onDestroy() { + mAirplaneModeEnabler.close(); + } + @Override public void onAirplaneModeChanged(boolean isAirplaneModeOn) { fetchActiveNetwork(); diff --git a/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java b/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java index d61ca00473e..5ab2ce06aa3 100644 --- a/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java +++ b/tests/unit/src/com/android/settings/network/InternetUpdaterTest.java @@ -107,6 +107,13 @@ public class InternetUpdaterTest { any(ConnectivityManager.NetworkCallback.class)); } + @Test + public void onDestroy_shouldCloseCallback() { + mInternetUpdater.onDestroy(); + + verify(mAirplaneModeEnabler).close(); + } + @Test public void updateInternetAvailable_wifiConnectedAndNoValidated_internetUnavailable() { final NetworkCapabilities networkCapabilities = new NetworkCapabilities.Builder()