From 51e77166c9c82eb85e8cba99c5c9ae8b4f446e2d Mon Sep 17 00:00:00 2001 From: Carron Andrea Date: Sun, 17 Nov 2019 01:03:16 +0100 Subject: [PATCH 1/2] insert() fixed on Android 10 and new SQLCipher version --- android/build.gradle | 2 +- .../SQLiteDatabaseHandler.java | 43 +++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 96095ea..5510b6c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -36,5 +36,5 @@ android { dependencies { // See: https://www.zetetic.net/sqlcipher/sqlcipher-for-android/ - compile 'net.zetetic:android-database-sqlcipher:4.0.0@aar' + compile 'net.zetetic:android-database-sqlcipher:4.2.0@aar' } diff --git a/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java b/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java index 61713ed..dc0ca9f 100644 --- a/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java +++ b/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java @@ -445,9 +445,44 @@ class SQLiteDatabaseHandler extends FlutterMethodCallHandler { convertMapToContentValues(final Map input) { assert(input != null); - final Parcel parcel = Parcel.obtain(); - parcel.writeMap(input); - parcel.setDataPosition(0); - return ContentValues.CREATOR.createFromParcel(parcel); + ContentValues cv = new ContentValues(input.size()); + for (String key : input.keySet()) { + Object value = input.get(key); + + if (value == null) { + cv.putNull(key); + } + else if (value instanceof Boolean) { + cv.put(key, (Boolean)value); + } + else if (value instanceof Byte) { + cv.put(key, (Byte)value); + } + else if (value instanceof Short) { + cv.put(key, (Short)value); + } + else if (value instanceof Integer) { + cv.put(key, (Integer)value); + } + else if (value instanceof Long) { + cv.put(key, (Long)value); + } + else if (value instanceof Double) { + cv.put(key, (Double)value); + } + else if (value instanceof Float) { + cv.put(key, (Float)value); + } + else if (value instanceof String) { + cv.put(key, (String)value); + } + else if (value instanceof byte[]) { + cv.put(key, (byte[])value); + } + else { + throw new IllegalArgumentException("Unsupported class type " + value.getClass() + " for key " + key); + } + } + return cv; } } From e1abe4ae9699737345df3ad68f01d22cc1db1a9a Mon Sep 17 00:00:00 2001 From: Carron Andrea Date: Sun, 17 Nov 2019 01:55:45 +0100 Subject: [PATCH 2/2] Possible performance improvement in Map iteration --- .../drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java b/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java index dc0ca9f..8b9174b 100644 --- a/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java +++ b/android/src/main/java/com/github/drydart/flutter_sqlcipher/SQLiteDatabaseHandler.java @@ -446,8 +446,9 @@ class SQLiteDatabaseHandler extends FlutterMethodCallHandler { assert(input != null); ContentValues cv = new ContentValues(input.size()); - for (String key : input.keySet()) { - Object value = input.get(key); + for (final Map.Entry entry : input.entrySet()) { + final String key = entry.getKey(); + final Object value = entry.getValue(); if (value == null) { cv.putNull(key);