Merge "[Network Connection] Implement new UI changing"

This commit is contained in:
Cosmo Hsieh
2019-03-20 04:34:25 +00:00
committed by Android (Google) Code Review
3 changed files with 96 additions and 38 deletions

View File

@@ -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

View File

@@ -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;
} }

View File

@@ -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";