Added Fingerprint Lock

This commit is contained in:
tom5079
2020-06-20 23:23:07 +09:00
parent 293ca5b31d
commit 567eec8bc5
7 changed files with 67 additions and 5 deletions

View File

@@ -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) {

View File

@@ -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()
} }

View File

@@ -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
}
}
} }
} }

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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"/>