Skip to content

Commit

Permalink
fix: Deserialize enum GameScores and cleanup proguard rules
Browse files Browse the repository at this point in the history
  • Loading branch information
Gimbergsson committed Jan 17, 2025
1 parent 020842b commit 1b71023
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 17 deletions.
5 changes: 0 additions & 5 deletions androidos/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@
# hide the original source file name.
#-renamesourcefileattribute SourceFile

-keep class com.google.android.gms.common.data.EntityBuffer { *; }
-keep class com.google.android.gms.common.data.AbstractDataBuffer { *; }
-keep class com.google.android.gms.wearable.DataEventBuffer { *; }
-keep class com.google.android.gms.wearable.DataEvent { *; }

# Classes from :androidos module
-keep class se.dennisgimbergsson.tennisscoreboard.MainActivity { *; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import io.appwrite.Client
import se.dennisgimbergsson.shared.GameScoresDeserializer
import se.dennisgimbergsson.shared.enums.GameScores
import se.dennisgimbergsson.shared.utils.Constants
import se.dennisgimbergsson.shared.utils.DefaultDispatcherProvider
import se.dennisgimbergsson.shared.utils.DispatcherProvider
Expand All @@ -26,7 +28,9 @@ annotation class DeveloperPreferences
object AppModule {

@Provides
fun gson(): Gson = GsonBuilder().create()
fun gson(): Gson = GsonBuilder()
.registerTypeAdapter(GameScores::class.java, GameScoresDeserializer())
.create()

@Provides
fun appwriteClient(): Client = Client()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import com.google.android.gms.wearable.DataMap
import com.google.android.gms.wearable.DataMapItem
import com.google.android.gms.wearable.Wearable
import com.google.gson.GsonBuilder
import se.dennisgimbergsson.shared.GameScoresDeserializer
import se.dennisgimbergsson.shared.data.models.Scoreboard
import se.dennisgimbergsson.shared.enums.GameScores
import se.dennisgimbergsson.shared.extensions.logAndroidMessage
import se.dennisgimbergsson.shared.utils.Constants

Expand Down Expand Up @@ -63,6 +65,10 @@ class ScoreboardWorker(

private fun getScoreboardUpdate(dataMap: DataMap): Scoreboard {
val json = dataMap.getString(Constants.Keys.SCOREBOARD_UPDATE)
return GsonBuilder().create().fromJson(json, Scoreboard::class.java) ?: Scoreboard()
logAndroidMessage(message = "json: $json")
return GsonBuilder()
.registerTypeAdapter(GameScores::class.java, GameScoresDeserializer())
.create()
.fromJson(json, Scoreboard::class.java) ?: Scoreboard()
}
}
3 changes: 3 additions & 0 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ dependencies {

implementation(libs.material)

// 3rd-party libraries
implementation(libs.gson)

testImplementation(libs.androidx.arch.core)
testImplementation(libs.kotlinx.corutines.test)

Expand Down
9 changes: 5 additions & 4 deletions shared/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
# hide the original source file name.
#-renamesourcefileattribute SourceFile

#-keep class se.dennisgimbergsson.shared.data.models.** { *; }
#-keep @se.dennisgimbergsson.shared.utils.ThemedPreview class *
#-keep @se.dennisgimbergsson.shared.utils.LocalePreview class *
#-keep @se.dennisgimbergsson.shared.utils.WearPreview class *
# Classes from :shared module
-keep class se.dennisgimbergsson.shared.data.models.** { *; }
-keep @se.dennisgimbergsson.shared.utils.ThemedPreview class *
-keep @se.dennisgimbergsson.shared.utils.LocalePreview class *
-keep @se.dennisgimbergsson.shared.utils.WearPreview class *
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package se.dennisgimbergsson.shared

import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import se.dennisgimbergsson.shared.enums.GameScores
import java.lang.reflect.Type

class GameScoresDeserializer : JsonDeserializer<GameScores> {

override fun deserialize(
json: JsonElement?,
typeOfT: Type?,
context: JsonDeserializationContext?
): GameScores {
val stringValue = json?.asString
return GameScores.entries.find { it.name == stringValue } ?: GameScores.ZERO
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import se.dennisgimbergsson.shared.enums.GameScores
import se.dennisgimbergsson.shared.enums.GameScores.ZERO

data class Score(
var gameScore: GameScores = ZERO,
var wonGames: Int = 0,
var wonSets: Int = 0
val gameScore: GameScores = ZERO,
val wonGames: Int = 0,
val wonSets: Int = 0
) {
fun isNotCleared() = !isCleared()

Expand Down
3 changes: 0 additions & 3 deletions wearos/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@
# hide the original source file name.
#-renamesourcefileattribute SourceFile

#-keep class com.google.android.gms.wearable.PutDataRequest { *; }
-keep class * extends android.os.Parcelable { *; }

# Classes from :wearos module
-keep class se.dennisgimbergsson.tennisscoreboard.ui.screens.MainActivity { *; }

Expand Down

0 comments on commit 1b71023

Please sign in to comment.