diff --git a/app/res/values-es/strings.xml b/app/res/values-es/strings.xml
index bbe764954d..7f2c168f51 100644
--- a/app/res/values-es/strings.xml
+++ b/app/res/values-es/strings.xml
@@ -588,6 +588,7 @@
Demasiados intentos fallidos. Por favor, desbloquee su dispositivo e inténtelo de nuevo.
La operación biométrica ha expirado. Por favor, póngase en contacto con el soporte técnico si el problema persiste.
No pudimos configurar los datos biométricos en su dispositivo. Por favor, póngase en contacto con el soporte técnico si el problema persiste.
+ No hay ninguna cuenta de PersonalID presente, por favor vuelva a iniciar sesión en su cuenta de PersonalID e inténtelo de nuevo.
La tarea termina el %s
La tarea terminó el %s
diff --git a/app/res/values-fr/strings.xml b/app/res/values-fr/strings.xml
index dac5ea6269..04bf85bac9 100644
--- a/app/res/values-fr/strings.xml
+++ b/app/res/values-fr/strings.xml
@@ -587,6 +587,7 @@ License.
Trop de tentatives infructueuses. Veuillez déverrouiller votre appareil et réessayer.
L\'opération biométrique a expiré. Veuillez contacter le support client si le problème persiste.
Nous n\'avons pas pu configurer la biométrie sur votre appareil. Veuillez contacter le support client si le problème persiste.
+ Aucun compte PersonalID n\'est présent, veuillez vous reconnecter à votre compte PersonalID et réessayer.
La tâche se termine le %s
La tâche s\'est terminée le %s
diff --git a/app/res/values-ha/strings.xml b/app/res/values-ha/strings.xml
index 6d9c23b24d..0c1d883adc 100644
--- a/app/res/values-ha/strings.xml
+++ b/app/res/values-ha/strings.xml
@@ -420,6 +420,7 @@ Don cikakken aiki na wurin zama na aikace-aikace da yawa, da fatan za a yi sabon
Gwaje-gwaje da yawa sun gaza. Da fatan za a buɗe na\'urarka ka sake gwadawa.
Aikin biometric ya ƙare. Da fatan za a tuntuɓi tallafin abokin ciniki idan matsalar ta ci gaba.
Ba za mu iya saita yanayin halittu a na\'urarka ba. Da fatan za a tuntuɓi tallafin abokin ciniki idan matsalar ta ci gaba.
+ Babu asusun PersonalID da ke nan, don Allah sake shiga asusunka na PersonalID kuma a sake gwadawa.
Aiki yana ƙarewa akan %s
Aiki ya ƙare a kan %s
Fara
diff --git a/app/res/values-hi/strings.xml b/app/res/values-hi/strings.xml
index 0bb64b380f..8f867abf8c 100644
--- a/app/res/values-hi/strings.xml
+++ b/app/res/values-hi/strings.xml
@@ -584,6 +584,7 @@ License.
बहुत अधिक असफल प्रयास। कृपया अपने डिवाइस को अनलॉक करें और पुनः प्रयास करें।
बायोमेट्रिक ऑपरेशन का समय समाप्त हो गया। यदि समस्या बनी रहती है तो कृपया ग्राहक सहायता से संपर्क करें।
हम आपके डिवाइस पर बायोमेट्रिक्स कॉन्फ़िगर नहीं कर सके। यदि समस्या बनी रहती है तो कृपया ग्राहक सहायता से संपर्क करें।
+ कोई PersonalID खाता मौजूद नहीं है, कृपया अपने PersonalID खाते में फिर से लॉगिन करें और पुनः प्रयास करें।
कार्य %s को समाप्त होती है
कार्य %s को समाप्त हुई
diff --git a/app/res/values-lt/strings.xml b/app/res/values-lt/strings.xml
index f8b6188f1e..2c369849c4 100644
--- a/app/res/values-lt/strings.xml
+++ b/app/res/values-lt/strings.xml
@@ -237,6 +237,7 @@
Per daug nepavykusių bandymų. Atrakinkite įrenginį ir bandykite dar kartą.
Baigėsi biometrinės operacijos laikas. Jei problema išlieka, susisiekite su klientų aptarnavimo tarnyba.
Nepavyko sukonfigūruoti biometrinių duomenų jūsų įrenginyje. Jei problema išlieka, susisiekite su klientų aptarnavimo tarnyba.
+ Nėra PersonalID paskyros, prašome iš naujo prisijungti prie savo PersonalID paskyros ir bandyti dar kartą.
Šiuo metu nėra jokių darbo įrašų. Spustelėkite atnaujinti arba patikrinkite vėliau.
Pranešimų nėra
Jūs dar nebuvote pakviestas į jokias galimybes. Kai būsite pakviestas į galimybę, ji atsiras šiame sąraše.
diff --git a/app/res/values-no/strings.xml b/app/res/values-no/strings.xml
index 981f1843bd..5b3b079b6f 100644
--- a/app/res/values-no/strings.xml
+++ b/app/res/values-no/strings.xml
@@ -227,6 +227,7 @@
For mange mislykkede forsøk. Lås opp enheten og prøv igjen.
Biometrisk operasjon ble tidsavbrutt. Kontakt kundestøtte hvis problemet vedvarer.
Vi kunne ikke konfigurere biometri på enheten din. Kontakt kundestøtte hvis problemet vedvarer.
+ Ingen PersonalID-konto er til stede. Logg inn på PersonalID-kontoen din på nytt, og prøv igjen.
Ingen arbeidslogger er tilgjengelige for øyeblikket. Klikk på Oppdater, eller kom tilbake senere.
Ingen varsler tilgjengelig
Du har ikke blitt invitert til noen muligheter ennå. Når du har blitt invitert til en mulighet, vil den vises i denne listen.
diff --git a/app/res/values-pt/strings.xml b/app/res/values-pt/strings.xml
index 749d208c66..a336e4bade 100644
--- a/app/res/values-pt/strings.xml
+++ b/app/res/values-pt/strings.xml
@@ -593,6 +593,7 @@
Muitas tentativas falhadas. Por favor, desbloqueie o seu dispositivo e tente novamente.
A operação biométrica expirou. Por favor, contacte o apoio ao cliente se o problema persistir.
Não foi possível configurar a biometria no seu dispositivo. Por favor, contacte o apoio ao cliente se o problema persistir.
+ Nenhuma conta PersonalID está presente, por favor volte a iniciar sessão na sua conta PersonalID e tente novamente.
A tarefa termina em %s
A tarefa terminou em %s
diff --git a/app/res/values-sw/strings.xml b/app/res/values-sw/strings.xml
index 3c5985d5a8..8d389d4d70 100644
--- a/app/res/values-sw/strings.xml
+++ b/app/res/values-sw/strings.xml
@@ -592,6 +592,7 @@
Majaribio mengi mno yameshindikana. Tafadhali fungua kifaa chako na ujaribu tena.
Muda wa utendakazi wa kibayometri umekwisha. Tafadhali wasiliana na usaidizi kwa wateja ikiwa tatizo litaendelea.
Hatukuweza kusanidi bayometriki kwenye kifaa chako. Tafadhali wasiliana na usaidizi kwa wateja ikiwa tatizo litaendelea.
+ Hakuna akaunti ya PersonalID iliyopo, tafadhali ingia tena katika akaunti yako ya PersonalID na ujaribu tena.
Kazi inaisha tarehe %s
Kazi iliisha tarehe %s
diff --git a/app/res/values-ti/strings.xml b/app/res/values-ti/strings.xml
index ac8f13a716..e069ab8879 100644
--- a/app/res/values-ti/strings.xml
+++ b/app/res/values-ti/strings.xml
@@ -576,6 +576,7 @@
በዝሒ ዝፈሸለ ፈተነታት። በጃኻ ንመሳርሒኻ ክፈቶ እሞ እንደገና ፈትን።
ናይ ባዮሜትሪክ ኦፕሬሽን ግዜኡ ተወዲኡ። እቲ ጸገም እንተቀጺሉ በጃኻ ንደገፍ ዓማዊል ተወከስ።
ኣብ መሳርሒኻ ባዮሜትሪክ ክንቃኔ ኣይከኣልናን። እቲ ጸገም እንተቀጺሉ በጃኻ ንደገፍ ዓማዊል ተወከስ።
+ ናይ PersonalID ሕሳብ የለን፣ በጃኻ ናብ ናይ PersonalID ሕሳብካ እንደገና እቶ ከምኡ\'ውን እንደገና ፈትን።
ዕዮ ኣብ %s ይወዳእ
ዕዮ ኣብ %s ተወዲኡ
diff --git a/app/res/values/strings.xml b/app/res/values/strings.xml
index cffeddbd74..55a983b1d8 100644
--- a/app/res/values/strings.xml
+++ b/app/res/values/strings.xml
@@ -843,6 +843,7 @@
Too many failed attempts. Please unlock your device and try again.
Biometric operation timed out. Please contact customer support if the problem persists.
We couldn’t configure biometrics on your device. Please contact customer support if the problem persists.
+ No PersonalID account present, please re-login into your PersonalID account and try again.
Task ends on %s
Task ended on %s
diff --git a/app/src/org/commcare/connect/database/ConnectDatabaseHelper.java b/app/src/org/commcare/connect/database/ConnectDatabaseHelper.java
index 76f9162743..2d6461b4a7 100644
--- a/app/src/org/commcare/connect/database/ConnectDatabaseHelper.java
+++ b/app/src/org/commcare/connect/database/ConnectDatabaseHelper.java
@@ -53,10 +53,16 @@ public IDatabase getHandle() {
try {
connectDatabase = CommCareApplication.instance().getConnectDbOpenHelper(context);
} catch (Exception e) {
- //Flag the DB as broken if we hit an error opening it (usually means corrupted or bad encryption)
- dbBroken = true;
- Logger.exception("Error opening Connect DB", e);
- GlobalErrorUtil.triggerGlobalError(GlobalErrors.PERSONALID_GENERIC_ERROR);
+ if (!dbExists()) {
+ ConnectDatabaseNotFoundException dbNotFound = new ConnectDatabaseNotFoundException();
+ Logger.exception("Error opening Connect DB", dbNotFound);
+ throw dbNotFound;
+ } else {
+ //Flag the DB as broken if we hit an error opening it (usually means corrupted or bad encryption)
+ dbBroken = true;
+ Logger.exception("Error opening Connect DB", e);
+ GlobalErrorUtil.triggerGlobalError(GlobalErrors.PERSONALID_GENERIC_ERROR);
+ }
}
}
return connectDatabase;
diff --git a/app/src/org/commcare/connect/database/ConnectDatabaseNotFoundException.java b/app/src/org/commcare/connect/database/ConnectDatabaseNotFoundException.java
new file mode 100644
index 0000000000..2149b82410
--- /dev/null
+++ b/app/src/org/commcare/connect/database/ConnectDatabaseNotFoundException.java
@@ -0,0 +1,10 @@
+package org.commcare.connect.database;
+
+/**
+ * Exception thrown when the Connect database file does not exist.
+ */
+public class ConnectDatabaseNotFoundException extends RuntimeException {
+ public ConnectDatabaseNotFoundException() {
+ super("Connect database file does not exist");
+ }
+}
diff --git a/app/src/org/commcare/connect/database/ConnectDatabaseUtils.java b/app/src/org/commcare/connect/database/ConnectDatabaseUtils.java
index 5efc5ca542..3bf28b203d 100644
--- a/app/src/org/commcare/connect/database/ConnectDatabaseUtils.java
+++ b/app/src/org/commcare/connect/database/ConnectDatabaseUtils.java
@@ -14,7 +14,7 @@
public class ConnectDatabaseUtils {
// the value of the key should not be renamed due to backward compatibility
private static final String SECRET_NAME = "secret";
- public static void storeConnectDbPassphrase(@NotNull Context context, byte[] passphrase) {
+ private static void storeConnectDbPassphrase(@NotNull Context context, byte[] passphrase) {
try {
if (passphrase == null || passphrase.length == 0) {
throw new IllegalArgumentException("Passphrase must not be null or empty");
diff --git a/app/src/org/commcare/connect/network/IApiCallback.java b/app/src/org/commcare/connect/network/IApiCallback.java
index bebcc4ff92..7b862ca3f5 100644
--- a/app/src/org/commcare/connect/network/IApiCallback.java
+++ b/app/src/org/commcare/connect/network/IApiCallback.java
@@ -14,4 +14,5 @@ public interface IApiCallback {
void processOldApiError();
void processTokenUnavailableError();
void processTokenRequestDeniedError();
+ void noConnectDatabaseError();
}
diff --git a/app/src/org/commcare/connect/network/PersonalIdOrConnectApiErrorHandler.java b/app/src/org/commcare/connect/network/PersonalIdOrConnectApiErrorHandler.java
index 07cd8f91c5..a0b52b3337 100644
--- a/app/src/org/commcare/connect/network/PersonalIdOrConnectApiErrorHandler.java
+++ b/app/src/org/commcare/connect/network/PersonalIdOrConnectApiErrorHandler.java
@@ -67,6 +67,8 @@ public static String handle(
return context.getString(R.string.personalid_network_response_parsing_error);
case EMAIL_ALREADY_IN_USE_ERROR:
return context.getString(R.string.personalid_email_already_in_use);
+ case NO_CONNECT_DATABASE_ERROR:
+ return context.getString(R.string.personalid_no_connect_database_error);
default:
if (t != null) {
Logger.exception("Unhandled throwable passed with API error code: " + errorCode, t);
diff --git a/app/src/org/commcare/connect/network/base/BaseApi.kt b/app/src/org/commcare/connect/network/base/BaseApi.kt
index 9adb5a5403..1152c6fe5f 100644
--- a/app/src/org/commcare/connect/network/base/BaseApi.kt
+++ b/app/src/org/commcare/connect/network/base/BaseApi.kt
@@ -5,6 +5,7 @@ import android.os.Handler
import okhttp3.ResponseBody
import org.commcare.activities.CommCareActivity
import org.commcare.connect.ConnectConstants
+import org.commcare.connect.database.ConnectDatabaseNotFoundException
import org.commcare.connect.network.IApiCallback
import org.commcare.connect.network.NetworkUtils
import org.commcare.connect.network.NetworkUtils.getErrorCodes
@@ -43,6 +44,8 @@ class BaseApi {
Logger.exception("Error reading response stream", e)
// Handle error when reading the stream
callback.processFailure(response.code(), endPoint, "", e)
+ } catch (_: ConnectDatabaseNotFoundException){
+ callback.noConnectDatabaseError()
}
} else {
val stream =
diff --git a/app/src/org/commcare/connect/network/base/BaseApiCallback.kt b/app/src/org/commcare/connect/network/base/BaseApiCallback.kt
index f0af4ec7ed..c698f4f0ea 100644
--- a/app/src/org/commcare/connect/network/base/BaseApiCallback.kt
+++ b/app/src/org/commcare/connect/network/base/BaseApiCallback.kt
@@ -98,4 +98,11 @@ abstract class BaseApiCallback(
null,
)
}
+
+ override fun noConnectDatabaseError() {
+ baseApiHandler.stopLoadingAndInformError(
+ PersonalIdOrConnectApiErrorCodes.NO_CONNECT_DATABASE_ERROR,
+ null,
+ )
+ }
}
diff --git a/app/src/org/commcare/connect/network/base/BaseApiHandler.kt b/app/src/org/commcare/connect/network/base/BaseApiHandler.kt
index 7d46b60349..a0fa521400 100644
--- a/app/src/org/commcare/connect/network/base/BaseApiHandler.kt
+++ b/app/src/org/commcare/connect/network/base/BaseApiHandler.kt
@@ -109,6 +109,10 @@ abstract class BaseApiHandler(
// The verified email is already tied to another active account.
EMAIL_ALREADY_IN_USE_ERROR,
+ // We were not able to find any existing database for the user locally
+ // Can typically happen if another process or user cleaned up their account from the phone.
+ NO_CONNECT_DATABASE_ERROR,
+
;
fun shouldAllowRetry(): Boolean =