Merge changes Ia96af86c,Ifbe2ac30 into rvc-dev

* changes:
  [Wi-Fi] Wi-Fi picker scrolls to top after a user clicked to connect
  [Wi-Fi] Fix Wi-Fi picker context menu 'Connect' button
This commit is contained in:
TreeHugger Robot
2020-03-31 15:01:09 +00:00
committed by Android (Google) Code Review
3 changed files with 92 additions and 9 deletions

View File

@@ -214,4 +214,8 @@ public class WifiDialog2 extends AlertDialog implements WifiConfigUiBase2,
public void setCancelButton(CharSequence text) { public void setCancelButton(CharSequence text) {
setButton(BUTTON_NEGATIVE, text, this); setButton(BUTTON_NEGATIVE, text, this);
} }
public WifiEntry getWifiEntry() {
return mWifiEntry;
}
} }

View File

@@ -647,6 +647,7 @@ public class WifiSettings2 extends RestrictedSettingsFragment
setOffMessage(); setOffMessage();
setAdditionalSettingsSummaries(); setAdditionalSettingsSummaries();
setProgressBarVisible(false); setProgressBarVisible(false);
mClickedConnect = false;
break; break;
} }
} }
@@ -739,6 +740,11 @@ public class WifiSettings2 extends RestrictedSettingsFragment
pref.setOnGearClickListener(preference -> { pref.setOnGearClickListener(preference -> {
launchNetworkDetailsFragment(pref); launchNetworkDetailsFragment(pref);
}); });
if (mClickedConnect) {
mClickedConnect = false;
scrollToPreference(mConnectedWifiEntryPreferenceCategory);
}
} }
} else { } else {
mConnectedWifiEntryPreferenceCategory.removeAll(); mConnectedWifiEntryPreferenceCategory.removeAll();
@@ -954,18 +960,30 @@ public class WifiSettings2 extends RestrictedSettingsFragment
@Override @Override
public void onForget(WifiDialog2 dialog) { public void onForget(WifiDialog2 dialog) {
forget(mDialogWifiEntry); forget(dialog.getWifiEntry());
} }
@Override @Override
public void onSubmit(WifiDialog2 dialog) { public void onSubmit(WifiDialog2 dialog) {
final int dialogMode = mDialog.getController().getMode(); final int dialogMode = dialog.getMode();
final WifiConfiguration config = dialog.getController().getConfig();
final WifiEntry wifiEntry = dialog.getWifiEntry();
if (dialogMode == WifiConfigUiBase2.MODE_MODIFY) { if (dialogMode == WifiConfigUiBase2.MODE_MODIFY) {
mWifiManager.save(mDialogWifiEntry.getWifiConfiguration(), mSaveListener); if (config == null) {
Toast.makeText(getContext(), R.string.wifi_failed_save_message,
Toast.LENGTH_SHORT).show();
} else {
mWifiManager.save(config, mSaveListener);
}
} else if (dialogMode == WifiConfigUiBase2.MODE_CONNECT } else if (dialogMode == WifiConfigUiBase2.MODE_CONNECT
|| (dialogMode == WifiConfigUiBase2.MODE_VIEW && mDialogWifiEntry.canConnect())) { || (dialogMode == WifiConfigUiBase2.MODE_VIEW && wifiEntry.canConnect())) {
connect(mDialogWifiEntry, false /* editIfNoConfig */, false /* fullScreenEdit*/); if (config == null) {
connect(wifiEntry, false /* editIfNoConfig */,
false /* fullScreenEdit*/);
} else {
mWifiManager.connect(config, new WifiConnectActionListener());
}
} }
} }
@@ -981,7 +999,8 @@ public class WifiSettings2 extends RestrictedSettingsFragment
wifiEntry.forget(null /* callback */); wifiEntry.forget(null /* callback */);
} }
private void connect(WifiEntry wifiEntry, boolean editIfNoConfig, boolean fullScreenEdit) { @VisibleForTesting
void connect(WifiEntry wifiEntry, boolean editIfNoConfig, boolean fullScreenEdit) {
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_WIFI_CONNECT, mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_WIFI_CONNECT,
wifiEntry.isSaved()); wifiEntry.isSaved());
@@ -994,7 +1013,7 @@ public class WifiSettings2 extends RestrictedSettingsFragment
private class WifiConnectActionListener implements WifiManager.ActionListener { private class WifiConnectActionListener implements WifiManager.ActionListener {
@Override @Override
public void onSuccess() { public void onSuccess() {
// Do nothing. mClickedConnect = true;
} }
@Override @Override
@@ -1028,13 +1047,15 @@ public class WifiSettings2 extends RestrictedSettingsFragment
return; return;
} }
if (status == ConnectCallback.CONNECT_STATUS_FAILURE_NO_CONFIG) { if (status == ConnectCallback.CONNECT_STATUS_SUCCESS) {
mClickedConnect = true;
} else if (status == ConnectCallback.CONNECT_STATUS_FAILURE_NO_CONFIG) {
if (mEditIfNoConfig) { if (mEditIfNoConfig) {
// Edit an unsaved secure Wi-Fi network. // Edit an unsaved secure Wi-Fi network.
if (mFullScreenEdit) { if (mFullScreenEdit) {
launchConfigNewNetworkFragment(mConnectWifiEntry); launchConfigNewNetworkFragment(mConnectWifiEntry);
} else { } else {
showDialog(mConnectWifiEntry, WifiConfigUiBase2.MODE_MODIFY); showDialog(mConnectWifiEntry, WifiConfigUiBase2.MODE_CONNECT);
} }
} }
} else if (status == CONNECT_STATUS_FAILURE_UNKNOWN) { } else if (status == CONNECT_STATUS_FAILURE_UNKNOWN) {

View File

@@ -15,6 +15,9 @@
*/ */
package com.android.settings.wifi; package com.android.settings.wifi;
import static com.android.settings.wifi.WifiConfigUiBase2.MODE_CONNECT;
import static com.android.settings.wifi.WifiConfigUiBase2.MODE_MODIFY;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@@ -34,6 +37,7 @@ import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.PowerManager; import android.os.PowerManager;
@@ -64,6 +68,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;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class WifiSettings2Test { public class WifiSettings2Test {
@@ -303,4 +308,57 @@ public class WifiSettings2Test {
mWifiSettings2.onNumSavedSubscriptionsChanged(); mWifiSettings2.onNumSavedSubscriptionsChanged();
} }
@Test
public void onSubmit_modeModifyNoConfig_toastErrorMessage() {
WifiDialog2 dialog = createWifiDialog2(MODE_MODIFY, null /* config */);
mWifiSettings2.onSubmit(dialog);
assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
mContext.getString(R.string.wifi_failed_save_message));
}
@Test
public void onSubmit_modeModifyHasConfig_saveWifiManager() {
final WifiConfiguration config = mock(WifiConfiguration.class);
WifiDialog2 dialog = createWifiDialog2(MODE_MODIFY, config);
mWifiSettings2.onSubmit(dialog);
verify(mWifiManager).save(eq(config), any());
}
@Test
public void onSubmit_modeConnectNoConfig_connectWifiEntry() {
WifiDialog2 dialog = createWifiDialog2(MODE_CONNECT, null /* config */);
final WifiEntry wifiEntry = dialog.getWifiEntry();
mWifiSettings2.onAttach(mContext);
mWifiSettings2.onSubmit(dialog);
verify(mWifiSettings2).connect(wifiEntry, false /* editIfNoConfig */,
false /* fullScreenEdit*/);
}
@Test
public void onSubmit_modeConnectHasConfig_connectWifiManager() {
final WifiConfiguration config = mock(WifiConfiguration.class);
WifiDialog2 dialog = createWifiDialog2(MODE_CONNECT, config);
mWifiSettings2.onSubmit(dialog);
verify(mWifiManager).connect(eq(config), any(WifiManager.ActionListener.class));
}
private WifiDialog2 createWifiDialog2(int mode, WifiConfiguration config) {
final WifiEntry wifiEntry = mock(WifiEntry.class);
when(wifiEntry.canConnect()).thenReturn(true);
final WifiConfigController2 controller = mock(WifiConfigController2.class);
when(controller.getConfig()).thenReturn(config);
final WifiDialog2 wifiDialog2 = spy(WifiDialog2.createModal(mContext, null /* listener */,
wifiEntry, mode));
when(wifiDialog2.getController()).thenReturn(controller);
return wifiDialog2;
}
} }