package com.iwedia.gui.components; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; /** * Custom alert dialog builder class * * @author Branimir Pavlovic */ public class A4TVPasswordDialog extends A4TVAlertDialog { public static final String TAG = "A4TVPasswordDialog"; private final int NUMBER_OF_CHARS_NEEDED = 4; private LayoutInflater inflater; private A4TVEditText editText1, editText2, editText3; private boolean enableOkButton1, enableOkButton2, enableOkButton3; public A4TVPasswordDialog(Context arg0, boolean isTextWatcherEnabled) { super(arg0); this.setCancelable(false); inflater = (LayoutInflater) arg0 .getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout layout = (LinearLayout) inflater.inflate( R.layout.security_settings_password_view, null); this.setView(layout); editText1 = (A4TVEditText) layout .findViewById(R.id.editTextFirstPassword); editText2 = (A4TVEditText) layout .findViewById(R.id.editTextSecondPassword); editText2.setVisibility(View.GONE); editText3 = (A4TVEditText) layout .findViewById(R.id.editTextThirdPassword); editText3.setVisibility(View.GONE); // Attach text watchers if (isTextWatcherEnabled) { editText1.addTextChangedListener(new MyTextWatcher(editText1 .getId())); editText2.addTextChangedListener(new MyTextWatcher(editText2 .getId())); editText3.addTextChangedListener(new MyTextWatcher(editText3 .getId())); } } @Override public void show() { super.show(); getPositiveButton().setEnabled(false); getPositiveButton().setFocusable(false); editText1.requestFocus(); // Check which edit text is visible if (!editText2.isShown()) { enableOkButton2 = true; } if (!editText3.isShown()) { enableOkButton3 = true; } } @Override public void cancel() { super.cancel(); editText1.setText(""); editText2.setText(""); editText3.setText(""); } private class MyTextWatcher implements TextWatcher { int id = 0; public MyTextWatcher(int id) { this.id = id; } @Override public void afterTextChanged(Editable s) { Log.d(TAG, "afterTextChanged: " + s.toString()); A4TVEditText editTextThis = ((A4TVEditText) A4TVPasswordDialog.this .findViewById(id)); switch (this.id) { case R.id.editTextFirstPassword: { if (editTextThis.getText().length() == NUMBER_OF_CHARS_NEEDED) { enableOkButton1 = true; } else { enableOkButton1 = false; } break; } case R.id.editTextSecondPassword: { if (editTextThis.getText().length() == NUMBER_OF_CHARS_NEEDED) { enableOkButton2 = true; } else { enableOkButton2 = false; } break; } case R.id.editTextThirdPassword: { if (editTextThis.getText().length() == NUMBER_OF_CHARS_NEEDED) { enableOkButton3 = true; } else { enableOkButton3 = false; } break; } } // Enable OK button if (enableOkButton1 && enableOkButton2 && enableOkButton3) { getPositiveButton().setEnabled(true); getPositiveButton().setFocusable(true); } else { getPositiveButton().setEnabled(false); getPositiveButton().setFocusable(false); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { Log.d(TAG, "beforeTextChanged1: " + s.toString()); A4TVEditText editTextThis = ((A4TVEditText) A4TVPasswordDialog.this .findViewById(id)); int inputType = editTextThis.getInputType(); if (inputType == A4TVEditText.INPUT_TYPE_NUMBER_PASSWORD) { if (editTextThis.getLastEnteredKey() == KeyEvent.KEYCODE_0) { if (after < count) { editTextThis.setText(s); editTextThis.setSelection(editTextThis.getText() .length()); } } } Log.d(TAG, "beforeTextChanged2: " + s.toString()); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } } public A4TVEditText getEditText1() { return editText1; } public void setEditText1(A4TVEditText editText1) { this.editText1 = editText1; } public A4TVEditText getEditText2() { return editText2; } public void setEditText2(A4TVEditText editText2) { this.editText2 = editText2; } public A4TVEditText getEditText3() { return editText3; } public void setEditText3(A4TVEditText editText3) { this.editText3 = editText3; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { MainActivity.activity.getScreenSaverDialog().updateScreensaverTimer(); return super.onKeyDown(keyCode, event); } }