From d462f49aade3da68109af0218f997ac1dbc304b1 Mon Sep 17 00:00:00 2001 From: Leonardo Monteiro Fernandes Date: Fri, 15 Jan 2021 22:03:11 +1000 Subject: [PATCH] Self-heal after change of lock screen settings Trigger the self-healing of the database after a user changes the lock screen settings. --- src/android/io/sqlc/SQLitePlugin.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/android/io/sqlc/SQLitePlugin.java b/src/android/io/sqlc/SQLitePlugin.java index a26067a9..3e3b3eb3 100755 --- a/src/android/io/sqlc/SQLitePlugin.java +++ b/src/android/io/sqlc/SQLitePlugin.java @@ -265,7 +265,7 @@ private SQLiteAndroidDatabase openDatabase(String dbname, String key, CallbackCo } catch (Exception e) { // NOTE: NO Android locking/closing BUG workaround needed here - if(selfHealingEnabled && e.getMessage().contains("file is encrypted or is not a database:")) { + if (shouldSelfHeal(e)) { logger.logWarning("Android ciphered database will be deleted to self heal: " + e.getMessage(), "SQLite"); deleteDatabaseNow(dbname); return openDatabase(dbname, key, cbc, false); @@ -276,6 +276,16 @@ private SQLiteAndroidDatabase openDatabase(String dbname, String key, CallbackCo throw e; } } + + private boolean shouldSelfHeal(Exception openDatabaseException) { + if (!selfHealingEnabled) { + return false; + } + + String message = openDatabaseException.getMessage(); + return message.contains("file is encrypted or is not a database:") || + message.contains("file is not a database:"); + } // NOTE: createFromAssets (pre-populated DB) feature is not // supported for SQLCipher.