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
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 51a811d..9e4dc39 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -476,7 +476,7 @@
</intent-filter>
</activity>
- <service android:name=".TetherService"
+ <service android:name=".wifi.tether.TetherService"
android:exported="true"
android:permission="android.permission.TETHER_PRIVILEGED" />
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 4083082..fcbf888 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 98%
rename from src/com/android/settings/TetherService.java
rename to src/com/android/settings/wifi/tether/TetherService.java
index fce3f27..e491de8 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 @@
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 72%
rename from tests/robotests/src/com/android/settings/TetherServiceTest.java
rename to tests/robotests/src/com/android/settings/wifi/tether/TetherServiceTest.java
index 0275c15..583bd52 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 @@
mService.cancelAlarmIfNecessary();
verify(mContext).unregisterReceiver(any(HotspotOffReceiver.class));
}
+
+ @Test
+ public void onDestroy_shouldUnregisterReceiver() {
+ final ArrayList<Integer> 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 98%
rename from tests/unit/src/com/android/settings/TetherServiceTest.java
rename to tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
index 899ea7a..7bf5798 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.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;