diff options
author | Andres Morales <anmorales@google.com> | 2014-01-31 12:19:36 -0800 |
---|---|---|
committer | Andres Morales <anmorales@google.com> | 2014-04-15 17:05:39 -0700 |
commit | 1ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0 (patch) | |
tree | 8f36242bf07c4a856c4c9f0e962de31f89fa581c /src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java | |
parent | 439d3a0ae0ef443147f64cabb745102eafc0e701 (diff) | |
download | android_packages_apps_Nfc-1ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0.tar.gz android_packages_apps_Nfc-1ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0.tar.bz2 android_packages_apps_Nfc-1ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0.zip |
Handle NFC Wifi configuration tags
Adds a hook in NfcDispatcher to attempt to configure
a network if the appropriate mime type is found on a tag.
Change-Id: Id53bc3124f54186115f4ed9f85eae4d289db1434
Diffstat (limited to 'src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java')
-rw-r--r-- | src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java b/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java new file mode 100644 index 00000000..c920d787 --- /dev/null +++ b/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java @@ -0,0 +1,155 @@ +package com.android.nfc; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.os.Handler; +import android.view.View; +import android.widget.Toast; + +public class ConfirmConnectToWifiNetworkActivity extends Activity + implements View.OnClickListener, DialogInterface.OnDismissListener { + + public static final int ENABLE_WIFI_TIMEOUT_MILLIS = 5000; + private WifiConfiguration mCurrentWifiConfiguration; + private AlertDialog mAlertDialog; + private boolean mEnableWifiInProgress; + private Handler mHandler; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + Intent intent = getIntent(); + mCurrentWifiConfiguration = + intent.getParcelableExtra(NfcWifiProtectedSetup.EXTRA_WIFI_CONFIG); + + String printableSsid = mCurrentWifiConfiguration.getPrintableSsid(); + mAlertDialog = new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_DARK) + .setTitle(R.string.title_connect_to_network) + .setMessage( + String.format(getResources().getString(R.string.prompt_connect_to_network), + printableSsid)) + .setOnDismissListener(this) + .setNegativeButton(com.android.internal.R.string.cancel, null) + .setPositiveButton(R.string.wifi_connect, null) + .create(); + + mEnableWifiInProgress = false; + mHandler = new Handler(); + + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); + registerReceiver(mBroadcastReceiver, intentFilter); + + mAlertDialog.show(); + + super.onCreate(savedInstanceState); + + mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(this); + } + + + @Override + public void onClick(View v) { + WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); + + if (!wifiManager.isWifiEnabled()) { + wifiManager.setWifiEnabled(true); + mEnableWifiInProgress = true; + + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + if (getAndClearEnableWifiInProgress()) { + showFailToast(); + ConfirmConnectToWifiNetworkActivity.this.finish(); + } + } + }, ENABLE_WIFI_TIMEOUT_MILLIS); + + } else { + doConnect(wifiManager); + } + + mAlertDialog.dismiss(); + } + + private void doConnect(WifiManager wifiManager) { + int networkId = wifiManager.addNetwork(mCurrentWifiConfiguration); + + if (networkId < 0) { + showFailToast(); + } else { + + wifiManager.connect(networkId, + new WifiManager.ActionListener() { + @Override + public void onSuccess() { + Toast.makeText(ConfirmConnectToWifiNetworkActivity.this, + R.string.status_wifi_connected, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onFailure(int reason) { + showFailToast(); + } + }); + } + } + + + private void showFailToast() { + Toast.makeText(ConfirmConnectToWifiNetworkActivity.this, + R.string.status_unable_to_connect, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onDismiss(DialogInterface dialog) { + if (!mEnableWifiInProgress) { + finish(); + } + } + + + @Override + protected void onStop() { + ConfirmConnectToWifiNetworkActivity.this.unregisterReceiver(mBroadcastReceiver); + super.onStop(); + } + + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { + int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); + if (mCurrentWifiConfiguration != null + && wifiState == WifiManager.WIFI_STATE_ENABLED) { + if (getAndClearEnableWifiInProgress()) { + doConnect( + (WifiManager) ConfirmConnectToWifiNetworkActivity.this + .getSystemService(Context.WIFI_SERVICE)); + } + } + } + } + }; + + private boolean getAndClearEnableWifiInProgress() { + boolean enableWifiInProgress; + + synchronized (this) { + enableWifiInProgress = mEnableWifiInProgress; + mEnableWifiInProgress = false; + } + + return enableWifiInProgress; + } +}
\ No newline at end of file |