mirror of
https://github.com/mihonapp/mihon.git
synced 2025-06-26 19:17:51 +02:00
137 lines
5.2 KiB
Kotlin
Executable File
137 lines
5.2 KiB
Kotlin
Executable File
package exh.ui.lock
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.util.TypedValue
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import com.afollestad.materialdialogs.MaterialDialog
|
|
import com.andrognito.pinlockview.PinLockListener
|
|
import com.github.ajalt.reprint.core.AuthenticationResult
|
|
import com.github.ajalt.reprint.rxjava.RxReprint
|
|
import com.mattprecious.swirl.SwirlView
|
|
import eu.kanade.tachiyomi.R
|
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
|
import exh.util.dpToPx
|
|
import kotlinx.android.synthetic.main.activity_lock.view.*
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
|
class LockController : NucleusController<LockPresenter>() {
|
|
|
|
val prefs: PreferencesHelper by injectLazy()
|
|
|
|
override fun inflateView(inflater: LayoutInflater, container: ViewGroup)
|
|
= inflater.inflate(R.layout.activity_lock, container, false)!!
|
|
|
|
override fun createPresenter() = LockPresenter()
|
|
|
|
override fun getTitle() = "Application locked"
|
|
|
|
override fun onViewCreated(view: View) {
|
|
super.onViewCreated(view)
|
|
|
|
if(!lockEnabled(prefs)) {
|
|
closeLock()
|
|
return
|
|
}
|
|
|
|
with(view) {
|
|
//Setup pin lock
|
|
pin_lock_view.attachIndicatorDots(indicator_dots)
|
|
|
|
pin_lock_view.pinLength = prefs.lockLength().getOrDefault()
|
|
pin_lock_view.setPinLockListener(object : PinLockListener {
|
|
override fun onEmpty() {}
|
|
|
|
override fun onComplete(pin: String) {
|
|
if (sha512(pin, prefs.lockSalt().get()!!) == prefs.lockHash().get()) {
|
|
//Yay!
|
|
closeLock()
|
|
} else {
|
|
MaterialDialog.Builder(context)
|
|
.title("PIN code incorrect")
|
|
.content("The PIN code you entered is incorrect. Please try again.")
|
|
.cancelable(true)
|
|
.canceledOnTouchOutside(true)
|
|
.positiveText("Ok")
|
|
.autoDismiss(true)
|
|
.show()
|
|
pin_lock_view.resetPinLockView()
|
|
}
|
|
}
|
|
|
|
override fun onPinChange(pinLength: Int, intermediatePin: String?) {}
|
|
})
|
|
}
|
|
}
|
|
|
|
@SuppressLint("NewApi")
|
|
override fun onAttach(view: View) {
|
|
super.onAttach(view)
|
|
|
|
with(view) {
|
|
//Fingerprint
|
|
if (presenter.useFingerprint) {
|
|
swirl_container.removeAllViews()
|
|
val icon = SwirlView(context).apply {
|
|
val size = dpToPx(context, 60)
|
|
layoutParams = (layoutParams ?: ViewGroup.LayoutParams(
|
|
size, size
|
|
)).apply {
|
|
width = size
|
|
height = size
|
|
|
|
val pSize = dpToPx(context, 8)
|
|
setPadding(pSize, pSize, pSize, pSize)
|
|
}
|
|
val lockColor = resolvColor(android.R.attr.windowBackground)
|
|
setBackgroundColor(lockColor)
|
|
val bgColor = resolvColor(android.R.attr.colorBackground)
|
|
//Disable elevation if lock color is same as background color
|
|
if (lockColor == bgColor)
|
|
this@with.swirl_container.cardElevation = 0f
|
|
setState(SwirlView.State.OFF, true)
|
|
}
|
|
swirl_container.addView(icon)
|
|
icon.setState(SwirlView.State.ON)
|
|
RxReprint.authenticate()
|
|
.subscribeUntilDetach {
|
|
when (it.status) {
|
|
AuthenticationResult.Status.SUCCESS -> closeLock()
|
|
AuthenticationResult.Status.NONFATAL_FAILURE -> icon.setState(SwirlView.State.ERROR)
|
|
AuthenticationResult.Status.FATAL_FAILURE, null -> {
|
|
MaterialDialog.Builder(context)
|
|
.title("Fingerprint error!")
|
|
.content(it.errorMessage)
|
|
.cancelable(false)
|
|
.canceledOnTouchOutside(false)
|
|
.positiveText("Ok")
|
|
.autoDismiss(true)
|
|
.show()
|
|
icon.setState(SwirlView.State.OFF)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun resolvColor(color: Int): Int {
|
|
val typedVal = TypedValue()
|
|
activity!!.theme!!.resolveAttribute(android.R.attr.windowBackground, typedVal, true)
|
|
return typedVal.data
|
|
}
|
|
|
|
override fun onDetach(view: View) {
|
|
super.onDetach(view)
|
|
}
|
|
|
|
fun closeLock() {
|
|
router.popCurrentController()
|
|
}
|
|
|
|
override fun handleBack() = true
|
|
}
|