Skip to content

Commit

Permalink
Fix crash on older Android versions
Browse files Browse the repository at this point in the history
decodeFromStream crashes on API 21-23, but decodeFromBufferedSource doesn't.
  • Loading branch information
equeim committed Oct 25, 2023
1 parent 8688834 commit f33588e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ dependencies {
implementation(libs.fastscroll)
implementation(libs.timber)
implementation(libs.threetenabp)
implementation(libs.serialization.json.okio)

debugImplementation(libs.leakcanary)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream
import kotlinx.serialization.json.encodeToStream
import kotlinx.serialization.json.okio.decodeFromBufferedSource
import okio.buffer
import okio.source
import org.equeim.tremotesf.common.DefaultTremotesfDispatchers
import org.equeim.tremotesf.common.TremotesfDispatchers
import timber.log.Timber
Expand Down Expand Up @@ -63,19 +65,21 @@ abstract class Servers(
@OptIn(ExperimentalSerializationApi::class)
private fun load() {
try {
val (servers, changed) = context.openFileInput(FILE_NAME).buffered().use {
json.decodeFromStream(ServersState.serializer(), it)
val (servers, changed) = context.openFileInput(FILE_NAME).use {
json.decodeFromBufferedSource(ServersState.serializer(), it.source().buffer())
}.validateLoaded()
_serversState.value = servers
if (changed) {
save()
}
} catch (error: FileNotFoundException) {
Timber.w(error, "Servers file does not exist")
Timber.d("Servers file does not exist")
} catch (error: IOException) {
Timber.e(error, "Error reading servers file")
} catch (error: SerializationException) {
Timber.e(error, "Error parsing servers file")
} catch (error: Exception) {
Timber.e(error, "Unexpected error when parsing error file")
}
}

Expand Down

0 comments on commit f33588e

Please sign in to comment.