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); } }