Added Fingerprint Lock
This commit is contained in:
@@ -24,6 +24,10 @@ import android.os.Bundle
|
|||||||
import android.view.animation.Animation
|
import android.view.animation.Animation
|
||||||
import android.view.animation.AnimationUtils
|
import android.view.animation.AnimationUtils
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.biometric.BiometricManager
|
||||||
|
import androidx.biometric.BiometricPrompt
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
import com.andrognito.patternlockview.PatternLockView
|
import com.andrognito.patternlockview.PatternLockView
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.android.synthetic.main.activity_lock.*
|
import kotlinx.android.synthetic.main.activity_lock.*
|
||||||
@@ -140,6 +144,29 @@ class LockActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showBiometricPrompt() {
|
||||||
|
val promptInfo = BiometricPrompt.PromptInfo.Builder()
|
||||||
|
.setTitle("Biometric login for my app")
|
||||||
|
.setSubtitle("Log in using your biometric credential")
|
||||||
|
.setNegativeButtonText("Cancel")
|
||||||
|
.setConfirmationRequired(false)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val biometricPrompt = BiometricPrompt(this, ContextCompat.getMainExecutor(this),
|
||||||
|
object : BiometricPrompt.AuthenticationCallback() {
|
||||||
|
override fun onAuthenticationSucceeded(
|
||||||
|
result: BiometricPrompt.AuthenticationResult) {
|
||||||
|
super.onAuthenticationSucceeded(result)
|
||||||
|
setResult(RESULT_OK)
|
||||||
|
finish()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Displays the "log in" prompt.
|
||||||
|
biometricPrompt.authenticate(promptInfo)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_lock)
|
setContentView(R.layout.activity_lock)
|
||||||
@@ -167,6 +194,19 @@ class LockActivity : AppCompatActivity() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("lock_fingerprint", false)
|
||||||
|
&& BiometricManager.from(this).canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS
|
||||||
|
) {
|
||||||
|
lock_fingerprint.apply {
|
||||||
|
isEnabled = true
|
||||||
|
setOnClickListener {
|
||||||
|
showBiometricPrompt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
showBiometricPrompt()
|
||||||
|
}
|
||||||
|
|
||||||
lock_pattern.apply {
|
lock_pattern.apply {
|
||||||
isEnabled = lockManager.contains(Lock.Type.PATTERN)
|
isEnabled = lockManager.contains(Lock.Type.PATTERN)
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
@@ -183,7 +223,6 @@ class LockActivity : AppCompatActivity() {
|
|||||||
).commit()
|
).commit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lock_fingerprint.isEnabled = false
|
|
||||||
lock_password.isEnabled = false
|
lock_password.isEnabled = false
|
||||||
|
|
||||||
when (lockManager.locks!!.first().type) {
|
when (lockManager.locks!!.first().type) {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import kotlinx.serialization.builtins.serializer
|
|||||||
import net.rdrei.android.dirchooser.DirectoryChooserActivity
|
import net.rdrei.android.dirchooser.DirectoryChooserActivity
|
||||||
import xyz.quaver.pupil.Pupil
|
import xyz.quaver.pupil.Pupil
|
||||||
import xyz.quaver.pupil.R
|
import xyz.quaver.pupil.R
|
||||||
import xyz.quaver.pupil.ui.fragment.LockFragment
|
import xyz.quaver.pupil.ui.fragment.LockSettingsFragment
|
||||||
import xyz.quaver.pupil.ui.fragment.SettingsFragment
|
import xyz.quaver.pupil.ui.fragment.SettingsFragment
|
||||||
import xyz.quaver.pupil.util.*
|
import xyz.quaver.pupil.util.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -84,7 +84,7 @@ class SettingsActivity : AppCompatActivity() {
|
|||||||
if (resultCode == Activity.RESULT_OK) {
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
supportFragmentManager
|
supportFragmentManager
|
||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
.replace(R.id.settings, LockFragment())
|
.replace(R.id.settings, LockSettingsFragment())
|
||||||
.addToBackStack("Lock")
|
.addToBackStack("Lock")
|
||||||
.commitAllowingStateLoss()
|
.commitAllowingStateLoss()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,15 +20,17 @@ package xyz.quaver.pupil.ui.fragment
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.preference.Preference
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import xyz.quaver.pupil.R
|
import xyz.quaver.pupil.R
|
||||||
import xyz.quaver.pupil.ui.LockActivity
|
import xyz.quaver.pupil.ui.LockActivity
|
||||||
import xyz.quaver.pupil.util.Lock
|
import xyz.quaver.pupil.util.Lock
|
||||||
import xyz.quaver.pupil.util.LockManager
|
import xyz.quaver.pupil.util.LockManager
|
||||||
|
|
||||||
class LockFragment :
|
class LockSettingsFragment :
|
||||||
PreferenceFragmentCompat() {
|
PreferenceFragmentCompat() {
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
@@ -117,5 +119,23 @@ class LockFragment :
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
with(findPreference<Preference>("lock_fingerprint")) {
|
||||||
|
this!!
|
||||||
|
|
||||||
|
setOnPreferenceChangeListener { _, newValue ->
|
||||||
|
this as SwitchPreferenceCompat
|
||||||
|
|
||||||
|
if (newValue == true && LockManager(requireContext()).isEmpty()) {
|
||||||
|
isChecked = false
|
||||||
|
|
||||||
|
Toast.makeText(requireContext(), R.string.settings_lock_fingerprint_without_lock, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
|
||||||
|
isChecked = newValue as Boolean
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,4 +141,5 @@
|
|||||||
<string name="import_old_galleries_notification">旧ギャラリーインポート中…</string>
|
<string name="import_old_galleries_notification">旧ギャラリーインポート中…</string>
|
||||||
<string name="import_old_galleries_notification_done">インポート完了</string>
|
<string name="import_old_galleries_notification_done">インポート完了</string>
|
||||||
<string name="main_fab_random">ランダムギャラリーを開く</string>
|
<string name="main_fab_random">ランダムギャラリーを開く</string>
|
||||||
|
<string name="settings_lock_fingerprint_without_lock">予備のロックが設定されていないと指紋ロックは使用できません</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -141,4 +141,5 @@
|
|||||||
<string name="import_old_galleries_notification">이전 버전 갤러리 가져오는 중…</string>
|
<string name="import_old_galleries_notification">이전 버전 갤러리 가져오는 중…</string>
|
||||||
<string name="import_old_galleries_notification_done">가져오기 완료</string>
|
<string name="import_old_galleries_notification_done">가져오기 완료</string>
|
||||||
<string name="main_fab_random">무작위 갤러리 열기</string>
|
<string name="main_fab_random">무작위 갤러리 열기</string>
|
||||||
|
<string name="settings_lock_fingerprint_without_lock">지문 잠금은 다른 잠금 방식이 활성화 되어 있을 때만 사용 가능합니다</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -188,6 +188,7 @@
|
|||||||
<string name="settings_lock_password">Password</string>
|
<string name="settings_lock_password">Password</string>
|
||||||
<string name="settings_lock_biometrics">Biometrics</string>
|
<string name="settings_lock_biometrics">Biometrics</string>
|
||||||
<string name="settings_lock_fingerprint">Fingerprint</string>
|
<string name="settings_lock_fingerprint">Fingerprint</string>
|
||||||
|
<string name="settings_lock_fingerprint_without_lock">Fingerprint can be only enabled if one of the other locks are enabled</string>
|
||||||
<string name="settings_lock_enabled">Enabled</string>
|
<string name="settings_lock_enabled">Enabled</string>
|
||||||
<string name="settings_lock_confirm">Input same lock once more to confirm Lock</string>
|
<string name="settings_lock_confirm">Input same lock once more to confirm Lock</string>
|
||||||
<string name="settings_lock_remove_message">Do you want to remove lock?</string>
|
<string name="settings_lock_remove_message">Do you want to remove lock?</string>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
app:title="@string/settings_lock_biometrics">
|
app:title="@string/settings_lock_biometrics">
|
||||||
|
|
||||||
<Preference
|
<SwitchPreferenceCompat
|
||||||
app:title="@string/settings_lock_fingerprint"
|
app:title="@string/settings_lock_fingerprint"
|
||||||
app:key="lock_fingerprint"/>
|
app:key="lock_fingerprint"/>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user