• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.nfc;
2 
3 import android.app.Activity;
4 import android.app.AlertDialog;
5 import android.content.BroadcastReceiver;
6 import android.content.Context;
7 import android.content.DialogInterface;
8 import android.content.Intent;
9 import android.content.IntentFilter;
10 import android.net.wifi.WifiConfiguration;
11 import android.net.wifi.WifiManager;
12 import android.os.Bundle;
13 import android.os.Handler;
14 import android.view.View;
15 import android.widget.Toast;
16 
17 public class ConfirmConnectToWifiNetworkActivity extends Activity
18         implements View.OnClickListener, DialogInterface.OnDismissListener {
19 
20     public static final int ENABLE_WIFI_TIMEOUT_MILLIS = 5000;
21     private WifiConfiguration mCurrentWifiConfiguration;
22     private AlertDialog mAlertDialog;
23     private boolean mEnableWifiInProgress;
24     private Handler mHandler;
25 
26     @Override
onCreate(Bundle savedInstanceState)27     protected void onCreate(Bundle savedInstanceState) {
28 
29         Intent intent = getIntent();
30         mCurrentWifiConfiguration =
31                 intent.getParcelableExtra(NfcWifiProtectedSetup.EXTRA_WIFI_CONFIG);
32 
33         String printableSsid = mCurrentWifiConfiguration.getPrintableSsid();
34         mAlertDialog = new AlertDialog.Builder(this,  AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)
35                 .setTitle(R.string.title_connect_to_network)
36                 .setMessage(
37                         String.format(getResources().getString(R.string.prompt_connect_to_network),
38                         printableSsid))
39                 .setOnDismissListener(this)
40                 .setNegativeButton(com.android.internal.R.string.cancel, null)
41                 .setPositiveButton(R.string.wifi_connect, null)
42                 .create();
43 
44         mEnableWifiInProgress = false;
45         mHandler = new Handler();
46 
47         IntentFilter intentFilter = new IntentFilter();
48         intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
49         registerReceiver(mBroadcastReceiver, intentFilter);
50 
51         mAlertDialog.show();
52 
53         super.onCreate(savedInstanceState);
54 
55         mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(this);
56     }
57 
58 
59     @Override
onClick(View v)60     public void onClick(View v) {
61         WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
62 
63         if (!wifiManager.isWifiEnabled()) {
64             wifiManager.setWifiEnabled(true);
65             mEnableWifiInProgress = true;
66 
67             mHandler.postDelayed(new Runnable() {
68                 @Override
69                 public void run() {
70                     if (getAndClearEnableWifiInProgress()) {
71                         showFailToast();
72                         ConfirmConnectToWifiNetworkActivity.this.finish();
73                     }
74                 }
75             }, ENABLE_WIFI_TIMEOUT_MILLIS);
76 
77         } else {
78             doConnect(wifiManager);
79         }
80 
81         mAlertDialog.dismiss();
82     }
83 
doConnect(WifiManager wifiManager)84     private void doConnect(WifiManager wifiManager) {
85         mCurrentWifiConfiguration.hiddenSSID = true;
86         int networkId = wifiManager.addNetwork(mCurrentWifiConfiguration);
87 
88         if (networkId < 0) {
89             showFailToast();
90         } else {
91 
92             wifiManager.connect(networkId,
93                     new WifiManager.ActionListener() {
94                         @Override
95                         public void onSuccess() {
96                             Toast.makeText(ConfirmConnectToWifiNetworkActivity.this,
97                                     R.string.status_wifi_connected, Toast.LENGTH_SHORT).show();
98                         }
99 
100                         @Override
101                         public void onFailure(int reason) {
102                             showFailToast();
103                         }
104                     });
105         }
106         finish();
107     }
108 
109 
showFailToast()110     private void showFailToast() {
111         Toast.makeText(ConfirmConnectToWifiNetworkActivity.this,
112                 R.string.status_unable_to_connect, Toast.LENGTH_SHORT).show();
113     }
114 
115     @Override
onDismiss(DialogInterface dialog)116     public void onDismiss(DialogInterface dialog) {
117         if (!mEnableWifiInProgress) {
118             finish();
119         }
120     }
121 
122 
123     @Override
onDestroy()124     protected void onDestroy() {
125         ConfirmConnectToWifiNetworkActivity.this.unregisterReceiver(mBroadcastReceiver);
126         super.onDestroy();
127     }
128 
129     private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
130         @Override
131         public void onReceive(Context context, Intent intent) {
132             String action = intent.getAction();
133             if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
134                 int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
135                 if (mCurrentWifiConfiguration != null
136                         && wifiState == WifiManager.WIFI_STATE_ENABLED) {
137                     if (getAndClearEnableWifiInProgress()) {
138                         doConnect(
139                                 (WifiManager) ConfirmConnectToWifiNetworkActivity.this
140                                         .getSystemService(Context.WIFI_SERVICE));
141                     }
142                 }
143             }
144         }
145     };
146 
getAndClearEnableWifiInProgress()147     private boolean getAndClearEnableWifiInProgress() {
148         boolean enableWifiInProgress;
149 
150         synchronized (this)  {
151             enableWifiInProgress = mEnableWifiInProgress;
152             mEnableWifiInProgress = false;
153         }
154 
155         return enableWifiInProgress;
156     }
157 }
158