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/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt
index ce0b452f9..3d3efa1ed 100644
--- a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt
+++ b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt
@@ -2,7 +2,7 @@ package com.intuit.playerui.android.reference.demo.lifecycle
import com.intuit.playerui.android.AndroidPlayer
import com.intuit.playerui.android.AndroidPlayer.Config
-import com.intuit.playerui.android.lifecycle.PlayerViewModel
+import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel
import com.intuit.playerui.android.reference.assets.ReferenceAssetsPlugin
import com.intuit.playerui.core.managed.AsyncFlowIterator
import com.intuit.playerui.core.player.state.PlayerFlowState
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 cac310b3b..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
@@ -11,9 +11,9 @@ import androidx.navigation.fragment.findNavController
import com.afollestad.materialdialogs.MaterialDialog
import com.alexii.j2v8debugger.StethoHelper
import com.intuit.playerui.android.lifecycle.ManagedPlayerState
-import com.intuit.playerui.android.lifecycle.PlayerViewModel
+import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel
+import com.intuit.playerui.android.mvvm.ui.PlayerFragment
import com.intuit.playerui.android.reference.demo.lifecycle.DemoPlayerViewModel
-import com.intuit.playerui.android.ui.PlayerFragment
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 abb30ce86..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.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/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..119e0aff9
--- /dev/null
+++ b/android/player-ui/BUILD
@@ -0,0 +1,46 @@
+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.playerui.android.mvvm",
+ manifest = ":src/main/AndroidManifest.xml",
+ resource_files = glob(["src/main/res/**"]),
+ tags = ["maven_coordinates=com.intuit.playerui.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.playerui.android:player-mvvm:%s" % VERSION,
+)
+
+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",
+ ":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",
+ 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/playerui/android/lifecycle/PlayerViewModel.kt b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModel.kt
similarity index 98%
rename from android/player/src/main/java/com/intuit/playerui/android/lifecycle/PlayerViewModel.kt
rename to android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModel.kt
index f9d0c3369..1d09cbdae 100644
--- a/android/player/src/main/java/com/intuit/playerui/android/lifecycle/PlayerViewModel.kt
+++ b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModel.kt
@@ -1,4 +1,4 @@
-package com.intuit.playerui.android.lifecycle
+package com.intuit.playerui.android.mvvm.lifecycle
import android.app.Application
import androidx.lifecycle.ViewModel
@@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope
import com.intuit.playerui.android.AndroidPlayer
import com.intuit.playerui.android.AndroidPlayerPlugin
import com.intuit.playerui.android.asset.RenderableAsset
+import com.intuit.playerui.android.lifecycle.ManagedPlayerState
import com.intuit.playerui.core.bridge.runtime.Runtime
import com.intuit.playerui.core.experimental.ExperimentalPlayerApi
import com.intuit.playerui.core.managed.AsyncFlowIterator
diff --git a/android/player/src/main/java/com/intuit/playerui/android/ui/PlayerFragment.kt b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/ui/PlayerFragment.kt
similarity index 96%
rename from android/player/src/main/java/com/intuit/playerui/android/ui/PlayerFragment.kt
rename to android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/ui/PlayerFragment.kt
index 1ac80e5c2..1c667a59c 100644
--- a/android/player/src/main/java/com/intuit/playerui/android/ui/PlayerFragment.kt
+++ b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/ui/PlayerFragment.kt
@@ -1,4 +1,4 @@
-package com.intuit.playerui.android.ui
+package com.intuit.playerui.android.mvvm.ui
import android.content.Context
import android.os.Bundle
@@ -14,14 +14,14 @@ import androidx.transition.Transition
import com.intuit.playerui.android.AndroidPlayer
import com.intuit.playerui.android.asset.RenderableAsset
import com.intuit.playerui.android.asset.SuspendableAsset
-import com.intuit.playerui.android.databinding.DefaultFallbackBinding
-import com.intuit.playerui.android.databinding.FragmentPlayerBinding
import com.intuit.playerui.android.extensions.into
import com.intuit.playerui.android.extensions.intoOnMain
import com.intuit.playerui.android.extensions.transitionInto
import com.intuit.playerui.android.lifecycle.ManagedPlayerState
-import com.intuit.playerui.android.lifecycle.PlayerViewModel
-import com.intuit.playerui.android.lifecycle.fail
+import com.intuit.playerui.android.mvvm.databinding.DefaultFallbackBinding
+import com.intuit.playerui.android.mvvm.databinding.FragmentPlayerBinding
+import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel
+import com.intuit.playerui.android.mvvm.lifecycle.fail
import com.intuit.playerui.core.experimental.ExperimentalPlayerApi
import com.intuit.playerui.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/playerui/android/lifecycle/PlayerViewModelTest.kt b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt
similarity index 98%
rename from android/player/src/test/java/com/intuit/playerui/android/lifecycle/PlayerViewModelTest.kt
rename to android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt
index d092d7d4e..363739edf 100644
--- a/android/player/src/test/java/com/intuit/playerui/android/lifecycle/PlayerViewModelTest.kt
+++ b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt
@@ -1,8 +1,9 @@
-package com.intuit.playerui.android.lifecycle
+package com.intuit.playerui.android.mvvm.lifecycle
import android.util.Level
-import android.util.clearLogs
+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
diff --git a/android/player/BUILD b/android/player/BUILD
index 700d4c5d6..21c5a4e7a 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,26 @@ 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"] + test_deps,
+ 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/BrokenAssetTest.kt"
+ ]
+)
+
+filegroup(
+ name = "manifest",
+ srcs = ["src/main/AndroidManifest.xml"],
+ visibility = ["//visibility:public"]
+)
+
+kt_jvm_library(
+ name = "player-associates",
+ 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"]
)
lint(
diff --git a/android/player/build.bzl b/android/player/build.bzl
new file mode 100644
index 000000000..878084fcf
--- /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 = ["//android/player:player-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/extensions/Into.kt b/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt
index f12a0c61c..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
-internal 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/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 6c779bc31..646e4eb4e 100644
--- a/android/player/src/test/java/android/util/Log.kt
+++ b/android/player/src/test/java/android/util/Log.kt
@@ -2,49 +2,47 @@
package android.util
-internal var e: MutableList = mutableListOf()
-internal 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
}
-internal var w: MutableList = mutableListOf()
-internal 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
}
-internal var i: MutableList = mutableListOf()
-internal 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
}
-internal var d: MutableList = mutableListOf()
-internal 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
}
-internal var v: MutableList = mutableListOf()
-internal 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)
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/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/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 f3c61dfba..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,11 +1,11 @@
package com.intuit.playerui.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.playerui.android.utils.clearLogs
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
@@ -36,8 +36,6 @@ internal class AndroidLoggerTest {
assertInfo()
logger.warn(warn)
assertWarn()
- logger.error(error)
- assertError()
}
@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..b9f5dab86
--- /dev/null
+++ b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD
@@ -0,0 +1,9 @@
+load("//android/player:build.bzl", "kt_player_test")
+
+kt_player_test(
+ name = "logger-tests",
+ srcs = [
+ "AndroidLoggerTest.kt"
+ ],
+ associates = ["//android/player:player-associates"]
+)
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..f10ae0231
--- /dev/null
+++ b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD
@@ -0,0 +1,17 @@
+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",
+ "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..a3372dd4a
--- /dev/null
+++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD
@@ -0,0 +1,28 @@
+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:manifest",
+ associates = ["//android/player:player-associates"],
+ deps = ["//android/player:player"] + test_deps,
+ visibility = ["//visibility:public"]
+)
+
+kt_jvm_library(
+ name = "android_log_util",
+ srcs = ["LogUtil.kt"],
+ deps = ["//android/player/src/test/java/android/util:android_utils_stub"],
+ visibility = ["//visibility:public"]
+)
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 a12215ed5..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
-internal 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 e46f8a675..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
-internal 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/LogUtil.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/LogUtil.kt
new file mode 100644
index 000000000..8984f2775
--- /dev/null
+++ b/android/player/src/test/java/com/intuit/playerui/android/utils/LogUtil.kt
@@ -0,0 +1,5 @@
+package com.intuit.playerui.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/playerui/android/utils/NestedAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt
index 3467839fd..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")
-internal 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/OtherSimpleAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt
index 2618a7338..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")
-internal class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) {
+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/playerui/android/utils/SimpleAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt
index 1311b47c2..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")
-internal 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 db707e7cb..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
-internal 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 0d9ed0802..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
-internal sealed class Update {
+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? =
+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 {
+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
diff --git a/docs/site/pages/assets/reference.mdx b/docs/site/pages/assets/reference.mdx
index d85e2ef72..158dcc669 100644
--- a/docs/site/pages/assets/reference.mdx
+++ b/docs/site/pages/assets/reference.mdx
@@ -24,6 +24,7 @@ const reactPlayer = new ReactPlayer({
The reference assets + React player can be viewed in [Storybook](/storybook-demo)
+
@@ -57,4 +58,3 @@ val player = AndroidPlayer(context, ReferenceAssetsPlugin())
```
-