package com.marshalchen.common.uimodule.passcodelock;
import android.app.Activity;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.InputType;
import android.text.Spanned;
import android.text.method.PasswordTransformationMethod;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.marshalchen.ultimateandroiduicomponent.R;
public abstract class AbstractPasscodeKeyboardActivity extends Activity {
protected EditText pinCodeField1 = null;
protected EditText pinCodeField2 = null;
protected EditText pinCodeField3 = null;
protected EditText pinCodeField4 = null;
protected InputFilter[] filters = null;
protected TextView topMessage = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.passlock_passcode_keyboard);
topMessage = (TextView) findViewById(R.id.top_message);
Bundle extras = getIntent().getExtras();
if (extras != null) {
String message = extras.getString("message");
if (message != null) {
topMessage.setText(message);
}
}
filters = new InputFilter[2];
filters[0]= new InputFilter.LengthFilter(1);
filters[1] = onlyNumber;
//Setup the pin fields row
pinCodeField1 = (EditText) findViewById(R.id.pincode_1);
setupPinItem(pinCodeField1);
pinCodeField2 = (EditText) findViewById(R.id.pincode_2);
setupPinItem(pinCodeField2);
pinCodeField3 = (EditText) findViewById(R.id.pincode_3);
setupPinItem(pinCodeField3);
pinCodeField4 = (EditText) findViewById(R.id.pincode_4);
setupPinItem(pinCodeField4);
//setup the keyboard
((Button) findViewById(R.id.button0)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button1)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button2)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button3)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button4)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button5)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button6)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button7)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button8)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button9)).setOnClickListener(defaultButtonListener);
((Button) findViewById(R.id.button_erase)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View arg0) {
if( pinCodeField1.isFocused() ) {
}
else if( pinCodeField2.isFocused() ) {
pinCodeField1.requestFocus();
pinCodeField1.setText("");
}
else if( pinCodeField3.isFocused() ) {
pinCodeField2.requestFocus();
pinCodeField2.setText("");
}
else if( pinCodeField4.isFocused() ) {
pinCodeField3.requestFocus();
pinCodeField3.setText("");
}
}
});
}
protected void setupPinItem(EditText item){
item.setInputType(InputType.TYPE_NULL);
item.setFilters(filters);
item.setOnTouchListener(otl);
item.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
private OnClickListener defaultButtonListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
int currentValue = -1;
int id = arg0.getId();
if (id == R.id.button0) {
currentValue = 0;
} else if (id == R.id.button1) {
currentValue = 1;
} else if (id == R.id.button2) {
currentValue = 2;
} else if (id == R.id.button3) {
currentValue = 3;
} else if (id == R.id.button4) {
currentValue = 4;
} else if (id == R.id.button5) {
currentValue = 5;
} else if (id == R.id.button6) {
currentValue = 6;
} else if (id == R.id.button7) {
currentValue = 7;
} else if (id == R.id.button8) {
currentValue = 8;
} else if (id == R.id.button9) {
currentValue = 9;
} else {
}
//set the value and move the focus
String currentValueString = String.valueOf(currentValue);
if( pinCodeField1.isFocused() ) {
pinCodeField1.setText(currentValueString);
pinCodeField2.requestFocus();
pinCodeField2.setText("");
}
else if( pinCodeField2.isFocused() ) {
pinCodeField2.setText(currentValueString);
pinCodeField3.requestFocus();
pinCodeField3.setText("");
}
else if( pinCodeField3.isFocused() ) {
pinCodeField3.setText(currentValueString);
pinCodeField4.requestFocus();
pinCodeField4.setText("");
}
else if( pinCodeField4.isFocused() ) {
pinCodeField4.setText(currentValueString);
}
if(pinCodeField4.getText().toString().length() > 0 &&
pinCodeField3.getText().toString().length() > 0 &&
pinCodeField2.getText().toString().length() > 0 &&
pinCodeField1.getText().toString().length() > 0
) {
onPinLockInserted();
}
}
};
protected void showPasswordError(){
Toast toast = Toast.makeText(AbstractPasscodeKeyboardActivity.this, "passcode_wrong_passcode", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 30);
toast.show();
}
protected abstract void onPinLockInserted();
private InputFilter onlyNumber = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if( source.length() > 1 )
return "";
if( source.length() == 0 ) //erase
return null;
try {
int number = Integer.parseInt(source.toString());
if( ( number >= 0 ) && ( number <= 9 ) )
return String.valueOf(number);
else
return "";
} catch (NumberFormatException e) {
return "";
}
}
};
private OnTouchListener otl = new OnTouchListener() {
@Override
public boolean onTouch (View v, MotionEvent event) {
if( v instanceof EditText ) {
((EditText)v).setText("");
}
return false;
}
};
}