Fix: Fixed locked apps to also allow DEVICE_CREDENTIAL not only Fingerprint

Signed-off-by: HeCodes2Much <wayne6324@gmail.com>
This commit is contained in:
HeCodes2Much
2024-07-06 10:28:18 +01:00
parent ff3a6f1c84
commit d2a0faf31e
6 changed files with 31 additions and 28 deletions

View File

@@ -12,7 +12,7 @@ import com.github.droidworksstudio.launcher.data.entities.AppInfo
import com.github.droidworksstudio.launcher.utils.Constants import com.github.droidworksstudio.launcher.utils.Constants
import javax.inject.Inject import javax.inject.Inject
class FingerprintHelper @Inject constructor(private val fragment: Fragment) { class BiometricHelper @Inject constructor(private val fragment: Fragment) {
private lateinit var callback: Callback private lateinit var callback: Callback
@@ -25,7 +25,7 @@ class FingerprintHelper @Inject constructor(private val fragment: Fragment) {
fun onAuthenticationError(errorCode: Int, errorMessage: CharSequence?) fun onAuthenticationError(errorCode: Int, errorMessage: CharSequence?)
} }
fun startFingerprintAuth(appInfo: AppInfo, callback: Callback) { fun startBiometricAuth(appInfo: AppInfo, callback: Callback) {
this.callback = callback this.callback = callback
val authenticationCallback = object : BiometricPrompt.AuthenticationCallback() { val authenticationCallback = object : BiometricPrompt.AuthenticationCallback() {
@@ -45,20 +45,23 @@ class FingerprintHelper @Inject constructor(private val fragment: Fragment) {
val executor = ContextCompat.getMainExecutor(fragment.requireContext()) val executor = ContextCompat.getMainExecutor(fragment.requireContext())
val biometricPrompt = BiometricPrompt(fragment, executor, authenticationCallback) val biometricPrompt = BiometricPrompt(fragment, executor, authenticationCallback)
val authenticators =
BiometricManager.Authenticators.BIOMETRIC_STRONG or BiometricManager.Authenticators.DEVICE_CREDENTIAL
val canAuthenticate =
BiometricManager.from(fragment.requireContext()).canAuthenticate(authenticators)
val promptInfo = BiometricPrompt.PromptInfo.Builder() val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle(fragment.getString(R.string.authentication_title)) .setTitle(fragment.getString(R.string.authentication_title))
.setSubtitle(fragment.getString(R.string.authentication_subtitle)) .setSubtitle(fragment.getString(R.string.authentication_subtitle))
.setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.DEVICE_CREDENTIAL) .setAllowedAuthenticators(authenticators)
.build() .build()
val canAuthenticate = BiometricManager.from(fragment.requireContext())
.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)
if (canAuthenticate == BiometricManager.BIOMETRIC_SUCCESS) { if (canAuthenticate == BiometricManager.BIOMETRIC_SUCCESS) {
biometricPrompt.authenticate(promptInfo) biometricPrompt.authenticate(promptInfo)
} }
} }
fun startFingerprintSettingsAuth(runNavigation: Int) { fun startBiometricSettingsAuth(runNavigation: Int) {
val executor = ContextCompat.getMainExecutor(fragment.requireContext()) val executor = ContextCompat.getMainExecutor(fragment.requireContext())
val biometricPrompt = val biometricPrompt =
@@ -92,7 +95,7 @@ class FingerprintHelper @Inject constructor(private val fragment: Fragment) {
.setSubtitle(fragment.getString(R.string.authentication_subtitle)) .setSubtitle(fragment.getString(R.string.authentication_subtitle))
val authenticators = val authenticators =
BiometricManager.Authenticators.BIOMETRIC_WEAK or BiometricManager.Authenticators.DEVICE_CREDENTIAL BiometricManager.Authenticators.BIOMETRIC_STRONG or BiometricManager.Authenticators.DEVICE_CREDENTIAL
val canAuthenticate = val canAuthenticate =
BiometricManager.from(fragment.requireContext()).canAuthenticate(authenticators) BiometricManager.from(fragment.requireContext()).canAuthenticate(authenticators)

View File

@@ -20,7 +20,7 @@ import com.github.droidworksstudio.launcher.data.entities.AppInfo
import com.github.droidworksstudio.launcher.databinding.BottomsheetDialogBinding import com.github.droidworksstudio.launcher.databinding.BottomsheetDialogBinding
import com.github.droidworksstudio.launcher.helper.AppHelper import com.github.droidworksstudio.launcher.helper.AppHelper
import com.github.droidworksstudio.launcher.helper.BottomDialogHelper import com.github.droidworksstudio.launcher.helper.BottomDialogHelper
import com.github.droidworksstudio.launcher.helper.FingerprintHelper import com.github.droidworksstudio.launcher.helper.BiometricHelper
import com.github.droidworksstudio.launcher.listener.OnItemClickedListener import com.github.droidworksstudio.launcher.listener.OnItemClickedListener
import com.github.droidworksstudio.launcher.viewmodel.AppViewModel import com.github.droidworksstudio.launcher.viewmodel.AppViewModel
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@@ -28,7 +28,7 @@ import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class AppInfoBottomSheetFragment(private val appInfo: AppInfo) : BottomSheetDialogFragment(), class AppInfoBottomSheetFragment(private val appInfo: AppInfo) : BottomSheetDialogFragment(),
FingerprintHelper.Callback { BiometricHelper.Callback {
private var _binding: BottomsheetDialogBinding? = null private var _binding: BottomsheetDialogBinding? = null
@@ -43,7 +43,7 @@ class AppInfoBottomSheetFragment(private val appInfo: AppInfo) : BottomSheetDial
lateinit var bottomDialogHelper: BottomDialogHelper lateinit var bottomDialogHelper: BottomDialogHelper
@Inject @Inject
lateinit var fingerHelper: FingerprintHelper lateinit var fingerHelper: BiometricHelper
private var appStateClickListener: OnItemClickedListener.OnAppStateClickListener? = null private var appStateClickListener: OnItemClickedListener.OnAppStateClickListener? = null
@@ -159,7 +159,7 @@ class AppInfoBottomSheetFragment(private val appInfo: AppInfo) : BottomSheetDial
binding.bottomSheetLock.setOnClickListener { binding.bottomSheetLock.setOnClickListener {
if (appInfo.lock) { if (appInfo.lock) {
fingerHelper.startFingerprintAuth(appInfo, this) fingerHelper.startBiometricAuth(appInfo, this)
} else { } else {
appInfo.lock = true appInfo.lock = true
viewModel.updateAppLock(appInfo, appInfo.lock) viewModel.updateAppLock(appInfo, appInfo.lock)

View File

@@ -28,7 +28,7 @@ import com.github.droidworksstudio.launcher.adapter.drawer.DrawAdapter
import com.github.droidworksstudio.launcher.data.entities.AppInfo import com.github.droidworksstudio.launcher.data.entities.AppInfo
import com.github.droidworksstudio.launcher.databinding.FragmentDrawBinding import com.github.droidworksstudio.launcher.databinding.FragmentDrawBinding
import com.github.droidworksstudio.launcher.helper.AppHelper import com.github.droidworksstudio.launcher.helper.AppHelper
import com.github.droidworksstudio.launcher.helper.FingerprintHelper import com.github.droidworksstudio.launcher.helper.BiometricHelper
import com.github.droidworksstudio.launcher.helper.PreferenceHelper import com.github.droidworksstudio.launcher.helper.PreferenceHelper
import com.github.droidworksstudio.launcher.listener.OnItemClickedListener import com.github.droidworksstudio.launcher.listener.OnItemClickedListener
import com.github.droidworksstudio.launcher.listener.OnSwipeTouchListener import com.github.droidworksstudio.launcher.listener.OnSwipeTouchListener
@@ -48,7 +48,7 @@ class DrawFragment : Fragment(),
OnItemClickedListener.OnAppLongClickedListener, OnItemClickedListener.OnAppLongClickedListener,
OnItemClickedListener.BottomSheetDismissListener, OnItemClickedListener.BottomSheetDismissListener,
OnItemClickedListener.OnAppStateClickListener, OnItemClickedListener.OnAppStateClickListener,
FingerprintHelper.Callback, ScrollEventListener { BiometricHelper.Callback, ScrollEventListener {
private var _binding: FragmentDrawBinding? = null private var _binding: FragmentDrawBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
@@ -60,7 +60,7 @@ class DrawFragment : Fragment(),
lateinit var appHelper: AppHelper lateinit var appHelper: AppHelper
@Inject @Inject
lateinit var fingerHelper: FingerprintHelper lateinit var fingerHelper: BiometricHelper
private val viewModel: AppViewModel by viewModels() private val viewModel: AppViewModel by viewModels()
@@ -274,7 +274,7 @@ class DrawFragment : Fragment(),
if (!appInfo.lock) { if (!appInfo.lock) {
context.launchApp(appInfo) context.launchApp(appInfo)
} else { } else {
fingerHelper.startFingerprintAuth(appInfo, this) fingerHelper.startBiometricAuth(appInfo, this)
} }
} }

View File

@@ -23,7 +23,7 @@ import com.github.droidworksstudio.launcher.adapter.favorite.FavoriteAdapter
import com.github.droidworksstudio.launcher.data.entities.AppInfo import com.github.droidworksstudio.launcher.data.entities.AppInfo
import com.github.droidworksstudio.launcher.databinding.FragmentFavoriteBinding import com.github.droidworksstudio.launcher.databinding.FragmentFavoriteBinding
import com.github.droidworksstudio.launcher.helper.AppHelper import com.github.droidworksstudio.launcher.helper.AppHelper
import com.github.droidworksstudio.launcher.helper.FingerprintHelper import com.github.droidworksstudio.launcher.helper.BiometricHelper
import com.github.droidworksstudio.launcher.helper.PreferenceHelper import com.github.droidworksstudio.launcher.helper.PreferenceHelper
import com.github.droidworksstudio.launcher.listener.OnItemClickedListener import com.github.droidworksstudio.launcher.listener.OnItemClickedListener
import com.github.droidworksstudio.launcher.listener.OnItemMoveListener import com.github.droidworksstudio.launcher.listener.OnItemMoveListener
@@ -41,7 +41,7 @@ class FavoriteFragment : Fragment(),
OnItemClickedListener.BottomSheetDismissListener, OnItemClickedListener.BottomSheetDismissListener,
OnItemClickedListener.OnAppStateClickListener, OnItemClickedListener.OnAppStateClickListener,
OnItemMoveListener.OnItemActionListener, OnItemMoveListener.OnItemActionListener,
FingerprintHelper.Callback { BiometricHelper.Callback {
private var _binding: FragmentFavoriteBinding? = null private var _binding: FragmentFavoriteBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
@@ -54,7 +54,7 @@ class FavoriteFragment : Fragment(),
lateinit var preferenceHelper: PreferenceHelper lateinit var preferenceHelper: PreferenceHelper
@Inject @Inject
lateinit var fingerHelper: FingerprintHelper lateinit var fingerHelper: BiometricHelper
@Inject @Inject
lateinit var appHelper: AppHelper lateinit var appHelper: AppHelper
@@ -204,7 +204,7 @@ class FavoriteFragment : Fragment(),
if (!appInfo.lock) { if (!appInfo.lock) {
context.launchApp(appInfo) context.launchApp(appInfo)
} else { } else {
fingerHelper.startFingerprintAuth(appInfo, this) fingerHelper.startBiometricAuth(appInfo, this)
} }
} }

View File

@@ -20,7 +20,7 @@ import com.github.droidworksstudio.launcher.adapter.hidden.HiddenAdapter
import com.github.droidworksstudio.launcher.data.entities.AppInfo import com.github.droidworksstudio.launcher.data.entities.AppInfo
import com.github.droidworksstudio.launcher.databinding.FragmentHiddenBinding import com.github.droidworksstudio.launcher.databinding.FragmentHiddenBinding
import com.github.droidworksstudio.launcher.helper.AppHelper import com.github.droidworksstudio.launcher.helper.AppHelper
import com.github.droidworksstudio.launcher.helper.FingerprintHelper import com.github.droidworksstudio.launcher.helper.BiometricHelper
import com.github.droidworksstudio.launcher.helper.PreferenceHelper import com.github.droidworksstudio.launcher.helper.PreferenceHelper
import com.github.droidworksstudio.launcher.listener.OnItemClickedListener import com.github.droidworksstudio.launcher.listener.OnItemClickedListener
import com.github.droidworksstudio.launcher.listener.OnSwipeTouchListener import com.github.droidworksstudio.launcher.listener.OnSwipeTouchListener
@@ -35,7 +35,7 @@ class HiddenFragment : Fragment(),
OnItemClickedListener.OnAppLongClickedListener, OnItemClickedListener.OnAppLongClickedListener,
OnItemClickedListener.BottomSheetDismissListener, OnItemClickedListener.BottomSheetDismissListener,
OnItemClickedListener.OnAppStateClickListener, OnItemClickedListener.OnAppStateClickListener,
FingerprintHelper.Callback { BiometricHelper.Callback {
private var _binding: FragmentHiddenBinding? = null private var _binding: FragmentHiddenBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
@@ -45,7 +45,7 @@ class HiddenFragment : Fragment(),
private lateinit var context: Context private lateinit var context: Context
@Inject @Inject
lateinit var fingerHelper: FingerprintHelper lateinit var fingerHelper: BiometricHelper
@Inject @Inject
lateinit var appHelper: AppHelper lateinit var appHelper: AppHelper
@@ -121,7 +121,7 @@ class HiddenFragment : Fragment(),
if (!appInfo.lock) { if (!appInfo.lock) {
context.launchApp(appInfo) context.launchApp(appInfo)
} else { } else {
fingerHelper.startFingerprintAuth(appInfo, this) fingerHelper.startBiometricAuth(appInfo, this)
} }
} }

View File

@@ -35,7 +35,7 @@ import com.github.droidworksstudio.launcher.adapter.home.HomeAdapter
import com.github.droidworksstudio.launcher.data.entities.AppInfo import com.github.droidworksstudio.launcher.data.entities.AppInfo
import com.github.droidworksstudio.launcher.databinding.FragmentHomeBinding import com.github.droidworksstudio.launcher.databinding.FragmentHomeBinding
import com.github.droidworksstudio.launcher.helper.AppHelper import com.github.droidworksstudio.launcher.helper.AppHelper
import com.github.droidworksstudio.launcher.helper.FingerprintHelper import com.github.droidworksstudio.launcher.helper.BiometricHelper
import com.github.droidworksstudio.launcher.helper.PreferenceHelper import com.github.droidworksstudio.launcher.helper.PreferenceHelper
import com.github.droidworksstudio.launcher.helper.UpdateManagerHelper import com.github.droidworksstudio.launcher.helper.UpdateManagerHelper
import com.github.droidworksstudio.launcher.listener.OnItemClickedListener import com.github.droidworksstudio.launcher.listener.OnItemClickedListener
@@ -62,7 +62,7 @@ class HomeFragment : Fragment(),
OnItemClickedListener.OnAppLongClickedListener, OnItemClickedListener.OnAppLongClickedListener,
OnItemClickedListener.BottomSheetDismissListener, OnItemClickedListener.BottomSheetDismissListener,
OnItemClickedListener.OnAppStateClickListener, OnItemClickedListener.OnAppStateClickListener,
FingerprintHelper.Callback, ScrollEventListener { BiometricHelper.Callback, ScrollEventListener {
private var _binding: FragmentHomeBinding? = null private var _binding: FragmentHomeBinding? = null
@@ -76,7 +76,7 @@ class HomeFragment : Fragment(),
@Inject @Inject
lateinit var fingerHelper: FingerprintHelper lateinit var fingerHelper: BiometricHelper
private val viewModel: AppViewModel by viewModels() private val viewModel: AppViewModel by viewModels()
private val preferenceViewModel: PreferenceViewModel by viewModels() private val preferenceViewModel: PreferenceViewModel by viewModels()
@@ -283,7 +283,7 @@ class HomeFragment : Fragment(),
if (!appInfo.lock) if (!appInfo.lock)
context.launchApp(appInfo) context.launchApp(appInfo)
else else
fingerHelper.startFingerprintAuth(appInfo, this) fingerHelper.startBiometricAuth(appInfo, this)
} }
private fun showSelectedApp(appInfo: AppInfo) { private fun showSelectedApp(appInfo: AppInfo) {
@@ -455,7 +455,7 @@ class HomeFragment : Fragment(),
}) })
if (preferenceHelper.settingsLock) { if (preferenceHelper.settingsLock) {
fingerHelper.startFingerprintSettingsAuth(R.id.action_HomeFragment_to_SettingsFragment) fingerHelper.startBiometricSettingsAuth(R.id.action_HomeFragment_to_SettingsFragment)
} else { } else {
val actionTypeNavOptions: NavOptions = val actionTypeNavOptions: NavOptions =
appHelper.getActionType(Constants.Swipe.DoubleTap) appHelper.getActionType(Constants.Swipe.DoubleTap)