From 09b40cdec7d096afac11d42d194934fa7c011ab1 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 30 Mar 2020 00:45:41 -0600 Subject: BiometricAuthenticator: rework logic and bugs Otherwise there's a frameworks bug that causes the fragment's activity to become null. Signed-off-by: Jason A. Donenfeld --- .../wireguard/android/fragment/TunnelEditorFragment.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt') diff --git a/ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt b/ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt index 1b8af50e..1c0cf2bd 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt +++ b/ui/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.kt @@ -4,6 +4,7 @@ */ package com.wireguard.android.fragment +import android.app.Activity import android.content.Context import android.os.Bundle import android.text.InputType @@ -83,7 +84,7 @@ class TunnelEditorFragment : BaseFragment(), AppExclusionListener { } override fun onDestroyView() { - requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) binding = null super.onDestroyView() } @@ -106,7 +107,7 @@ class TunnelEditorFragment : BaseFragment(), AppExclusionListener { InputMethodManager.HIDE_NOT_ALWAYS) } // Tell the activity to finish itself or go back to the detail view. - requireActivity().runOnUiThread { + activity.runOnUiThread { // TODO(smaeul): Remove this hack when fixing the Config ViewModel // The selected tunnel has to actually change, but we have to remember this one. val savedTunnel = tunnel @@ -228,13 +229,17 @@ class TunnelEditorFragment : BaseFragment(), AppExclusionListener { super.onViewStateRestored(savedInstanceState) } + private var showingAuthenticator = false + fun onKeyClick(view: View) = onKeyFocusChange(view, true) fun onKeyFocusChange(view: View, isFocused: Boolean) { - if (!isFocused) return + if (!isFocused || showingAuthenticator) return val edit = view as? EditText ?: return if (!haveShownKeys && edit.text.isNotEmpty()) { - BiometricAuthenticator.authenticate(R.string.biometric_prompt_private_key_title, requireActivity()) { + showingAuthenticator = true + BiometricAuthenticator.authenticate(R.string.biometric_prompt_private_key_title, this) { + showingAuthenticator = false when (it) { is BiometricAuthenticator.Result.Success, is BiometricAuthenticator.Result.HardwareUnavailableOrDisabled -> { haveShownKeys = true @@ -255,7 +260,7 @@ class TunnelEditorFragment : BaseFragment(), AppExclusionListener { } private fun showPrivateKey(edit: EditText) { - requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_SECURE) edit.inputType = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD } -- cgit v1.2.3-59-g8ed1b