From c692758818d99e10e2a28bd6ea78d6c9b359e643 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Thu, 18 Jan 2018 15:04:59 -0800 Subject: [PATCH] Unregister hotspot receiver in TetherService. - when the service exits, also unregister the hotspot receiver. - move TetherService and HotspotOffReceiver to wifi.tether package. Change-Id: I0044a52bf80a5530a58b5186ab056de55e83532b Fixes: 69844871 Test: make RunSettingsRoboTests --- AndroidManifest.xml | 2 +- .../{ => wifi/tether}/HotspotOffReceiver.java | 2 +- .../{ => wifi/tether}/TetherService.java | 9 +++++-- .../{ => wifi/tether}/TetherServiceTest.java | 26 ++++++++++++++++++- .../{ => wifi/tether}/TetherServiceTest.java | 6 +---- 5 files changed, 35 insertions(+), 10 deletions(-) rename src/com/android/settings/{ => wifi/tether}/HotspotOffReceiver.java (97%) rename src/com/android/settings/{ => wifi/tether}/TetherService.java (99%) rename tests/robotests/src/com/android/settings/{ => wifi/tether}/TetherServiceTest.java (73%) rename tests/unit/src/com/android/settings/{ => wifi/tether}/TetherServiceTest.java (99%) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 51a811d6c4c..9e4dc396635 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -476,7 +476,7 @@ - diff --git a/src/com/android/settings/HotspotOffReceiver.java b/src/com/android/settings/wifi/tether/HotspotOffReceiver.java similarity index 97% rename from src/com/android/settings/HotspotOffReceiver.java rename to src/com/android/settings/wifi/tether/HotspotOffReceiver.java index 40830829582..fcbf888f865 100644 --- a/src/com/android/settings/HotspotOffReceiver.java +++ b/src/com/android/settings/wifi/tether/HotspotOffReceiver.java @@ -1,5 +1,5 @@ -package com.android.settings; +package com.android.settings.wifi.tether; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/src/com/android/settings/TetherService.java b/src/com/android/settings/wifi/tether/TetherService.java similarity index 99% rename from src/com/android/settings/TetherService.java rename to src/com/android/settings/wifi/tether/TetherService.java index fce3f274239..e491de85ee0 100644 --- a/src/com/android/settings/TetherService.java +++ b/src/com/android/settings/wifi/tether/TetherService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.wifi.tether; import android.app.Activity; import android.app.AlarmManager; @@ -167,11 +167,16 @@ public class TetherService extends Service { SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE); prefs.edit().putString(KEY_TETHERS, tethersToString(mCurrentTethers)).commit(); + unregisterReceivers(); if (DEBUG) Log.d(TAG, "Destroying TetherService"); - unregisterReceiver(mReceiver); super.onDestroy(); } + private void unregisterReceivers() { + unregisterReceiver(mReceiver); + mHotspotReceiver.unregister(); + } + private void removeTypeAtIndex(int index) { mCurrentTethers.remove(index); // If we are currently in the middle of a check, we may need to adjust the diff --git a/tests/robotests/src/com/android/settings/TetherServiceTest.java b/tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java similarity index 73% rename from tests/robotests/src/com/android/settings/TetherServiceTest.java rename to tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java index 0275c1525f9..583bd52134d 100644 --- a/tests/robotests/src/com/android/settings/TetherServiceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java @@ -13,17 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.settings; +package com.android.settings.wifi.tether; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.net.wifi.WifiManager; +import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import java.util.ArrayList; @@ -87,4 +93,22 @@ public class TetherServiceTest { mService.cancelAlarmIfNecessary(); verify(mContext).unregisterReceiver(any(HotspotOffReceiver.class)); } + + @Test + public void onDestroy_shouldUnregisterReceiver() { + final ArrayList tethers = new ArrayList<>(); + ReflectionHelpers.setField(mService, "mCurrentTethers", tethers); + ReflectionHelpers.setField(mService, "mBase", mContext); + final SharedPreferences prefs = mock(SharedPreferences .class); + final SharedPreferences.Editor editor = mock(SharedPreferences.Editor.class); + when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(prefs); + when(prefs.edit()).thenReturn(editor); + when(editor.putString(anyString(), anyString())).thenReturn(editor); + final HotspotOffReceiver hotspotOffReceiver = mock(HotspotOffReceiver.class); + mService.setHotspotOffReceiver(hotspotOffReceiver); + + mService.onDestroy(); + + verify(hotspotOffReceiver).unregister(); + } } diff --git a/tests/unit/src/com/android/settings/TetherServiceTest.java b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java similarity index 99% rename from tests/unit/src/com/android/settings/TetherServiceTest.java rename to tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java index 899ea7a1f74..7bf57983e02 100644 --- a/tests/unit/src/com/android/settings/TetherServiceTest.java +++ b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.wifi.tether; import static org.junit.Assert.*; import static org.mockito.Matchers.*; @@ -49,17 +49,13 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.res.Resources; import android.net.ConnectivityManager; -import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.ResultReceiver; import android.os.SystemClock; import android.test.ServiceTestCase; -import android.test.mock.MockResources; import android.util.Log; -import com.android.settings.TetherService; - import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock;