Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HacktoberFest] Code simplify #6

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 33 additions & 37 deletions library/src/main/java/com/goldenpie/devs/pincodeview/PinCodeView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,26 @@ import java.util.*

open class PinCodeView : LinearLayout, View.OnClickListener {

private lateinit var pinLayout: LinearLayout
private lateinit var invisibleEditText: AppCompatEditText

private lateinit var lockType: LockType

@ColorInt
private var innerCircleColor: Int = 0
private var innerCircleColor = 0
@ColorInt
private var outerCircleColor: Int = 0
private var outerCircleColor = 0
@ColorInt
private var errorColor: Int = 0
private var errorColor = 0

private var pinCount = 0
private var innerAlpha = 0f

private var innerDrawable: Drawable? = null
private var outerDrawable: Drawable? = null
private var pinCount: Int = 0
private var innerAlpha: Float = 0.toFloat()
private var tintInner = true
private var tintOuter = true

private lateinit var pinLayout: LinearLayout
private lateinit var invisibleEditText: AppCompatEditText
private var lockType: LockType? = null
private var pass: String? = null

private var pinEnteredListener: Listeners.PinEnteredListener? = null
Expand Down Expand Up @@ -100,10 +103,10 @@ open class PinCodeView : LinearLayout, View.OnClickListener {
tintOuter = getBoolean(R.styleable.PinCodeView_pcv_pin_tint_outer, tintOuter)

innerDrawable = getDrawable(R.styleable.PinCodeView_pcv_pin_inner_drawable)
innerDrawable?:run { innerDrawable = ContextCompat.getDrawable(context, R.drawable.circle) }
innerDrawable ?: run { innerDrawable = ContextCompat.getDrawable(context, R.drawable.circle) }

outerDrawable = getDrawable(R.styleable.PinCodeView_pcv_pin_outer_drawable)
outerDrawable?:run { outerDrawable = ContextCompat.getDrawable(context, R.drawable.circle) }
outerDrawable ?: run { outerDrawable = ContextCompat.getDrawable(context, R.drawable.circle) }

when (getInt(R.styleable.PinCodeView_pcv_pin_type, 0)) {
0 -> lockType = LockType.UNLOCK
Expand Down Expand Up @@ -180,13 +183,12 @@ open class PinCodeView : LinearLayout, View.OnClickListener {
if (pinCount <= 0)
return

for (pin in pins) {
pin.innerPinView.alpha = innerAlpha
}
pins.asSequence()
.map { it.innerPinView }
.onEach { alpha = innerAlpha }

(0 until s.length).forEach { pins[it].innerPinView.alpha = 1f }

for (i in 0 until s.length) {
pins[i].innerPinView.alpha = 1f
}

if (lockType == LockType.ENTER_PIN && !pass.isNullOrEmpty() && s.isEmpty()) {
pinReEnterListener?.onPinReEnterStarted()
Expand All @@ -204,9 +206,7 @@ open class PinCodeView : LinearLayout, View.OnClickListener {
invisibleEditText.text!!.clear()
} else {
if (pass != s.toString()) {

reset()

pinMismatchListener?.onPinMismatch()

return
Expand All @@ -229,20 +229,17 @@ open class PinCodeView : LinearLayout, View.OnClickListener {
* Reset pin code view with error style
*/
fun reset() {
for (pin in pins) {
pin.innerPinView.setColorFilter(errorColor)
}
pins.onEach { it.innerPinView.setColorFilter(errorColor) }

Handler().postDelayed({
for (pin in pins) {
pin.innerPinView.apply {
if (tintInner)
setColorFilter(innerCircleColor)
else
clearColorFilter()
}

}
pins.asSequence()
.map { it.innerPinView }
.onEach {
if (tintInner)
it.setColorFilter(innerCircleColor)
else
it.clearColorFilter()
}

invisibleEditText.text!!.clear()
}, 500)
Expand All @@ -257,13 +254,12 @@ open class PinCodeView : LinearLayout, View.OnClickListener {
}

override fun onClick(v: View) {
val id = v.id

if (id == R.id.pin_layout) {
with(invisibleEditText) {
clearFocus()
requestFocus()
}
when {
v.id == R.id.pin_layout ->
with(invisibleEditText) {
clearFocus()
requestFocus()
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ internal class SinglePinView : LinearLayout {
outerPinView = findViewById<View>(R.id.outer_pin_view) as AppCompatImageView
innerPinView = findViewById<View>(R.id.inner_pin_view) as AppCompatImageView
}

listOf(outerPinView, innerPinView).onEach { it.setImageResource(R.drawable.circle) }
}

fun setColors(innerColor: Int, outerColor: Int) {
Expand Down
1 change: 1 addition & 0 deletions library/src/main/res/layout/pin_code_view_layout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal" />

<android.support.v7.widget.AppCompatEditText
Expand Down
40 changes: 15 additions & 25 deletions library/src/main/res/layout/single_pin_view_layout.xml
Original file line number Diff line number Diff line change
@@ -1,32 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/outer_pin_view"
android:layout_width="56dp"
android:layout_height="56dp"
android:scaleType="centerInside"
app:srcCompat="@drawable/circle" />

<android.support.v7.widget.AppCompatImageView
android:id="@+id/outer_pin_view"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_centerInParent="true"
android:scaleType="centerInside"/>

<android.support.v7.widget.AppCompatImageView
android:id="@+id/inner_pin_view"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_alignBottom="@id/outer_pin_view"
android:layout_alignEnd="@id/outer_pin_view"
android:layout_alignLeft="@id/outer_pin_view"
android:layout_alignRight="@id/outer_pin_view"
android:layout_alignStart="@id/outer_pin_view"
android:layout_alignTop="@id/outer_pin_view"
android:layout_margin="8dp"
android:scaleType="centerInside" />
</RelativeLayout>
</FrameLayout>
<android.support.v7.widget.AppCompatImageView
android:id="@+id/inner_pin_view"
android:layout_width="56dp"
android:layout_height="56dp"
android:padding="8dp"
android:scaleType="centerInside"
app:srcCompat="@drawable/circle" />
</RelativeLayout>