Correct detail page UI once user change MAC randomized setting
Changing MAC randomized setting will disconnect and reconnect Wi-Fi in the background automatically. UI display as disconnect even AP reconnected. Fix this problem and also remove some obsolete code. Another problem is connect button display as disabled with "Connecting..." wording after user click connect then change the MAC randomized setting. Bug: 130370187 Test: Manual test with test case in go/wifi_connnection_btn_design Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi.details.WifiDetailPreferenceControllerTest Change-Id: Id87c3db0cc785a9ceb3a71c7cbb78ffd87ffb0a1
This commit is contained in:
@@ -146,7 +146,8 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
private static final long TIMEOUT = Duration.ofSeconds(10).toMillis();
|
private static final long TIMEOUT = Duration.ofSeconds(10).toMillis();
|
||||||
|
|
||||||
// Be static to avoid too much object not be reset.
|
// Be static to avoid too much object not be reset.
|
||||||
private static CountDownTimer mTimer;
|
@VisibleForTesting
|
||||||
|
static CountDownTimer mTimer;
|
||||||
|
|
||||||
private AccessPoint mAccessPoint;
|
private AccessPoint mAccessPoint;
|
||||||
private final ConnectivityManager mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
@@ -256,20 +257,15 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLost(Network network) {
|
public void onLost(Network network) {
|
||||||
final boolean lostCurrentNetwork = network.equals(mNetwork);
|
// Ephemeral network not a saved network, leave detail page once disconnected
|
||||||
if (lostCurrentNetwork) {
|
if (mIsEphemeral && network.equals(mNetwork)) {
|
||||||
// Should update as disconnect but not exit. Except for ephemeral network which
|
|
||||||
// should not show on saved network list.
|
|
||||||
if (!mIsEphemeral) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
exitActivity();
|
exitActivity();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
|
@VisibleForTesting
|
||||||
|
final WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
|
||||||
/** Called when the state of Wifi has changed. */
|
/** Called when the state of Wifi has changed. */
|
||||||
public void onWifiStateChanged(int state) {
|
public void onWifiStateChanged(int state) {
|
||||||
Log.d(TAG, "onWifiStateChanged(" + state + ")");
|
Log.d(TAG, "onWifiStateChanged(" + state + ")");
|
||||||
@@ -284,16 +280,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
|
|
||||||
/** Called when the connection state of wifi has changed. */
|
/** Called when the connection state of wifi has changed. */
|
||||||
public void onConnectedChanged() {
|
public void onConnectedChanged() {
|
||||||
updateAccessPointFromScannedList();
|
refreshPage();
|
||||||
if (mConnected != mAccessPoint.isActive()) {
|
|
||||||
Log.d(TAG, "Connection state changed!");
|
|
||||||
mConnected = mAccessPoint.isActive();
|
|
||||||
if (mAccessPoint.isActive()) {
|
|
||||||
updateConnectingState(STATE_CONNECTED);
|
|
||||||
} else {
|
|
||||||
updateConnectingState(STATE_DISCONNECTED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -518,42 +505,41 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
refreshMacAddress();
|
refreshMacAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateAccessPoint() {
|
@VisibleForTesting
|
||||||
|
boolean updateAccessPoint() {
|
||||||
boolean changed = false;
|
boolean changed = false;
|
||||||
if (mWifiTracker != null) {
|
// remember mIsOutOfRange as old before updated
|
||||||
// remember mIsOutOfRange as old before updated
|
boolean oldState = mIsOutOfRange;
|
||||||
boolean oldState = mIsOutOfRange;
|
updateAccessPointFromScannedList();
|
||||||
updateAccessPointFromScannedList();
|
|
||||||
// refresh UI if signal level changed for disconnect network.
|
|
||||||
changed = mRssiSignalLevel != mAccessPoint.getLevel();
|
|
||||||
changed |= oldState != mIsOutOfRange;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mAccessPoint.isActive()) {
|
if (mAccessPoint.isActive()) {
|
||||||
// Sometimes {@link WifiManager#getCurrentNetwork()} return null after connected,
|
updateNetworkInfo();
|
||||||
// refresh it if needed.
|
|
||||||
if (mNetwork == null) {
|
|
||||||
updateNetworkInfo();
|
|
||||||
}
|
|
||||||
mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork);
|
mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork);
|
||||||
mWifiInfo = mWifiManager.getConnectionInfo();
|
mWifiInfo = mWifiManager.getConnectionInfo();
|
||||||
if (mNetwork == null || mNetworkInfo == null || mWifiInfo == null) {
|
if (mNetwork == null || mNetworkInfo == null || mWifiInfo == null) {
|
||||||
// Once connected, can't get mNetworkInfo immediately, return false and wait for
|
// Once connected, can't get mNetwork immediately, return false and wait for
|
||||||
// next time to update UI.
|
// next time to update UI. also reset {@code mIsOutOfRange}
|
||||||
|
mIsOutOfRange = oldState;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
changed |= mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
|
changed |= mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
|
||||||
// If feature for saved network not enabled, always return true.
|
}
|
||||||
return mWifiTracker == null || changed;
|
|
||||||
|
// signal level changed
|
||||||
|
changed |= mRssiSignalLevel != mAccessPoint.getLevel();
|
||||||
|
// In/Out of range changed
|
||||||
|
changed |= oldState != mIsOutOfRange;
|
||||||
|
// connect state changed
|
||||||
|
if (mConnected != mAccessPoint.isActive()) {
|
||||||
|
mConnected = mAccessPoint.isActive();
|
||||||
|
changed = true;
|
||||||
|
updateConnectingState(mAccessPoint.isActive() ? STATE_CONNECTED : STATE_DISCONNECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAccessPointFromScannedList() {
|
private void updateAccessPointFromScannedList() {
|
||||||
if (mWifiTracker == null) return;
|
|
||||||
|
|
||||||
mIsOutOfRange = true;
|
mIsOutOfRange = true;
|
||||||
|
|
||||||
if (mAccessPoint.getConfig() == null) {
|
if (mAccessPoint.getConfig() == null) {
|
||||||
@@ -957,7 +943,8 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
return FeatureFlagUtils.isEnabled(context, FeatureFlags.WIFI_DETAILS_DATAUSAGE_HEADER);
|
return FeatureFlagUtils.isEnabled(context, FeatureFlags.WIFI_DETAILS_DATAUSAGE_HEADER);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void connectNetwork() {
|
@VisibleForTesting
|
||||||
|
void connectNetwork() {
|
||||||
final Activity activity = mFragment.getActivity();
|
final Activity activity = mFragment.getActivity();
|
||||||
// error handling, connected/saved network should have mWifiConfig.
|
// error handling, connected/saved network should have mWifiConfig.
|
||||||
if (mWifiConfig == null) {
|
if (mWifiConfig == null) {
|
||||||
@@ -1031,7 +1018,6 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
mAccessPoint.getTitle()),
|
mAccessPoint.getTitle()),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
updateNetworkInfo();
|
|
||||||
refreshPage();
|
refreshPage();
|
||||||
} else if (state == STATE_NOT_IN_RANGE) {
|
} else if (state == STATE_NOT_IN_RANGE) {
|
||||||
Log.d(TAG, "AP not in range");
|
Log.d(TAG, "AP not in range");
|
||||||
@@ -1070,7 +1056,11 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController
|
|||||||
.setButton3Enabled(false);
|
.setButton3Enabled(false);
|
||||||
break;
|
break;
|
||||||
case STATE_CONNECTED:
|
case STATE_CONNECTED:
|
||||||
mButtonsPref.setButton3Visible(false);
|
// init button state and set as invisible
|
||||||
|
mButtonsPref.setButton3Text(R.string.wifi_connect)
|
||||||
|
.setButton3Icon(R.drawable.ic_settings_wireless)
|
||||||
|
.setButton3Enabled(true)
|
||||||
|
.setButton3Visible(false);
|
||||||
break;
|
break;
|
||||||
case STATE_DISCONNECTED:
|
case STATE_DISCONNECTED:
|
||||||
case STATE_NOT_IN_RANGE:
|
case STATE_NOT_IN_RANGE:
|
||||||
|
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
@@ -95,6 +96,7 @@ import org.mockito.MockitoAnnotations;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
import org.robolectric.shadows.ShadowToast;
|
||||||
|
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
@@ -1307,6 +1309,406 @@ public class WifiDetailPreferenceControllerTest {
|
|||||||
verify(mockButtonsPref).setButton2Visible(false);
|
verify(mockButtonsPref).setButton2Visible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_shouldInvisibleForConnectNetwork() {
|
||||||
|
setUpForConnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
verify(mockButtonsPref, times(1)).setButton3Visible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_shouldVisibleForDisconnectNetwork() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
verify(mockButtonsPref, times(1)).setButton3Text(R.string.wifi_connect);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUpForToast() {
|
||||||
|
Resources res = mContext.getResources();
|
||||||
|
when(mockActivity.getResources()).thenReturn(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnect_displayAsSuccess() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(true);
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
String label = "title";
|
||||||
|
when(mockAccessPoint.getTitle()).thenReturn(label);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check display button as connecting
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as connected
|
||||||
|
when(mockAccessPoint.isActive()).thenReturn(true);
|
||||||
|
mController.updateAccessPoint();
|
||||||
|
|
||||||
|
// check connect button invisible, be init as default state and toast success message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(false);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_connected_to_message, label));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnectButFailed_displayFailMessage() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
ArgumentCaptor<WifiManager.ActionListener> connectListenerCaptor =
|
||||||
|
ArgumentCaptor.forClass(WifiManager.ActionListener.class);
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(true);
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check display button as connecting
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), connectListenerCaptor.capture());
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as failed
|
||||||
|
connectListenerCaptor.getValue().onFailure(-1);
|
||||||
|
|
||||||
|
// check connect button visible, be init as default and toast failed message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_failed_connect_message));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyConnectBtnSetUpAsVisible(InOrder inOrder) {
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Text(R.string.wifi_connect);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Icon(R.drawable.ic_settings_wireless);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyConnectBtnSetUpAsConnecting(InOrder inOrder) {
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Text(R.string.wifi_connecting);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Enabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyConnectBtnBeInitAsDefault(InOrder inOrder) {
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Text(R.string.wifi_connect);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Icon(R.drawable.ic_settings_wireless);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Enabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnectButTimeout_displayFailMessage() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(true);
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check display button as connecting
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as failed
|
||||||
|
mController.mTimer.onFinish();
|
||||||
|
|
||||||
|
// check connect button visible, be init as default and toast failed message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_failed_connect_message));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnectButTimeout_displayNotInRangeMessage() {
|
||||||
|
setUpForNotInRangeNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(true);
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check display button as connecting
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as failed
|
||||||
|
mController.mTimer.onFinish();
|
||||||
|
|
||||||
|
// check connect button visible, be init as default and toast failed message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_not_in_range_message));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnectWhenWiFiDisabled_displaySuccessMessage() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
String label = "title";
|
||||||
|
when(mockAccessPoint.getTitle()).thenReturn(label);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
|
||||||
|
verify(mockWifiManager, times(1)).setWifiEnabled(true);
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_turned_on_message));
|
||||||
|
|
||||||
|
// notify Wi-Fi enabled
|
||||||
|
mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
|
||||||
|
|
||||||
|
// check had connect network and icon display as expected
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as connected
|
||||||
|
when(mockAccessPoint.isActive()).thenReturn(true);
|
||||||
|
mController.updateAccessPoint();
|
||||||
|
|
||||||
|
// check connect button invisible, be init as default state and toast success message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(false);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_connected_to_message, label));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnectWhenWiFiDisabled_failedToConnectWiFi() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
|
||||||
|
verify(mockWifiManager, times(1)).setWifiEnabled(true);
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_turned_on_message));
|
||||||
|
|
||||||
|
// notify Wi-Fi enabled
|
||||||
|
mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
|
||||||
|
|
||||||
|
// check had connect network and icon display as expected
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as failed
|
||||||
|
mController.mTimer.onFinish();
|
||||||
|
|
||||||
|
// check connect button visible, be init as default and toast failed message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_failed_connect_message));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void
|
||||||
|
testConnectButton_clickConnectWhenWiFiDisabled_failedToConnectWifiBecauseNotInRange() {
|
||||||
|
setUpForNotInRangeNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
|
||||||
|
verify(mockWifiManager, times(1)).setWifiEnabled(true);
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_turned_on_message));
|
||||||
|
|
||||||
|
// notify Wi-Fi enabled
|
||||||
|
mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
|
||||||
|
|
||||||
|
// check had connect network and icon display as expected
|
||||||
|
verify(mockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
|
||||||
|
// update as failed
|
||||||
|
mController.mTimer.onFinish();
|
||||||
|
|
||||||
|
// check connect button visible, be init as default and toast failed message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_not_in_range_message));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectButton_clickConnectWhenWiFiDisabled_failedToEnableWifi() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
when(mockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
|
||||||
|
InOrder inOrder = inOrder(mockButtonsPref);
|
||||||
|
setUpForToast();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// check connect button exist
|
||||||
|
verifyConnectBtnSetUpAsVisible(inOrder);
|
||||||
|
|
||||||
|
// click connect button
|
||||||
|
mController.connectNetwork();
|
||||||
|
|
||||||
|
// check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
|
||||||
|
verify(mockWifiManager, times(1)).setWifiEnabled(true);
|
||||||
|
verifyConnectBtnSetUpAsConnecting(inOrder);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_turned_on_message));
|
||||||
|
|
||||||
|
// notify turn on Wi-Fi failed
|
||||||
|
mController.mTimer.onFinish();
|
||||||
|
|
||||||
|
// check connect button visible, be init as default and toast failed message
|
||||||
|
verifyConnectBtnBeInitAsDefault(inOrder);
|
||||||
|
inOrder.verify(mockButtonsPref, times(1)).setButton3Visible(true);
|
||||||
|
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
|
||||||
|
mContext.getString(R.string.wifi_failed_connect_message));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnFalseForNothingChanged() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnTrueForSignalLevelChanged() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// Level changed
|
||||||
|
when(mockAccessPoint.getLevel()).thenReturn(LEVEL + 1);
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnTrueForChangeAsNotInRange() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// change as not in range
|
||||||
|
when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(false);
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnTrueForChangeAsInRange() {
|
||||||
|
setUpForNotInRangeNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// change as in range
|
||||||
|
when(mockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true);
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnTrueForChangeAsConnected() {
|
||||||
|
setUpForDisconnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// change as connected
|
||||||
|
when(mockAccessPoint.isActive()).thenReturn(true);
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnTrueForChangeAsDisconnected() {
|
||||||
|
setUpForConnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// change as disconnected
|
||||||
|
when(mockAccessPoint.isActive()).thenReturn(false);
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateAccessPoint_returnTrueForAccessPointUpdated() {
|
||||||
|
setUpForConnectedNetwork();
|
||||||
|
|
||||||
|
displayAndResume();
|
||||||
|
|
||||||
|
// change as disconnected
|
||||||
|
when(mockAccessPoint.update(mockWifiConfig, mockWifiInfo, mockNetworkInfo))
|
||||||
|
.thenReturn(true);
|
||||||
|
boolean changed = mController.updateAccessPoint();
|
||||||
|
|
||||||
|
assertThat(changed).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRefreshRssiViews_shouldNotUpdateIfLevelIsSameForConnectedNetwork() {
|
public void testRefreshRssiViews_shouldNotUpdateIfLevelIsSameForConnectedNetwork() {
|
||||||
setUpForConnectedNetwork();
|
setUpForConnectedNetwork();
|
||||||
|
Reference in New Issue
Block a user