Fix biometric auth on older Android, Intro video only on first launch
This commit is contained in:
parent
fe46e436f4
commit
179c321c43
17
.idea/deploymentTargetDropDown.xml
Normal file
17
.idea/deploymentTargetDropDown.xml
Normal 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>
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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() {
|
||||||
|
@ -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);
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user