From 1220260642a236a3c8be67a64c536a4cfd022ae3 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 26 Feb 2024 16:34:58 -0500 Subject: [PATCH 01/14] split out android base implementation --- android/deps.bzl | 3 +- android/player-ui/BUILD | 40 +++++++++++++++++++ android/player-ui/deps.bzl | 34 ++++++++++++++++ .../player-ui/src/main/AndroidManifest.xml | 3 ++ .../mvvm}/lifecycle/PlayerViewModel.kt | 3 +- .../player/android/mvvm}/ui/PlayerFragment.kt | 10 ++--- .../src/main/res/layout/default_fallback.xml | 0 .../src/main/res/layout/fragment_player.xml | 0 .../android/lifecycle/PlayerViewModelTest.kt | 38 +++++++++--------- android/player/BUILD | 10 ++--- .../intuit/player/android/AndroidPlayer.kt | 8 ++-- .../com/intuit/player/android/Constants.kt | 6 +-- .../intuit/player/android/extensions/Into.kt | 2 +- android/player/src/test/BUILD | 13 ++++++ .../player/src/test/java/android/util/Log.kt | 26 ++++++------ .../android/logger/AndroidLoggerTest.kt | 9 +---- .../player/android/utils/BrokenAsset.kt | 2 +- .../com/intuit/player/android/utils/Json.kt | 2 +- .../intuit/player/android/utils/LogUtil.kt | 5 +++ .../player/android/utils/NestedAsset.kt | 2 +- .../player/android/utils/OtherSimpleAsset.kt | 2 +- .../player/android/utils/SimpleAsset.kt | 2 +- .../player/android/utils/TestAssetsPlugin.kt | 2 +- .../intuit/player/android/utils/Updates.kt | 8 ++-- 24 files changed, 159 insertions(+), 71 deletions(-) create mode 100644 android/player-ui/BUILD create mode 100644 android/player-ui/deps.bzl create mode 100644 android/player-ui/src/main/AndroidManifest.xml rename android/{player/src/main/java/com/intuit/player/android => player-ui/src/main/java/com/intuit/player/android/mvvm}/lifecycle/PlayerViewModel.kt (98%) rename android/{player/src/main/java/com/intuit/player/android => player-ui/src/main/java/com/intuit/player/android/mvvm}/ui/PlayerFragment.kt (96%) rename android/{player => player-ui}/src/main/res/layout/default_fallback.xml (100%) rename android/{player => player-ui}/src/main/res/layout/fragment_player.xml (100%) rename android/{player => player-ui}/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt (91%) create mode 100644 android/player/src/test/BUILD create mode 100644 android/player/src/test/java/com/intuit/player/android/utils/LogUtil.kt diff --git a/android/deps.bzl b/android/deps.bzl index 533c78cbe..9bcc416bb 100644 --- a/android/deps.bzl +++ b/android/deps.bzl @@ -1,6 +1,7 @@ load("//jvm/dependencies:versions.bzl", "versions") load("//android/player:deps.bzl", player = "maven") load("//android/demo:deps.bzl", demo = "maven") +load("//android/player-ui:deps.bzl", ui = "maven") android = [ # Grab Databinding @@ -18,4 +19,4 @@ android = [ "androidx.fragment:fragment-ktx:%s" % versions.androidx.fragment, ] -maven = android + player + demo \ No newline at end of file +maven = android + player + demo + ui diff --git a/android/player-ui/BUILD b/android/player-ui/BUILD new file mode 100644 index 000000000..51c2f7ff0 --- /dev/null +++ b/android/player-ui/BUILD @@ -0,0 +1,40 @@ +load(":deps.bzl", "main_deps", "test_deps") +load("@build_constants//:constants.bzl", "VERSION") +load("//jvm:build.bzl", "distribution") +load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("@junit//junit5-jupiter-starter-bazel:junit5.bzl", "kt_jvm_junit5_test") +load("@rules_player//kotlin:lint.bzl", "lint") +load("@grab_bazel_common//tools/databinding:databinding.bzl", "kt_db_android_library") + +kt_db_android_library( + name = "player-mvvm", + srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "com.intuit.player.android.mvvm", + manifest = ":src/main/AndroidManifest.xml", + resource_files = glob(["src/main/res/**"]), + tags = ["maven_coordinates=com.intuit.player.android:player-mvvm:aar:%s" % VERSION], + visibility = ["//visibility:public"], + deps = main_deps, +) + +distribution( + name = "player-mvvm", + lib_name = "player-mvvm-databinding", + maven_coordinates = "com.intuit.player.android:player-mvvm:%s" % VERSION, +) + +kt_jvm_junit5_test( + name = "player-mvvm-tests", + srcs = glob(["src/test/java/**"]), + associates = [":player-mvvm-kotlin"], + kotlinc_opts = "//jvm:test_options", + test_package = "com.intuit.player.android.mvvm", + deps = [":player-mvvm", "//android/player/src/test:android_utils"] + test_deps, +) + +lint( + name = "player-mvvm", + srcs = glob(["src/**/*.kt"]), + lint_config = "//jvm:lint_config", +) diff --git a/android/player-ui/deps.bzl b/android/player-ui/deps.bzl new file mode 100644 index 000000000..1cb3b5a27 --- /dev/null +++ b/android/player-ui/deps.bzl @@ -0,0 +1,34 @@ +load("//jvm/dependencies:versions.bzl", "versions") +load("@rules_player//maven:parse_coordinates.bzl", "parse_coordinates") + +maven = [ + # UI helpers + "androidx.core:core-ktx:%s" % versions.androidx.core, + "androidx.appcompat:appcompat:%s" % versions.androidx.appcompat, + "androidx.transition:transition:%s" % versions.androidx.transition, + + # Lifecycle + "androidx.lifecycle:lifecycle-runtime-ktx:%s" % versions.androidx.lifecycle, + "androidx.lifecycle:lifecycle-viewmodel-ktx:%s" % versions.androidx.lifecycle, + + # Default fallback + "androidx.constraintlayout:constraintlayout:%s" % versions.androidx.constraintlayout, +] + +main_deps = parse_coordinates(maven) + [ + # JVM plugin deps + "//android/player:player", + "//plugins/coroutines/jvm:coroutines", +] + +main_resources = [ + # TS core deps + "//plugins/partial-match-fingerprint/core:PartialMatchFingerprintPlugin_Bundles", + "//core/partial-match-registry:Registry_Bundles", +] + +test_deps = [ + "@grab_bazel_common//tools/test:mockable-android-jar", + "@maven//:io_mockk_mockk", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test", +] diff --git a/android/player-ui/src/main/AndroidManifest.xml b/android/player-ui/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c80c8da94 --- /dev/null +++ b/android/player-ui/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/android/player/src/main/java/com/intuit/player/android/lifecycle/PlayerViewModel.kt b/android/player-ui/src/main/java/com/intuit/player/android/mvvm/lifecycle/PlayerViewModel.kt similarity index 98% rename from android/player/src/main/java/com/intuit/player/android/lifecycle/PlayerViewModel.kt rename to android/player-ui/src/main/java/com/intuit/player/android/mvvm/lifecycle/PlayerViewModel.kt index 7b298c372..bcac78f0b 100644 --- a/android/player/src/main/java/com/intuit/player/android/lifecycle/PlayerViewModel.kt +++ b/android/player-ui/src/main/java/com/intuit/player/android/mvvm/lifecycle/PlayerViewModel.kt @@ -1,4 +1,4 @@ -package com.intuit.player.android.lifecycle +package com.intuit.player.android.mvvm.lifecycle import android.app.Application import androidx.lifecycle.ViewModel @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope import com.intuit.player.android.AndroidPlayer import com.intuit.player.android.AndroidPlayerPlugin import com.intuit.player.android.asset.RenderableAsset +import com.intuit.player.android.lifecycle.ManagedPlayerState import com.intuit.player.jvm.core.bridge.runtime.Runtime import com.intuit.player.jvm.core.experimental.ExperimentalPlayerApi import com.intuit.player.jvm.core.managed.AsyncFlowIterator diff --git a/android/player/src/main/java/com/intuit/player/android/ui/PlayerFragment.kt b/android/player-ui/src/main/java/com/intuit/player/android/mvvm/ui/PlayerFragment.kt similarity index 96% rename from android/player/src/main/java/com/intuit/player/android/ui/PlayerFragment.kt rename to android/player-ui/src/main/java/com/intuit/player/android/mvvm/ui/PlayerFragment.kt index 6f6b81b3e..12d0c8024 100644 --- a/android/player/src/main/java/com/intuit/player/android/ui/PlayerFragment.kt +++ b/android/player-ui/src/main/java/com/intuit/player/android/mvvm/ui/PlayerFragment.kt @@ -1,4 +1,4 @@ -package com.intuit.player.android.ui +package com.intuit.player.android.mvvm.ui import android.content.Context import android.os.Bundle @@ -14,14 +14,14 @@ import androidx.transition.Transition import com.intuit.player.android.AndroidPlayer import com.intuit.player.android.asset.RenderableAsset import com.intuit.player.android.asset.SuspendableAsset -import com.intuit.player.android.databinding.DefaultFallbackBinding -import com.intuit.player.android.databinding.FragmentPlayerBinding import com.intuit.player.android.extensions.into import com.intuit.player.android.extensions.intoOnMain import com.intuit.player.android.extensions.transitionInto import com.intuit.player.android.lifecycle.ManagedPlayerState -import com.intuit.player.android.lifecycle.PlayerViewModel -import com.intuit.player.android.lifecycle.fail +import com.intuit.player.android.mvvm.databinding.DefaultFallbackBinding +import com.intuit.player.android.mvvm.databinding.FragmentPlayerBinding +import com.intuit.player.android.mvvm.lifecycle.PlayerViewModel +import com.intuit.player.android.mvvm.lifecycle.fail import com.intuit.player.jvm.core.experimental.ExperimentalPlayerApi import com.intuit.player.jvm.core.managed.AsyncFlowIterator import kotlinx.coroutines.CoroutineScope diff --git a/android/player/src/main/res/layout/default_fallback.xml b/android/player-ui/src/main/res/layout/default_fallback.xml similarity index 100% rename from android/player/src/main/res/layout/default_fallback.xml rename to android/player-ui/src/main/res/layout/default_fallback.xml diff --git a/android/player/src/main/res/layout/fragment_player.xml b/android/player-ui/src/main/res/layout/fragment_player.xml similarity index 100% rename from android/player/src/main/res/layout/fragment_player.xml rename to android/player-ui/src/main/res/layout/fragment_player.xml diff --git a/android/player/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt b/android/player-ui/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt similarity index 91% rename from android/player/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt rename to android/player-ui/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt index 6da79de44..a1b8df778 100644 --- a/android/player/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt +++ b/android/player-ui/src/test/java/com/intuit/player/android/lifecycle/PlayerViewModelTest.kt @@ -1,8 +1,9 @@ -package com.intuit.player.android.lifecycle +package com.intuit.player.android.mvvm.lifecycle import android.util.Level -import android.util.clearLogs +import com.intuit.player.android.lifecycle.ManagedPlayerState import com.intuit.player.android.utils.SimpleAsset +import com.intuit.player.android.utils.clearLogs import com.intuit.player.jvm.core.bridge.PlayerRuntimeException import com.intuit.player.jvm.core.bridge.runtime.Runtime import com.intuit.player.jvm.core.managed.AsyncFlowIterator @@ -104,7 +105,7 @@ internal class PlayerViewModelTest { ) } - @Test +/* @Test fun `AndroidPlayer isn't null`() { assertNotNull(viewModel.player) } @@ -115,7 +116,7 @@ internal class PlayerViewModelTest { viewModel.start() coVerify(exactly = 1) { flowIterator.next(any()) } assertPlayerState() - Level.Warn.assertLogged("WARN: AndroidPlayer: Warning in flow: simple-asset of type simple is not registered") + //Level.Warn.assertLogged("WARN: AndroidPlayer: Warning in flow: simple-asset of type simple is not registered") } @Test @@ -147,19 +148,20 @@ internal class PlayerViewModelTest { coEvery { flowIterator.next(any()) } returns validFlow andThen null viewModel.start() assertPlayerState() - Level.Info.assertLogged("INFO: AndroidPlayer: Flow completed successfully!, {state_type=END, outcome=done}") - } - - @Test - fun `start error path`() = runBlocking { - coEvery { flowIterator.next(any()) } returns invalidFlow - viewModel.start() - assertPlayerState() - Level.Error.assertLogged("ERROR: AndroidPlayer: Error in Flow!, {}") - Level.Error.assertLogged("ERROR: AndroidPlayer: Something went wrong: No flow defined for: FLOW") - } - - @Test + //Level.Info.assertLogged("INFO: AndroidPlayer: Flow completed successfully!, {state_type=END, outcome=done}") + }*/ + +// @Test +// fun `start error path`() = runBlocking { +// coEvery { flowIterator.next(any()) } returns invalidFlow +// viewModel.start() +// assertPlayerState() +// //Level.Error.assertLogged("ERROR: AndroidPlayer: Error in Flow!, {}") +// assertTrue(!Level.Error.getLogs().isEmpty()) +// //Level.Error.assertLogged("ERROR: AndroidPlayer: Something went wrong: No flow defined for: FLOW") +// } + + /*@Test fun `start will emit error state if iterator errors out`() = runBlocking { val exception = Exception("oh no") coEvery { flowIterator.next(any()) } throws exception @@ -258,5 +260,5 @@ internal class PlayerViewModelTest { // ensures safe handling during cleanup when player is never instantiated viewModel.onCleared() - } + }*/ } diff --git a/android/player/BUILD b/android/player/BUILD index 561fa6ac1..6f3aa7a1a 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -20,21 +20,17 @@ kt_db_android_library( deps = main_deps, ) -distribution( - name = "player", - lib_name = "player-databinding", - maven_coordinates = "com.intuit.player.android:player:%s" % VERSION, -) - kt_jvm_junit5_test( name = "player-tests", srcs = glob(["src/test/java/**"]), associates = [":player-kotlin"], kotlinc_opts = "//jvm:test_options", test_package = "com.intuit.player.android", - deps = [":player"] + test_deps, + deps = [":player", "//android/player/src/test:android_utils"] + test_deps, ) +exports_files(["src/main/AndroidManifest.xml"]) + lint( name = "player", srcs = glob(["src/**/*.kt"]), diff --git a/android/player/src/main/java/com/intuit/player/android/AndroidPlayer.kt b/android/player/src/main/java/com/intuit/player/android/AndroidPlayer.kt index 2745aeffc..3b48c6326 100644 --- a/android/player/src/main/java/com/intuit/player/android/AndroidPlayer.kt +++ b/android/player/src/main/java/com/intuit/player/android/AndroidPlayer.kt @@ -101,13 +101,13 @@ public class AndroidPlayer private constructor( ) } - internal class RecycleHook : SyncHook<(HookContext) -> Unit>() { + public class RecycleHook : SyncHook<(HookContext) -> Unit>() { public fun call(): Unit = super.call { f, context -> f(context) } } - internal class ReleaseHook : SyncHook<(HookContext) -> Unit>() { + public class ReleaseHook : SyncHook<(HookContext) -> Unit>() { public fun call(): Unit = super.call { f, context -> f(context) } @@ -124,8 +124,8 @@ public class AndroidPlayer private constructor( public val context: ContextHook = ContextHook() public val update: UpdateHook = UpdateHook() - internal val recycle: RecycleHook = RecycleHook() - internal val release: ReleaseHook = ReleaseHook() + public val recycle: RecycleHook = RecycleHook() + public val release: ReleaseHook = ReleaseHook() } override val hooks: Hooks = Hooks(player.hooks) diff --git a/android/player/src/main/java/com/intuit/player/android/Constants.kt b/android/player/src/main/java/com/intuit/player/android/Constants.kt index 803348414..8729e897d 100644 --- a/android/player/src/main/java/com/intuit/player/android/Constants.kt +++ b/android/player/src/main/java/com/intuit/player/android/Constants.kt @@ -1,5 +1,5 @@ package com.intuit.player.android -internal const val TYPE = "type" -internal const val METADATA = "metaData" -internal const val DEPRECATED_WITH_DECODABLEASSET = "Deprecated in favour of using DecodableAsset with RenderableAsset contextual serializer" +public const val TYPE = "type" +public const val METADATA = "metaData" +public const val DEPRECATED_WITH_DECODABLEASSET = "Deprecated in favour of using DecodableAsset with RenderableAsset contextual serializer" diff --git a/android/player/src/main/java/com/intuit/player/android/extensions/Into.kt b/android/player/src/main/java/com/intuit/player/android/extensions/Into.kt index ae981dc05..4798d6013 100644 --- a/android/player/src/main/java/com/intuit/player/android/extensions/Into.kt +++ b/android/player/src/main/java/com/intuit/player/android/extensions/Into.kt @@ -9,7 +9,7 @@ import androidx.transition.TransitionManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -internal suspend infix fun View?.intoOnMain(root: FrameLayout) = withContext(Dispatchers.Main) { +public suspend infix fun View?.intoOnMain(root: FrameLayout) = withContext(Dispatchers.Main) { into(root) } diff --git a/android/player/src/test/BUILD b/android/player/src/test/BUILD new file mode 100644 index 000000000..ff790d3e2 --- /dev/null +++ b/android/player/src/test/BUILD @@ -0,0 +1,13 @@ +load("//android/player:deps.bzl", "test_deps") +load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +kt_android_library( + name = "android_utils", + srcs = glob(["java/com/intuit/player/android/utils/*.kt", "java/android/**/*.kt"]), + custom_package = "com.intuit.player.android.utils", + manifest = "//android/player:src/main/AndroidManifest.xml", + deps = ["//android/player:player"] + test_deps, + visibility = ["//visibility:public"] +) + diff --git a/android/player/src/test/java/android/util/Log.kt b/android/player/src/test/java/android/util/Log.kt index 6c779bc31..e9e51fbb7 100644 --- a/android/player/src/test/java/android/util/Log.kt +++ b/android/player/src/test/java/android/util/Log.kt @@ -2,49 +2,49 @@ package android.util -internal var e: MutableList = mutableListOf() -internal fun e(tag: String, msg: String): Int { +import com.intuit.player.android.utils.* + +public var e: MutableList = mutableListOf() +public fun e(tag: String, msg: String): Int { val message = "ERROR: $tag: $msg" e.add(message) println(message) return 0 } -internal var w: MutableList = mutableListOf() -internal fun w(tag: String, msg: String): Int { +public var w: MutableList = mutableListOf() +public fun w(tag: String, msg: String): Int { val message = "WARN: $tag: $msg" w.add(message) println(message) return 0 } -internal var i: MutableList = mutableListOf() -internal fun i(tag: String, msg: String): Int { +public var i: MutableList = mutableListOf() +public fun i(tag: String, msg: String): Int { val message = "INFO: $tag: $msg" i.add(message) println(message) return 0 } -internal var d: MutableList = mutableListOf() -internal fun d(tag: String, msg: String): Int { +public var d: MutableList = mutableListOf() +public fun d(tag: String, msg: String): Int { val message = "DEBUG: $tag: $msg" d.add(message) println(message) return 0 } -internal var v: MutableList = mutableListOf() -internal fun v(tag: String, msg: String): Int { +public var v: MutableList = mutableListOf() +public fun v(tag: String, msg: String): Int { val message = "TRACE: $tag: $msg" v.add(message) println(message) return 0 } -internal fun clearLogs() = listOf(e, w, i, d, v).forEach { it.clear() } - -internal enum class Level { +enum class Level { Error, Warn, Info, Debug, Verbose; fun getLogs(): List = when (this) { diff --git a/android/player/src/test/java/com/intuit/player/android/logger/AndroidLoggerTest.kt b/android/player/src/test/java/com/intuit/player/android/logger/AndroidLoggerTest.kt index 7966f9e6d..d2cad89ed 100644 --- a/android/player/src/test/java/com/intuit/player/android/logger/AndroidLoggerTest.kt +++ b/android/player/src/test/java/com/intuit/player/android/logger/AndroidLoggerTest.kt @@ -1,11 +1,6 @@ package com.intuit.player.android.logger -import android.util.clearLogs -import android.util.d -import android.util.e -import android.util.i -import android.util.v -import android.util.w +import com.intuit.player.android.utils.clearLogs import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue @@ -35,8 +30,6 @@ internal class AndroidLoggerTest { logger.info(info) assertInfo() logger.warn(warn) - assertWarn() - logger.error(error) assertError() } diff --git a/android/player/src/test/java/com/intuit/player/android/utils/BrokenAsset.kt b/android/player/src/test/java/com/intuit/player/android/utils/BrokenAsset.kt index 10efdd500..73f7445d6 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/BrokenAsset.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/BrokenAsset.kt @@ -15,7 +15,7 @@ import com.intuit.player.jvm.utils.makeFlow import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json -internal class BrokenAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Data.serializer()) { +public class BrokenAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Data.serializer()) { @Serializable data class Data( diff --git a/android/player/src/test/java/com/intuit/player/android/utils/Json.kt b/android/player/src/test/java/com/intuit/player/android/utils/Json.kt index ac8f06e5b..7b09df5b9 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/Json.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/Json.kt @@ -3,4 +3,4 @@ package com.intuit.player.android.utils import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonElement -internal fun JsonElement.stringify() = Json.encodeToString(JsonElement.serializer(), this) +public fun JsonElement.stringify() = Json.encodeToString(JsonElement.serializer(), this) diff --git a/android/player/src/test/java/com/intuit/player/android/utils/LogUtil.kt b/android/player/src/test/java/com/intuit/player/android/utils/LogUtil.kt new file mode 100644 index 000000000..dc9160cd0 --- /dev/null +++ b/android/player/src/test/java/com/intuit/player/android/utils/LogUtil.kt @@ -0,0 +1,5 @@ +package com.intuit.player.android.utils + +import android.util.* + +fun clearLogs() = listOf(e, w, i, d, v).forEach { it.clear() } diff --git a/android/player/src/test/java/com/intuit/player/android/utils/NestedAsset.kt b/android/player/src/test/java/com/intuit/player/android/utils/NestedAsset.kt index edc420bf9..4e4261e15 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/NestedAsset.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/NestedAsset.kt @@ -16,7 +16,7 @@ import com.intuit.player.jvm.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -internal class NestedAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { +public class NestedAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { val nested = expand("nested") val nestedList = expandList("nestedAssets") diff --git a/android/player/src/test/java/com/intuit/player/android/utils/OtherSimpleAsset.kt b/android/player/src/test/java/com/intuit/player/android/utils/OtherSimpleAsset.kt index 5ba0a525f..2e8e6f0ff 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/OtherSimpleAsset.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/OtherSimpleAsset.kt @@ -14,7 +14,7 @@ import com.intuit.player.jvm.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -internal class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { +public class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { override suspend fun initView(data: Node) = ImageView(context) diff --git a/android/player/src/test/java/com/intuit/player/android/utils/SimpleAsset.kt b/android/player/src/test/java/com/intuit/player/android/utils/SimpleAsset.kt index 89e86f97e..33ede18f8 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/SimpleAsset.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/SimpleAsset.kt @@ -13,7 +13,7 @@ import com.intuit.player.jvm.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -internal class SimpleAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Node.serializer()) { +public class SimpleAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Node.serializer()) { override fun initView() = TextView(context) diff --git a/android/player/src/test/java/com/intuit/player/android/utils/TestAssetsPlugin.kt b/android/player/src/test/java/com/intuit/player/android/utils/TestAssetsPlugin.kt index 02ad12175..a1431fbf5 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/TestAssetsPlugin.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/TestAssetsPlugin.kt @@ -5,7 +5,7 @@ import com.intuit.player.android.AndroidPlayerPlugin import com.intuit.player.android.METADATA import com.intuit.player.android.TYPE -internal object TestAssetsPlugin : AndroidPlayerPlugin { +public object TestAssetsPlugin : AndroidPlayerPlugin { override fun apply(androidPlayer: AndroidPlayer) { androidPlayer.registerAsset("simple", ::SimpleAsset) androidPlayer.registerAsset( diff --git a/android/player/src/test/java/com/intuit/player/android/utils/Updates.kt b/android/player/src/test/java/com/intuit/player/android/utils/Updates.kt index 841684c8f..92942449e 100644 --- a/android/player/src/test/java/com/intuit/player/android/utils/Updates.kt +++ b/android/player/src/test/java/com/intuit/player/android/utils/Updates.kt @@ -14,19 +14,19 @@ import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.serialization.json.JsonElement import kotlin.coroutines.resume -internal sealed class Update { +public sealed class Update { data class Asset(val asset: RenderableAsset?, val index: Int) : Update() data class State(val state: PlayerFlowState) : Update() } -internal suspend fun AndroidPlayer.awaitFirstView(flow: JsonElement): RenderableAsset? = +public suspend fun AndroidPlayer.awaitFirstView(flow: JsonElement): RenderableAsset? = suspendCancellableCoroutine { cont -> onUpdate { asset, _ -> cont.resume(asset) } start(flow) } -internal fun AndroidPlayer.updates(flow: JsonElement, take: Int = 1) = updates(flow.stringify(), take) -internal fun AndroidPlayer.updates(flow: String, take: Int = 1): Flow = callbackFlow { +public fun AndroidPlayer.updates(flow: JsonElement, take: Int = 1) = updates(flow.stringify(), take) +public fun AndroidPlayer.updates(flow: String, take: Int = 1): Flow = callbackFlow { var count = 0 onUpdate { asset, _ -> trySend(Update.Asset(asset, count)).isSuccess From 2010395427e6d148db1e49ceecf667a900959229 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 26 Feb 2024 17:23:09 -0500 Subject: [PATCH 02/14] demo deps --- android/demo/deps.bzl | 1 + .../android/reference/demo/lifecycle/DemoPlayerViewModel.kt | 2 +- .../android/reference/demo/ui/base/BasePlayerFragment.kt | 4 ++-- .../player/android/reference/demo/ui/main/MainActivity.kt | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/android/demo/deps.bzl b/android/demo/deps.bzl index 8b6344aef..7d61ffc78 100644 --- a/android/demo/deps.bzl +++ b/android/demo/deps.bzl @@ -22,6 +22,7 @@ maven_test = [ maven = maven_main + maven_test main_deps = parse_coordinates(maven_main) + [ + "//android/player-ui:player-mvvm", "//jvm/utils", "//plugins/reference-assets/android:assets", "//plugins/common-types/jvm:common-types", diff --git a/android/demo/src/main/java/com/intuit/player/android/reference/demo/lifecycle/DemoPlayerViewModel.kt b/android/demo/src/main/java/com/intuit/player/android/reference/demo/lifecycle/DemoPlayerViewModel.kt index 8bb74b997..1d3a972dd 100644 --- a/android/demo/src/main/java/com/intuit/player/android/reference/demo/lifecycle/DemoPlayerViewModel.kt +++ b/android/demo/src/main/java/com/intuit/player/android/reference/demo/lifecycle/DemoPlayerViewModel.kt @@ -2,7 +2,7 @@ package com.intuit.player.android.reference.demo.lifecycle import com.intuit.player.android.AndroidPlayer import com.intuit.player.android.AndroidPlayer.Config -import com.intuit.player.android.lifecycle.PlayerViewModel +import com.intuit.player.android.mvvm.lifecycle.PlayerViewModel import com.intuit.player.android.reference.assets.ReferenceAssetsPlugin import com.intuit.player.jvm.core.managed.AsyncFlowIterator import com.intuit.player.jvm.core.player.state.PlayerFlowState diff --git a/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/base/BasePlayerFragment.kt b/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/base/BasePlayerFragment.kt index 3030ab89a..e9be0e693 100644 --- a/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/base/BasePlayerFragment.kt +++ b/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/base/BasePlayerFragment.kt @@ -11,9 +11,9 @@ import androidx.navigation.fragment.findNavController import com.afollestad.materialdialogs.MaterialDialog import com.alexii.j2v8debugger.StethoHelper import com.intuit.player.android.lifecycle.ManagedPlayerState -import com.intuit.player.android.lifecycle.PlayerViewModel +import com.intuit.player.android.mvvm.lifecycle.PlayerViewModel import com.intuit.player.android.reference.demo.lifecycle.DemoPlayerViewModel -import com.intuit.player.android.ui.PlayerFragment +import com.intuit.player.android.mvvm.ui.PlayerFragment import com.intuit.player.jvm.core.bridge.serialization.json.prettify import com.intuit.player.jvm.core.bridge.toJson import com.intuit.player.jvm.core.managed.AsyncFlowIterator diff --git a/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/main/MainActivity.kt b/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/main/MainActivity.kt index 565a46a0f..655d415c8 100644 --- a/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/main/MainActivity.kt +++ b/android/demo/src/main/java/com/intuit/player/android/reference/demo/ui/main/MainActivity.kt @@ -23,7 +23,7 @@ import com.google.android.material.navigation.NavigationView import com.intuit.player.android.reference.demo.R import com.intuit.player.android.reference.demo.model.AssetMock import com.intuit.player.android.reference.demo.model.StringMock -import com.intuit.player.android.ui.PlayerFragment +import com.intuit.player.android.mvvm.ui.PlayerFragment import com.intuit.player.jvm.utils.mocks.ClassLoaderMock import com.intuit.player.jvm.utils.mocks.Mock import com.intuit.player.jvm.utils.mocks.getFlow From 2f21b7b894c885ccfed826751ba96a0638e3d8d8 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 26 Feb 2024 19:09:23 -0500 Subject: [PATCH 03/14] lint --- .../reference/demo/ui/base/BasePlayerFragment.kt | 2 +- .../android/reference/demo/ui/main/MainActivity.kt | 2 +- .../android/mvvm/lifecycle/PlayerViewModelTest.kt | 11 ----------- 3 files changed, 2 insertions(+), 13 deletions(-) diff --git a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt index c91e036c2..a8ae4668c 100644 --- a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt +++ b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt @@ -12,8 +12,8 @@ import com.afollestad.materialdialogs.MaterialDialog import com.alexii.j2v8debugger.StethoHelper import com.intuit.playerui.android.lifecycle.ManagedPlayerState import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel -import com.intuit.playerui.android.reference.demo.lifecycle.DemoPlayerViewModel import com.intuit.playerui.android.mvvm.ui.PlayerFragment +import com.intuit.playerui.android.reference.demo.lifecycle.DemoPlayerViewModel import com.intuit.playerui.core.bridge.serialization.json.prettify import com.intuit.playerui.core.bridge.toJson import com.intuit.playerui.core.managed.AsyncFlowIterator diff --git a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt index 9dc22251e..299562255 100644 --- a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt +++ b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt @@ -20,10 +20,10 @@ import androidx.navigation.ui.onNavDestinationSelected import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController import com.google.android.material.navigation.NavigationView +import com.intuit.playerui.android.mvvm.ui.PlayerFragment import com.intuit.playerui.android.reference.demo.R import com.intuit.playerui.android.reference.demo.model.AssetMock import com.intuit.playerui.android.reference.demo.model.StringMock -import com.intuit.playerui.android.mvvm.ui.PlayerFragment import com.intuit.playerui.utils.mocks.ClassLoaderMock import com.intuit.playerui.utils.mocks.Mock import com.intuit.playerui.utils.mocks.getFlow diff --git a/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt index 61b6d090d..71d6fc869 100644 --- a/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt +++ b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt @@ -2,17 +2,10 @@ package com.intuit.playerui.android.mvvm.lifecycle import android.util.Level import com.intuit.playerui.android.utils.clearLogs -import com.intuit.playerui.android.utils.SimpleAsset -import com.intuit.playerui.core.bridge.PlayerRuntimeException import com.intuit.playerui.core.bridge.runtime.Runtime import com.intuit.playerui.core.managed.AsyncFlowIterator -import com.intuit.playerui.core.player.state.CompletedState -import com.intuit.playerui.core.player.state.ErrorState -import com.intuit.playerui.core.player.state.InProgressState import com.intuit.playerui.core.player.state.PlayerFlowState -import com.intuit.playerui.core.player.state.ReleasedState import io.mockk.coEvery -import io.mockk.coVerify import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.junit5.MockKExtension @@ -20,16 +13,12 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.delay -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.TestCoroutineScope import kotlinx.coroutines.withTimeout import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNotNull -import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(MockKExtension::class) From bb5538f548d0a835ef5895f137256844ab9250d7 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 26 Feb 2024 20:30:19 -0500 Subject: [PATCH 04/14] Update docs/site/pages/assets/reference.mdx Co-authored-by: Harris Borawski --- docs/site/pages/assets/reference.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/site/pages/assets/reference.mdx b/docs/site/pages/assets/reference.mdx index 53be6f8d6..09b4c202c 100644 --- a/docs/site/pages/assets/reference.mdx +++ b/docs/site/pages/assets/reference.mdx @@ -49,7 +49,7 @@ struct MyApp: View { Alongside distributing the Android Player framework, there is a reference assets library used as an example of how Player APIs work for building assets. These are intended to serve as a reference, but can be used early on in development as a means of understanding how to work with Player. This asset set uses the shared TypeScript transform functions that the Web and Android players use for their reference assets, ensuring consistent behavior across platforms. These assets can be loaded into Player like so: ```kotlin -import com.intuit.player`.android.reference.assets.ReferenceAssetsPlugin +import com.intuit.player.android.reference.assets.ReferenceAssetsPlugin val player = AndroidPlayer(context, ReferenceAssetsPlugin()) ``` From c7708c789edb9d47545c36d5ae6a40a1e3994b9c Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 26 Feb 2024 21:56:13 -0500 Subject: [PATCH 05/14] put publishing back --- android/player/BUILD | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/android/player/BUILD b/android/player/BUILD index b4101e36d..1bcc41965 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -20,6 +20,12 @@ kt_db_android_library( deps = main_deps, ) +distribution( + name = "player", + lib_name = "player-databinding", + maven_coordinates = "com.intuit.playerui:android:%s" % VERSION, +) + kt_jvm_junit5_test( name = "player-tests", srcs = glob(["src/test/java/**"]), From 57ae6ada002bbcde3856eb8391440655bd7ccc93 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Sun, 3 Mar 2024 21:49:37 -0500 Subject: [PATCH 06/14] working mvvm tests --- android/player-ui/BUILD | 21 +++++---- .../mvvm/lifecycle/PlayerViewModelTest.kt | 46 ++++++++++++------- android/player/BUILD | 14 +++--- android/player/build.bzl | 27 +++++++++++ .../playerui/android/logger/AndroidLogger.kt | 2 +- android/player/src/test/BUILD | 13 ------ .../player/src/test/java/android/util/BUILD | 9 ++++ .../player/src/test/java/android/util/Log.kt | 2 - .../intuit/playerui/android/extensions/BUILD | 11 +++++ .../android/logger/AndroidLoggerTest.kt | 7 ++- .../com/intuit/playerui/android/logger/BUILD | 8 ++++ .../intuit/playerui/android/registry/BUILD | 10 ++++ .../intuit/playerui/android/renderer/BUILD | 18 ++++++++ .../com/intuit/playerui/android/utils/BUILD | 27 +++++++++++ 14 files changed, 166 insertions(+), 49 deletions(-) create mode 100644 android/player/build.bzl delete mode 100644 android/player/src/test/BUILD create mode 100644 android/player/src/test/java/android/util/BUILD create mode 100644 android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD create mode 100644 android/player/src/test/java/com/intuit/playerui/android/logger/BUILD create mode 100644 android/player/src/test/java/com/intuit/playerui/android/registry/BUILD create mode 100644 android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD create mode 100644 android/player/src/test/java/com/intuit/playerui/android/utils/BUILD diff --git a/android/player-ui/BUILD b/android/player-ui/BUILD index 440d5dab7..25967ce7c 100644 --- a/android/player-ui/BUILD +++ b/android/player-ui/BUILD @@ -24,14 +24,19 @@ distribution( maven_coordinates = "com.intuit.playerui.android:player-mvvm:%s" % VERSION, ) -#kt_jvm_junit5_test( -# name = "player-mvvm-tests", -# srcs = glob(["src/test/java/**"]), -# associates = [":player-mvvm-kotlin"], -# kotlinc_opts = "//jvm:test_options", -# test_package = "com.intuit.playerui.android.mvvm", -# deps = [":player-mvvm", "//android/player/src/test:android_utils"] + test_deps, -#) +kt_jvm_junit5_test( + name = "player-mvvm-tests", + srcs = glob(["src/test/java/**/*.kt"]), + kotlinc_opts = "//jvm:test_options", + test_package = "com.intuit.playerui.android.mvvm", + deps = [ + "//android/player:player", + ":player-mvvm", + "//android/player/src/test/java/android/util:android_utils_stub", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_test_utils", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_log_util" + ] + test_deps, +) lint( name = "player-mvvm", diff --git a/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt index 71d6fc869..f31ec6893 100644 --- a/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt +++ b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt @@ -1,11 +1,19 @@ package com.intuit.playerui.android.mvvm.lifecycle import android.util.Level +import com.intuit.playerui.android.lifecycle.ManagedPlayerState +import com.intuit.playerui.android.utils.SimpleAsset import com.intuit.playerui.android.utils.clearLogs +import com.intuit.playerui.core.bridge.PlayerRuntimeException import com.intuit.playerui.core.bridge.runtime.Runtime import com.intuit.playerui.core.managed.AsyncFlowIterator +import com.intuit.playerui.core.player.state.CompletedState +import com.intuit.playerui.core.player.state.ErrorState +import com.intuit.playerui.core.player.state.InProgressState import com.intuit.playerui.core.player.state.PlayerFlowState +import com.intuit.playerui.core.player.state.ReleasedState import io.mockk.coEvery +import io.mockk.coVerify import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.junit5.MockKExtension @@ -13,12 +21,16 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.delay +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.TestCoroutineScope import kotlinx.coroutines.withTimeout import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(MockKExtension::class) @@ -93,7 +105,7 @@ internal class PlayerViewModelTest { ) } -/* @Test + @Test fun `AndroidPlayer isn't null`() { assertNotNull(viewModel.player) } @@ -104,7 +116,7 @@ internal class PlayerViewModelTest { viewModel.start() coVerify(exactly = 1) { flowIterator.next(any()) } assertPlayerState() - //Level.Warn.assertLogged("WARN: AndroidPlayer: Warning in flow: simple-asset of type simple is not registered") + Level.Warn.assertLogged("WARN: AndroidPlayer: Warning in flow: simple-asset of type simple is not registered") } @Test @@ -136,20 +148,20 @@ internal class PlayerViewModelTest { coEvery { flowIterator.next(any()) } returns validFlow andThen null viewModel.start() assertPlayerState() - //Level.Info.assertLogged("INFO: AndroidPlayer: Flow completed successfully!, {state_type=END, outcome=done}") - }*/ - -// @Test -// fun `start error path`() = runBlocking { -// coEvery { flowIterator.next(any()) } returns invalidFlow -// viewModel.start() -// assertPlayerState() -// //Level.Error.assertLogged("ERROR: AndroidPlayer: Error in Flow!, {}") -// assertTrue(!Level.Error.getLogs().isEmpty()) -// //Level.Error.assertLogged("ERROR: AndroidPlayer: Something went wrong: No flow defined for: FLOW") -// } - - /*@Test + Level.Info.assertLogged("INFO: AndroidPlayer: Flow completed successfully!, {state_type=END, outcome=done}") + } + + @Test + fun `start error path`() = runBlocking { + coEvery { flowIterator.next(any()) } returns invalidFlow + viewModel.start() + assertPlayerState() + Level.Error.assertLogged("ERROR: AndroidPlayer: Error in Flow!, {}") + assertTrue(!Level.Error.getLogs().isEmpty()) + Level.Error.assertLogged("ERROR: AndroidPlayer: Something went wrong: No flow defined for: FLOW") + } + + @Test fun `start will emit error state if iterator errors out`() = runBlocking { val exception = Exception("oh no") coEvery { flowIterator.next(any()) } throws exception @@ -248,5 +260,5 @@ internal class PlayerViewModelTest { // ensures safe handling during cleanup when player is never instantiated viewModel.onCleared() - }*/ + } } diff --git a/android/player/BUILD b/android/player/BUILD index 1bcc41965..5c70c5d3b 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -3,7 +3,7 @@ load("@build_constants//:constants.bzl", "VERSION") load("//jvm:build.bzl", "distribution") load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") -load("@junit//junit5-jupiter-starter-bazel:junit5.bzl", "kt_jvm_junit5_test") +load("//android/player:build.bzl", "kt_player_test") load("@rules_player//kotlin:lint.bzl", "lint") load("@grab_bazel_common//tools/databinding:databinding.bzl", "kt_db_android_library") @@ -26,13 +26,13 @@ distribution( maven_coordinates = "com.intuit.playerui:android:%s" % VERSION, ) -kt_jvm_junit5_test( +kt_player_test( name = "player-tests", - srcs = glob(["src/test/java/**"]), - associates = [":player-kotlin"], - kotlinc_opts = "//jvm:test_options", - test_package = "com.intuit.playerui.android", - deps = [":player", "//android/player/src/test:android_utils"] + test_deps, + srcs = [ + "src/test/java/com/intuit/playerui/android/AndroidPlayerTest.kt", + "src/test/java/com/intuit/playerui/android/AssetContextTest.kt" + ], + associates = [":player-kotlin"] ) exports_files(["src/main/AndroidManifest.xml"]) diff --git a/android/player/build.bzl b/android/player/build.bzl new file mode 100644 index 000000000..7f82cad76 --- /dev/null +++ b/android/player/build.bzl @@ -0,0 +1,27 @@ +load("@junit//junit5-jupiter-starter-bazel:junit5.bzl", "kt_jvm_junit5_test") +load("@rules_player//kotlin:lint.bzl", "lint") +load("//android/player:deps.bzl", "test_deps") + +def kt_player_test( + name, + srcs = [], + associates = [], + deps = []): + kt_jvm_junit5_test( + name = name, + srcs = srcs, + associates = associates, + kotlinc_opts = "//jvm:test_options", + test_package = "com.intuit.playerui.android", + deps = deps + [ + "//android/player:player", + "//android/player/src/test/java/android/util:android_utils_stub", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_test_utils", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_log_util"] + test_deps, + ) + + lint( + name = name, + srcs = native.glob(["**/*.kt"]), + lint_config = "//jvm:lint_config", + ) diff --git a/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt b/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt index 2944f950f..7dec5b1a2 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt @@ -4,7 +4,7 @@ import android.util.Log import com.intuit.playerui.core.plugins.LoggerPlugin /** Default Android logger */ -internal class AndroidLogger(val name: String = TAG) : LoggerPlugin { +class AndroidLogger(val name: String = TAG) : LoggerPlugin { companion object { private val TAG = AndroidLogger::class.java.simpleName diff --git a/android/player/src/test/BUILD b/android/player/src/test/BUILD deleted file mode 100644 index d556a857f..000000000 --- a/android/player/src/test/BUILD +++ /dev/null @@ -1,13 +0,0 @@ -load("//android/player:deps.bzl", "test_deps") -load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") -load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") - -kt_android_library( - name = "android_utils", - srcs = glob(["java/com/intuit/playerui/android/utils/*.kt", "java/android/**/*.kt"]), - custom_package = "com.intuit.playerui.android.utils", - manifest = "//android/player:src/main/AndroidManifest.xml", - deps = ["//android/player:player"] + test_deps, - visibility = ["//visibility:public"] -) - diff --git a/android/player/src/test/java/android/util/BUILD b/android/player/src/test/java/android/util/BUILD new file mode 100644 index 000000000..ec13deac7 --- /dev/null +++ b/android/player/src/test/java/android/util/BUILD @@ -0,0 +1,9 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("//android/player:deps.bzl", "test_deps") + +kt_jvm_library( + name = "android_utils_stub", + srcs = ["Log.kt"], + deps = ["//android/player:player"], + visibility = ["//visibility:public"] +) diff --git a/android/player/src/test/java/android/util/Log.kt b/android/player/src/test/java/android/util/Log.kt index f224f5cbf..0c061a501 100644 --- a/android/player/src/test/java/android/util/Log.kt +++ b/android/player/src/test/java/android/util/Log.kt @@ -2,8 +2,6 @@ package android.util -import com.intuit.playerui.android.utils.* - public var e: MutableList = mutableListOf() public fun e(tag: String, msg: String): Int { val message = "ERROR: $tag: $msg" diff --git a/android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD b/android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD new file mode 100644 index 000000000..5fc69cb41 --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD @@ -0,0 +1,11 @@ +load("//android/player:build.bzl", "kt_player_test") + +kt_player_test( + name = "extensions-tests", + srcs = [ + "CoroutineTestDispatcherExtension.kt", + "IntoKtTest.kt" + ], +) + +exports_files(["CoroutineTestDispatcherExtension.kt"]) diff --git a/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt b/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt index 3473ca25a..bde356fc8 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt @@ -1,5 +1,10 @@ package com.intuit.playerui.android.logger +import android.util.d +import android.util.e +import android.util.i +import android.util.v +import android.util.w import com.intuit.playerui.android.utils.clearLogs import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals @@ -30,7 +35,7 @@ internal class AndroidLoggerTest { logger.info(info) assertInfo() logger.warn(warn) - assertError() + assertWarn() } @Test diff --git a/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD new file mode 100644 index 000000000..402898482 --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD @@ -0,0 +1,8 @@ +load("//android/player:build.bzl", "kt_player_test") + +kt_player_test( + name = "logger-tests", + srcs = [ + "AndroidLoggerTest.kt" + ], +) diff --git a/android/player/src/test/java/com/intuit/playerui/android/registry/BUILD b/android/player/src/test/java/com/intuit/playerui/android/registry/BUILD new file mode 100644 index 000000000..c98757d4a --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/registry/BUILD @@ -0,0 +1,10 @@ +load("//android/player:build.bzl", "kt_player_test") + +kt_player_test( + name = "registry-plugin-tests", + srcs = [ + "RegistryPluginTest.kt", + "//android/player/src/test/java/com/intuit/playerui/android/renderer:BaseRenderableAssetTest.kt", + "//android/player/src/test/java/com/intuit/playerui/android/extensions:CoroutineTestDispatcherExtension.kt" + ] +) diff --git a/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD new file mode 100644 index 000000000..3f8056e6e --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD @@ -0,0 +1,18 @@ +load("//android/player:build.bzl", "kt_player_test") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("//android/player:deps.bzl", "test_deps") + +kt_player_test( + name = "render-tests", + srcs = [ + "BaseRenderableAssetTest.kt", + "BrokenAssetTest.kt", + "HydrationScopeTest.kt", + "NestedAssetTest.kt", + "SimpleAssetTest.kt", + "//android/player/src/test/java/com/intuit/playerui/android/extensions:CoroutineTestDispatcherExtension.kt" + ] +) + +exports_files(["BaseRenderableAssetTest.kt"]) + diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD new file mode 100644 index 000000000..758a05c2a --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD @@ -0,0 +1,27 @@ +load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("//android/player:deps.bzl", "test_deps") + +kt_android_library( + name = "android_test_utils", + srcs = [ + "Json.kt", + "BrokenAsset.kt", + "NestedAsset.kt", + "OtherSimpleAsset.kt", + "SimpleAsset.kt", + "TestAssetsPlugin.kt", + "Updates.kt" + ], + custom_package = "com.intuit.playerui.android.utils", + manifest = "//android/player:src/main/AndroidManifest.xml", + deps = ["//android/player:player"] + test_deps, + visibility = ["//visibility:public"] +) + +kt_jvm_library( + name = "android_log_util", + srcs = ["LogUtil.kt"], + deps = ["//android/player:player", "//android/player/src/test/java/android/util:android_utils_stub"], + visibility = ["//visibility:public"] +) From 2d614c6f4011eb22614480a3c0a4ab9adddf7560 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 12:34:28 -0500 Subject: [PATCH 07/14] working player tests --- android/player/BUILD | 9 +++++++-- .../playerui/android/{renderer => }/BrokenAssetTest.kt | 4 +--- .../test/java/com/intuit/playerui/android/renderer/BUILD | 1 - .../test/java/com/intuit/playerui/android/utils/BUILD | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) rename android/player/src/test/java/com/intuit/playerui/android/{renderer => }/BrokenAssetTest.kt (94%) diff --git a/android/player/BUILD b/android/player/BUILD index 5c70c5d3b..a05c52196 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -30,12 +30,17 @@ kt_player_test( name = "player-tests", srcs = [ "src/test/java/com/intuit/playerui/android/AndroidPlayerTest.kt", - "src/test/java/com/intuit/playerui/android/AssetContextTest.kt" + "src/test/java/com/intuit/playerui/android/AssetContextTest.kt", + "src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt" ], associates = [":player-kotlin"] ) -exports_files(["src/main/AndroidManifest.xml"]) +filegroup( + name = "manifest", + srcs = ["src/main/AndroidManifest.xml"], + visibility = ["//visibility:public"] +) lint( name = "player", diff --git a/android/player/src/test/java/com/intuit/playerui/android/renderer/BrokenAssetTest.kt b/android/player/src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt similarity index 94% rename from android/player/src/test/java/com/intuit/playerui/android/renderer/BrokenAssetTest.kt rename to android/player/src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt index fc2f315bf..28a9f8b24 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/renderer/BrokenAssetTest.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt @@ -1,10 +1,8 @@ -package com.intuit.playerui.android.renderer +package com.intuit.playerui.android import android.content.Context import android.widget.FrameLayout import android.widget.LinearLayout -import com.intuit.playerui.android.AndroidPlayer -import com.intuit.playerui.android.AssetContext import com.intuit.playerui.android.asset.StaleViewException import com.intuit.playerui.android.utils.BrokenAsset import com.intuit.playerui.android.utils.BrokenAsset.Companion.asset diff --git a/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD index 3f8056e6e..f10ae0231 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD +++ b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD @@ -6,7 +6,6 @@ kt_player_test( name = "render-tests", srcs = [ "BaseRenderableAssetTest.kt", - "BrokenAssetTest.kt", "HydrationScopeTest.kt", "NestedAssetTest.kt", "SimpleAssetTest.kt", diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD index 758a05c2a..1894d7c38 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD @@ -14,7 +14,7 @@ kt_android_library( "Updates.kt" ], custom_package = "com.intuit.playerui.android.utils", - manifest = "//android/player:src/main/AndroidManifest.xml", + manifest = "//android/player:manifest", deps = ["//android/player:player"] + test_deps, visibility = ["//visibility:public"] ) From a25e7866e267fc1bddffb3037a79e5787b4c2c35 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 15:25:37 -0500 Subject: [PATCH 08/14] not explicitly public --- .../player/src/test/java/android/util/Log.kt | 20 +++++++++---------- .../playerui/android/utils/NestedAsset.kt | 2 +- .../playerui/android/utils/SimpleAsset.kt | 2 +- .../android/utils/TestAssetsPlugin.kt | 2 +- .../intuit/playerui/android/utils/Updates.kt | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/android/player/src/test/java/android/util/Log.kt b/android/player/src/test/java/android/util/Log.kt index 0c061a501..646e4eb4e 100644 --- a/android/player/src/test/java/android/util/Log.kt +++ b/android/player/src/test/java/android/util/Log.kt @@ -2,40 +2,40 @@ package android.util -public var e: MutableList = mutableListOf() -public fun e(tag: String, msg: String): Int { +var e: MutableList = mutableListOf() +fun e(tag: String, msg: String): Int { val message = "ERROR: $tag: $msg" e.add(message) println(message) return 0 } -public var w: MutableList = mutableListOf() -public fun w(tag: String, msg: String): Int { +var w: MutableList = mutableListOf() +fun w(tag: String, msg: String): Int { val message = "WARN: $tag: $msg" w.add(message) println(message) return 0 } -public var i: MutableList = mutableListOf() -public fun i(tag: String, msg: String): Int { +var i: MutableList = mutableListOf() +fun i(tag: String, msg: String): Int { val message = "INFO: $tag: $msg" i.add(message) println(message) return 0 } -public var d: MutableList = mutableListOf() -public fun d(tag: String, msg: String): Int { +var d: MutableList = mutableListOf() +fun d(tag: String, msg: String): Int { val message = "DEBUG: $tag: $msg" d.add(message) println(message) return 0 } -public var v: MutableList = mutableListOf() -public fun v(tag: String, msg: String): Int { +var v: MutableList = mutableListOf() +fun v(tag: String, msg: String): Int { val message = "TRACE: $tag: $msg" v.add(message) println(message) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt index 6442c8ab9..20e8094c4 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt @@ -16,7 +16,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -public class NestedAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { +class NestedAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { val nested = expand("nested") val nestedList = expandList("nestedAssets") diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt index 7fabe8892..d8ae5abb8 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt @@ -13,7 +13,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -public class SimpleAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Node.serializer()) { +class SimpleAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Node.serializer()) { override fun initView() = TextView(context) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt index 8fad1937b..46d554c63 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt @@ -5,7 +5,7 @@ import com.intuit.playerui.android.AndroidPlayerPlugin import com.intuit.playerui.android.METADATA import com.intuit.playerui.android.TYPE -public object TestAssetsPlugin : AndroidPlayerPlugin { +object TestAssetsPlugin : AndroidPlayerPlugin { override fun apply(androidPlayer: AndroidPlayer) { androidPlayer.registerAsset("simple", ::SimpleAsset) androidPlayer.registerAsset( diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt index 7f0f314ba..5972a8b77 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt @@ -14,19 +14,19 @@ import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.serialization.json.JsonElement import kotlin.coroutines.resume -public sealed class Update { +sealed class Update { data class Asset(val asset: RenderableAsset?, val index: Int) : Update() data class State(val state: PlayerFlowState) : Update() } -public suspend fun AndroidPlayer.awaitFirstView(flow: JsonElement): RenderableAsset? = +suspend fun AndroidPlayer.awaitFirstView(flow: JsonElement): RenderableAsset? = suspendCancellableCoroutine { cont -> onUpdate { asset, _ -> cont.resume(asset) } start(flow) } -public fun AndroidPlayer.updates(flow: JsonElement, take: Int = 1) = updates(flow.stringify(), take) -public fun AndroidPlayer.updates(flow: String, take: Int = 1): Flow = callbackFlow { +fun AndroidPlayer.updates(flow: JsonElement, take: Int = 1) = updates(flow.stringify(), take) +fun AndroidPlayer.updates(flow: String, take: Int = 1): Flow = callbackFlow { var count = 0 onUpdate { asset, _ -> trySend(Update.Asset(asset, count)).isSuccess From 48bdb92fc10939a7d53a8196f387aa8837b64a71 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 15:27:02 -0500 Subject: [PATCH 09/14] redundant check --- .../playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt index f31ec6893..363739edf 100644 --- a/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt +++ b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt @@ -157,7 +157,6 @@ internal class PlayerViewModelTest { viewModel.start() assertPlayerState() Level.Error.assertLogged("ERROR: AndroidPlayer: Error in Flow!, {}") - assertTrue(!Level.Error.getLogs().isEmpty()) Level.Error.assertLogged("ERROR: AndroidPlayer: Something went wrong: No flow defined for: FLOW") } From 9e0bd0369a621d1359b96be2cb0da4cfc175e443 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 15:36:00 -0500 Subject: [PATCH 10/14] internal constants --- android/player/BUILD | 6 ++++++ .../src/main/java/com/intuit/playerui/android/Constants.kt | 6 +++--- .../src/test/java/com/intuit/playerui/android/utils/BUILD | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/android/player/BUILD b/android/player/BUILD index a05c52196..b2ca2a37a 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -42,6 +42,12 @@ filegroup( visibility = ["//visibility:public"] ) +kt_jvm_library( + name = "constants", + srcs = ["src/main/java/com/intuit/playerui/android/Constants.kt"], + visibility = ["//visibility:public"] +) + lint( name = "player", srcs = glob(["src/**/*.kt"]), diff --git a/android/player/src/main/java/com/intuit/playerui/android/Constants.kt b/android/player/src/main/java/com/intuit/playerui/android/Constants.kt index 46065f87a..b33b2ea5e 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/Constants.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/Constants.kt @@ -1,5 +1,5 @@ package com.intuit.playerui.android -public const val TYPE = "type" -public const val METADATA = "metaData" -public const val DEPRECATED_WITH_DECODABLEASSET = "Deprecated in favour of using DecodableAsset with RenderableAsset contextual serializer" +internal const val TYPE = "type" +internal const val METADATA = "metaData" +internal const val DEPRECATED_WITH_DECODABLEASSET = "Deprecated in favour of using DecodableAsset with RenderableAsset contextual serializer" diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD index d4023044a..9ae894ee2 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD @@ -15,6 +15,7 @@ kt_android_library( ], custom_package = "com.intuit.playerui.android.utils", manifest = "//android/player:manifest", + associates = ["//android/player:constants"], deps = ["//android/player:player"] + test_deps, visibility = ["//visibility:public"] ) From eb53a561cbefe40bc952670749dae436febbf0db Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 17:22:52 -0500 Subject: [PATCH 11/14] player associates --- android/player/BUILD | 5 +++-- .../java/com/intuit/playerui/android/logger/AndroidLogger.kt | 2 +- .../src/test/java/com/intuit/playerui/android/logger/BUILD | 1 + .../src/test/java/com/intuit/playerui/android/utils/BUILD | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/android/player/BUILD b/android/player/BUILD index b2ca2a37a..8745328d5 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -43,8 +43,9 @@ filegroup( ) kt_jvm_library( - name = "constants", - srcs = ["src/main/java/com/intuit/playerui/android/Constants.kt"], + name = "player-associates", + srcs = ["src/main/java/com/intuit/playerui/android/Constants.kt", "src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt"], + deps = main_deps + ["@grab_bazel_common//tools/android:android_sdk"], visibility = ["//visibility:public"] ) diff --git a/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt b/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt index 7dec5b1a2..2944f950f 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt @@ -4,7 +4,7 @@ import android.util.Log import com.intuit.playerui.core.plugins.LoggerPlugin /** Default Android logger */ -class AndroidLogger(val name: String = TAG) : LoggerPlugin { +internal class AndroidLogger(val name: String = TAG) : LoggerPlugin { companion object { private val TAG = AndroidLogger::class.java.simpleName diff --git a/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD index 402898482..b9f5dab86 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD +++ b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD @@ -5,4 +5,5 @@ kt_player_test( srcs = [ "AndroidLoggerTest.kt" ], + associates = ["//android/player:player-associates"] ) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD index 9ae894ee2..a3372dd4a 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD @@ -15,7 +15,7 @@ kt_android_library( ], custom_package = "com.intuit.playerui.android.utils", manifest = "//android/player:manifest", - associates = ["//android/player:constants"], + associates = ["//android/player:player-associates"], deps = ["//android/player:player"] + test_deps, visibility = ["//visibility:public"] ) From 1b80a07f272d88edc05ad80a2b7da843af654a8a Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 17:39:29 -0500 Subject: [PATCH 12/14] encapsulate everything in associate --- android/player/BUILD | 7 +++---- android/player/build.bzl | 2 +- .../com/intuit/playerui/android/AndroidPlayer.kt | 12 ++++++------ .../com/intuit/playerui/android/extensions/Into.kt | 2 +- .../com/intuit/playerui/android/utils/BrokenAsset.kt | 2 +- .../java/com/intuit/playerui/android/utils/Json.kt | 2 +- .../playerui/android/utils/OtherSimpleAsset.kt | 2 +- 7 files changed, 14 insertions(+), 15 deletions(-) diff --git a/android/player/BUILD b/android/player/BUILD index 8745328d5..21c5a4e7a 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -32,8 +32,7 @@ kt_player_test( "src/test/java/com/intuit/playerui/android/AndroidPlayerTest.kt", "src/test/java/com/intuit/playerui/android/AssetContextTest.kt", "src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt" - ], - associates = [":player-kotlin"] + ] ) filegroup( @@ -44,8 +43,8 @@ filegroup( kt_jvm_library( name = "player-associates", - srcs = ["src/main/java/com/intuit/playerui/android/Constants.kt", "src/main/java/com/intuit/playerui/android/logger/AndroidLogger.kt"], - deps = main_deps + ["@grab_bazel_common//tools/android:android_sdk"], + srcs = glob(["src/main/java/**/*.kt"]) + [":player-stubs_binding.srcjar"], + deps = main_deps + ["@grab_bazel_common//tools/android:android_sdk", ":player-r-classes"], visibility = ["//visibility:public"] ) diff --git a/android/player/build.bzl b/android/player/build.bzl index 7f82cad76..878084fcf 100644 --- a/android/player/build.bzl +++ b/android/player/build.bzl @@ -10,7 +10,7 @@ def kt_player_test( kt_jvm_junit5_test( name = name, srcs = srcs, - associates = associates, + associates = ["//android/player:player-associates"], kotlinc_opts = "//jvm:test_options", test_package = "com.intuit.playerui.android", deps = deps + [ diff --git a/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt b/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt index 000ab876d..651f9a0f7 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt @@ -100,14 +100,14 @@ public class AndroidPlayer private constructor( ) } - public class RecycleHook : SyncHook<(HookContext) -> Unit>() { - public fun call(): Unit = super.call { f, context -> + internal class RecycleHook : SyncHook<(HookContext) -> Unit>() { + internal fun call(): Unit = super.call { f, context -> f(context) } } - public class ReleaseHook : SyncHook<(HookContext) -> Unit>() { - public fun call(): Unit = super.call { f, context -> + internal class ReleaseHook : SyncHook<(HookContext) -> Unit>() { + internal fun call(): Unit = super.call { f, context -> f(context) } } @@ -123,8 +123,8 @@ public class AndroidPlayer private constructor( public val context: ContextHook = ContextHook() public val update: UpdateHook = UpdateHook() - public val recycle: RecycleHook = RecycleHook() - public val release: ReleaseHook = ReleaseHook() + internal val recycle: RecycleHook = RecycleHook() + internal val release: ReleaseHook = ReleaseHook() } override val hooks: Hooks = Hooks(player.hooks) diff --git a/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt b/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt index 36ae2fe73..4d93e6695 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt @@ -9,7 +9,7 @@ import androidx.transition.TransitionManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -public suspend infix fun View?.intoOnMain(root: FrameLayout) = withContext(Dispatchers.Main) { +suspend infix fun View?.intoOnMain(root: FrameLayout) = withContext(Dispatchers.Main) { into(root) } diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt index 3b7872efa..12e3a260d 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt @@ -14,7 +14,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json -public class BrokenAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Data.serializer()) { +class BrokenAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Data.serializer()) { @Serializable data class Data( diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt index a4edeb9bc..44c50dc3e 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt @@ -3,4 +3,4 @@ package com.intuit.playerui.android.utils import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonElement -public fun JsonElement.stringify() = Json.encodeToString(JsonElement.serializer(), this) +fun JsonElement.stringify() = Json.encodeToString(JsonElement.serializer(), this) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt index 07e018850..a344b70be 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt @@ -14,7 +14,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -public class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { +class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { override suspend fun initView(data: Node) = ImageView(context) From 585bc4b0a10f90fbfb94ccffd920c6512ea0368e Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 17:42:32 -0500 Subject: [PATCH 13/14] revert api visibility change --- .../main/java/com/intuit/playerui/android/AndroidPlayer.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt b/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt index 651f9a0f7..42cd4e894 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/AndroidPlayer.kt @@ -101,13 +101,13 @@ public class AndroidPlayer private constructor( } internal class RecycleHook : SyncHook<(HookContext) -> Unit>() { - internal fun call(): Unit = super.call { f, context -> + public fun call(): Unit = super.call { f, context -> f(context) } } internal class ReleaseHook : SyncHook<(HookContext) -> Unit>() { - internal fun call(): Unit = super.call { f, context -> + public fun call(): Unit = super.call { f, context -> f(context) } } From 484867da6f2d51ddf32b9e5ea5c8292102c19942 Mon Sep 17 00:00:00 2001 From: brocollie08 Date: Mon, 4 Mar 2024 18:11:24 -0500 Subject: [PATCH 14/14] fix mvvm build --- android/player-ui/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/android/player-ui/BUILD b/android/player-ui/BUILD index 25967ce7c..119e0aff9 100644 --- a/android/player-ui/BUILD +++ b/android/player-ui/BUILD @@ -28,6 +28,7 @@ kt_jvm_junit5_test( name = "player-mvvm-tests", srcs = glob(["src/test/java/**/*.kt"]), kotlinc_opts = "//jvm:test_options", + associates = ["//android/player:player-associates"], test_package = "com.intuit.playerui.android.mvvm", deps = [ "//android/player:player",