11ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralespackage com.android.nfc; 21ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 31ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.app.Activity; 41ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.app.AlertDialog; 51ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.content.BroadcastReceiver; 61ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.content.Context; 71ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.content.DialogInterface; 81ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.content.Intent; 91ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.content.IntentFilter; 101ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.net.wifi.WifiConfiguration; 111ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.net.wifi.WifiManager; 121ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.os.Bundle; 131ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.os.Handler; 141ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.view.View; 151ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralesimport android.widget.Toast; 161ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 171ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Moralespublic class ConfirmConnectToWifiNetworkActivity extends Activity 181ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales implements View.OnClickListener, DialogInterface.OnDismissListener { 191ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 201ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public static final int ENABLE_WIFI_TIMEOUT_MILLIS = 5000; 211ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private WifiConfiguration mCurrentWifiConfiguration; 221ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private AlertDialog mAlertDialog; 231ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private boolean mEnableWifiInProgress; 241ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private Handler mHandler; 251ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 261ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 271ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales protected void onCreate(Bundle savedInstanceState) { 281ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 291ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales Intent intent = getIntent(); 301ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mCurrentWifiConfiguration = 311ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales intent.getParcelableExtra(NfcWifiProtectedSetup.EXTRA_WIFI_CONFIG); 321ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 331ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales String printableSsid = mCurrentWifiConfiguration.getPrintableSsid(); 34a23c1d8ce8acb0d196ebb306dbda4aee4bcdee05Martijn Coenen mAlertDialog = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT) 351ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .setTitle(R.string.title_connect_to_network) 361ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .setMessage( 371ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales String.format(getResources().getString(R.string.prompt_connect_to_network), 381ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales printableSsid)) 391ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .setOnDismissListener(this) 401ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .setNegativeButton(com.android.internal.R.string.cancel, null) 411ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .setPositiveButton(R.string.wifi_connect, null) 421ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .create(); 431ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 441ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mEnableWifiInProgress = false; 451ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mHandler = new Handler(); 461ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 471ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales IntentFilter intentFilter = new IntentFilter(); 481ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 491ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales registerReceiver(mBroadcastReceiver, intentFilter); 501ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 511ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mAlertDialog.show(); 521ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 531ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales super.onCreate(savedInstanceState); 541ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 551ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(this); 561ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 571ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 581ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 591ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 601ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public void onClick(View v) { 611ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 621ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 631ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (!wifiManager.isWifiEnabled()) { 641ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales wifiManager.setWifiEnabled(true); 651ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mEnableWifiInProgress = true; 661ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 671ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mHandler.postDelayed(new Runnable() { 681ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 691ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public void run() { 701ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (getAndClearEnableWifiInProgress()) { 711ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales showFailToast(); 721ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales ConfirmConnectToWifiNetworkActivity.this.finish(); 731ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 741ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 751ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales }, ENABLE_WIFI_TIMEOUT_MILLIS); 761ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 771ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } else { 781ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales doConnect(wifiManager); 791ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 801ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 811ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mAlertDialog.dismiss(); 821ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 831ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 841ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private void doConnect(WifiManager wifiManager) { 851ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales int networkId = wifiManager.addNetwork(mCurrentWifiConfiguration); 861ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 871ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (networkId < 0) { 881ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales showFailToast(); 891ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } else { 901ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 911ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales wifiManager.connect(networkId, 921ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales new WifiManager.ActionListener() { 931ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 941ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public void onSuccess() { 951ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales Toast.makeText(ConfirmConnectToWifiNetworkActivity.this, 961ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales R.string.status_wifi_connected, Toast.LENGTH_SHORT).show(); 971ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 981ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 991ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 1001ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public void onFailure(int reason) { 1011ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales showFailToast(); 1021ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1031ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales }); 1041ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 10518d84fe49344f4fde0d7b290fdcfa9308d9814b1xin.li finish(); 1061ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1071ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1081ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1091ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private void showFailToast() { 1101ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales Toast.makeText(ConfirmConnectToWifiNetworkActivity.this, 1111ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales R.string.status_unable_to_connect, Toast.LENGTH_SHORT).show(); 1121ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1131ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1141ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 1151ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public void onDismiss(DialogInterface dialog) { 1161ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (!mEnableWifiInProgress) { 1171ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales finish(); 1181ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1191ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1201ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1211ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1221ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 123662808792fad65e777a91dfaf79c87f062677033Andres Morales protected void onDestroy() { 1241ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales ConfirmConnectToWifiNetworkActivity.this.unregisterReceiver(mBroadcastReceiver); 125662808792fad65e777a91dfaf79c87f062677033Andres Morales super.onDestroy(); 1261ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1271ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1281ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 1291ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales @Override 1301ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales public void onReceive(Context context, Intent intent) { 1311ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales String action = intent.getAction(); 1321ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 1331ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); 1341ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (mCurrentWifiConfiguration != null 1351ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales && wifiState == WifiManager.WIFI_STATE_ENABLED) { 1361ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales if (getAndClearEnableWifiInProgress()) { 1371ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales doConnect( 1381ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales (WifiManager) ConfirmConnectToWifiNetworkActivity.this 1391ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales .getSystemService(Context.WIFI_SERVICE)); 1401ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1411ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1421ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1431ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1441ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales }; 1451ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1461ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales private boolean getAndClearEnableWifiInProgress() { 1471ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales boolean enableWifiInProgress; 1481ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1491ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales synchronized (this) { 1501ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales enableWifiInProgress = mEnableWifiInProgress; 1511ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales mEnableWifiInProgress = false; 1521ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 1531ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales 1541ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales return enableWifiInProgress; 1551ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0Andres Morales } 156a23c1d8ce8acb0d196ebb306dbda4aee4bcdee05Martijn Coenen} 157