[Network Connection] Implement new UI changing
1. Change title to multi-lines display 2. Add "SingleSpecifiedSSID" mode, will have connect button 3. Don't pop error dialog, if there is connection failure. Let user retry. 4. Hide progress icon if list item exists Bug: 128586511 Test: atest NetworkRequestDialogFragmentTest Change-Id: Icc560e4882fbcd941574e44690a27d5082a7c4c7
This commit is contained in:
@@ -25,14 +25,12 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/network_request_title_text"
|
android:id="@+id/network_request_title_text"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:paddingLeft="24dp"
|
android:paddingLeft="24dp"
|
||||||
android:paddingTop="18dp"
|
android:paddingTop="18dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:textSize="18sp"
|
android:textSize="18sp"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:maxLines="1"
|
|
||||||
android:ellipsize="end"
|
|
||||||
style="@style/info_label"/>
|
style="@style/info_label"/>
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
|
@@ -82,11 +82,15 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final static String EXTRA_APP_NAME = "com.android.settings.wifi.extra.APP_NAME";
|
final static String EXTRA_APP_NAME = "com.android.settings.wifi.extra.APP_NAME";
|
||||||
|
final static String EXTRA_IS_SPECIFIED_SSID =
|
||||||
|
"com.android.settings.wifi.extra.REQUEST_IS_FOR_SINGLE_NETWORK";
|
||||||
|
|
||||||
private List<AccessPoint> mAccessPointList;
|
private List<AccessPoint> mAccessPointList;
|
||||||
private FilterWifiTracker mFilterWifiTracker;
|
private FilterWifiTracker mFilterWifiTracker;
|
||||||
private AccessPointAdapter mDialogAdapter;
|
private AccessPointAdapter mDialogAdapter;
|
||||||
private NetworkRequestUserSelectionCallback mUserSelectionCallback;
|
private NetworkRequestUserSelectionCallback mUserSelectionCallback;
|
||||||
|
private boolean mIsSpecifiedSsid;
|
||||||
|
private boolean mWaitingConnectCallback;
|
||||||
|
|
||||||
public static NetworkRequestDialogFragment newInstance() {
|
public static NetworkRequestDialogFragment newInstance() {
|
||||||
NetworkRequestDialogFragment dialogFragment = new NetworkRequestDialogFragment();
|
NetworkRequestDialogFragment dialogFragment = new NetworkRequestDialogFragment();
|
||||||
@@ -104,6 +108,11 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
final TextView title = customTitle.findViewById(R.id.network_request_title_text);
|
final TextView title = customTitle.findViewById(R.id.network_request_title_text);
|
||||||
title.setText(getTitle());
|
title.setText(getTitle());
|
||||||
|
|
||||||
|
final Intent intent = getActivity().getIntent();
|
||||||
|
if (intent != null) {
|
||||||
|
mIsSpecifiedSsid = intent.getBooleanExtra(EXTRA_IS_SPECIFIED_SSID, false);
|
||||||
|
}
|
||||||
|
|
||||||
final ProgressBar progressBar = customTitle.findViewById(
|
final ProgressBar progressBar = customTitle.findViewById(
|
||||||
R.id.network_request_title_progress);
|
R.id.network_request_title_progress);
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
@@ -115,10 +124,13 @@ 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())
|
.setNegativeButton(R.string.cancel, (dialog, which) -> getActivity().finish())
|
||||||
// Do nothings, will replace the onClickListener to avoid auto closing dialog.
|
// Do nothings, will replace the onClickListener to avoid auto closing dialog.
|
||||||
.setNeutralButton(R.string.network_connection_request_dialog_showall,
|
.setNeutralButton(R.string.network_connection_request_dialog_showall,
|
||||||
null /* OnClickListener */);
|
null /* OnClickListener */);
|
||||||
|
if (mIsSpecifiedSsid) {
|
||||||
|
builder.setPositiveButton(R.string.wifi_connect, 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();
|
||||||
@@ -136,8 +148,19 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
notifyAdapterRefresh();
|
notifyAdapterRefresh();
|
||||||
neutralBtn.setVisibility(View.GONE);
|
neutralBtn.setVisibility(View.GONE);
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
|
// Replace Positive onClickListener to avoid closing dialog
|
||||||
|
if (mIsSpecifiedSsid) {
|
||||||
|
final Button positiveBtn = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
||||||
|
positiveBtn.setOnClickListener(v -> {
|
||||||
|
// When clicking connect button, should connect to the first and the only one
|
||||||
|
// list item.
|
||||||
|
this.onClick(dialog, 0 /* position */);
|
||||||
|
});
|
||||||
|
// Disable button in first, and enable it after there are some accesspoints in list.
|
||||||
|
positiveBtn.setEnabled(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
return dialog;
|
return dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,6 +207,9 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
|
|
||||||
if (wifiConfig != null) {
|
if (wifiConfig != null) {
|
||||||
mUserSelectionCallback.select(wifiConfig);
|
mUserSelectionCallback.select(wifiConfig);
|
||||||
|
|
||||||
|
mWaitingConnectCallback = true;
|
||||||
|
updateConnectButton(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,7 +249,7 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showNeutralButton() {
|
private void showAllButton() {
|
||||||
final AlertDialog alertDialog = (AlertDialog) getDialog();
|
final AlertDialog alertDialog = (AlertDialog) getDialog();
|
||||||
if (alertDialog == null) {
|
if (alertDialog == null) {
|
||||||
return;
|
return;
|
||||||
@@ -235,6 +261,35 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateConnectButton(boolean enabled) {
|
||||||
|
// The button is only showed in single SSID mode.
|
||||||
|
if (!mIsSpecifiedSsid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final AlertDialog alertDialog = (AlertDialog) getDialog();
|
||||||
|
if (alertDialog == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Button positiveBtn = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
||||||
|
if (positiveBtn != null) {
|
||||||
|
positiveBtn.setEnabled(enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void hideProgressIcon() {
|
||||||
|
final AlertDialog alertDialog = (AlertDialog) getDialog();
|
||||||
|
if (alertDialog == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final View progress = alertDialog.findViewById(R.id.network_request_title_progress);
|
||||||
|
if (progress != null) {
|
||||||
|
progress.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@@ -403,7 +458,9 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
|
public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
|
||||||
stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
|
// Do nothing when selection is failed, let user could try again easily.
|
||||||
|
mWaitingConnectCallback = false;
|
||||||
|
updateConnectButton(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class FilterWifiTracker {
|
private final class FilterWifiTracker {
|
||||||
@@ -427,10 +484,6 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
mAccessPointKeys.add(key);
|
mAccessPointKeys.add(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mShowLimitedItem && (mAccessPointKeys.size() > MAX_NUMBER_LIST_ITEM)) {
|
|
||||||
showNeutralButton();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -457,6 +510,21 @@ public class NetworkRequestDialogFragment extends InstrumentedDialogFragment imp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update related UI buttons
|
||||||
|
if (mShowLimitedItem && (count >= MAX_NUMBER_LIST_ITEM)) {
|
||||||
|
showAllButton();
|
||||||
|
}
|
||||||
|
if (count > 0) {
|
||||||
|
hideProgressIcon();
|
||||||
|
}
|
||||||
|
// Enable connect button if there is Accesspoint item, except for the situation that
|
||||||
|
// user click but connected status doesn't come back yet.
|
||||||
|
if (count < 0) {
|
||||||
|
updateConnectButton(false);
|
||||||
|
} else if (!mWaitingConnectCallback) {
|
||||||
|
updateConnectButton(true);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -106,12 +106,12 @@ public class NetworkRequestDialogFragmentTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void clickPositiveButton_shouldCloseTheDialog() {
|
public void clickNegativeButton_shouldCloseTheDialog() {
|
||||||
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
|
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), null);
|
||||||
AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
assertThat(alertDialog.isShowing()).isTrue();
|
assertThat(alertDialog.isShowing()).isTrue();
|
||||||
|
|
||||||
Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
Button positiveButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
|
||||||
assertThat(positiveButton).isNotNull();
|
assertThat(positiveButton).isNotNull();
|
||||||
|
|
||||||
positiveButton.performClick();
|
positiveButton.performClick();
|
||||||
@@ -185,26 +185,6 @@ public class NetworkRequestDialogFragmentTest {
|
|||||||
verify(spyActivity).finish();
|
verify(spyActivity).finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void updateAccessPointList_onUserSelectionConnectFailure_shouldCallAbortDialog() {
|
|
||||||
FakeNetworkRequestDialogFragment fakeFragment = new FakeNetworkRequestDialogFragment();
|
|
||||||
FakeNetworkRequestDialogFragment spyFakeFragment = spy(fakeFragment);
|
|
||||||
List<AccessPoint> accessPointList = createAccessPointList();
|
|
||||||
when(spyFakeFragment.getAccessPointList()).thenReturn(accessPointList);
|
|
||||||
spyFakeFragment.show(mActivity.getSupportFragmentManager(), null);
|
|
||||||
|
|
||||||
AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
|
||||||
assertThat(alertDialog.isShowing()).isTrue();
|
|
||||||
|
|
||||||
// Test if config would update list.
|
|
||||||
WifiConfiguration config = new WifiConfiguration();
|
|
||||||
config.SSID = "Test AP 3";
|
|
||||||
fakeFragment.onUserSelectionConnectFailure(config);
|
|
||||||
|
|
||||||
assertThat(fakeFragment.bCalledStopAndPop).isTrue();
|
|
||||||
assertThat(fakeFragment.errorType).isEqualTo(ERROR_DIALOG_TYPE.ABORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onUserSelectionCallbackRegistration_onClick_shouldCallSelect() {
|
public void onUserSelectionCallbackRegistration_onClick_shouldCallSelect() {
|
||||||
// Assert.
|
// Assert.
|
||||||
@@ -267,19 +247,27 @@ public class NetworkRequestDialogFragmentTest {
|
|||||||
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 /* WEP */);
|
||||||
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 /* WEP */);
|
||||||
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, 1 /* WEP */);
|
||||||
accessPointList.add(new AccessPoint(mContext, bundle));
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
bundle.putString(KEY_SSID, "Test AP 4");
|
bundle.putString(KEY_SSID, "Test AP 4");
|
||||||
bundle.putInt(KEY_SECURITY, 0);
|
bundle.putInt(KEY_SECURITY, 0 /* NONE */);
|
||||||
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
|
bundle.putString(KEY_SSID, "Test AP 5");
|
||||||
|
bundle.putInt(KEY_SECURITY, 1 /* WEP */);
|
||||||
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
|
bundle.putString(KEY_SSID, "Test AP 6");
|
||||||
|
bundle.putInt(KEY_SECURITY, 1 /* WEP */);
|
||||||
accessPointList.add(new AccessPoint(mContext, bundle));
|
accessPointList.add(new AccessPoint(mContext, bundle));
|
||||||
|
|
||||||
return accessPointList;
|
return accessPointList;
|
||||||
@@ -300,9 +288,13 @@ public class NetworkRequestDialogFragmentTest {
|
|||||||
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
|
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
|
||||||
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
|
|
||||||
|
|
||||||
|
List<AccessPoint> accessPointList = createAccessPointList();
|
||||||
|
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
|
||||||
|
|
||||||
final String SSID_AP = "Test AP ";
|
final String SSID_AP = "Test AP ";
|
||||||
final List<ScanResult> scanResults = new ArrayList<>();
|
final List<ScanResult> scanResults = new ArrayList<>();
|
||||||
for (int i = 0; i < 6 ; i ++) {
|
for (int i = 0; i < 7 ; i ++) {
|
||||||
ScanResult scanResult = new ScanResult();
|
ScanResult scanResult = new ScanResult();
|
||||||
scanResult.SSID = SSID_AP + i;
|
scanResult.SSID = SSID_AP + i;
|
||||||
scanResult.capabilities = "WEP";
|
scanResult.capabilities = "WEP";
|
||||||
|
Reference in New Issue
Block a user