From 5d4e456ef4f5800af12a071c00b2375f955a6c69 Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Fri, 30 Aug 2024 08:33:08 +0200 Subject: [PATCH 1/4] only init shoppingcart with data if it not null otherwise create a new one --- .../sdk/shoppingcart/ShoppingCartStorage.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt b/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt index edb8ba1eab..8059e83dd1 100644 --- a/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt +++ b/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt @@ -57,7 +57,8 @@ internal class ShoppingCartStorage(val project: Project) { val env = Snabble.environment?.name?.lowercase() ?: "unknown" Dispatch.mainThread { project.shops.forEach { - fileMap[it.id] = File(project.internalStorageDirectory, "cart/$env/${it.id}/shoppingCart.json") + fileMap[it.id] = + File(project.internalStorageDirectory, "cart/$env/${it.id}/shoppingCart.json") } } } @@ -65,9 +66,16 @@ internal class ShoppingCartStorage(val project: Project) { private fun load() { try { if (currentFile?.exists() == true) { - val contents = IOUtils.toString(FileInputStream(currentFile), Charset.forName("UTF-8")) - val shoppingCartData = GsonHolder.get().fromJson(contents, ShoppingCartData::class.java) - project.shoppingCart.initWithData(shoppingCartData) + val contents: String? = + IOUtils.toString(FileInputStream(currentFile), Charset.forName("UTF-8")) + val shoppingCartData: ShoppingCartData? = + GsonHolder.get().fromJson(contents, ShoppingCartData::class.java) + if (shoppingCartData != null) { + project.shoppingCart.initWithData(shoppingCartData) + } else { + //shopping cart could not be read, create a new one. + project.shoppingCart.initWithData(ShoppingCartData()) + } } else { project.shoppingCart.initWithData(ShoppingCartData()) } @@ -76,7 +84,9 @@ internal class ShoppingCartStorage(val project: Project) { Logger.e("Could not load shopping list from: " + currentFile?.absolutePath + ", creating a new one.") project.shoppingCart.initWithData(ShoppingCartData()) } catch (e: JsonSyntaxException) { + //shopping cart could not be read, create a new one. Logger.e("Could not parse shopping list due to: ${e.message}") + project.shoppingCart.initWithData(ShoppingCartData()) } } From 4fc2e6a6d9d54dca529b689c579a31009ecdd625 Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Fri, 30 Aug 2024 08:50:58 +0200 Subject: [PATCH 2/4] catch runtime exceptions to handle npe und security exception as well --- .../io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt b/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt index 8059e83dd1..59d5d115bb 100644 --- a/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt +++ b/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt @@ -2,7 +2,6 @@ package io.snabble.sdk.shoppingcart import android.os.Handler import android.os.Looper -import com.google.gson.JsonSyntaxException import io.snabble.sdk.Project import io.snabble.sdk.Snabble import io.snabble.sdk.shoppingcart.data.listener.SimpleShoppingCartListener @@ -63,6 +62,7 @@ internal class ShoppingCartStorage(val project: Project) { } } + @Suppress("TooGenericExceptionCaught") private fun load() { try { if (currentFile?.exists() == true) { @@ -81,11 +81,11 @@ internal class ShoppingCartStorage(val project: Project) { } } catch (e: IOException) { //shopping cart could not be read, create a new one. - Logger.e("Could not load shopping list from: " + currentFile?.absolutePath + ", creating a new one.") + Logger.e("Could not load shopping list from: ${currentFile?.absolutePath}, creating a new one.") project.shoppingCart.initWithData(ShoppingCartData()) - } catch (e: JsonSyntaxException) { + } catch (e: RuntimeException) { //shopping cart could not be read, create a new one. - Logger.e("Could not parse shopping list due to: ${e.message}") + Logger.e("Could not load shopping list from ${currentFile?.absolutePath}: ${e.message}") project.shoppingCart.initWithData(ShoppingCartData()) } } From b3e1dfd20633e93dcbad2b1bde9e0f49cbf331da Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Fri, 30 Aug 2024 09:00:36 +0200 Subject: [PATCH 3/4] update CHANGELOG.md --- CHANGELOG.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a44c5d1d3..deaa97c923 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,24 @@ All notable changes to this project will be documented in this file. ## UNRELEASED ### Added ### Changed -* Replace items depositText w/ local i18n text ### Removed ### Fixed +## [0.75.7] +### Fixed +* Handle npe when loading the shopping cart data and restore from it + +## [0.75.6] +### Changed +* Replace items depositText w/ local i18n text +* Switch to only delete a pre auth if a card was successfully saved +### Fixed +* Fix SQLiteDatabaseLockedException + +## [0.75.5] +### Fixed +* Fix npe while calculating the modified price + ## [0.75.4] ### Added * Provide integration ready Fiserv composable From b98d2f0c278226c233f6290e1ebf590864eb413f Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Mon, 2 Sep 2024 08:25:26 +0200 Subject: [PATCH 4/4] use java lang runtime exception --- .../main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt b/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt index 59d5d115bb..2c13ffd4fd 100644 --- a/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt +++ b/core/src/main/java/io/snabble/sdk/shoppingcart/ShoppingCartStorage.kt @@ -14,6 +14,7 @@ import java.io.File import java.io.FileInputStream import java.io.FileOutputStream import java.io.IOException +import java.lang.RuntimeException import java.nio.charset.Charset import kotlin.time.Duration.Companion.seconds