Fix biometric auth on older Android, Intro video only on first launch

This commit is contained in:
MrLetsplay 2023-11-30 20:32:54 +01:00
parent fe46e436f4
commit 179c321c43
Signed by: mr
SSH Key Fingerprint: SHA256:92jBH80vpXyaZHjaIl47pjRq+Yt7XGTArqQg1V7hSqg
5 changed files with 40 additions and 7 deletions

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="$USER_HOME$/.android/avd/Pixel_2_API_23.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-11-30T19:16:03.526835375Z" />
</component>
</project>

View File

@ -249,6 +249,7 @@ public class MainActivity extends BaseActivity {
if(SettingsUtil.isFirstLaunch(this) && SettingsUtil.getGroups(this).isEmpty()) { if(SettingsUtil.isFirstLaunch(this) && SettingsUtil.getGroups(this).isEmpty()) {
SettingsUtil.addGroup(this, UUID.randomUUID().toString(), "My Codes"); SettingsUtil.addGroup(this, UUID.randomUUID().toString(), "My Codes");
DialogUtil.showYesNo(this, R.string.enable_encryption_title, R.string.enable_encryption_message, () -> NavigationUtil.navigate(this, SettingsFragment.class, null), null); DialogUtil.showYesNo(this, R.string.enable_encryption_title, R.string.enable_encryption_message, () -> NavigationUtil.navigate(this, SettingsFragment.class, null), null);
SettingsUtil.setEnableIntroVideo(this, false);
SettingsUtil.setFirstLaunch(this, false); SettingsUtil.setFirstLaunch(this, false);
} }

View File

@ -13,10 +13,10 @@ public enum AppLocale {
SYSTEM_DEFAULT(R.string.locale_system_default), SYSTEM_DEFAULT(R.string.locale_system_default),
ENGLISH(Locale.ENGLISH), ENGLISH(Locale.ENGLISH),
GERMAN(Locale.GERMAN), GERMAN(Locale.GERMAN),
FRENCH(Locale.FRENCH), FRENCH(Locale.FRENCH, true),
POLISH(new Locale("pl")), POLISH(new Locale("pl"), true),
UKRAINIAN(new Locale("uk")), UKRAINIAN(new Locale("uk"), true),
; ;
@StringRes @StringRes
@ -24,18 +24,28 @@ public enum AppLocale {
private final Locale locale; private final Locale locale;
private final boolean experimental;
AppLocale(@StringRes int name) { AppLocale(@StringRes int name) {
this.name = name; this.name = name;
this.locale = null; this.locale = null;
this.experimental = false;
} }
AppLocale(Locale locale) { AppLocale(Locale locale) {
this.name = 0; this.name = 0;
this.locale = locale; this.locale = locale;
this.experimental = false;
}
AppLocale(Locale locale, boolean experimental) {
this.name = 0;
this.locale = locale;
this.experimental = experimental;
} }
public String getName(Context context) { public String getName(Context context) {
return locale == null ? context.getString(name) : locale.getDisplayName(locale); return (locale == null ? context.getString(name) : locale.getDisplayName(locale)) + (experimental ? " (in progress)" : "");
} }
public Locale getLocale() { public Locale getLocale() {

View File

@ -18,8 +18,12 @@ import java.util.concurrent.Executor;
public class BiometricUtil { public class BiometricUtil {
private static int getAuthenticationMethod() {
return Build.VERSION.SDK_INT <= Build.VERSION_CODES.P ? BIOMETRIC_STRONG : BIOMETRIC_STRONG | DEVICE_CREDENTIAL;
}
public static boolean isSupported(Context context) { public static boolean isSupported(Context context) {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && BiometricManager.from(context).canAuthenticate(BIOMETRIC_STRONG | DEVICE_CREDENTIAL) == BiometricManager.BIOMETRIC_SUCCESS; return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && BiometricManager.from(context).canAuthenticate(getAuthenticationMethod()) == BiometricManager.BIOMETRIC_SUCCESS;
} }
public static void promptBiometricAuth(FragmentActivity context, Runnable success, Runnable failure) { public static void promptBiometricAuth(FragmentActivity context, Runnable success, Runnable failure) {
@ -44,7 +48,8 @@ public class BiometricUtil {
BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder() BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder()
.setTitle(context.getString(R.string.app_name)) .setTitle(context.getString(R.string.app_name))
.setSubtitle(context.getString(R.string.biometric_lock_subtitle)) .setSubtitle(context.getString(R.string.biometric_lock_subtitle))
.setAllowedAuthenticators(BIOMETRIC_STRONG | DEVICE_CREDENTIAL) .setNegativeButtonText(context.getString(R.string.cancel))
.setAllowedAuthenticators(getAuthenticationMethod())
.build(); .build();
prompt.authenticate(info); prompt.authenticate(info);

View File

@ -106,7 +106,7 @@
<string name="error_icon_pack_exists">Набір іконок, який ви намагаєтеся імпортувати, вже існує. Імпортовано: %s (версія %d) Існуючий: %s (версія %d) Що ви хочете зробити?</string> <string name="error_icon_pack_exists">Набір іконок, який ви намагаєтеся імпортувати, вже існує. Імпортовано: %s (версія %d) Існуючий: %s (версія %d) Що ви хочете зробити?</string>
<string name="broken_icon_packs_title">Пошкоджені пакети іконок</string> <string name="broken_icon_packs_title">Пошкоджені пакети іконок</string>
<string name="broken_icon_packs_message">Деякі пакунки іконок не вдалося завантажити. Ви хочете видалити непрацюючі пакунки піктограм?</string> <string name="broken_icon_packs_message">Деякі пакунки іконок не вдалося завантажити. Ви хочете видалити непрацюючі пакунки піктограм?</string>
<string name="icon_pack_imported">Пакет іконок з імпортованими піктограмами %dПакет іконок з імпортованими піктограмами %d</string> <string name="icon_pack_imported">Пакет іконок з імпортованими піктограмами %d</string>
<string name="enable_encryption_message">Рекомендується ввімкнути шифрування, щоб підвищити безпеку програми. Ви хочете перейти до налаштувань, щоб увімкнути шифрування?</string> <string name="enable_encryption_message">Рекомендується ввімкнути шифрування, щоб підвищити безпеку програми. Ви хочете перейти до налаштувань, щоб увімкнути шифрування?</string>
<string name="enable_encryption_title">Увімкнути шифрування</string> <string name="enable_encryption_title">Увімкнути шифрування</string>
<string name="back_pressed">Натисніть ще раз, щоб вийти</string> <string name="back_pressed">Натисніть ще раз, щоб вийти</string>