From: Doris Ling Date: Fri, 2 Jun 2017 00:06:40 +0000 (-0700) Subject: Remove call to WifiManager.setWifiApEnabled(). X-Git-Tag: android-x86-9.0-r1~852^2~1^2~12 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f38ed2fbb2;p=android-x86%2Fpackages-apps-Settings.git Remove call to WifiManager.setWifiApEnabled(). - replace it with ConnectivityManager.stopTethering() instead. Change-Id: I112863b1be37c0fef5d59c16d73f0c6cf71c6dea Fix: 62191978 Test: make RunSettingsRoboTests --- diff --git a/src/com/android/settings/wifi/ConnectivityManagerWrapper.java b/src/com/android/settings/wifi/ConnectivityManagerWrapper.java new file mode 100644 index 0000000000..73176663cc --- /dev/null +++ b/src/com/android/settings/wifi/ConnectivityManagerWrapper.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.wifi; + +import android.net.ConnectivityManager; + +/** + * Wrapper around {@link ConnectivityManager} to facilitate unit testing. + */ +public class ConnectivityManagerWrapper { + private final ConnectivityManager mConnectivityManager; + + public ConnectivityManagerWrapper(ConnectivityManager connectivityManager) { + mConnectivityManager = connectivityManager; + } + + /** + * {@link ConnectivityManager#stopTethering} + */ + public void stopTethering(int type) { + mConnectivityManager.stopTethering(type); + } +} diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java index abab154f24..77188987b3 100644 --- a/src/com/android/settings/wifi/WifiEnabler.java +++ b/src/com/android/settings/wifi/WifiEnabler.java @@ -20,6 +20,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.SupplicantState; import android.net.wifi.WifiInfo; @@ -27,6 +28,7 @@ import android.net.wifi.WifiManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; +import android.support.annotation.VisibleForTesting; import android.widget.Toast; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -43,6 +45,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene private final SwitchWidgetController mSwitchWidget; private final WifiManager mWifiManager; + private final ConnectivityManagerWrapper mConnectivityManager; private final MetricsFeatureProvider mMetricsFeatureProvider; private Context mContext; @@ -76,12 +79,21 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene private static final int EVENT_UPDATE_INDEX = 0; public WifiEnabler(Context context, SwitchWidgetController switchWidget, - MetricsFeatureProvider metricsFeatureProvider) { + MetricsFeatureProvider metricsFeatureProvider) { + this(context, switchWidget, metricsFeatureProvider, new ConnectivityManagerWrapper( + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE))); + } + + @VisibleForTesting + WifiEnabler(Context context, SwitchWidgetController switchWidget, + MetricsFeatureProvider metricsFeatureProvider, + ConnectivityManagerWrapper connectivityManagerWrapper) { mContext = context; mSwitchWidget = switchWidget; mSwitchWidget.setListener(this); mMetricsFeatureProvider = metricsFeatureProvider; mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + mConnectivityManager = connectivityManagerWrapper; mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); // The order matters! We really should not depend on this. :( @@ -198,7 +210,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene // Disable tethering if enabling Wifi if (mayDisableTethering(isChecked)) { - mWifiManager.setWifiApEnabled(null, false); + mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI); } if (isChecked) { mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_WIFI_ON); diff --git a/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java new file mode 100644 index 0000000000..56464708a1 --- /dev/null +++ b/tests/robotests/src/com/android/settings/wifi/WifiEnablerTest.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.wifi; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.wifi.WifiManager; + +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; +import com.android.settings.core.instrumentation.MetricsFeatureProvider; +import com.android.settings.widget.SwitchWidgetController; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class WifiEnablerTest { + + @Mock + private Context mContext; + @Mock + private WifiManager mWifiManager; + @Mock + private ConnectivityManagerWrapper mConnectivityManager; + + private WifiEnabler mEnabler; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager); + mEnabler = new WifiEnabler(mContext, mock(SwitchWidgetController.class), + mock(MetricsFeatureProvider.class), mConnectivityManager); + } + + @Test + public void onSwitchToggled_avoidBadWifiConfigIsFalse_shouldReturnTrue() { + when(mWifiManager.setWifiEnabled(true)).thenReturn(true); + when(mWifiManager.getWifiApState()).thenReturn(WifiManager.WIFI_AP_STATE_ENABLED); + + mEnabler.onSwitchToggled(true); + + verify(mConnectivityManager).stopTethering(ConnectivityManager.TETHERING_WIFI); + } + +}