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;