Fix Wifi setup for xl.
- Show the title "Add network" correctly
- Handle ProgressBar on "Add network" flow correctly
- Handle possible NPE cases.
Bug: 3361270
Change-Id: Ic0fb808086bfce7b0f88e5703e617a62bc71667a
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index bbeabda..f4cafdf 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -93,9 +93,12 @@
private Button mAddNetworkButton;
private Button mRefreshButton;
private Button mSkipOrNextButton;
- private Button mConnectButton;
private Button mBackButton;
+ private static int CONNECT_BUTTON_TAG_ADD_NETWORK = 1;
+
+ private Button mConnectButton;
+
private View mConnectingStatusLayout;
private TextView mConnectingStatusView;
@@ -113,6 +116,8 @@
private int mPreviousSecurityFieldsVisibility = View.GONE;
private int mPreviousTypeVisibility = View.GONE;
+ private DetailedState mPreviousState = DetailedState.DISCONNECTED;
+
// At first, we set "Skip" button disabled so that users won't press it soon after the screen
// migration. The button is enabled after the wifi module returns some result
// (a list of available network, etc.) One possible problem is that the notification from the
@@ -275,6 +280,7 @@
showDisconnectedStatus(Summary.get(this, state));
break;
}
+ mPreviousState = state;
}
private void showDisconnectedStatus(String stateString) {
@@ -299,31 +305,54 @@
mTitleView.setText(getString(R.string.wifi_setup_title));
}
+ private void showAddNetworkTitle() {
+ mNetworkName = "";
+ mTitleView.setText(R.string.wifi_setup_title_add_network);
+ }
+
private void showEditingTitle() {
if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
- mNetworkName = mWifiConfig.getController().getConfig().SSID;
+ if (mWifiConfig.getController() != null &&
+ mWifiConfig.getController().getConfig() != null) {
+ mNetworkName = mWifiConfig.getController().getConfig().SSID;
+ } else {
+ Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " +
+ "Ignore them.");
+ }
}
mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName));
}
private void showConnectingTitle() {
if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
- mNetworkName = mWifiConfig.getController().getConfig().SSID;
+ if (mWifiConfig.getController() != null &&
+ mWifiConfig.getController().getConfig() != null) {
+ mNetworkName = mWifiConfig.getController().getConfig().SSID;
+ } else {
+ Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " +
+ "Ignore them.");
+ }
}
mTitleView.setText(getString(R.string.wifi_setup_title_connecting_network, mNetworkName));
}
private void showConnectedTitle() {
if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
- mNetworkName = mWifiConfig.getController().getConfig().SSID;
+ if (mWifiConfig.getController() != null &&
+ mWifiConfig.getController().getConfig() != null) {
+ mNetworkName = mWifiConfig.getController().getConfig().SSID;
+ } else {
+ Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " +
+ "Ignore them.");
+ }
}
mTitleView.setText(getString(R.string.wifi_setup_title_connected_network, mNetworkName));
}
private void showScanningStatus() {
mProgressBar.setIndeterminate(true);
- ((Button)findViewById(R.id.wifi_setup_add_network)).setEnabled(false);
- ((Button)findViewById(R.id.wifi_setup_refresh_list)).setEnabled(false);
+ mAddNetworkButton.setEnabled(false);
+ mRefreshButton.setEnabled(false);
}
private void onAddNetworkButtonPressed() {
@@ -356,47 +385,49 @@
parent.setVisibility(View.VISIBLE);
parent.removeAllViews();
mWifiConfig = new WifiConfigUiForSetupWizardXL(this, parent, selectedAccessPoint, edit);
- final View view = mWifiConfig.getView();
- if (selectedAccessPoint != null) {
- mNetworkName = selectedAccessPoint.getTitle().toString();
- mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName));
- } else {
- mNetworkName = "";
- mTitleView.setText(R.string.wifi_setup_title_add_network);
- view.findViewById(R.id.wifi_general_info).setVisibility(View.GONE);
- }
- if (selectedAccessPoint != null &&
- selectedAccessPoint.security == AccessPoint.SECURITY_NONE) {
+ // For safety, we forget the tag once. Tag will be updated in this method when needed.
+ mConnectButton.setTag(null);
+ if (selectedAccessPoint == null) { // "Add network" flow
+ showAddNetworkTitle();
+ if (mWifiConfig != null) {
+ mWifiConfig.getView().findViewById(R.id.wifi_general_info).setVisibility(View.GONE);
+ }
+ mConnectButton.setVisibility(View.VISIBLE);
+ mConnectButton.setTag(CONNECT_BUTTON_TAG_ADD_NETWORK);
+
+ showEditingButtonState();
+ } else if (selectedAccessPoint.security == AccessPoint.SECURITY_NONE) {
+ mNetworkName = selectedAccessPoint.getTitle().toString();
+
// onConnectButtonPressed() will change visibility status.
mConnectButton.performClick();
- } else if (selectedAccessPoint != null &&
- selectedAccessPoint.security == AccessPoint.SECURITY_EAP) {
- mConnectButton.setVisibility(View.GONE);
-
- showEditingTitle();
- mSkipOrNextButton.setVisibility(View.GONE);
- mAddNetworkButton.setVisibility(View.GONE);
- mRefreshButton.setVisibility(View.GONE);
- mBackButton.setVisibility(View.VISIBLE);
- mBackButton.setText(R.string.wifi_setup_back);
} else {
- mConnectButton.setVisibility(View.VISIBLE);
-
- // WifiConfigController shows Connect button as "Save" when edit==true and a user
- // tried to connect the network.
- // In SetupWizard, we just show the button as "Connect" instead.
- mConnectButton.setText(R.string.wifi_connect);
-
+ mNetworkName = selectedAccessPoint.getTitle().toString();
showEditingTitle();
- mSkipOrNextButton.setVisibility(View.GONE);
- mAddNetworkButton.setVisibility(View.GONE);
- mRefreshButton.setVisibility(View.GONE);
- mBackButton.setVisibility(View.VISIBLE);
- mBackButton.setText(R.string.wifi_setup_cancel);
+ showEditingButtonState();
+ if (selectedAccessPoint.security == AccessPoint.SECURITY_EAP) {
+ mConnectButton.setVisibility(View.GONE);
+ mBackButton.setText(R.string.wifi_setup_back);
+ } else {
+ mConnectButton.setVisibility(View.VISIBLE);
+
+ // WifiConfigController shows Connect button as "Save" when edit==true and a user
+ // tried to connect the network.
+ // In SetupWizard, we just show the button as "Connect" instead.
+ mConnectButton.setText(R.string.wifi_connect);
+ mBackButton.setText(R.string.wifi_setup_cancel);
+ }
}
}
+ private void showEditingButtonState() {
+ mSkipOrNextButton.setVisibility(View.GONE);
+ mAddNetworkButton.setVisibility(View.GONE);
+ mRefreshButton.setVisibility(View.GONE);
+ mBackButton.setVisibility(View.VISIBLE);
+ }
+
// May be called when user press "connect" button in WifiDialog
/* package */ void onConnectButtonPressed() {
mAfterConnectAction = true;
@@ -455,8 +486,6 @@
// the "Connect" request and refresh the whole wifi status.
restoreFirstButtonVisibilityState();
- mAddNetworkButton.setEnabled(false);
- mRefreshButton.setEnabled(false);
mSkipOrNextButton.setEnabled(true);
changeNextButtonState(false); // Skip
@@ -503,7 +532,15 @@
}
private void refreshAccessPoints(boolean disconnectNetwork) {
- showScanningStatus();
+ final Object tag = mConnectButton.getTag();
+ if (tag != null && (tag instanceof Integer) &&
+ ((Integer)tag == CONNECT_BUTTON_TAG_ADD_NETWORK)) {
+ // In "Add network" flow, we won't get DetaledState available for changing ProgressBar
+ // state. Instead we manually show previous status here.
+ showDisconnectedStatus(Summary.get(this, mPreviousState));
+ } else {
+ showScanningStatus();
+ }
if (disconnectNetwork) {
mWifiManager.disconnect();