diff --git a/app/src/main/java/com/gamemalt/pinview/example/MainActivity.java b/app/src/main/java/com/gamemalt/pinview/example/MainActivity.java index 9471006..e238389 100644 --- a/app/src/main/java/com/gamemalt/pinview/example/MainActivity.java +++ b/app/src/main/java/com/gamemalt/pinview/example/MainActivity.java @@ -16,26 +16,32 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); - PinView pinView=findViewById(R.id.pin_view); + PinView pinView = findViewById(R.id.pin_view); pinView.setListener(new PinViewListener() { @Override public void onPinButtonClick(int num) { - Log.d("yoyo",""+num); + Log.d("pinviewtest", "" + num); } @Override public void onClearButtonClick() { - Log.d("yoyo","onClearButtonClick"); + Log.d("pinviewtest", "onClearButtonClick"); } @Override public void onClearButtonLongClick() { - Log.d("yoyo","onClearButtonLongClick"); + Log.d("pinviewtest", "onClearButtonLongClick"); + + } + + @Override + public void onOkButtonClick() { + Log.d("pinviewtest", "onOkButtonClick"); } }); - + } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3aabadb..ed395ff 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -15,7 +15,8 @@ android:layout_gravity="center_horizontal" app:buttonTextColor="#FFEB3B" app:buttonTextSize="30" - app:isHapticFeedBack="false" + app:isHapticFeedBack="true" + app:buttonOkBackground="@drawable/v_tick" app:buttonClearBackground="@drawable/v_back" /> diff --git a/pinview/src/main/java/com/gamemalt/pinview/PinView.java b/pinview/src/main/java/com/gamemalt/pinview/PinView.java index 98e40a6..ca0ab4b 100644 --- a/pinview/src/main/java/com/gamemalt/pinview/PinView.java +++ b/pinview/src/main/java/com/gamemalt/pinview/PinView.java @@ -22,12 +22,16 @@ public class PinView extends LinearLayout { private int pinButtonBackground; - private int imageClearBackground; + private int buttonClearBackground; + private int buttonOkBackground; private int buttonTextColor; private int buttonTextSize; private ImageButton buttonClear; + private ImageButton buttonOk; + + private boolean showOkButton, showClearButton; private boolean isHapticFeedBack = false; @@ -58,11 +62,15 @@ public PinView(Context context, AttributeSet attrs, int defStyle) { private void setDefaultAttr(AttributeSet attrs) { TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.PinView); try { - imageClearBackground = typedArray.getResourceId(R.styleable.PinView_buttonClearBackground, R.drawable.v_back); + buttonClearBackground = typedArray.getResourceId(R.styleable.PinView_buttonClearBackground, R.drawable.v_back); + buttonOkBackground = typedArray.getResourceId(R.styleable.PinView_buttonOkBackground, R.drawable.v_tick); pinButtonBackground = typedArray.getResourceId(R.styleable.PinView_pinButtonBackground, android.R.color.transparent); buttonTextColor = typedArray.getColor(R.styleable.PinView_buttonTextColor, Color.WHITE); buttonTextSize = typedArray.getInt(R.styleable.PinView_buttonTextSize, 24); isHapticFeedBack = typedArray.getBoolean(R.styleable.PinView_isHapticFeedBack, false); + showOkButton = typedArray.getBoolean(R.styleable.PinView_showOkButton, true); + showClearButton = typedArray.getBoolean(R.styleable.PinView_showClearButton, true); + } finally { typedArray.recycle(); @@ -100,14 +108,21 @@ public boolean onLongClick(View v) { }); buttonClear.setOnClickListener(clickListener); + buttonOk.setOnClickListener(clickListener); + + setShowClearButton(showClearButton); + setShowOkButton(showOkButton); } private void findAllViews() { - buttonClear = findViewById(R.id.clear); - setImageClearBackground(imageClearBackground); + buttonClear = findViewById(R.id.button_clear); + buttonOk = findViewById(R.id.button_ok); + + setButtonClearBackground(buttonClearBackground); + setButtonOkBackground(buttonOkBackground); pinButtons[0] = findViewById(R.id.button_0); pinButtons[1] = findViewById(R.id.button_1); @@ -152,16 +167,20 @@ public void onClick(View v) { if (pinViewListener == null || !isEnabled) return; - if (v.getId() == R.id.clear) { + if (v.getId() == R.id.button_clear) { pinViewListener.onClearButtonClick(); + } else if (v.getId() == R.id.button_ok) { + + pinViewListener.onOkButtonClick(); } else { pinViewListener.onPinButtonClick(Integer.parseInt(((TextView) v).getText().toString().trim())); } - if (isHapticFeedBackEnabled()) { + if (isHapticFeedBackEnabled() && v.getId() != R.id.button_ok) { + //we don't vibrate on OK button vibrate(); } @@ -188,6 +207,7 @@ public void setPinButtonTextColor(int pinButtonTextColor) { // ColorStateList ColorStateList = getResources().getColorStateList(pinButtonTextColor); buttonClear.setColorFilter(pinButtonTextColor, PorterDuff.Mode.SRC_IN); + buttonOk.setColorFilter(pinButtonTextColor, PorterDuff.Mode.SRC_IN); for (TextView button : pinButtons) { button.setTextColor(pinButtonTextColor); @@ -207,11 +227,19 @@ public void setPinButtonTextSize(int pinButtonTextSize) { /* * Provide resource ID * */ - public void setImageClearBackground(int imageClearBackground) { - this.imageClearBackground = imageClearBackground; + public void setButtonClearBackground(int imageClearBackground) { + this.buttonClearBackground = imageClearBackground; buttonClear.setImageResource(imageClearBackground); } + /* + * Provide resource ID + * */ + public void setButtonOkBackground(int imageClearBackground) { + this.buttonOkBackground = imageClearBackground; + buttonOk.setImageResource(imageClearBackground); + } + public boolean isHapticFeedBackEnabled() { return isHapticFeedBack; } @@ -224,5 +252,13 @@ public void setPinViewEnabled(boolean isEnabled) { this.isEnabled = isEnabled; } + public void setShowOkButton(boolean shouldShow){ + showOkButton=shouldShow; + buttonOk.setVisibility(shouldShow ? VISIBLE : INVISIBLE); + } + public void setShowClearButton(boolean shouldShow){ + showClearButton=shouldShow; + buttonClear.setVisibility(shouldShow ? VISIBLE : INVISIBLE); + } } diff --git a/pinview/src/main/java/com/gamemalt/pinview/PinViewListener.java b/pinview/src/main/java/com/gamemalt/pinview/PinViewListener.java index a8c8219..d34cebc 100644 --- a/pinview/src/main/java/com/gamemalt/pinview/PinViewListener.java +++ b/pinview/src/main/java/com/gamemalt/pinview/PinViewListener.java @@ -1,11 +1,16 @@ package com.gamemalt.pinview; -public interface PinViewListener { +public abstract class PinViewListener { - void onPinButtonClick(int num); + public abstract void onPinButtonClick(int num); - void onClearButtonClick(); + public void onClearButtonClick() { + } - void onClearButtonLongClick(); + public void onClearButtonLongClick() { + } + + public void onOkButtonClick() { + } } diff --git a/pinview/src/main/res/drawable/v_tick.xml b/pinview/src/main/res/drawable/v_tick.xml new file mode 100644 index 0000000..3c728c5 --- /dev/null +++ b/pinview/src/main/res/drawable/v_tick.xml @@ -0,0 +1,9 @@ + + + diff --git a/pinview/src/main/res/layout/pin_view.xml b/pinview/src/main/res/layout/pin_view.xml index d1091b8..d31c51d 100644 --- a/pinview/src/main/res/layout/pin_view.xml +++ b/pinview/src/main/res/layout/pin_view.xml @@ -145,6 +145,15 @@ android:orientation="horizontal" android:weightSum="3"> + + + + diff --git a/pinview/src/main/res/values/public.xml b/pinview/src/main/res/values/public.xml index bd364cb..b630cb3 100644 --- a/pinview/src/main/res/values/public.xml +++ b/pinview/src/main/res/values/public.xml @@ -3,6 +3,7 @@ - + + \ No newline at end of file