Skip to content

Commit 6d22974

Browse files
Basic toolkit impls provide a full widget system (#2585)
* Basic toolkit impls provide a full widget system Further simplifying what it takes to get off the ground using Redwood with the Basic schema. * Update redwood-basic-view/src/main/kotlin/app/cash/redwood/basic/view/ViewImage.kt Co-authored-by: Colin White <[email protected]> --------- Co-authored-by: Colin White <[email protected]>
1 parent 2834129 commit 6d22974

File tree

35 files changed

+151
-124
lines changed

35 files changed

+151
-124
lines changed

gradle/libs.versions.toml

+4-3
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ jetbrains-compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "
7373
jetbrains-compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "jbCompose" }
7474
jetbrains-compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "jbCompose" }
7575

76+
coil-compose = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil" }
77+
coil-core = { module = "io.coil-kt.coil3:coil-core", version.ref = "coil" }
78+
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
79+
7680
androidGradlePlugin = { module = "com.android.tools.build:gradle", version = "8.9.0" }
7781
burst = { module = "app.cash.burst:burst", version.ref = "burst" }
7882
burst-gradle-plugin = { module = "app.cash.burst:burst-gradle-plugin", version.ref = "burst" }
@@ -91,9 +95,6 @@ zipline-loader = { module = "app.cash.zipline:zipline-loader", version.ref = "zi
9195
paparazzi-gradlePlugin = { module = "app.cash.paparazzi:paparazzi-gradle-plugin", version.ref = "paparazzi" }
9296
paparazzi = { module = "app.cash.paparazzi:paparazzi", version.ref = "paparazzi" }
9397
jimfs = "com.google.jimfs:jimfs:1.3.0"
94-
coil-compose = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil" }
95-
coil-core = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
96-
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
9798
turbine = "app.cash.turbine:turbine:1.2.0"
9899
ktlint = "com.pinterest.ktlint:ktlint-cli:1.3.1"
99100
ktlintComposeRules = "io.nlopez.compose.rules:ktlint:0.4.22"

redwood-basic-composeui/api/android/redwood-basic-composeui.api

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ public final class app/cash/redwood/basic/composeui/ComposeUiRedwoodBasicWidgetF
99
public fun TextInput ()Lapp/cash/redwood/basic/widget/TextInput;
1010
}
1111

12+
public final class app/cash/redwood/basic/composeui/ComposeUiRedwoodBasicWidgetFactoryKt {
13+
public static final fun ComposeUiRedwoodBasicWidgetSystem (Lcoil3/ImageLoader;)Lapp/cash/redwood/basic/widget/RedwoodBasicWidgetSystem;
14+
}
15+
1216
public final class app/cash/redwood/basic/composeui/ThemeKt {
1317
public static final fun RedwoodBasicTheme (ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
1418
public static final fun getTypography ()Landroidx/compose/material/Typography;

redwood-basic-composeui/api/jvm/redwood-basic-composeui.api

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ public final class app/cash/redwood/basic/composeui/ComposeUiRedwoodBasicWidgetF
99
public fun TextInput ()Lapp/cash/redwood/basic/widget/TextInput;
1010
}
1111

12+
public final class app/cash/redwood/basic/composeui/ComposeUiRedwoodBasicWidgetFactoryKt {
13+
public static final fun ComposeUiRedwoodBasicWidgetSystem (Lcoil3/ImageLoader;)Lapp/cash/redwood/basic/widget/RedwoodBasicWidgetSystem;
14+
}
15+
1216
public final class app/cash/redwood/basic/composeui/ThemeKt {
1317
public static final fun RedwoodBasicTheme (ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
1418
public static final fun getTypography ()Landroidx/compose/material/Typography;

redwood-basic-composeui/api/redwood-basic-composeui.klib.api

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ final val app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_Comp
2424
final val app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiText$stableprop // app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiText$stableprop|#static{}app_cash_redwood_basic_composeui_ComposeUiText$stableprop[0]
2525
final val app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiTextInput$stableprop // app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiTextInput$stableprop|#static{}app_cash_redwood_basic_composeui_ComposeUiTextInput$stableprop[0]
2626

27+
final fun app.cash.redwood.basic.composeui/ComposeUiRedwoodBasicWidgetSystem(coil3/ImageLoader): app.cash.redwood.basic.widget/RedwoodBasicWidgetSystem<kotlin/Function2<androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>> // app.cash.redwood.basic.composeui/ComposeUiRedwoodBasicWidgetSystem|ComposeUiRedwoodBasicWidgetSystem(coil3.ImageLoader){}[0]
2728
final fun app.cash.redwood.basic.composeui/RedwoodBasicTheme(kotlin/Boolean, kotlin/Function2<androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // app.cash.redwood.basic.composeui/RedwoodBasicTheme|RedwoodBasicTheme(kotlin.Boolean;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){}[0]
2829
final fun app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiButton$stableprop_getter(): kotlin/Int // app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiButton$stableprop_getter|app_cash_redwood_basic_composeui_ComposeUiButton$stableprop_getter(){}[0]
2930
final fun app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiImage$stableprop_getter(): kotlin/Int // app.cash.redwood.basic.composeui/app_cash_redwood_basic_composeui_ComposeUiImage$stableprop_getter|app_cash_redwood_basic_composeui_ComposeUiImage$stableprop_getter(){}[0]

redwood-basic-composeui/build.gradle

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ kotlin {
1212
commonMain {
1313
dependencies {
1414
api projects.redwoodBasicWidget
15+
api libs.coil.compose
16+
api libs.jetbrains.compose.material
17+
implementation projects.redwoodLayoutComposeui
18+
implementation projects.redwoodLazylayoutComposeui
1519
implementation projects.redwoodWidgetCompose
16-
implementation libs.jetbrains.compose.material
1720
implementation libs.jetbrains.compose.ui
18-
implementation libs.coil.compose
1921
}
2022
}
2123
}

redwood-basic-composeui/src/commonMain/kotlin/app/cash/redwood/basic/composeui/ComposeUiRedwoodBasicWidgetFactory.kt

+14
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ import app.cash.redwood.basic.modifier.Reuse
2020
import app.cash.redwood.basic.widget.Button
2121
import app.cash.redwood.basic.widget.Image
2222
import app.cash.redwood.basic.widget.RedwoodBasicWidgetFactory
23+
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
2324
import app.cash.redwood.basic.widget.Text
2425
import app.cash.redwood.basic.widget.TextInput
26+
import app.cash.redwood.layout.composeui.ComposeUiRedwoodLayoutWidgetFactory
27+
import app.cash.redwood.lazylayout.composeui.ComposeUiRedwoodLazyLayoutWidgetFactory
2528
import coil3.ImageLoader
2629

2730
public class ComposeUiRedwoodBasicWidgetFactory(
@@ -34,3 +37,14 @@ public class ComposeUiRedwoodBasicWidgetFactory(
3437
override fun Reuse(value: @Composable () -> Unit, modifier: Reuse) {
3538
}
3639
}
40+
41+
@Suppress("FunctionName") // Acting like a type.
42+
public fun ComposeUiRedwoodBasicWidgetSystem(
43+
imageLoader: ImageLoader,
44+
): RedwoodBasicWidgetSystem<@Composable (() -> Unit)> {
45+
return RedwoodBasicWidgetSystem(
46+
RedwoodBasic = ComposeUiRedwoodBasicWidgetFactory(imageLoader),
47+
RedwoodLayout = ComposeUiRedwoodLayoutWidgetFactory(),
48+
RedwoodLazyLayout = ComposeUiRedwoodLazyLayoutWidgetFactory(),
49+
)
50+
}

redwood-basic-dom/api/redwood-basic-dom.klib.api

+2
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ final class app.cash.redwood.basic.dom/HTMLElementRedwoodBasicWidgetFactory : ap
1515
final fun Text(): app.cash.redwood.basic.widget/Text<org.w3c.dom/HTMLElement> // app.cash.redwood.basic.dom/HTMLElementRedwoodBasicWidgetFactory.Text|Text(){}[0]
1616
final fun TextInput(): app.cash.redwood.basic.widget/TextInput<org.w3c.dom/HTMLElement> // app.cash.redwood.basic.dom/HTMLElementRedwoodBasicWidgetFactory.TextInput|TextInput(){}[0]
1717
}
18+
19+
final fun app.cash.redwood.basic.dom/HTMLElementRedwoodBasicWidgetSystem(org.w3c.dom/Document): app.cash.redwood.basic.widget/RedwoodBasicWidgetSystem<org.w3c.dom/HTMLElement> // app.cash.redwood.basic.dom/HTMLElementRedwoodBasicWidgetSystem|HTMLElementRedwoodBasicWidgetSystem(org.w3c.dom.Document){}[0]

redwood-basic-dom/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ kotlin {
1010
commonMain {
1111
dependencies {
1212
api projects.redwoodBasicWidget
13+
implementation projects.redwoodLayoutDom
14+
implementation projects.redwoodLazylayoutDom
1315
}
1416
}
1517
}

redwood-basic-dom/src/commonMain/kotlin/app/cash/redwood/basic/dom/HTMLElementRedwoodBasicWidgetFactory.kt

+14
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@ import app.cash.redwood.basic.modifier.Reuse
2121
import app.cash.redwood.basic.widget.Button
2222
import app.cash.redwood.basic.widget.Image
2323
import app.cash.redwood.basic.widget.RedwoodBasicWidgetFactory
24+
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
2425
import app.cash.redwood.basic.widget.Text
2526
import app.cash.redwood.basic.widget.TextInput
27+
import app.cash.redwood.layout.dom.HTMLElementRedwoodLayoutWidgetFactory
28+
import app.cash.redwood.lazylayout.dom.HTMLElementRedwoodLazyLayoutWidgetFactory
2629
import org.w3c.dom.Document
2730
import org.w3c.dom.HTMLButtonElement
2831
import org.w3c.dom.HTMLElement
@@ -41,6 +44,17 @@ public class HTMLElementRedwoodBasicWidgetFactory(
4144
}
4245
}
4346

47+
@Suppress("FunctionName") // Acting like a type.
48+
public fun HTMLElementRedwoodBasicWidgetSystem(
49+
document: Document,
50+
): RedwoodBasicWidgetSystem<HTMLElement> {
51+
return RedwoodBasicWidgetSystem(
52+
RedwoodBasic = HTMLElementRedwoodBasicWidgetFactory(document),
53+
RedwoodLayout = HTMLElementRedwoodLayoutWidgetFactory(document),
54+
RedwoodLazyLayout = HTMLElementRedwoodLazyLayoutWidgetFactory(document),
55+
)
56+
}
57+
4458
private class HtmlTextInput(
4559
override val value: HTMLInputElement,
4660
) : TextInput<HTMLElement> {

redwood-basic-uiview/api/redwood-basic-uiview.klib.api

+2
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ final class app.cash.redwood.basic.uiview/UIViewRedwoodBasicWidgetFactory : app.
1515
final fun Text(): app.cash.redwood.basic.widget/Text<platform.UIKit/UIView> // app.cash.redwood.basic.uiview/UIViewRedwoodBasicWidgetFactory.Text|Text(){}[0]
1616
final fun TextInput(): app.cash.redwood.basic.widget/TextInput<platform.UIKit/UIView> // app.cash.redwood.basic.uiview/UIViewRedwoodBasicWidgetFactory.TextInput|TextInput(){}[0]
1717
}
18+
19+
final fun app.cash.redwood.basic.uiview/UIViewRedwoodBasicWidgetSystem(): app.cash.redwood.basic.widget/RedwoodBasicWidgetSystem<platform.UIKit/UIView> // app.cash.redwood.basic.uiview/UIViewRedwoodBasicWidgetSystem|UIViewRedwoodBasicWidgetSystem(){}[0]

redwood-basic-uiview/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ kotlin {
1010
commonMain {
1111
dependencies {
1212
api projects.redwoodBasicWidget
13+
implementation projects.redwoodLayoutUiview
14+
implementation projects.redwoodLazylayoutUiview
1315
}
1416
}
1517
}

redwood-basic-uiview/src/commonMain/kotlin/app/cash/redwood/basic/uiview/UIViewRedwoodBasicWidgetFactory.kt

+12
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ import app.cash.redwood.basic.modifier.Reuse
1919
import app.cash.redwood.basic.widget.Button
2020
import app.cash.redwood.basic.widget.Image
2121
import app.cash.redwood.basic.widget.RedwoodBasicWidgetFactory
22+
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
2223
import app.cash.redwood.basic.widget.Text
2324
import app.cash.redwood.basic.widget.TextInput
25+
import app.cash.redwood.layout.uiview.UIViewRedwoodLayoutWidgetFactory
26+
import app.cash.redwood.lazylayout.uiview.UIViewRedwoodLazyLayoutWidgetFactory
2427
import platform.UIKit.UIView
2528

2629
@ObjCName("UIViewRedwoodBasicWidgetFactory", exact = true)
@@ -34,3 +37,12 @@ public class UIViewRedwoodBasicWidgetFactory : RedwoodBasicWidgetFactory<UIView>
3437

3538
override fun Reuse(value: UIView, modifier: Reuse) {}
3639
}
40+
41+
@Suppress("FunctionName") // Acting like a type.
42+
public fun UIViewRedwoodBasicWidgetSystem(): RedwoodBasicWidgetSystem<UIView> {
43+
return RedwoodBasicWidgetSystem(
44+
RedwoodBasic = UIViewRedwoodBasicWidgetFactory(),
45+
RedwoodLayout = UIViewRedwoodLayoutWidgetFactory(),
46+
RedwoodLazyLayout = UIViewRedwoodLazyLayoutWidgetFactory(),
47+
)
48+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
public final class app/cash/redwood/basic/view/ViewRedwoodBasicWidgetFactory : app/cash/redwood/basic/widget/RedwoodBasicWidgetFactory {
2-
public fun <init> (Landroid/content/Context;)V
2+
public fun <init> (Landroid/content/Context;Lcoil3/ImageLoader;)V
33
public fun Button ()Lapp/cash/redwood/basic/widget/Button;
44
public fun Image ()Lapp/cash/redwood/basic/widget/Image;
55
public fun Reuse (Landroid/view/View;Lapp/cash/redwood/basic/modifier/Reuse;)V
@@ -8,3 +8,7 @@ public final class app/cash/redwood/basic/view/ViewRedwoodBasicWidgetFactory : a
88
public fun TextInput ()Lapp/cash/redwood/basic/widget/TextInput;
99
}
1010

11+
public final class app/cash/redwood/basic/view/ViewRedwoodBasicWidgetFactoryKt {
12+
public static final fun ViewRedwoodBasicWidgetSystem (Landroid/content/Context;Lcoil3/ImageLoader;)Lapp/cash/redwood/basic/widget/RedwoodBasicWidgetSystem;
13+
}
14+

redwood-basic-view/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ redwoodBuild {
88
dependencies {
99
api projects.redwoodBasicWidget
1010
api libs.coil.core
11+
implementation projects.redwoodLayoutView
12+
implementation projects.redwoodLazylayoutView
1113
implementation libs.androidx.core
1214
implementation libs.google.material
1315
}

redwood-basic-view/src/main/kotlin/app/cash/redwood/basic/view/ViewImage.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ import android.view.ViewGroup
2121
import android.widget.ImageView
2222
import app.cash.redwood.Modifier
2323
import app.cash.redwood.basic.widget.Image
24-
import coil3.load
24+
import coil3.ImageLoader
25+
import coil3.request.ImageRequest
26+
import coil3.request.target
2527

2628
internal class ViewImage(
2729
override val value: ImageView,
30+
private val imageLoader: ImageLoader,
2831
) : Image<View> {
2932
init {
3033
val size = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 48F, value.resources.displayMetrics).toInt()
@@ -34,7 +37,11 @@ internal class ViewImage(
3437
override var modifier: Modifier = Modifier
3538

3639
override fun url(url: String) {
37-
value.load(url)
40+
val request = ImageRequest.Builder(value.context)
41+
.target(value)
42+
.data(url)
43+
.build()
44+
imageLoader.enqueue(request)
3845
}
3946

4047
override fun onClick(onClick: (() -> Unit)?) {

redwood-basic-view/src/main/kotlin/app/cash/redwood/basic/view/ViewRedwoodBasicWidgetFactory.kt

+18-1
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,33 @@ import app.cash.redwood.basic.modifier.Reuse
2424
import app.cash.redwood.basic.widget.Button
2525
import app.cash.redwood.basic.widget.Image
2626
import app.cash.redwood.basic.widget.RedwoodBasicWidgetFactory
27+
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
2728
import app.cash.redwood.basic.widget.Text
2829
import app.cash.redwood.basic.widget.TextInput
30+
import app.cash.redwood.layout.view.ViewRedwoodLayoutWidgetFactory
31+
import app.cash.redwood.lazylayout.view.ViewRedwoodLazyLayoutWidgetFactory
32+
import coil3.ImageLoader
2933

3034
public class ViewRedwoodBasicWidgetFactory(
3135
private val context: Context,
36+
private val imageLoader: ImageLoader,
3237
) : RedwoodBasicWidgetFactory<View> {
3338
override fun TextInput(): TextInput<View> = ViewTextInput(context)
3439
override fun Text(): Text<View> = ViewText(TextView(context))
35-
override fun Image(): Image<View> = ViewImage(ImageView(context))
40+
override fun Image(): Image<View> = ViewImage(ImageView(context), imageLoader)
3641
override fun Button(): Button<View> = ViewButton(PlatformButton(context))
3742
override fun Reuse(value: View, modifier: Reuse) {
3843
}
3944
}
45+
46+
@Suppress("FunctionName") // Acting like a type.
47+
public fun ViewRedwoodBasicWidgetSystem(
48+
context: Context,
49+
imageLoader: ImageLoader,
50+
): RedwoodBasicWidgetSystem<View> {
51+
return RedwoodBasicWidgetSystem(
52+
RedwoodBasic = ViewRedwoodBasicWidgetFactory(context, imageLoader),
53+
RedwoodLayout = ViewRedwoodLayoutWidgetFactory(context),
54+
RedwoodLazyLayout = ViewRedwoodLazyLayoutWidgetFactory(context),
55+
)
56+
}

samples/counter/android-composeui/build.gradle

-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ dependencies {
66
implementation projects.samples.counter.presenter
77
implementation projects.redwoodComposeui
88
implementation projects.redwoodBasicComposeui
9-
implementation projects.redwoodLayoutComposeui
10-
implementation projects.redwoodLazylayoutComposeui
119
implementation libs.coil.network.okhttp
1210
implementation libs.kotlinx.coroutines.android
1311
implementation libs.google.material

samples/counter/android-composeui/src/main/kotlin/com/example/redwood/counter/android/composeui/MainActivity.kt

+11-9
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,26 @@ package com.example.redwood.counter.android.composeui
1818
import android.os.Bundle
1919
import androidx.activity.compose.setContent
2020
import androidx.appcompat.app.AppCompatActivity
21-
import app.cash.redwood.basic.composeui.ComposeUiRedwoodBasicWidgetFactory
21+
import app.cash.redwood.basic.composeui.ComposeUiRedwoodBasicWidgetSystem
2222
import app.cash.redwood.basic.composeui.RedwoodBasicTheme
23-
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
2423
import app.cash.redwood.composeui.RedwoodContent
25-
import app.cash.redwood.layout.composeui.ComposeUiRedwoodLayoutWidgetFactory
26-
import app.cash.redwood.lazylayout.composeui.ComposeUiRedwoodLazyLayoutWidgetFactory
2724
import coil3.ImageLoader
25+
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
26+
import coil3.serviceLoaderEnabled
2827
import com.example.redwood.counter.presenter.Counter
2928

3029
class MainActivity : AppCompatActivity() {
3130
override fun onCreate(savedInstanceState: Bundle?) {
3231
super.onCreate(savedInstanceState)
3332

34-
val widgetSystem = RedwoodBasicWidgetSystem(
35-
RedwoodBasic = ComposeUiRedwoodBasicWidgetFactory(ImageLoader(this)),
36-
RedwoodLayout = ComposeUiRedwoodLayoutWidgetFactory(),
37-
RedwoodLazyLayout = ComposeUiRedwoodLazyLayoutWidgetFactory(),
38-
)
33+
val imageLoader = ImageLoader.Builder(this)
34+
.serviceLoaderEnabled(false)
35+
.components {
36+
add(OkHttpNetworkFetcherFactory())
37+
}
38+
.build()
39+
40+
val widgetSystem = ComposeUiRedwoodBasicWidgetSystem(imageLoader)
3941

4042
setContent {
4143
RedwoodBasicTheme {

samples/counter/android-views/build.gradle

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ apply plugin: 'org.jetbrains.kotlin.plugin.compose'
55
dependencies {
66
implementation projects.samples.counter.presenter
77
implementation projects.redwoodBasicView
8-
implementation projects.redwoodLayoutView
9-
implementation projects.redwoodLazylayoutView
108
implementation projects.redwoodWidget
119
implementation libs.kotlinx.coroutines.android
1210
implementation libs.google.material
11+
implementation libs.coil.network.okhttp
1312
implementation libs.androidx.core
1413
implementation libs.androidx.appCompat
1514

samples/counter/android-views/src/main/kotlin/com/example/redwood/counter/android/views/MainActivity.kt

+12-9
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ package com.example.redwood.counter.android.views
1717

1818
import android.os.Bundle
1919
import androidx.appcompat.app.AppCompatActivity
20-
import app.cash.redwood.basic.view.ViewRedwoodBasicWidgetFactory
21-
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
20+
import app.cash.redwood.basic.view.ViewRedwoodBasicWidgetSystem
2221
import app.cash.redwood.compose.AndroidUiDispatcher
2322
import app.cash.redwood.compose.RedwoodComposition
24-
import app.cash.redwood.layout.view.ViewRedwoodLayoutWidgetFactory
25-
import app.cash.redwood.lazylayout.view.ViewRedwoodLazyLayoutWidgetFactory
2623
import app.cash.redwood.widget.RedwoodLayout
24+
import coil3.ImageLoader
25+
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
26+
import coil3.serviceLoaderEnabled
2727
import com.example.redwood.counter.presenter.Counter
2828
import kotlinx.coroutines.CoroutineScope
2929
import kotlinx.coroutines.cancel
@@ -37,14 +37,17 @@ class MainActivity : AppCompatActivity() {
3737
val redwoodView = RedwoodLayout(this, onBackPressedDispatcher)
3838
setContentView(redwoodView)
3939

40+
val imageLoader = ImageLoader.Builder(this)
41+
.serviceLoaderEnabled(false)
42+
.components {
43+
add(OkHttpNetworkFetcherFactory())
44+
}
45+
.build()
46+
4047
val composition = RedwoodComposition(
4148
scope = scope,
4249
view = redwoodView,
43-
widgetSystem = RedwoodBasicWidgetSystem(
44-
RedwoodBasic = ViewRedwoodBasicWidgetFactory(this),
45-
RedwoodLayout = ViewRedwoodLayoutWidgetFactory(this),
46-
RedwoodLazyLayout = ViewRedwoodLazyLayoutWidgetFactory(this),
47-
),
50+
widgetSystem = ViewRedwoodBasicWidgetSystem(this, imageLoader),
4851
)
4952
composition.setContent {
5053
Counter()

samples/counter/browser/src/commonMain/kotlin/com/example/redwood/counter/browser/main.kt

+2-9
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@
1515
*/
1616
package com.example.redwood.counter.browser
1717

18-
import app.cash.redwood.basic.dom.HTMLElementRedwoodBasicWidgetFactory
19-
import app.cash.redwood.basic.widget.RedwoodBasicWidgetSystem
18+
import app.cash.redwood.basic.dom.HTMLElementRedwoodBasicWidgetSystem
2019
import app.cash.redwood.compose.RedwoodComposition
2120
import app.cash.redwood.compose.WindowAnimationFrameClock
22-
import app.cash.redwood.layout.dom.HTMLElementRedwoodLayoutWidgetFactory
23-
import app.cash.redwood.lazylayout.dom.HTMLElementRedwoodLazyLayoutWidgetFactory
2421
import app.cash.redwood.widget.asRedwoodView
2522
import com.example.redwood.counter.presenter.Counter
2623
import kotlinx.browser.document
@@ -36,11 +33,7 @@ fun main() {
3633
val composition = RedwoodComposition(
3734
scope = GlobalScope + WindowAnimationFrameClock,
3835
view = content.asRedwoodView(),
39-
widgetSystem = RedwoodBasicWidgetSystem(
40-
RedwoodBasic = HTMLElementRedwoodBasicWidgetFactory(document),
41-
RedwoodLayout = HTMLElementRedwoodLayoutWidgetFactory(document),
42-
RedwoodLazyLayout = HTMLElementRedwoodLazyLayoutWidgetFactory(document),
43-
),
36+
widgetSystem = HTMLElementRedwoodBasicWidgetSystem(document),
4437
)
4538
composition.setContent {
4639
Counter()

samples/counter/desktop-composeui/build.gradle

-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,5 @@ dependencies {
1515
implementation projects.samples.counter.presenter
1616
implementation projects.redwoodComposeui
1717
implementation projects.redwoodBasicComposeui
18-
implementation projects.redwoodLayoutComposeui
19-
implementation projects.redwoodLazylayoutComposeui
2018
implementation libs.coil.network.okhttp
2119
}

0 commit comments

Comments
 (0)