package jp.webpay.android.token.ui.field;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import jp.webpay.android.token.R;
import jp.webpay.android.token.model.RawCard;
import jp.webpay.android.token.validator.CvcValidator;
public class CvcField extends BaseCardField {
public static final int MAX_LENGTH = 4;
private String mValidCvc;
private View.OnClickListener mOnHelpIconClickListener;
public CvcField(Context context) {
super(context);
initialize();
}
public CvcField(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public CvcField(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize() {
setInputType(InputType.TYPE_CLASS_NUMBER);
// TYPE_NUMBER_VARIATION_PASSWORD is unavailable in SDK 8 to 10
setTransformationMethod(PasswordTransformationMethod.getInstance());
setHint(R.string.field_cvc_hint);
setFilters(new InputFilter[]{new InputFilter.LengthFilter(MAX_LENGTH)});
}
@Override
protected boolean validateCurrentValue() {
String value = getText().toString();
if (CvcValidator.isValid(value)) {
mValidCvc = value;
return true;
} else {
mValidCvc = null;
return false;
}
}
@Override
public void updateCard(RawCard card) {
card.cvc(mValidCvc);
}
/**
* @return input CVC value if valid, null otherwise
*/
public String getValidCvc() {
return mValidCvc;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP
&& mOnHelpIconClickListener != null) {
// 2 is for right
Drawable rightDrawable = getCompoundDrawables()[2];
if (rightDrawable != null) {
int[] screenLocation = new int[2];
getLocationOnScreen(screenLocation);
int iconStartX = screenLocation[0] + getWidth() - getPaddingRight()
- rightDrawable.getBounds().width();
if (event.getRawX() >= iconStartX){
playSoundEffect(android.view.SoundEffectConstants.CLICK);
mOnHelpIconClickListener.onClick(this);
return true;
}
}
}
return super.onTouchEvent(event);
}
public void setOnHelpIconClickListener(OnClickListener onHelpIconClickListener) {
this.mOnHelpIconClickListener = onHelpIconClickListener;
}
}