Use new WifiManager API

Change-Id: I9cc092e98412146a07c1829cacab47b8cea0bc9a
This commit is contained in:
Irfan Sheriff
2012-02-24 11:24:13 -08:00
parent e2fd7e0dcd
commit 8f2f08e0ee
4 changed files with 111 additions and 92 deletions

View File

@@ -1315,10 +1315,16 @@
<!-- Button label to connect to a Wi-Fi network --> <!-- Button label to connect to a Wi-Fi network -->
<string name="wifi_connect">Connect</string> <string name="wifi_connect">Connect</string>
<!-- Failured notification for connect -->
<string name="wifi_failed_connect_message">Failed to connect to network</string>
<!-- Button label to delete a Wi-Fi network --> <!-- Button label to delete a Wi-Fi network -->
<string name="wifi_forget">Forget</string> <string name="wifi_forget">Forget</string>
<!-- Failured notification for forget -->
<string name="wifi_failed_forget_message">Failed to forget network</string>
<!-- Button label to save a Wi-Fi network configuration --> <!-- Button label to save a Wi-Fi network configuration -->
<string name="wifi_save">Save</string> <string name="wifi_save">Save</string>
<!-- Failured notification for save -->
<string name="wifi_failed_save_message">Failed to save network</string>
<!-- Button label to dismiss the dialog --> <!-- Button label to dismiss the dialog -->
<string name="wifi_cancel">Cancel</string> <string name="wifi_cancel">Cancel</string>

View File

@@ -504,10 +504,6 @@ public class WifiConfigController implements TextWatcher,
} }
config.pin = ((TextView) mView.findViewById(R.id.wps_pin)).getText().toString(); config.pin = ((TextView) mView.findViewById(R.id.wps_pin)).getText().toString();
config.BSSID = (mAccessPoint != null) ? mAccessPoint.bssid : null; config.BSSID = (mAccessPoint != null) ? mAccessPoint.bssid : null;
config.proxySettings = mProxySettings;
config.ipAssignment = mIpAssignment;
config.linkProperties = new LinkProperties(mLinkProperties);
return config; return config;
} }

View File

@@ -58,7 +58,6 @@ import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.android.internal.util.AsyncChannel;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
@@ -104,6 +103,12 @@ public class WifiSettings extends SettingsPreferenceFragment
private final Scanner mScanner; private final Scanner mScanner;
private WifiManager mWifiManager; 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; private WifiEnabler mWifiEnabler;
// An access point being editted is stored here. // An access point being editted is stored here.
private AccessPoint mSelectedAccessPoint; private AccessPoint mSelectedAccessPoint;
@@ -145,7 +150,6 @@ public class WifiSettings extends SettingsPreferenceFragment
mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION); mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
mFilter.addAction(WifiManager.ERROR_ACTION);
mReceiver = new BroadcastReceiver() { mReceiver = new BroadcastReceiver() {
@Override @Override
@@ -171,7 +175,76 @@ public class WifiSettings extends SettingsPreferenceFragment
// this method. // this method.
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 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 if (savedInstanceState != null
&& savedInstanceState.containsKey(SAVE_DIALOG_ACCESS_POINT_STATE)) { && savedInstanceState.containsKey(SAVE_DIALOG_ACCESS_POINT_STATE)) {
mDlgEdit = savedInstanceState.getBoolean(SAVE_DIALOG_EDIT_MODE); mDlgEdit = savedInstanceState.getBoolean(SAVE_DIALOG_EDIT_MODE);
@@ -242,7 +315,7 @@ public class WifiSettings extends SettingsPreferenceFragment
getActivity().registerReceiver(mReceiver, mFilter); getActivity().registerReceiver(mReceiver, mFilter);
if (mKeyStoreNetworkId != INVALID_NETWORK_ID && if (mKeyStoreNetworkId != INVALID_NETWORK_ID &&
KeyStore.getInstance().state() == KeyStore.State.UNLOCKED) { KeyStore.getInstance().state() == KeyStore.State.UNLOCKED) {
mWifiManager.connectNetwork(mKeyStoreNetworkId); mWifiManager.connect(mChannel, mKeyStoreNetworkId, mConnectListener);
} }
mKeyStoreNetworkId = INVALID_NETWORK_ID; mKeyStoreNetworkId = INVALID_NETWORK_ID;
@@ -353,19 +426,21 @@ public class WifiSettings extends SettingsPreferenceFragment
case MENU_ID_CONNECT: { case MENU_ID_CONNECT: {
if (mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) { if (mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) {
if (!requireKeyStore(mSelectedAccessPoint.getConfig())) { if (!requireKeyStore(mSelectedAccessPoint.getConfig())) {
mWifiManager.connectNetwork(mSelectedAccessPoint.networkId); mWifiManager.connect(mChannel, mSelectedAccessPoint.networkId,
mConnectListener);
} }
} else if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE) { } else if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE) {
/** Bypass dialog for unsecured networks */ /** Bypass dialog for unsecured networks */
mSelectedAccessPoint.generateOpenNetworkConfig(); mSelectedAccessPoint.generateOpenNetworkConfig();
mWifiManager.connectNetwork(mSelectedAccessPoint.getConfig()); mWifiManager.connect(mChannel, mSelectedAccessPoint.getConfig(),
mConnectListener);
} else { } else {
showConfigUi(mSelectedAccessPoint, true); showConfigUi(mSelectedAccessPoint, true);
} }
return true; return true;
} }
case MENU_ID_FORGET: { case MENU_ID_FORGET: {
mWifiManager.forgetNetwork(mSelectedAccessPoint.networkId); mWifiManager.forget(mChannel, mSelectedAccessPoint.networkId, mForgetListener);
return true; return true;
} }
case MENU_ID_MODIFY: { case MENU_ID_MODIFY: {
@@ -384,7 +459,7 @@ public class WifiSettings extends SettingsPreferenceFragment
if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE && if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE &&
mSelectedAccessPoint.networkId == INVALID_NETWORK_ID) { mSelectedAccessPoint.networkId == INVALID_NETWORK_ID) {
mSelectedAccessPoint.generateOpenNetworkConfig(); mSelectedAccessPoint.generateOpenNetworkConfig();
mWifiManager.connectNetwork(mSelectedAccessPoint.getConfig()); mWifiManager.connect(mChannel, mSelectedAccessPoint.getConfig(), mConnectListener);
} else { } else {
showConfigUi(mSelectedAccessPoint, false); showConfigUi(mSelectedAccessPoint, false);
} }
@@ -583,14 +658,6 @@ public class WifiSettings extends SettingsPreferenceFragment
updateConnectionState(info.getDetailedState()); updateConnectionState(info.getDetailedState());
} else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) { } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
updateConnectionState(null); 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 * Renames/replaces "Next" button when appropriate. "Next" button usually exists in
* Wifi setup screens, not in usual wifi settings screen. * 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_PBC:
case WifiConfigController.WPS_DISPLAY: case WifiConfigController.WPS_DISPLAY:
case WifiConfigController.WPS_KEYPAD: case WifiConfigController.WPS_KEYPAD:
mWifiManager.startWps(configController.getWpsConfig()); mWifiManager.startWps(mChannel, configController.getWpsConfig(), mWpsListener);
break; break;
case WifiConfigController.MANUAL: case WifiConfigController.MANUAL:
final WifiConfiguration config = configController.getConfig(); final WifiConfiguration config = configController.getConfig();
@@ -772,7 +794,8 @@ public class WifiSettings extends SettingsPreferenceFragment
if (mSelectedAccessPoint != null if (mSelectedAccessPoint != null
&& !requireKeyStore(mSelectedAccessPoint.getConfig()) && !requireKeyStore(mSelectedAccessPoint.getConfig())
&& mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) { && mSelectedAccessPoint.networkId != INVALID_NETWORK_ID) {
mWifiManager.connectNetwork(mSelectedAccessPoint.networkId); mWifiManager.connect(mChannel, mSelectedAccessPoint.networkId,
mConnectListener);
} }
} else if (config.networkId != INVALID_NETWORK_ID) { } else if (config.networkId != INVALID_NETWORK_ID) {
if (mSelectedAccessPoint != null) { if (mSelectedAccessPoint != null) {
@@ -782,7 +805,7 @@ public class WifiSettings extends SettingsPreferenceFragment
if (configController.isEdit() || requireKeyStore(config)) { if (configController.isEdit() || requireKeyStore(config)) {
saveNetwork(config); saveNetwork(config);
} else { } else {
mWifiManager.connectNetwork(config); mWifiManager.connect(mChannel, config, mConnectListener);
} }
} }
break; break;
@@ -798,12 +821,12 @@ public class WifiSettings extends SettingsPreferenceFragment
if (mInXlSetupWizard) { if (mInXlSetupWizard) {
((WifiSettingsForSetupWizardXL)getActivity()).onSaveNetwork(config); ((WifiSettingsForSetupWizardXL)getActivity()).onSaveNetwork(config);
} else { } else {
mWifiManager.saveNetwork(config); mWifiManager.save(mChannel, config, mSaveListener);
} }
} }
/* package */ void forget() { /* package */ void forget() {
mWifiManager.forgetNetwork(mSelectedAccessPoint.networkId); mWifiManager.forget(mChannel, mSelectedAccessPoint.networkId, mForgetListener);
if (mWifiManager.isWifiEnabled()) { if (mWifiManager.isWifiEnabled()) {
mScanner.resume(); mScanner.resume();

View File

@@ -74,6 +74,7 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis
private WifiSettings mWifiSettings; private WifiSettings mWifiSettings;
private WifiManager mWifiManager; private WifiManager mWifiManager;
private WifiManager.Channel mChannel;
/** Used for resizing a padding above title. Hiden when software keyboard is shown. */ /** Used for resizing a padding above title. Hiden when software keyboard is shown. */
private View mTopPadding; private View mTopPadding;
@@ -142,10 +143,10 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis
setContentView(R.layout.wifi_settings_for_setup_wizard_xl); setContentView(R.layout.wifi_settings_for_setup_wizard_xl);
mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 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 // There's no button here enabling wifi network, so we need to enable it without
// users' request. // users' request.
mWifiManager.setWifiEnabled(true); mWifiManager.setWifiEnabled(true);
mWifiManager.asyncConnect(this, new WifiServiceHandler());
mWifiSettings = mWifiSettings =
(WifiSettings)getFragmentManager().findFragmentById(R.id.wifi_setup_fragment); (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); 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() { private void restoreFirstVisibilityState() {
showDefaultTitle(); showDefaultTitle();
mAddNetworkButton.setVisibility(View.VISIBLE); 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)", Log.d(TAG, String.format("forgeting Wi-Fi network \"%s\" (id: %d)",
config.SSID, config.networkId)); 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); mWifiSettingsFragmentLayout.setVisibility(View.GONE);
@@ -773,6 +761,12 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis
*/ */
/* package */ void onSaveNetwork(WifiConfiguration config) { /* package */ void onSaveNetwork(WifiConfiguration config) {
// We want to both save and connect a network. connectNetwork() does both. // 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
}
});
} }
} }