[Network Connection] Implement "show all" button for
NetworkRequestDialog Add "show all" button to NetworkRequest dialog to let user be able to show all AccessPoints of onMatch() callback. Bug: 117985692 Test: atest NetworkRequestDialogFragmentTest Change-Id: I604083fd0f3ea98208d860a327733699cd4664d7
This commit is contained in:
@@ -10560,6 +10560,8 @@
|
|||||||
<string name="network_connection_errorstate_dialog_message">Something came up. The application has cancelled the request to choose a device.</string>
|
<string name="network_connection_errorstate_dialog_message">Something came up. The application has cancelled the request to choose a device.</string>
|
||||||
<!-- Toast message when connection is successful [CHAR LIMIT=30] -->
|
<!-- Toast message when connection is successful [CHAR LIMIT=30] -->
|
||||||
<string name="network_connection_connect_successful">Connection successful</string>
|
<string name="network_connection_connect_successful">Connection successful</string>
|
||||||
|
<!-- Neutral button for Network connection request Dialog [CHAR LIMIT=30] -->
|
||||||
|
<string name="network_connection_request_dialog_showall">Show all</string>
|
||||||
|
|
||||||
<!-- Summary for bluetooth devices count in Bluetooth devices slice. [CHAR LIMIT=NONE] -->
|
<!-- Summary for bluetooth devices count in Bluetooth devices slice. [CHAR LIMIT=NONE] -->
|
||||||
<plurals name="show_bluetooth_devices">
|
<plurals name="show_bluetooth_devices">
|
||||||
|
@@ -37,6 +37,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.Button;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -69,8 +70,12 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
/** Message sent to us to stop scanning wifi and pop up timeout dialog. */
|
/** Message sent to us to stop scanning wifi and pop up timeout dialog. */
|
||||||
private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;
|
private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;
|
||||||
|
|
||||||
/** Spec defines there should be 5 wifi ap on the list at most. */
|
/**
|
||||||
|
* Spec defines there should be 5 wifi ap on the list at most or just show all if {@code
|
||||||
|
* mShowLimitedItem} is false.
|
||||||
|
*/
|
||||||
private static final int MAX_NUMBER_LIST_ITEM = 5;
|
private static final int MAX_NUMBER_LIST_ITEM = 5;
|
||||||
|
private boolean mShowLimitedItem = true;
|
||||||
|
|
||||||
/** Delayed time to stop scanning wifi. */
|
/** Delayed time to stop scanning wifi. */
|
||||||
private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;
|
private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;
|
||||||
@@ -110,13 +115,29 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
final AlertDialog.Builder builder = new AlertDialog.Builder(context)
|
final AlertDialog.Builder builder = new AlertDialog.Builder(context)
|
||||||
.setCustomTitle(customTitle)
|
.setCustomTitle(customTitle)
|
||||||
.setAdapter(mDialogAdapter, this)
|
.setAdapter(mDialogAdapter, this)
|
||||||
.setPositiveButton(R.string.cancel, (dialog, which) -> getActivity().finish());
|
.setPositiveButton(R.string.cancel, (dialog, which) -> getActivity().finish())
|
||||||
|
// Do nothings, will replace the onClickListener to avoid auto closing dialog.
|
||||||
|
.setNeutralButton(R.string.network_connection_request_dialog_showall,
|
||||||
|
null /* OnClickListener */);
|
||||||
|
|
||||||
// Clicking list item is to connect wifi ap.
|
// Clicking list item is to connect wifi ap.
|
||||||
final AlertDialog dialog = builder.create();
|
final AlertDialog dialog = builder.create();
|
||||||
dialog.getListView()
|
dialog.getListView()
|
||||||
.setOnItemClickListener(
|
.setOnItemClickListener(
|
||||||
(parent, view, position, id) -> this.onClick(dialog, position));
|
(parent, view, position, id) -> this.onClick(dialog, position));
|
||||||
|
|
||||||
|
dialog.setOnShowListener((dialogInterface) -> {
|
||||||
|
// Replace NeutralButton onClickListener to avoid closing dialog
|
||||||
|
final Button neutralBtn = dialog.getButton(AlertDialog.BUTTON_NEUTRAL);
|
||||||
|
neutralBtn.setVisibility(View.GONE);
|
||||||
|
neutralBtn.setOnClickListener(v -> {
|
||||||
|
mShowLimitedItem = false;
|
||||||
|
renewAccessPointList(null /* List<ScanResult> */);
|
||||||
|
notifyAdapterRefresh();
|
||||||
|
neutralBtn.setVisibility(View.GONE);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
return dialog;
|
return dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,6 +223,18 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showNeutralButton() {
|
||||||
|
final AlertDialog alertDialog = (AlertDialog) getDialog();
|
||||||
|
if (alertDialog == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Button neutralBtn = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
|
||||||
|
if (neutralBtn != null) {
|
||||||
|
neutralBtn.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@@ -394,6 +427,10 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
mAccessPointKeys.add(key);
|
mAccessPointKeys.add(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mShowLimitedItem && (mAccessPointKeys.size() > MAX_NUMBER_LIST_ITEM)) {
|
||||||
|
showNeutralButton();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -414,7 +451,7 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
|
|
||||||
count++;
|
count++;
|
||||||
// Limits how many count of items could show.
|
// Limits how many count of items could show.
|
||||||
if (count >= MAX_NUMBER_LIST_ITEM) {
|
if (mShowLimitedItem && count >= MAX_NUMBER_LIST_ITEM) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -33,6 +33,7 @@ import android.net.wifi.WifiConfiguration;
|
|||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
|
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@@ -264,20 +265,77 @@ public class NetworkRequestDialogFragmentTest {
|
|||||||
private List<AccessPoint> createAccessPointList() {
|
private List<AccessPoint> createAccessPointList() {
|
||||||
List<AccessPoint> accessPointList = spy(new ArrayList<>());
|
List<AccessPoint> accessPointList = spy(new ArrayList<>());
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
|
|
||||||
bundle.putString(KEY_SSID, "Test AP 1");
|
bundle.putString(KEY_SSID, "Test AP 1");
|
||||||
bundle.putInt(KEY_SECURITY, 1);
|
bundle.putInt(KEY_SECURITY, 1);
|
||||||
accessPointList.add(new AccessPoint(mContext, bundle));
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
bundle.putString(KEY_SSID, "Test AP 2");
|
bundle.putString(KEY_SSID, "Test AP 2");
|
||||||
bundle.putInt(KEY_SECURITY, 1);
|
bundle.putInt(KEY_SECURITY, 1);
|
||||||
accessPointList.add(new AccessPoint(mContext, bundle));
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
bundle.putString(KEY_SSID, "Test AP 3");
|
bundle.putString(KEY_SSID, "Test AP 3");
|
||||||
bundle.putInt(KEY_SECURITY, 2);
|
bundle.putInt(KEY_SECURITY, 2);
|
||||||
AccessPoint clickedAccessPoint = new AccessPoint(mContext, bundle);
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
accessPointList.add(clickedAccessPoint);
|
|
||||||
bundle.putString(KEY_SSID, "Test AP 4");
|
bundle.putString(KEY_SSID, "Test AP 4");
|
||||||
bundle.putInt(KEY_SECURITY, 0);
|
bundle.putInt(KEY_SECURITY, 0);
|
||||||
accessPointList.add(new AccessPoint(mContext, bundle));
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
return accessPointList;
|
return accessPointList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void display_shouldNotShowNeutralButton() {
|
||||||
|
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
|
||||||
|
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
|
|
||||||
|
final Button button = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
|
||||||
|
assertThat(button).isNotNull();
|
||||||
|
assertThat(button.getVisibility()).isEqualTo(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onMatchManyResult_showNeutralButton() {
|
||||||
|
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
|
||||||
|
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
|
|
||||||
|
final String SSID_AP = "Test AP ";
|
||||||
|
final List<ScanResult> scanResults = new ArrayList<>();
|
||||||
|
for (int i = 0; i < 6 ; i ++) {
|
||||||
|
ScanResult scanResult = new ScanResult();
|
||||||
|
scanResult.SSID = SSID_AP + i;
|
||||||
|
scanResult.capabilities = "WEP";
|
||||||
|
scanResults.add(scanResult);
|
||||||
|
}
|
||||||
|
networkRequestDialogFragment.onMatch(scanResults);
|
||||||
|
|
||||||
|
final Button button = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
|
||||||
|
assertThat(button).isNotNull();
|
||||||
|
assertThat(button.getVisibility()).isEqualTo(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void clickNeutralButton_hideNeutralButton() {
|
||||||
|
// Assert
|
||||||
|
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
|
||||||
|
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
|
|
||||||
|
final String SSID_AP = "Test AP ";
|
||||||
|
final List<ScanResult> scanResults = new ArrayList<>();
|
||||||
|
for (int i = 0; i < 6 ; i ++) {
|
||||||
|
ScanResult scanResult = new ScanResult();
|
||||||
|
scanResult.SSID = SSID_AP + i;
|
||||||
|
scanResult.capabilities = "WEP";
|
||||||
|
scanResults.add(scanResult);
|
||||||
|
}
|
||||||
|
networkRequestDialogFragment.onMatch(scanResults);
|
||||||
|
|
||||||
|
// Action
|
||||||
|
final Button button = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
|
||||||
|
button.performClick();
|
||||||
|
|
||||||
|
// Check
|
||||||
|
assertThat(button.getVisibility()).isEqualTo(View.GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user