From 830bb29b8d417512287d94f095c7f1abeff97b9f Mon Sep 17 00:00:00 2001 From: JuancaG05 Date: Mon, 10 May 2021 11:47:46 +0200 Subject: [PATCH 1/5] Biometrics preference hidden if no hardware is detected --- .../fragments/SettingsSecurityFragment.kt | 30 +++++++++---------- .../src/main/res/values-ar/strings.xml | 3 +- .../src/main/res/values-bg-rBG/strings.xml | 3 +- .../src/main/res/values-ca/strings.xml | 3 +- .../src/main/res/values-cs-rCZ/strings.xml | 3 +- .../src/main/res/values-de-rCH/strings.xml | 3 +- .../src/main/res/values-de-rDE/strings.xml | 3 +- .../src/main/res/values-de/strings.xml | 3 +- .../src/main/res/values-en-rGB/strings.xml | 3 +- .../src/main/res/values-es-rAR/strings.xml | 3 +- .../src/main/res/values-es-rMX/strings.xml | 3 +- .../src/main/res/values-es/strings.xml | 3 +- .../src/main/res/values-eu/strings.xml | 3 +- .../src/main/res/values-gl/strings.xml | 3 +- .../src/main/res/values-he/strings.xml | 3 +- .../src/main/res/values-id/strings.xml | 3 +- .../src/main/res/values-it/strings.xml | 3 +- .../src/main/res/values-nb-rNO/strings.xml | 3 +- .../src/main/res/values-nl/strings.xml | 3 +- .../src/main/res/values-pl/strings.xml | 3 +- .../src/main/res/values-pt-rBR/strings.xml | 3 +- .../src/main/res/values-ru/strings.xml | 3 +- .../src/main/res/values-sq/strings.xml | 3 +- .../src/main/res/values-th-rTH/strings.xml | 3 +- .../src/main/res/values-tr/strings.xml | 3 +- .../src/main/res/values-zh-rTW/strings.xml | 3 +- owncloudApp/src/main/res/values/strings.xml | 1 - 27 files changed, 39 insertions(+), 67 deletions(-) diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/ui/settings/fragments/SettingsSecurityFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/ui/settings/fragments/SettingsSecurityFragment.kt index 2d767d7ded0..0501024f115 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/presentation/ui/settings/fragments/SettingsSecurityFragment.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/ui/settings/fragments/SettingsSecurityFragment.kt @@ -155,25 +155,23 @@ class SettingsSecurityFragment : PreferenceFragmentCompat() { } else if (prefBiometric != null) { biometricManager = BiometricManager.getBiometricManager(activity) - // Disable biometric lock if Passcode or Pattern locks are disabled - if (prefPasscode?.isChecked == false && prefPattern?.isChecked == false) { - disableBiometric() - } - prefBiometric?.setOnPreferenceChangeListener { preference: Preference?, newValue: Any -> - val incomingValue = newValue as Boolean - - // Biometric not supported - if (incomingValue && biometricManager?.isHardwareDetected == false) { - showMessageInSnackbar(getString(R.string.biometric_not_hardware_detected)) - return@setOnPreferenceChangeListener false + if (biometricManager?.isHardwareDetected == false) { // Biometric not supported + screenSecurity?.removePreference(prefBiometric) + } else { + if (prefPasscode?.isChecked == false && prefPattern?.isChecked == false) { // Disable biometric lock if Passcode or Pattern locks are disabled + disableBiometric() } - // No biometric enrolled yet - if (incomingValue && biometricManager?.hasEnrolledBiometric() == false) { - showMessageInSnackbar(getString(R.string.biometric_not_enrolled)) - return@setOnPreferenceChangeListener false + prefBiometric?.setOnPreferenceChangeListener { preference: Preference?, newValue: Any -> + val incomingValue = newValue as Boolean + + // No biometric enrolled yet + if (incomingValue && biometricManager?.hasEnrolledBiometric() == false) { + showMessageInSnackbar(getString(R.string.biometric_not_enrolled)) + return@setOnPreferenceChangeListener false + } + true } - true } } diff --git a/owncloudApp/src/main/res/values-ar/strings.xml b/owncloudApp/src/main/res/values-ar/strings.xml index 4d83781bfce..52cf00b16f5 100644 --- a/owncloudApp/src/main/res/values-ar/strings.xml +++ b/owncloudApp/src/main/res/values-ar/strings.xml @@ -231,8 +231,7 @@ أزِل رمز مرورك رموز المرور غير متطابقة رمز مرور غير صحيح - لا يدعم هذا الجهاز المصادقة البيولوجية - سجِّل بيانات اعتماد بيولوجية واحدة على الأقل لاستخدام هذه الميزة + سجِّل بيانات اعتماد بيولوجية واحدة على الأقل لاستخدام هذه الميزة تسجيل دخول بيولوجي سجِّل الدخول باستخدام بيانات اعتماد بيولوجية %1$s مُشغل الموسيقى diff --git a/owncloudApp/src/main/res/values-bg-rBG/strings.xml b/owncloudApp/src/main/res/values-bg-rBG/strings.xml index 371dbadc98f..076ecb0b9fd 100644 --- a/owncloudApp/src/main/res/values-bg-rBG/strings.xml +++ b/owncloudApp/src/main/res/values-bg-rBG/strings.xml @@ -228,8 +228,7 @@ Премахване на паролата Паролите не съвпадат Грешна парола - Това устройство не поддържа биометрична автенификация. - Регистрирайте поне един брой биометрични данни за да използвате тази функция + Регистрирайте поне един брой биометрични данни за да използвате тази функция Биометричен вход Вход чрез биометрични данни %1$s музикален плеър diff --git a/owncloudApp/src/main/res/values-ca/strings.xml b/owncloudApp/src/main/res/values-ca/strings.xml index 3be931561f9..b2f2cba5ce2 100644 --- a/owncloudApp/src/main/res/values-ca/strings.xml +++ b/owncloudApp/src/main/res/values-ca/strings.xml @@ -229,8 +229,7 @@ Elimina el codi d\'accés Els codis d\'accés no coincideixen Codi d\'accés incorrecte - Aquest dispositiu no admet autentificació biomètrica. - Registrar al menys una característica biomètrica per poder utilitzar aquesta funció. + Registrar al menys una característica biomètrica per poder utilitzar aquesta funció. Inici de sessió biomètric. Inicieu la sessió amb la vostra credencial biomètrica reproductor de música %1$s diff --git a/owncloudApp/src/main/res/values-cs-rCZ/strings.xml b/owncloudApp/src/main/res/values-cs-rCZ/strings.xml index 55faed6e102..41e7f208390 100644 --- a/owncloudApp/src/main/res/values-cs-rCZ/strings.xml +++ b/owncloudApp/src/main/res/values-cs-rCZ/strings.xml @@ -229,8 +229,7 @@ Odstraňte svůj bezpečnostní kód Bezpečnostní kód se liší Nesprávný bezpečnostní kód - Toto zařízení nepodoporuje biometrickou autentizaci - Povolte alespoň jeden biometrický způsob ověření k používání této specialitky + Povolte alespoň jeden biometrický způsob ověření k používání této specialitky Biometrické přihlášení Přihlásit se s použitím biometrických přihlašovacích údajů Hudební přehrávač %1$s diff --git a/owncloudApp/src/main/res/values-de-rCH/strings.xml b/owncloudApp/src/main/res/values-de-rCH/strings.xml index 1d2632aa352..d97e70bc2e1 100644 --- a/owncloudApp/src/main/res/values-de-rCH/strings.xml +++ b/owncloudApp/src/main/res/values-de-rCH/strings.xml @@ -230,8 +230,7 @@ PIN entfernen Die PINs stimmen nicht überein PIN nicht korrekt - Dieses Gerät unterstützt keine biometrische Authentifizierung - Registriere mindestens ein biometrisches Merkmal, um diese Funktion zu nutzen + Registriere mindestens ein biometrisches Merkmal, um diese Funktion zu nutzen Biometrisches Einloggen Melde dich mit deinem biometrischem Merkmal an %1$s Musik Player diff --git a/owncloudApp/src/main/res/values-de-rDE/strings.xml b/owncloudApp/src/main/res/values-de-rDE/strings.xml index d2f3fe5ab7f..e6731fedf1c 100644 --- a/owncloudApp/src/main/res/values-de-rDE/strings.xml +++ b/owncloudApp/src/main/res/values-de-rDE/strings.xml @@ -232,8 +232,7 @@ PIN entfernen Die PINs stimmen nicht überein PIN nicht korrekt - Dieses Gerät unterstützt keine biometrische Authentifizierung - Registrieren Sie mindestens ein biometrisches Merkmal, um diese Funktion zu nutzen + Registrieren Sie mindestens ein biometrisches Merkmal, um diese Funktion zu nutzen Biometrisches Einloggen Melden Sie sich mit Ihrem biometrischen Merkmal an %1$s Musikplayer diff --git a/owncloudApp/src/main/res/values-de/strings.xml b/owncloudApp/src/main/res/values-de/strings.xml index 93aae371fb6..2e425af2da5 100644 --- a/owncloudApp/src/main/res/values-de/strings.xml +++ b/owncloudApp/src/main/res/values-de/strings.xml @@ -232,8 +232,7 @@ PIN entfernen Die PINs stimmen nicht überein PIN nicht korrekt - Dieses Gerät unterstützt keine biometrische Authentifizierung - Registriere mindestens ein biometrisches Merkmal, um diese Funktion zu nutzen + Registriere mindestens ein biometrisches Merkmal, um diese Funktion zu nutzen Biometrisches Einloggen Melde dich mit deinem biometrischem Merkmal an %1$s Musik Player diff --git a/owncloudApp/src/main/res/values-en-rGB/strings.xml b/owncloudApp/src/main/res/values-en-rGB/strings.xml index dd89ce4e814..9aab0af2f37 100644 --- a/owncloudApp/src/main/res/values-en-rGB/strings.xml +++ b/owncloudApp/src/main/res/values-en-rGB/strings.xml @@ -231,8 +231,7 @@ Remove your passcode The passcodes are not the same Incorrect passcode - This device doesn\'t support biometric authentication - Register at least one biometric to use this feature + Register at least one biometric to use this feature Biometric log in Log in using your biometric credential %1$s music player diff --git a/owncloudApp/src/main/res/values-es-rAR/strings.xml b/owncloudApp/src/main/res/values-es-rAR/strings.xml index e2483fafa80..ad25295039a 100644 --- a/owncloudApp/src/main/res/values-es-rAR/strings.xml +++ b/owncloudApp/src/main/res/values-es-rAR/strings.xml @@ -234,8 +234,7 @@ Abajo, encontrás la lista con los enlaces a los archivos locales y remotos en % Eliminar tu contraseña Las contraseñas no son iguales Contraseña incorrecta - Este dispositivo no soporta autenticación biométrica. - Registra al menos un dato biométrico para usar esta funcionalidad. + Registra al menos un dato biométrico para usar esta funcionalidad. Inicio de sesión biométrico Iniciá sesión usando tu credencial biométrica Reproductor de música %1$s diff --git a/owncloudApp/src/main/res/values-es-rMX/strings.xml b/owncloudApp/src/main/res/values-es-rMX/strings.xml index 21dcccfd1d1..92ddb1b044d 100644 --- a/owncloudApp/src/main/res/values-es-rMX/strings.xml +++ b/owncloudApp/src/main/res/values-es-rMX/strings.xml @@ -210,8 +210,7 @@ Borre su contraseña Los códigos de acceso no son idénticos Código de acceso incorrecto - Este dispositivo no tiene soporte para autenticación biométrica - Iniciar sesión con su credencial biométrica + Iniciar sesión con su credencial biométrica Reproductor de música %1$s %1$s (reproduciendo) %1$s (cargando) diff --git a/owncloudApp/src/main/res/values-es/strings.xml b/owncloudApp/src/main/res/values-es/strings.xml index 65dcc8e1ed3..e13a4154ea6 100644 --- a/owncloudApp/src/main/res/values-es/strings.xml +++ b/owncloudApp/src/main/res/values-es/strings.xml @@ -232,8 +232,7 @@ Borre su contraseña Los códigos de acceso no son idénticos Código de acceso incorrecto - Este dispositivo no soporta autenticación biométrica - Registra al menos una característica biométrica para usarla + Registra al menos una característica biométrica para usarla Inicio de sesión biométrico Inicia sesión usando tú credencial biométrica Reproductor de música %1$s diff --git a/owncloudApp/src/main/res/values-eu/strings.xml b/owncloudApp/src/main/res/values-eu/strings.xml index 4f9d085ccb3..1bdf7132d4e 100644 --- a/owncloudApp/src/main/res/values-eu/strings.xml +++ b/owncloudApp/src/main/res/values-eu/strings.xml @@ -181,8 +181,7 @@ Ezabatu zure pasahitza Pasahitzak ez dira berdinak Pasahitza ez da zuzena - Gailu honek ez du hatz-marka bidezko autentikazioa onartzen. - %1$s musika erreproduzigailua + %1$s musika erreproduzigailua %1$s (jotzen) %1$s (kargatzen) %1$s erreprodukzioa amaitua diff --git a/owncloudApp/src/main/res/values-gl/strings.xml b/owncloudApp/src/main/res/values-gl/strings.xml index a917e19da05..a4f1606f8e6 100644 --- a/owncloudApp/src/main/res/values-gl/strings.xml +++ b/owncloudApp/src/main/res/values-gl/strings.xml @@ -233,8 +233,7 @@ Descárgueo de aquí: %2$s Retirar o seu código de seguridade Os códigos de seguridade non son iguais Código de seguridade incorrecto - Este dispositivo non admite a autenticación biométrica - Rexístrese polo menos unha biometría para usar esta característica + Rexístrese polo menos unha biometría para usar esta característica Acceso biométrico Acceda empregando a súa credencial biométrica %1$s reprodutor musical diff --git a/owncloudApp/src/main/res/values-he/strings.xml b/owncloudApp/src/main/res/values-he/strings.xml index 3c338578c3f..fe893bcf093 100644 --- a/owncloudApp/src/main/res/values-he/strings.xml +++ b/owncloudApp/src/main/res/values-he/strings.xml @@ -232,8 +232,7 @@ יש להסיר את הקוד שלך הקודים אינם זהים קוד שגוי - התקן זה אינו תומך באימות ביומטרי - יש לרשום לפחות מנגנון ביומטרי אחד לשימוש בתכונה זו + יש לרשום לפחות מנגנון ביומטרי אחד לשימוש בתכונה זו התחברות ביומטרית התחברות תוך שימוש באישורי אימות ביומטריים נגנן המוזיקה %1$s diff --git a/owncloudApp/src/main/res/values-id/strings.xml b/owncloudApp/src/main/res/values-id/strings.xml index 53010757237..b0dcb06b8b6 100644 --- a/owncloudApp/src/main/res/values-id/strings.xml +++ b/owncloudApp/src/main/res/values-id/strings.xml @@ -228,8 +228,7 @@ Hapus kode sandi Anda Kode sandi tidak sama Kode sandi salah - Gawai Anda tidak mendukung otentikasi biometrik - Daftar dengan setidaknya satu biometrik untuk menggunakan fitur ini + Daftar dengan setidaknya satu biometrik untuk menggunakan fitur ini Masuk dengan biometrik Pemutar musik %1$s %1$s (dimainkan) diff --git a/owncloudApp/src/main/res/values-it/strings.xml b/owncloudApp/src/main/res/values-it/strings.xml index bddde52846e..de42967f65f 100644 --- a/owncloudApp/src/main/res/values-it/strings.xml +++ b/owncloudApp/src/main/res/values-it/strings.xml @@ -229,8 +229,7 @@ Rimuovi il tuo codice segreto I codici segreti non corrispondono Codice segreto non corretto - Questo dispositivo non supporta l\'autenticazione biometrica - Registrare almeno un impronta per utilizzare questa funzione + Registrare almeno un impronta per utilizzare questa funzione Accesso biometrico Accedi utilizzando le tue credenziali biometriche Lettore musicale %1$s diff --git a/owncloudApp/src/main/res/values-nb-rNO/strings.xml b/owncloudApp/src/main/res/values-nb-rNO/strings.xml index f307454f3f0..d0cbb3d412d 100644 --- a/owncloudApp/src/main/res/values-nb-rNO/strings.xml +++ b/owncloudApp/src/main/res/values-nb-rNO/strings.xml @@ -224,8 +224,7 @@ Fjern passordet ditt Passordene er ikke like Feil passord - Denne enheten støtter ikke autentisering ved biometri - Registrer minst 1 biometri for å bruke dette + Registrer minst 1 biometri for å bruke dette Biometrisk innlogging Logg inn med din biometri %1$s musikkspiller diff --git a/owncloudApp/src/main/res/values-nl/strings.xml b/owncloudApp/src/main/res/values-nl/strings.xml index ffecbd13470..e5291498366 100644 --- a/owncloudApp/src/main/res/values-nl/strings.xml +++ b/owncloudApp/src/main/res/values-nl/strings.xml @@ -233,8 +233,7 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Verwijderen pincode De pincodes komen niet overeen Onjuiste pincode - Dit apparaat ondersteunt geen biometrische authenticatie - Registreer ten minste één biometrie om deze functie te gebruiken + Registreer ten minste één biometrie om deze functie te gebruiken Biometrisch aanmelden Aanmelden met uw biometrische gegevens %1$s muziekspeler diff --git a/owncloudApp/src/main/res/values-pl/strings.xml b/owncloudApp/src/main/res/values-pl/strings.xml index 24562d4d8f6..0c3999df82f 100644 --- a/owncloudApp/src/main/res/values-pl/strings.xml +++ b/owncloudApp/src/main/res/values-pl/strings.xml @@ -224,8 +224,7 @@ Usuń swój kod PIN Podane hasła nie są takie same Kod PIN nieprawidłowy - To urządzenie nie wspiera uwierzytelniania biometrycznego - Zarejestruj co najmniej jedno uwierzytelnienie biometryczne + Zarejestruj co najmniej jedno uwierzytelnienie biometryczne Zalogowano biometrycznie %1$s odtwarzacz muzyki %1$s (odtwarzany) diff --git a/owncloudApp/src/main/res/values-pt-rBR/strings.xml b/owncloudApp/src/main/res/values-pt-rBR/strings.xml index 08abc759c53..3d60c09f454 100644 --- a/owncloudApp/src/main/res/values-pt-rBR/strings.xml +++ b/owncloudApp/src/main/res/values-pt-rBR/strings.xml @@ -245,8 +245,7 @@ Código de acesso incorreto Ocorreu um erro ao configurar o bloqueio da senha Ocorreu um erro ao remover o bloqueio da senha - Este dispositivo não suporta a autenticação biométrica - Registre pelo menos uma biométria para usar esse recurso + Registre pelo menos uma biométria para usar esse recurso Conexão biométrica Conectar usando sua credencial biométrica %1$s reprodutor de música diff --git a/owncloudApp/src/main/res/values-ru/strings.xml b/owncloudApp/src/main/res/values-ru/strings.xml index 7972ae3496c..25e83d08241 100644 --- a/owncloudApp/src/main/res/values-ru/strings.xml +++ b/owncloudApp/src/main/res/values-ru/strings.xml @@ -233,8 +233,7 @@ Убрать код Коды не совпадают Некоррентный код - Это устройство не поддерживает биометрическую аутентификацию - Чтобы пользоваться этой возможностью, зарегистрируйте хотя-бы одну биометрию + Чтобы пользоваться этой возможностью, зарегистрируйте хотя-бы одну биометрию Биометрический вход Вход с использованием ваших индивидуальных биометрических данных %1$s аудиоплеер diff --git a/owncloudApp/src/main/res/values-sq/strings.xml b/owncloudApp/src/main/res/values-sq/strings.xml index 1657151d87b..1273fb9e496 100644 --- a/owncloudApp/src/main/res/values-sq/strings.xml +++ b/owncloudApp/src/main/res/values-sq/strings.xml @@ -245,8 +245,7 @@ Kodkalim i pasaktë Ndodhi një gabim teksa ujdisej kyçje frazëkalimi Ndodhi një gabim teksa hiqej kyçje frazëkalimi - Kjo pajisje nuk mbulon mirëfilltësime biometrike - Që të përdorni këtë veçori, regjistroni të paktën një palë kredenciale biometrike + Që të përdorni këtë veçori, regjistroni të paktën një palë kredenciale biometrike Hyrje biometrike Bëni hyrjen duke përdorur kredencialet tuaja biometrike Lojtësi %1$s i muzikës diff --git a/owncloudApp/src/main/res/values-th-rTH/strings.xml b/owncloudApp/src/main/res/values-th-rTH/strings.xml index e3656c17f3f..313d7a0b30a 100644 --- a/owncloudApp/src/main/res/values-th-rTH/strings.xml +++ b/owncloudApp/src/main/res/values-th-rTH/strings.xml @@ -232,8 +232,7 @@ ลบรหัสปลดล็อคของคุณ รหัสปลดล็อคของคุณไม่ตรงกัน รหัสปลดล็อคไม่ถูกต้อง - อุปกรณ์นี้ไม่รองรับการใช้งานไบโอเมตริกซ์ - จำเป็นต้องเพิ่มอย่างน้อยหนึ่งไบโอเมตริกซ์เพื่อใช้เปิดการใช้งานฟีดเจอร์นี้ + จำเป็นต้องเพิ่มอย่างน้อยหนึ่งไบโอเมตริกซ์เพื่อใช้เปิดการใช้งานฟีดเจอร์นี้ เข้าสู่ระบบด้วยไบโอเมตริกซ์ เข้าสู่ระบบโดยใช้ไบโอเมตริกซ์ของคุณ เล่นเพลง %1$s diff --git a/owncloudApp/src/main/res/values-tr/strings.xml b/owncloudApp/src/main/res/values-tr/strings.xml index 0611c92de5f..e3726d7c9a7 100644 --- a/owncloudApp/src/main/res/values-tr/strings.xml +++ b/owncloudApp/src/main/res/values-tr/strings.xml @@ -230,8 +230,7 @@ Parola kodunuzu kaldırın Parola kodları aynı değil Hatalı parola kodu - Bu cihaz biyometrik kimlik doğrulamayı desteklemiyor - Bu özelliği kullanmak için en az bir biyometrik giriş kaydedilmeli + Bu özelliği kullanmak için en az bir biyometrik giriş kaydedilmeli Biyometrik giriş yap Biyometrik kimlik bilgilerinizi kullanarak giriş yapın %1$s müzik çalar diff --git a/owncloudApp/src/main/res/values-zh-rTW/strings.xml b/owncloudApp/src/main/res/values-zh-rTW/strings.xml index 42c32165edd..dbac1343cda 100644 --- a/owncloudApp/src/main/res/values-zh-rTW/strings.xml +++ b/owncloudApp/src/main/res/values-zh-rTW/strings.xml @@ -231,8 +231,7 @@ 移除您的密碼鎖密碼 密碼不相符 不正確的密碼 - 此裝置不支持生物特徵驗證 - 註冊至少一個生物特徵以使用此功能 + 註冊至少一個生物特徵以使用此功能 生物識別登入 登入使用您的生物特徵憑證 %1$s 音樂播放器 diff --git a/owncloudApp/src/main/res/values/strings.xml b/owncloudApp/src/main/res/values/strings.xml index 54d2e9dd64d..d7339f48c0b 100644 --- a/owncloudApp/src/main/res/values/strings.xml +++ b/owncloudApp/src/main/res/values/strings.xml @@ -252,7 +252,6 @@ An error occurred while setting the passcode lock An error occurred while removing the passcode lock - This device doesn\'t support biometric authentication Register at least one biometric to use this feature Biometric log in Log in using your biometric credential From fc76697b2ca9528c6fe0e2ba922fece8b0f45a3e Mon Sep 17 00:00:00 2001 From: JuancaG05 Date: Mon, 10 May 2021 11:59:39 +0200 Subject: [PATCH 2/5] Adapted UI tests --- .../security/SettingsSecurityFragmentTest.kt | 154 ++++++++++++------ 1 file changed, 102 insertions(+), 52 deletions(-) diff --git a/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt b/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt index 91ff5abd8f1..4ae651a68e8 100644 --- a/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt +++ b/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt @@ -51,6 +51,8 @@ import io.mockk.mockkStatic import org.hamcrest.Matchers.not import org.junit.After import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test @@ -65,7 +67,7 @@ class SettingsSecurityFragmentTest { private lateinit var prefPasscode: CheckBoxPreference private lateinit var prefPattern: CheckBoxPreference - private lateinit var prefBiometric: CheckBoxPreference + private var prefBiometric: CheckBoxPreference? = null private lateinit var prefTouchesWithOtherVisibleWindows: CheckBoxPreference private lateinit var biometricManager: BiometricManager @@ -81,11 +83,9 @@ class SettingsSecurityFragmentTest { context = InstrumentationRegistry.getInstrumentation().targetContext securityViewModel = mockk(relaxUnitFun = true) mockkStatic(BiometricManager::class) - biometricManager = mockk() + biometricManager = mockk(relaxUnitFun = true) every { BiometricManager.getBiometricManager(any()) } returns biometricManager - every { biometricManager.onActivityStarted(any()) } returns Unit - every { biometricManager.onActivityStopped(any()) } returns Unit stopKoin() @@ -100,15 +100,6 @@ class SettingsSecurityFragmentTest { ) } - fragmentScenario = launchFragmentInContainer(themeResId = R.style.Theme_ownCloud) - fragmentScenario.onFragment { fragment -> - prefPasscode = fragment.findPreference(PassCodeActivity.PREFERENCE_SET_PASSCODE)!! - prefPattern = fragment.findPreference(PatternLockActivity.PREFERENCE_SET_PATTERN)!! - prefBiometric = fragment.findPreference(BiometricActivity.PREFERENCE_SET_BIOMETRIC)!! - prefTouchesWithOtherVisibleWindows = - fragment.findPreference(SettingsSecurityFragment.PREFERENCE_TOUCHES_WITH_OTHER_VISIBLE_WINDOWS)!! - } - Intents.init() } @@ -118,8 +109,20 @@ class SettingsSecurityFragmentTest { PreferenceManager.getDefaultSharedPreferences(context).edit().clear().commit() } - @Test - fun securityView() { + private fun launchTest(withBiometrics: Boolean = true) { + every { biometricManager.isHardwareDetected } returns withBiometrics + + fragmentScenario = launchFragmentInContainer(themeResId = R.style.Theme_ownCloud) + fragmentScenario.onFragment { fragment -> + prefPasscode = fragment.findPreference(PassCodeActivity.PREFERENCE_SET_PASSCODE)!! + prefPattern = fragment.findPreference(PatternLockActivity.PREFERENCE_SET_PATTERN)!! + prefBiometric = fragment.findPreference(BiometricActivity.PREFERENCE_SET_BIOMETRIC) + prefTouchesWithOtherVisibleWindows = + fragment.findPreference(SettingsSecurityFragment.PREFERENCE_TOUCHES_WITH_OTHER_VISIBLE_WINDOWS)!! + } + } + + private fun checkCommonPreferences() { prefPasscode.verifyPreference( keyPref = PassCodeActivity.PREFERENCE_SET_PASSCODE, titlePref = context.getString(R.string.prefs_passcode), @@ -136,15 +139,6 @@ class SettingsSecurityFragmentTest { ) assertFalse(prefPattern.isChecked) - prefBiometric.verifyPreference( - keyPref = BiometricActivity.PREFERENCE_SET_BIOMETRIC, - titlePref = context.getString(R.string.prefs_biometric), - summaryPref = context.getString(R.string.prefs_biometric_summary), - visible = true, - enabled = false - ) - assertFalse(prefBiometric.isChecked) - prefTouchesWithOtherVisibleWindows.verifyPreference( keyPref = SettingsSecurityFragment.PREFERENCE_TOUCHES_WITH_OTHER_VISIBLE_WINDOWS, titlePref = context.getString(R.string.prefs_touches_with_other_visible_windows), @@ -155,10 +149,38 @@ class SettingsSecurityFragmentTest { assertFalse(prefTouchesWithOtherVisibleWindows.isChecked) } + @Test + fun securityViewDeviceWithBiometrics() { + launchTest() + + checkCommonPreferences() + + assertNotNull(prefBiometric) + prefBiometric?.verifyPreference( + keyPref = BiometricActivity.PREFERENCE_SET_BIOMETRIC, + titlePref = context.getString(R.string.prefs_biometric), + summaryPref = context.getString(R.string.prefs_biometric_summary), + visible = true, + enabled = false + ) + assertFalse(prefBiometric!!.isChecked) + } + + @Test + fun securityViewDeviceWithNoBiometrics() { + launchTest(withBiometrics = false) + + checkCommonPreferences() + + assertNull(prefBiometric) + } + @Test fun passcodeOpen() { every { securityViewModel.isPatternSet() } returns false + launchTest() + onView(withText(R.string.prefs_passcode)).perform(click()) intended(hasComponent(PassCodeActivity::class.java.name)) } @@ -167,6 +189,8 @@ class SettingsSecurityFragmentTest { fun patternOpen() { every { securityViewModel.isPasscodeSet() } returns false + launchTest() + onView(withText(R.string.prefs_pattern)).perform(click()) intended(hasComponent(PatternLockActivity::class.java.name)) } @@ -176,6 +200,8 @@ class SettingsSecurityFragmentTest { every { securityViewModel.isPatternSet() } returns false every { securityViewModel.handleEnablePasscode(any()) } returns UIResult.Success() + launchTest() + mockIntent( extras = Pair(PassCodeActivity.KEY_PASSCODE, passCodeValue), action = PassCodeActivity.ACTION_REQUEST_WITH_RESULT @@ -189,6 +215,8 @@ class SettingsSecurityFragmentTest { every { securityViewModel.isPatternSet() } returns false every { securityViewModel.handleEnablePasscode(any()) } returns UIResult.Error() + launchTest() + mockIntent( extras = Pair(PassCodeActivity.KEY_PASSCODE, passCodeValue), action = PassCodeActivity.ACTION_REQUEST_WITH_RESULT @@ -203,6 +231,8 @@ class SettingsSecurityFragmentTest { every { securityViewModel.isPasscodeSet() } returns false every { securityViewModel.handleEnablePattern(any())} returns UIResult.Success() + launchTest() + mockIntent( extras = Pair(PatternLockActivity.KEY_PATTERN, patternValue), action = PatternLockActivity.ACTION_REQUEST_WITH_RESULT @@ -216,6 +246,8 @@ class SettingsSecurityFragmentTest { every { securityViewModel.isPasscodeSet() } returns false every { securityViewModel.handleEnablePattern(any())} returns UIResult.Error() + launchTest() + mockIntent( extras = Pair(PatternLockActivity.KEY_PATTERN, patternValue), action = PatternLockActivity.ACTION_REQUEST_WITH_RESULT @@ -227,24 +259,30 @@ class SettingsSecurityFragmentTest { @Test fun enablePasscodeEnablesBiometricLock() { + launchTest() + firstEnablePasscode() onView(withText(R.string.prefs_biometric)).check(matches(isEnabled())) - assertTrue(prefBiometric.isEnabled) - assertFalse(prefBiometric.isChecked) + assertTrue(prefBiometric!!.isEnabled) + assertFalse(prefBiometric!!.isChecked) } @Test fun enablePatternEnablesBiometricLock() { + launchTest() + firstEnablePattern() onView(withText(R.string.prefs_biometric)).check(matches(isEnabled())) - assertTrue(prefBiometric.isEnabled) - assertFalse(prefBiometric.isChecked) + assertTrue(prefBiometric!!.isEnabled) + assertFalse(prefBiometric!!.isChecked) } @Test fun onlyOneMethodEnabledPattern() { every { securityViewModel.isPatternSet() } returns true + launchTest() + firstEnablePattern() onView(withText(R.string.prefs_passcode)).perform(click()) onView(withText(R.string.pattern_already_set)).check(matches(isEnabled())) @@ -254,6 +292,8 @@ class SettingsSecurityFragmentTest { fun onlyOneMethodEnabledPasscode() { every { securityViewModel.isPasscodeSet() } returns true + launchTest() + firstEnablePasscode() onView(withText(R.string.prefs_pattern)).perform(click()) onView(withText(R.string.passcode_already_set)).check(matches(isEnabled())) @@ -263,6 +303,8 @@ class SettingsSecurityFragmentTest { fun disablePasscodeOk() { every { securityViewModel.handleDisablePasscode(any())} returns UIResult.Success() + launchTest() + firstEnablePasscode() mockIntent( extras = Pair(PassCodeActivity.KEY_CHECK_RESULT, true), @@ -271,14 +313,16 @@ class SettingsSecurityFragmentTest { onView(withText(R.string.prefs_passcode)).perform(click()) assertFalse(prefPasscode.isChecked) onView(withText(R.string.prefs_biometric)).check(matches(not(isEnabled()))) - assertFalse(prefBiometric.isEnabled) - assertFalse(prefBiometric.isChecked) + assertFalse(prefBiometric!!.isEnabled) + assertFalse(prefBiometric!!.isChecked) } @Test fun disablePasscodeError() { every { securityViewModel.handleDisablePasscode(any())} returns UIResult.Error() + launchTest() + firstEnablePasscode() mockIntent( extras = Pair(PassCodeActivity.KEY_CHECK_RESULT, true), @@ -287,7 +331,7 @@ class SettingsSecurityFragmentTest { onView(withText(R.string.prefs_passcode)).perform(click()) assertTrue(prefPasscode.isChecked) onView(withText(R.string.prefs_biometric)).check(matches(isEnabled())) - assertTrue(prefBiometric.isEnabled) + assertTrue(prefBiometric!!.isEnabled) onView(withText(R.string.pass_code_error_remove)).check(matches(isDisplayed())) } @@ -295,6 +339,8 @@ class SettingsSecurityFragmentTest { fun disablePatternOk() { every { securityViewModel.handleDisablePattern(any())} returns UIResult.Success() + launchTest() + firstEnablePattern() mockIntent( extras = Pair(PatternLockActivity.KEY_CHECK_RESULT, true), @@ -303,14 +349,16 @@ class SettingsSecurityFragmentTest { onView(withText(R.string.prefs_pattern)).perform(click()) assertFalse(prefPattern.isChecked) onView(withText(R.string.prefs_biometric)).check(matches(not(isEnabled()))) - assertFalse(prefBiometric.isEnabled) - assertFalse(prefBiometric.isChecked) + assertFalse(prefBiometric!!.isEnabled) + assertFalse(prefBiometric!!.isChecked) } @Test fun disablePatternError() { every { securityViewModel.handleDisablePattern(any())} returns UIResult.Error() + launchTest() + firstEnablePattern() mockIntent( extras = Pair(PatternLockActivity.KEY_CHECK_RESULT, true), @@ -319,64 +367,60 @@ class SettingsSecurityFragmentTest { onView(withText(R.string.prefs_pattern)).perform(click()) assertTrue(prefPattern.isChecked) onView(withText(R.string.prefs_biometric)).check(matches(isEnabled())) - assertTrue(prefBiometric.isEnabled) + assertTrue(prefBiometric!!.isEnabled) onView(withText(R.string.pattern_error_remove)).check(matches(isDisplayed())) } @Test fun enableBiometricLockWithPasscodeEnabled() { - every { biometricManager.isHardwareDetected } returns true every { biometricManager.hasEnrolledBiometric() } returns true + launchTest() + firstEnablePasscode() onView(withText(R.string.prefs_biometric)).perform(click()) - assertTrue(prefBiometric.isChecked) + assertTrue(prefBiometric!!.isChecked) } @Test fun enableBiometricLockWithPatternEnabled() { - every { biometricManager.isHardwareDetected } returns true every { biometricManager.hasEnrolledBiometric() } returns true - firstEnablePattern() - onView(withText(R.string.prefs_biometric)).perform(click()) - assertTrue(prefBiometric.isChecked) - } - - @Test - fun enableBiometricLockHardwareNotDetected() { - every { biometricManager.isHardwareDetected } returns false + launchTest() - firstEnablePasscode() + firstEnablePattern() onView(withText(R.string.prefs_biometric)).perform(click()) - assertFalse(prefBiometric.isChecked) - onView(withText(R.string.biometric_not_hardware_detected)).check(matches(isEnabled())) + assertTrue(prefBiometric!!.isChecked) } @Test fun enableBiometricLockNoEnrolledBiometric() { - every { biometricManager.isHardwareDetected } returns true every { biometricManager.hasEnrolledBiometric() } returns false + launchTest() + firstEnablePasscode() onView(withText(R.string.prefs_biometric)).perform(click()) - assertFalse(prefBiometric.isChecked) + assertFalse(prefBiometric!!.isChecked) onView(withText(R.string.biometric_not_enrolled)).check(matches(isEnabled())) } @Test fun disableBiometricLock() { - every { biometricManager.isHardwareDetected } returns true every { biometricManager.hasEnrolledBiometric() } returns true + launchTest() + firstEnablePasscode() onView(withText(R.string.prefs_biometric)).perform(click()) onView(withText(R.string.prefs_biometric)).perform(click()) - assertFalse(prefBiometric.isChecked) + assertFalse(prefBiometric!!.isChecked) } @Test fun touchesDialog() { + launchTest() + onView(withText(R.string.prefs_touches_with_other_visible_windows)).perform(click()) onView(withText(R.string.confirmation_touches_with_other_windows_title)).check(matches(isDisplayed())) onView(withText(R.string.confirmation_touches_with_other_windows_message)).check(matches(isDisplayed())) @@ -384,6 +428,8 @@ class SettingsSecurityFragmentTest { @Test fun touchesEnable() { + launchTest() + onView(withText(R.string.prefs_touches_with_other_visible_windows)).perform(click()) onView(withText(R.string.common_yes)).perform(click()) assertTrue(prefTouchesWithOtherVisibleWindows.isChecked) @@ -391,6 +437,8 @@ class SettingsSecurityFragmentTest { @Test fun touchesRefuse() { + launchTest() + onView(withText(R.string.prefs_touches_with_other_visible_windows)).perform(click()) onView(withText(R.string.common_no)).perform(click()) assertFalse(prefTouchesWithOtherVisibleWindows.isChecked) @@ -398,6 +446,8 @@ class SettingsSecurityFragmentTest { @Test fun touchesDisable() { + launchTest() + onView(withText(R.string.prefs_touches_with_other_visible_windows)).perform(click()) onView(withText(R.string.common_yes)).perform(click()) onView(withText(R.string.prefs_touches_with_other_visible_windows)).perform(click()) From 48e4b5b3d178a1bb4eecbeb16f14ce81e4fbfc10 Mon Sep 17 00:00:00 2001 From: JuancaG05 Date: Mon, 10 May 2021 13:00:44 +0200 Subject: [PATCH 3/5] Calens file added --- changelog/unreleased/3230 | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 changelog/unreleased/3230 diff --git a/changelog/unreleased/3230 b/changelog/unreleased/3230 new file mode 100644 index 00000000000..ed898abd699 --- /dev/null +++ b/changelog/unreleased/3230 @@ -0,0 +1,7 @@ +Change: Hide biometrical if device does not support it + +Biometric lock preference in "Security" settings subsection was shown even when the +device didn't support biometrics (if it was Android 6.0 or later versions). Now, the +preference is only shown if the device has the suitable hardware for it. + +https://github.com/owncloud/android/issues/3217 https://github.com/owncloud/android/pull/3230 From 3255ba30b6dd9a53dee6c51ea15336929312278c Mon Sep 17 00:00:00 2001 From: JuancaG05 Date: Mon, 10 May 2021 11:01:33 +0000 Subject: [PATCH 4/5] Calens changelog updated --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 066d5e7cb80..693a9ba2353 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Summary * Bugfix - Fix a bug when some fields where not retrieved from OIDC Discovery: [#3202](https://github.com/owncloud/android/pull/3202) * Bugfix - Snackbar in passcode view is not displayed: [#2722](https://github.com/owncloud/android/issues/2722) * Change - Error handling for pattern lock: [#3215](https://github.com/owncloud/android/issues/3215) +* Change - Hide biometrical if device does not support it: [#3217](https://github.com/owncloud/android/issues/3217) * Enhancement - Replace blank view in music player with cover art: [#3121](https://github.com/owncloud/android/issues/3121) * Enhancement - Move to AndroidX Preference and new structure for settings: [#2867](https://github.com/owncloud/android/issues/2867) * Enhancement - Support for apk files: [#2691](https://github.com/owncloud/android/issues/2691) @@ -54,6 +55,15 @@ Details https://github.com/owncloud/android/issues/3215 https://github.com/owncloud/android/pull/3221 +* Change - Hide biometrical if device does not support it: [#3217](https://github.com/owncloud/android/issues/3217) + + Biometric lock preference in "Security" settings subsection was shown even when the device + didn't support biometrics (if it was Android 6.0 or later versions). Now, the preference is + only shown if the device has the suitable hardware for it. + + https://github.com/owncloud/android/issues/3217 + https://github.com/owncloud/android/pull/3230 + * Enhancement - Replace blank view in music player with cover art: [#3121](https://github.com/owncloud/android/issues/3121) Blank view in the music preview player with styled up cover art was replaced. For music files From af90518b7bdd79f6be389782a754c37f5a7b4e4e Mon Sep 17 00:00:00 2001 From: JuancaG05 Date: Tue, 11 May 2021 09:32:53 +0200 Subject: [PATCH 5/5] Requested changes --- .../security/SettingsSecurityFragmentTest.kt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt b/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt index 4ae651a68e8..23c4f62b504 100644 --- a/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt +++ b/owncloudApp/src/androidTest/java/com/owncloud/android/settings/security/SettingsSecurityFragmentTest.kt @@ -156,14 +156,16 @@ class SettingsSecurityFragmentTest { checkCommonPreferences() assertNotNull(prefBiometric) - prefBiometric?.verifyPreference( - keyPref = BiometricActivity.PREFERENCE_SET_BIOMETRIC, - titlePref = context.getString(R.string.prefs_biometric), - summaryPref = context.getString(R.string.prefs_biometric_summary), - visible = true, - enabled = false - ) - assertFalse(prefBiometric!!.isChecked) + prefBiometric?.run { + verifyPreference( + keyPref = BiometricActivity.PREFERENCE_SET_BIOMETRIC, + titlePref = context.getString(R.string.prefs_biometric), + summaryPref = context.getString(R.string.prefs_biometric_summary), + visible = true, + enabled = false + ) + assertFalse(isChecked) + } } @Test