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