package com.iwedia.gui.components.dialogs;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.TypedArray;
import android.text.Editable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import com.iwedia.comm.enums.WirelessState;
import com.iwedia.comm.enums.WpsState;
import com.iwedia.gui.MainActivity;
import com.iwedia.gui.R;
import com.iwedia.gui.components.A4TVAlertDialog;
import com.iwedia.gui.components.A4TVButton;
import com.iwedia.gui.components.A4TVDialog;
import com.iwedia.gui.components.A4TVEditText;
import com.iwedia.gui.components.A4TVProgressDialog;
import com.iwedia.gui.components.A4TVToast;
import com.iwedia.gui.mainmenu.DialogManager;
import com.iwedia.gui.mainmenu.MainMenuContent;
import java.util.ArrayList;
/**
* Wireless WPS settings dialog
*
* @author Mladen Ilic
*/
public class NetworkWirelessWPSConfigDialog extends A4TVDialog implements
A4TVDialogInterface, android.view.View.OnClickListener {
// Define logging domain
public static final String LOG_TAG = "NetworkWirelessWPSConfigDialog";
// WiFi device has to know PIN generated by WiFI access point
public static final int TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE = 5555;
// WiFi device generates PIN that needs to be known to WiFi access point
public static final int TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_REGISTRAR = 5554;
// WiFi push button configuration
public static final int TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC = 5553;
// Fields for creating dialogs
private ArrayList<ArrayList<Integer>> contentList = new ArrayList<ArrayList<Integer>>();
private ArrayList<ArrayList<Integer>> contentListIDs = new ArrayList<ArrayList<Integer>>();
private ArrayList<Integer> titleIDs = new ArrayList<Integer>();
// Dialog elements
private A4TVButton buttonEnroll, buttonRegistrar, buttonPbc;
private A4TVToast toastWPS;
private A4TVProgressDialog progressDialog;
private LayoutInflater inflater;
private A4TVEditText pinEditTexDialog;
private Context ctx;
private A4TVAlertDialog pinInputDialog;
public NetworkWirelessWPSConfigDialog(Context context) {
super(context, checkTheme(context), 0);
ctx = context;
progressDialog = new A4TVProgressDialog(MainActivity.activity);
progressDialog.setCancelable(true);
progressDialog.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
progressDialog.setTitleOfAlertDialog(R.string.cancel);
try {
MainActivity.service.getSystemControl()
.getNetworkControl().cancelWps();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
return false;
}
});
inflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Fill lists
returnArrayListsWithDialogContents(contentList, contentListIDs,
titleIDs);
// Set content to dialog
fillDialog();
// Set attributes
setDialogAttributes();
init();
}
// Get references from views and set look and feel
private void init() {
buttonEnroll = (A4TVButton) findViewById(TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE);
buttonRegistrar = (A4TVButton) findViewById(TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_REGISTRAR);
buttonPbc = (A4TVButton) findViewById(TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC);
toastWPS = new A4TVToast(ctx);
}
@Override
public void show() {
super.show();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC: {
progressDialog
.setTitleOfAlertDialog(R.string.tv_menu_network_wps_push_button);
progressDialog.setMessage(R.string.please_wait);
try {
MainActivity.service.getSystemControl().getNetworkControl()
.startWpsPbc();
} catch (Exception e) {
e.printStackTrace();
}
progressDialog.show();
break;
}
case TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE: {
progressDialog.setTitleOfAlertDialog("");
progressDialog.setMessage(R.string.please_wait);
try {
MainActivity.service.getSystemControl().getNetworkControl()
.startWpsPinEnrollee();
} catch (Exception e) {
e.printStackTrace();
}
progressDialog.show();
break;
}
case TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_REGISTRAR: {
// Enter WPS PIN alert dialog
pinInputDialog = new A4TVAlertDialog(ctx);
pinInputDialog.setCancelable(true);
pinInputDialog
.setTitleOfAlertDialog(R.string.tv_menu_network_wps_enter_pin_from_ap);
pinInputDialog.setNegativeButton(R.string.button_text_cancel,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
pinInputDialog.cancel();
}
});
pinInputDialog.setPositiveButton(R.string.button_text_connect,
new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
try {
String pin = pinEditTexDialog.getText()
.toString();
// MainActivity.service.getSystemControl().getNetworkControl().startWpsPinRegistrar(pin);
NetworkWirelessFindWPSDialog netWirelessFindWPSDialog = MainActivity.activity
.getDialogManager()
.getNetworkWirelessFindWPSDialog();
if (netWirelessFindWPSDialog != null) {
netWirelessFindWPSDialog.setPin(pin);
netWirelessFindWPSDialog.show();
}
} catch (Exception e) {
e.printStackTrace();
}
pinInputDialog.cancel();
pinEditTexDialog.setText("");
}
});
LinearLayout layout = (LinearLayout) inflater.inflate(
R.layout.security_settings_password_view, null);
pinEditTexDialog = (A4TVEditText) layout
.findViewById(R.id.editTextFirstPassword);
pinEditTexDialog
.setFilters(new InputFilter[] { new InputFilter.LengthFilter(
100) });
pinEditTexDialog
.setHint(R.string.tv_menu_network_wps_enter_pin);
pinEditTexDialog.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_PASSWORD);
pinEditTexDialog.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) {
pinInputDialog.getPositiveButton()
.setEnabled(false);
} else {
pinInputDialog.getPositiveButton().setEnabled(true);
}
}
});
pinInputDialog.getPositiveButton().setEnabled(false);
layout.findViewById(R.id.editTextSecondPassword).setVisibility(
View.GONE);
pinInputDialog.setView(layout);
pinInputDialog.show();
pinEditTexDialog.requestFocus();
break;
}
default:
break;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return super.onKeyDown(keyCode, event);
}
public void wirelessNetworksChanged(int state) {
if (this.isShowing()) {
int activeDialogId = this.getCurrentFocus().getId();
switch (state) {
case WirelessState.WIRELESS_STATE_OBTAINING_IP_ADDR: {
if ((activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC)
|| (activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE)) {
MainActivity.activity.runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog
.setTitleOfAlertDialog(R.string.connecting);
}
});
}
break;
}
case WirelessState.WIRELESS_STATE_CONNECTED: {
if ((activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC)
|| (activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE)) {
MainActivity.activity.runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.dismiss();
toastWPS.showToast(R.string.connected);
}
});
}
break;
}
default:
break;
}
}
}
public void wpsPinObtained(String pin) {
int activeDialogId = this.getCurrentFocus().getId();
if (activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE) {
progressDialog
.setTitleOfAlertDialog(R.string.tv_menu_network_wps_enter_pin_to_ap);
progressDialog.setMessage(ctx
.getString(R.string.tv_menu_network_wps_enter_pin)
+ ": "
+ pin);
} else {
}
}
public void wpsStateChanged(int state) {
if (this.isShowing()) {
int activeDialogId = this.getCurrentFocus().getId();
switch (state) {
case WpsState.WPS_STATE_TIMED_OUT: {
if ((activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC)
|| (activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE)) {
progressDialog.dismiss();
toastWPS.showToast(R.string.tv_menu_network_wps_timeout);
}
break;
}
case WpsState.WPS_STATE_ERROR: {
if ((activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC)
|| (activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE)) {
progressDialog.dismiss();
toastWPS.showToast(R.string.tv_menu_network_wps_error);
}
break;
}
case WpsState.WPS_STATE_CANCEL_ERROR:
case WpsState.WPS_STATE_CANCEL_SUCCESS: {
if ((activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC)
|| (activeDialogId == TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE)) {
progressDialog.dismiss();
toastWPS.showToast(R.string.tv_menu_network_wps_cancel);
}
}
default:
break;
}
}
}
@Override
public void fillDialog() {
View view = DialogManager.dialogCreator.fillDialogWithContents(
contentList, contentListIDs, titleIDs, null, this, null);// ,
// pictureBackgroundID);
setContentView(view);
}
@Override
public void setDialogAttributes() {
getWindow().getAttributes().width = MainActivity.dialogWidth;
getWindow().getAttributes().height = MainActivity.dialogHeight;
}
/**
* Function that load theme
*
* @param ctx
* @return
*/
private static int checkTheme(Context ctx) {
TypedArray atts = ctx.getTheme().obtainStyledAttributes(
new int[] { R.attr.A4TVDialog });
int i = atts.getResourceId(0, 0);
atts.recycle();
return i;
}
@Override
public void returnArrayListsWithDialogContents(
ArrayList<ArrayList<Integer>> contentList,
ArrayList<ArrayList<Integer>> contentListIDs,
ArrayList<Integer> titleIDs) {
// clear old data in lists
contentList.clear();
contentListIDs.clear();
titleIDs.clear();
// title
titleIDs.add(R.drawable.settings_icon);
titleIDs.add(R.string.tv_menu_network_wireless_wps_config);
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVButton);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(R.string.tv_menu_network_wireless_wps_config_enroll);
list.add(TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_ENROLLEE);
contentListIDs.add(list);
list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVButton);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(R.string.tv_menu_network_wireless_wps_config_registrar);
list.add(TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_REGISTRAR);
contentListIDs.add(list);
list = new ArrayList<Integer>();
list.add(MainMenuContent.TAGA4TVTextView);
list.add(MainMenuContent.TAGA4TVButton);
contentList.add(list);
list = new ArrayList<Integer>();
list.add(R.string.tv_menu_network_wireless_wps_config_pbc);
list.add(TV_MENU_NETWORK_WIRELESS_WPS_CONFIG_PBC);
contentListIDs.add(list);
}
}