diff --git a/res/values/strings.xml b/res/values/strings.xml index 5a43f4d1887..b65339f1bc8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1315,10 +1315,16 @@ Connect + + Failed to connect to network Forget + + Failed to forget network Save + + Failed to save network Cancel diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index 8412fb20750..afa2a114446 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -504,10 +504,6 @@ public class WifiConfigController implements TextWatcher, } config.pin = ((TextView) mView.findViewById(R.id.wps_pin)).getText().toString(); config.BSSID = (mAccessPoint != null) ? mAccessPoint.bssid : null; - - config.proxySettings = mProxySettings; - config.ipAssignment = mIpAssignment; - config.linkProperties = new LinkProperties(mLinkProperties); return config; } diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index cf53ac56c73..306ce33f53d 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -58,7 +58,6 @@ import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; -import com.android.internal.util.AsyncChannel; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -104,6 +103,12 @@ public class WifiSettings extends SettingsPreferenceFragment private final Scanner mScanner; private WifiManager mWifiManager; + private WifiManager.Channel mChannel; + private WifiManager.ActionListener mConnectListener; + private WifiManager.ActionListener mSaveListener; + private WifiManager.ActionListener mForgetListener; + private WifiManager.WpsListener mWpsListener; + private WifiEnabler mWifiEnabler; // An access point being editted is stored here. private AccessPoint mSelectedAccessPoint; @@ -145,7 +150,6 @@ public class WifiSettings extends SettingsPreferenceFragment mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION); - mFilter.addAction(WifiManager.ERROR_ACTION); mReceiver = new BroadcastReceiver() { @Override @@ -171,7 +175,76 @@ public class WifiSettings extends SettingsPreferenceFragment // this method. mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); - mWifiManager.asyncConnect(getActivity(), new WifiServiceHandler()); + mChannel = mWifiManager.initialize(getActivity(), getActivity().getMainLooper(), null); + + mConnectListener = new WifiManager.ActionListener() { + public void onSuccess() { + } + public void onFailure(int reason) { + Toast.makeText(getActivity(), + R.string.wifi_failed_connect_message, + Toast.LENGTH_SHORT).show(); + } + }; + + mSaveListener = new WifiManager.ActionListener() { + public void onSuccess() { + } + public void onFailure(int reason) { + Toast.makeText(getActivity(), + R.string.wifi_failed_save_message, + Toast.LENGTH_SHORT).show(); + } + }; + + mForgetListener = new WifiManager.ActionListener() { + public void onSuccess() { + } + public void onFailure(int reason) { + Toast.makeText(getActivity(), + R.string.wifi_failed_forget_message, + Toast.LENGTH_SHORT).show(); + } + }; + + class WpsListener implements WifiManager.WpsListener { + public void onStartSuccess(String pin) { + //TODO: Add progress bar instead + if (pin != null) { + AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.wifi_wps_setup_title) + .setPositiveButton(android.R.string.ok, null); + dialog.setMessage(getResources().getString( + R.string.wifi_wps_pin_output, pin)); + dialog.show(); + } + } + public void onCompletion() { + //TODO: Dismiss progress bar + } + public void onFailure(int reason) { + AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.wifi_wps_setup_title) + .setPositiveButton(android.R.string.ok, null); + switch (reason) { + case WifiManager.IN_PROGRESS: + dialog.setMessage(R.string.wifi_wps_in_progress); + dialog.show(); + break; + case WifiManager.WPS_OVERLAP_ERROR: + Toast.makeText(getActivity(), R.string.wifi_wps_overlap_error, + Toast.LENGTH_SHORT).show(); + break; + default: + dialog.setMessage(R.string.wifi_wps_failed); + dialog.show(); + break; + } + } + } + + mWpsListener = new WpsListener(); + if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_DIALOG_ACCESS_POINT_STATE)) { mDlgEdit = savedInstanceState.getBoolean(SAVE_DIALOG_EDIT_MODE); @@ -242,7 +315,7 @@ public class WifiSettings extends SettingsPreferenceFragment getActivity().registerReceiver(mReceiver, mFilter); if (mKeyStoreNetworkId != INVALID_NETWORK_ID && KeyStore.getInstance().state() == KeyStore.State.UNLOCKED) { - mWifiManager.connectNetwork(mKeyStoreNetworkId); + mWifiManager.connect(mChannel, mKeyStoreNetworkId, mConnectListener); } mKeyStoreNetworkId = INVALID_NETWORK_ID; @@ -353,19 +426,21 @@ public class WifiSettings extends SettingsPreferenceFragment case MENU_ID_CONNECT: { if (mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) { if (!requireKeyStore(mSelectedAccessPoint.getConfig())) { - mWifiManager.connectNetwork(mSelectedAccessPoint.networkId); + mWifiManager.connect(mChannel, mSelectedAccessPoint.networkId, + mConnectListener); } } else if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE) { /** Bypass dialog for unsecured networks */ mSelectedAccessPoint.generateOpenNetworkConfig(); - mWifiManager.connectNetwork(mSelectedAccessPoint.getConfig()); + mWifiManager.connect(mChannel, mSelectedAccessPoint.getConfig(), + mConnectListener); } else { showConfigUi(mSelectedAccessPoint, true); } return true; } case MENU_ID_FORGET: { - mWifiManager.forgetNetwork(mSelectedAccessPoint.networkId); + mWifiManager.forget(mChannel, mSelectedAccessPoint.networkId, mForgetListener); return true; } case MENU_ID_MODIFY: { @@ -384,7 +459,7 @@ public class WifiSettings extends SettingsPreferenceFragment if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE && mSelectedAccessPoint.networkId == INVALID_NETWORK_ID) { mSelectedAccessPoint.generateOpenNetworkConfig(); - mWifiManager.connectNetwork(mSelectedAccessPoint.getConfig()); + mWifiManager.connect(mChannel, mSelectedAccessPoint.getConfig(), mConnectListener); } else { showConfigUi(mSelectedAccessPoint, false); } @@ -583,14 +658,6 @@ public class WifiSettings extends SettingsPreferenceFragment updateConnectionState(info.getDetailedState()); } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) { updateConnectionState(null); - } else if (WifiManager.ERROR_ACTION.equals(action)) { - int errorCode = intent.getIntExtra(WifiManager.EXTRA_ERROR_CODE, 0); - switch (errorCode) { - case WifiManager.WPS_OVERLAP_ERROR: - Toast.makeText(context, R.string.wifi_wps_overlap_error, - Toast.LENGTH_SHORT).show(); - break; - } } } @@ -681,51 +748,6 @@ public class WifiSettings extends SettingsPreferenceFragment } } - private class WifiServiceHandler extends Handler { - - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: - if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { - //AsyncChannel in msg.obj - } else { - //AsyncChannel set up failure, ignore - Log.e(TAG, "Failed to establish AsyncChannel connection"); - } - break; - case WifiManager.CMD_WPS_COMPLETED: - WpsResult result = (WpsResult) msg.obj; - if (result == null) break; - AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()) - .setTitle(R.string.wifi_wps_setup_title) - .setPositiveButton(android.R.string.ok, null); - switch (result.status) { - case FAILURE: - dialog.setMessage(R.string.wifi_wps_failed); - dialog.show(); - break; - case IN_PROGRESS: - dialog.setMessage(R.string.wifi_wps_in_progress); - dialog.show(); - break; - default: - if (result.pin != null) { - dialog.setMessage(getResources().getString( - R.string.wifi_wps_pin_output, result.pin)); - dialog.show(); - } - break; - } - break; - //TODO: more connectivity feedback - default: - //Ignore - break; - } - } - } - /** * Renames/replaces "Next" button when appropriate. "Next" button usually exists in * Wifi setup screens, not in usual wifi settings screen. @@ -763,7 +785,7 @@ public class WifiSettings extends SettingsPreferenceFragment case WifiConfigController.WPS_PBC: case WifiConfigController.WPS_DISPLAY: case WifiConfigController.WPS_KEYPAD: - mWifiManager.startWps(configController.getWpsConfig()); + mWifiManager.startWps(mChannel, configController.getWpsConfig(), mWpsListener); break; case WifiConfigController.MANUAL: final WifiConfiguration config = configController.getConfig(); @@ -772,7 +794,8 @@ public class WifiSettings extends SettingsPreferenceFragment if (mSelectedAccessPoint != null && !requireKeyStore(mSelectedAccessPoint.getConfig()) && mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) { - mWifiManager.connectNetwork(mSelectedAccessPoint.networkId); + mWifiManager.connect(mChannel, mSelectedAccessPoint.networkId, + mConnectListener); } } else if (config.networkId != INVALID_NETWORK_ID) { if (mSelectedAccessPoint != null) { @@ -782,7 +805,7 @@ public class WifiSettings extends SettingsPreferenceFragment if (configController.isEdit() || requireKeyStore(config)) { saveNetwork(config); } else { - mWifiManager.connectNetwork(config); + mWifiManager.connect(mChannel, config, mConnectListener); } } break; @@ -798,12 +821,12 @@ public class WifiSettings extends SettingsPreferenceFragment if (mInXlSetupWizard) { ((WifiSettingsForSetupWizardXL)getActivity()).onSaveNetwork(config); } else { - mWifiManager.saveNetwork(config); + mWifiManager.save(mChannel, config, mSaveListener); } } /* package */ void forget() { - mWifiManager.forgetNetwork(mSelectedAccessPoint.networkId); + mWifiManager.forget(mChannel, mSelectedAccessPoint.networkId, mForgetListener); if (mWifiManager.isWifiEnabled()) { mScanner.resume(); diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java index 4b6a0814d34..8258b5553d9 100644 --- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java @@ -74,6 +74,7 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis private WifiSettings mWifiSettings; private WifiManager mWifiManager; + private WifiManager.Channel mChannel; /** Used for resizing a padding above title. Hiden when software keyboard is shown. */ private View mTopPadding; @@ -142,10 +143,10 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis setContentView(R.layout.wifi_settings_for_setup_wizard_xl); mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); + mChannel = mWifiManager.initialize(this, getMainLooper(), null); // There's no button here enabling wifi network, so we need to enable it without // users' request. mWifiManager.setWifiEnabled(true); - mWifiManager.asyncConnect(this, new WifiServiceHandler()); mWifiSettings = (WifiSettings)getFragmentManager().findFragmentById(R.id.wifi_setup_fragment); @@ -201,25 +202,6 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis mConnectingStatusView = (TextView) findViewById(R.id.connecting_status); } - private class WifiServiceHandler extends Handler { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: - if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { - //AsyncChannel in msg.obj - } else { - //AsyncChannel set up failure, ignore - Log.e(TAG, "Failed to establish AsyncChannel connection"); - } - break; - default: - //Ignore - break; - } - } - } - private void restoreFirstVisibilityState() { showDefaultTitle(); mAddNetworkButton.setVisibility(View.VISIBLE); @@ -614,7 +596,13 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis Log.d(TAG, String.format("forgeting Wi-Fi network \"%s\" (id: %d)", config.SSID, config.networkId)); } - mWifiManager.forgetNetwork(config.networkId); + mWifiManager.forget(mChannel, config.networkId, new WifiManager.ActionListener() { + public void onSuccess() { + } + public void onFailure(int reason) { + //TODO: Add failure UI + } + }); } mWifiSettingsFragmentLayout.setVisibility(View.GONE); @@ -773,6 +761,12 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis */ /* package */ void onSaveNetwork(WifiConfiguration config) { // We want to both save and connect a network. connectNetwork() does both. - mWifiManager.connectNetwork(config); + mWifiManager.connect(mChannel, config, new WifiManager.ActionListener() { + public void onSuccess() { + } + public void onFailure(int reason) { + //TODO: Add failure UI + } + }); } }