From 03de0608f2bf66cf7c8f9330c928cabbb81a5c79 Mon Sep 17 00:00:00 2001 From: Daniel Frett Date: Wed, 25 Sep 2024 09:23:45 -0600 Subject: [PATCH] provide a Scarlet.Builder extension method to force the default platform --- gto-support-scarlet/build.gradle.kts | 1 + .../internal/utils/RuntimePlatformInternals.java | 12 ++++++++++++ .../com/tinder/scarlet/ScarletBuilderInternals.kt | 12 ++++++++++++ .../internal/utils/RuntimePlatformInternals.kt | 3 +++ .../gto/android/common/scarlet/ScarletBuilder.kt | 15 +++++++++++++++ 5 files changed, 43 insertions(+) create mode 100644 gto-support-scarlet/src/main/java/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.java create mode 100644 gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/ScarletBuilderInternals.kt create mode 100644 gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.kt create mode 100644 gto-support-scarlet/src/main/kotlin/org/ccci/gto/android/common/scarlet/ScarletBuilder.kt diff --git a/gto-support-scarlet/build.gradle.kts b/gto-support-scarlet/build.gradle.kts index 2b09e308d..4d69ac72a 100644 --- a/gto-support-scarlet/build.gradle.kts +++ b/gto-support-scarlet/build.gradle.kts @@ -11,5 +11,6 @@ dependencies { api(libs.scarlet.core) compileOnly(libs.scarlet) + implementation(project(":gto-support-util")) implementation(libs.okio) } diff --git a/gto-support-scarlet/src/main/java/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.java b/gto-support-scarlet/src/main/java/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.java new file mode 100644 index 000000000..61661c05a --- /dev/null +++ b/gto-support-scarlet/src/main/java/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.java @@ -0,0 +1,12 @@ +package com.tinder.scarlet.internal.utils; + +import androidx.annotation.NonNull; + +class RuntimePlatformInternals { + /** @noinspection KotlinInternalInJava*/ + @NonNull + @SuppressWarnings("MethodName") + static RuntimePlatform Default() { + return new RuntimePlatform.Default(); + } +} diff --git a/gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/ScarletBuilderInternals.kt b/gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/ScarletBuilderInternals.kt new file mode 100644 index 000000000..a92ba30c1 --- /dev/null +++ b/gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/ScarletBuilderInternals.kt @@ -0,0 +1,12 @@ +package com.tinder.scarlet + +import org.ccci.gto.android.common.util.getDeclaredFieldOrNull +import org.ccci.gto.android.common.util.getOrNull + +private val platformField = getDeclaredFieldOrNull("platform") + +internal var Scarlet.Builder.platform: Any? + get() = platformField?.getOrNull(this) + set(value) { + platformField?.set(this, requireNotNull(value)) + } diff --git a/gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.kt b/gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.kt new file mode 100644 index 000000000..3198bde2c --- /dev/null +++ b/gto-support-scarlet/src/main/kotlin/com/tinder/scarlet/internal/utils/RuntimePlatformInternals.kt @@ -0,0 +1,3 @@ +package com.tinder.scarlet.internal.utils + +internal fun defaultPlatform() = RuntimePlatformInternals.Default() diff --git a/gto-support-scarlet/src/main/kotlin/org/ccci/gto/android/common/scarlet/ScarletBuilder.kt b/gto-support-scarlet/src/main/kotlin/org/ccci/gto/android/common/scarlet/ScarletBuilder.kt new file mode 100644 index 000000000..42bb45864 --- /dev/null +++ b/gto-support-scarlet/src/main/kotlin/org/ccci/gto/android/common/scarlet/ScarletBuilder.kt @@ -0,0 +1,15 @@ +package org.ccci.gto.android.common.scarlet + +import com.tinder.scarlet.Scarlet +import com.tinder.scarlet.internal.utils.defaultPlatform +import com.tinder.scarlet.platform + +/** + * Scarlet improperly detects desugared Android apps as the Java 8 runtime. + * This method will force the default platform for Scarlet to be used. + * + * See: + * https://github.com/Tinder/Scarlet/issues/235 + * https://issuetracker.google.com/issues/342419066 + */ +fun Scarlet.Builder.forceDefaultPlatform() = apply { platform = defaultPlatform() }