summaryrefslogtreecommitdiffstats
path: root/src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java
diff options
context:
space:
mode:
authorAndres Morales <anmorales@google.com>2014-01-31 12:19:36 -0800
committerAndres Morales <anmorales@google.com>2014-04-15 17:05:39 -0700
commit1ff4d6bceafb7c1c380c04d82e1c95843ae4dfb0 (patch)
tree8f36242bf07c4a856c4c9f0e962de31f89fa581c /src/com/android/nfc/ConfirmConnectToWifiNetworkActivity.java
parent439d3a0ae0ef443147f64cabb745102eafc0e701 (diff)
downloadandroid_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.java155
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