Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import androidx.compose.ui.tooling.preview.Preview
import com.squareup.sample.compose.databinding.LegacyViewBinding
import com.squareup.sample.compose.nestedrenderings.RecursiveWorkflow.LegacyRendering
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromViewBinding
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewRunner.Companion.bind
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.compose.tooling.Preview
Expand All @@ -28,7 +28,7 @@ class LegacyRunner(private val binding: LegacyViewBinding) : ScreenViewRunner<Le
binding.stub.update(rendering.rendering, viewEnvironment)
}

companion object : ScreenViewFactory<LegacyRendering> by bind(
companion object : ScreenViewFactory<LegacyRendering> by fromViewBinding(
LegacyViewBinding::inflate, ::LegacyRunner
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import androidx.core.content.ContextCompat
import com.squareup.sample.container.panel.ScrimScreen
import com.squareup.workflow1.ui.ManualScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromCode
import com.squareup.workflow1.ui.ScreenViewHolder
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.WorkflowViewStub
import com.squareup.workflow1.ui.bindShowRendering

/**
* A view that renders only its first child, behind a smoke scrim if
Expand Down Expand Up @@ -91,23 +92,17 @@ internal class ScrimContainer @JvmOverloads constructor(
}

@OptIn(WorkflowUiExperimentalApi::class)
companion object : ScreenViewFactory<ScrimScreen<*>> by ManualScreenViewFactory(
type = ScrimScreen::class,
viewConstructor = { initialRendering, initialViewEnvironment, contextForNewView, _ ->
val stub = WorkflowViewStub(contextForNewView)
companion object : ScreenViewFactory<ScrimScreen<*>> by fromCode(
buildView = { _, initialEnvironment, context, _ ->
val stub = WorkflowViewStub(context)
val scrimContainer = ScrimContainer(context)
scrimContainer.layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
scrimContainer.addView(stub)

ScrimContainer(contextForNewView)
.also { view ->
view.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
view.addView(stub)

view.bindShowRendering(
initialRendering, initialViewEnvironment
) { rendering, environment ->
stub.show(rendering.content, environment)
view.isDimmed = rendering.dimmed
}
}
ScreenViewHolder(initialEnvironment, scrimContainer) { rendering, viewEnvironment ->
stub.show(rendering.content, viewEnvironment)
scrimContainer.isDimmed = rendering.dimmed
}
}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class OverviewDetailContainer(view: View) : ScreenViewRunner<OverviewDetailScree
stub.show(combined, viewEnvironment + Single)
}

companion object : ScreenViewFactory<OverviewDetailScreen> by ScreenViewRunner.bind(
companion object : ScreenViewFactory<OverviewDetailScreen> by ScreenViewFactory.fromLayout(
layoutId = R.layout.overview_detail,
constructor = ::OverviewDetailContainer
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ data class HelloBackButtonScreen(
val onClick: () -> Unit,
val onBackPressed: (() -> Unit)?
) : AndroidScreen<HelloBackButtonScreen> {
override val viewFactory: ScreenViewFactory<HelloBackButtonScreen> = ScreenViewRunner.bind(
override val viewFactory = ScreenViewFactory.fromLayout<HelloBackButtonScreen>(
R.layout.hello_back_button_layout, ::HelloBackButtonLayoutRunner
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.squareup.sample.container.overviewdetail.OverviewDetailConfig.Overvie
import com.squareup.sample.container.poetry.R
import com.squareup.sample.poetry.model.Poem
import com.squareup.workflow1.ui.AndroidScreen
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
Expand All @@ -22,9 +23,8 @@ data class PoemListScreen(
val onPoemSelected: (Int) -> Unit,
val selection: Int = -1
) : AndroidScreen<PoemListScreen> {
override val viewFactory = ScreenViewRunner.bind(
R.layout.list,
::PoemListLayoutRunner
override val viewFactory = ScreenViewFactory.fromLayout(
R.layout.list, ::PoemListLayoutRunner
)

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,8 @@ data class StanzaListScreen(
val onExit: () -> Unit,
val selection: Int = -1
) : AndroidScreen<StanzaListScreen> {
override val viewFactory: ScreenViewFactory<StanzaListScreen> = ScreenViewRunner.bind(
R.layout.list,
::StanzaListLayoutRunner
)
override val viewFactory =
ScreenViewFactory.fromLayout(R.layout.list, ::StanzaListLayoutRunner)
}

@OptIn(WorkflowUiExperimentalApi::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,8 @@ data class StanzaScreen(
) : AndroidScreen<StanzaScreen>, Compatible {
override val compatibilityKey = "$title: $stanzaNumber"

override val viewFactory: ScreenViewFactory<StanzaScreen> = ScreenViewRunner.bind(
R.layout.stanza_layout,
::StanzaLayoutRunner
)
override val viewFactory =
ScreenViewFactory.fromLayout(R.layout.stanza_layout, ::StanzaLayoutRunner)
}

@OptIn(WorkflowUiExperimentalApi::class)
Expand Down Expand Up @@ -113,9 +111,4 @@ private class StanzaLayoutRunner(private val view: View) : ScreenViewRunner<Stan
}
setText(spans, SPANNABLE)
}

companion object : ScreenViewFactory<StanzaScreen> by ScreenViewRunner.bind(
R.layout.stanza_layout,
::StanzaLayoutRunner
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ import android.graphics.Rect
import android.view.View
import androidx.core.content.ContextCompat
import com.squareup.sample.dungeon.board.Board
import com.squareup.workflow1.ui.ManualScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewHolder
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.bindShowRendering
import kotlin.math.abs
import kotlin.math.min

Expand Down Expand Up @@ -83,11 +82,13 @@ class BoardView(context: Context) : View(context) {
}

@OptIn(WorkflowUiExperimentalApi::class)
companion object : ScreenViewFactory<Board> by ManualScreenViewFactory(
type = Board::class,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You probably explained this and I read it but didn't fully understand but why don't we need the Screen/Rendering type passed in anymore? Isn't this still the key for ViewRegistry?

viewConstructor = { initialRendering, initialEnv, contextForNewView, _ ->
BoardView(contextForNewView)
.apply { bindShowRendering(initialRendering, initialEnv) { r, _ -> update(r) } }
companion object : ScreenViewFactory<Board>
by ScreenViewFactory.fromCode(
buildView = { _, initialEnvironment, context, _ ->
val view = BoardView(context)
ScreenViewHolder(initialEnvironment, view) { screen, _ ->
view.update(screen)
}
}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import com.squareup.cycler.toDataSource
import com.squareup.sample.dungeon.DungeonAppWorkflow.DisplayBoardsListScreen
import com.squareup.sample.dungeon.board.Board
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromLayout
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewRunner.Companion.bind
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.WorkflowViewStub
Expand Down Expand Up @@ -101,7 +101,7 @@ class BoardsListLayoutRunner(rootView: View) : ScreenViewRunner<DisplayBoardsLis
)
}

companion object : ScreenViewFactory<DisplayBoardsListScreen> by bind(
companion object : ScreenViewFactory<DisplayBoardsListScreen> by fromLayout(
R.layout.boards_list_layout, ::BoardsListLayoutRunner
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ class Component(context: AppCompatActivity) {
@OptIn(WorkflowUiExperimentalApi::class)
val viewRegistry = ViewRegistry(
ShakeableTimeMachineLayoutRunner,
LoadingBinding<LoadingBoardList>(R.string.loading_boards_list),
LoadingScreenViewFactory<LoadingBoardList>(R.string.loading_boards_list),
BoardsListLayoutRunner,
LoadingBinding<Loading>(R.string.loading_board),
LoadingScreenViewFactory<Loading>(R.string.loading_board),
GameLayoutRunner,
BoardView,
AlertContainer
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import com.squareup.sample.dungeon.Direction.RIGHT
import com.squareup.sample.dungeon.Direction.UP
import com.squareup.sample.dungeon.GameWorkflow.GameRendering
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromLayout
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewRunner.Companion.bind
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.WorkflowViewStub
Expand Down Expand Up @@ -66,7 +66,7 @@ class GameLayoutRunner(view: View) : ScreenViewRunner<GameRendering> {
}
}

companion object : ScreenViewFactory<GameRendering> by bind(
companion object : ScreenViewFactory<GameRendering> by fromLayout(
R.layout.game_layout, ::GameLayoutRunner
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import android.widget.TextView
import androidx.annotation.StringRes
import com.squareup.workflow1.ui.Screen
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromLayout
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewRunner.Companion.bind
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

Expand All @@ -19,10 +19,10 @@ import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
* The binding is parameterized on two things: the type of the rendering that this binding is
* keyed off of, and the resource ID of the string to use for the label.
*/
inline fun <reified RenderingT : Screen> LoadingBinding(
inline fun <reified RenderingT : Screen> LoadingScreenViewFactory(
@StringRes loadingLabelRes: Int
): ScreenViewFactory<RenderingT> =
bind(R.layout.loading_layout) { view -> LoadingLayoutRunner(loadingLabelRes, view) }
fromLayout(R.layout.loading_layout) { view -> LoadingLayoutRunner(loadingLabelRes, view) }

@PublishedApi
internal class LoadingLayoutRunner<RenderingT : Screen>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import androidx.constraintlayout.widget.Group
import androidx.transition.TransitionManager
import com.squareup.sample.timemachine.shakeable.internal.GlassFrameLayout
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromLayout
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewRunner.Companion.bind
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.WorkflowViewStub
Expand Down Expand Up @@ -88,7 +88,7 @@ class ShakeableTimeMachineLayoutRunner(

private fun Duration.toUiString(): String = toString()

companion object : ScreenViewFactory<ShakeableTimeMachineScreen> by bind(
companion object : ScreenViewFactory<ShakeableTimeMachineScreen> by fromLayout(
R.layout.shakeable_time_machine_layout, ::ShakeableTimeMachineLayoutRunner
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.squareup.sample.helloworkflowfragment
import com.squareup.sample.helloworkflowfragment.databinding.HelloGoodbyeLayoutBinding
import com.squareup.workflow1.ui.AndroidScreen
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromViewBinding
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

@OptIn(WorkflowUiExperimentalApi::class)
Expand All @@ -12,8 +12,8 @@ data class HelloRendering(
val onClick: () -> Unit
) : AndroidScreen<HelloRendering> {
override val viewFactory: ScreenViewFactory<HelloRendering> =
ScreenViewRunner.bind(HelloGoodbyeLayoutBinding::inflate) { r, _ ->
helloMessage.text = "${r.message} Fragment"
helloMessage.setOnClickListener { r.onClick() }
fromViewBinding(HelloGoodbyeLayoutBinding::inflate) { rendering, _ ->
helloMessage.text = "${rendering.message} Fragment"
helloMessage.setOnClickListener { rendering.onClick() }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.squareup.sample.helloworkflow
import com.squareup.sample.helloworkflow.databinding.HelloGoodbyeLayoutBinding
import com.squareup.workflow1.ui.AndroidScreen
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromViewBinding
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

@OptIn(WorkflowUiExperimentalApi::class)
Expand All @@ -12,7 +12,7 @@ data class HelloRendering(
val onClick: () -> Unit
) : AndroidScreen<HelloRendering> {
override val viewFactory: ScreenViewFactory<HelloRendering> =
ScreenViewRunner.bind(HelloGoodbyeLayoutBinding::inflate) { r, _ ->
fromViewBinding(HelloGoodbyeLayoutBinding::inflate) { r, _ ->
helloMessage.text = r.message
helloMessage.setOnClickListener { r.onClick() }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,29 @@ import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.widget.TextView
import com.squareup.workflow1.ui.AndroidScreen
import com.squareup.workflow1.ui.ManualScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewHolder
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.bindShowRendering

@OptIn(WorkflowUiExperimentalApi::class)
data class ClickyTextRendering(
val message: String,
val visible: Boolean = true,
val onClick: (() -> Unit)? = null
) : AndroidScreen<ClickyTextRendering> {
override val viewFactory = ManualScreenViewFactory(
type = ClickyTextRendering::class,
viewConstructor = { initialRendering, initialEnv, context, _ ->
TextView(context).also { textView ->
override val viewFactory = ScreenViewFactory.fromCode<ClickyTextRendering>(
buildView = { _, initialEnvironment, context, _ ->
val view = TextView(context).also { textView ->
textView.layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
textView.gravity = CENTER

textView.bindShowRendering(initialRendering, initialEnv) { clickyText, _ ->
textView.text = clickyText.message
textView.isVisible = clickyText.visible
textView.setOnClickListener(
clickyText.onClick?.let { oc -> OnClickListener { oc() } }
)
}
}
ScreenViewHolder(initialEnvironment, view) { rendering, _ ->
val textView = view
textView.text = rendering.message
textView.isVisible = rendering.visible
textView.setOnClickListener(
rendering.onClick?.let { oc -> OnClickListener { oc() } }
)
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.squareup.sample.stubvisibility
import com.squareup.sample.stubvisibility.databinding.StubVisibilityLayoutBinding
import com.squareup.workflow1.ui.AndroidScreen
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ScreenViewFactory.Companion.fromViewBinding
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

@OptIn(WorkflowUiExperimentalApi::class)
Expand All @@ -12,7 +12,7 @@ data class OuterRendering(
val bottom: ClickyTextRendering
) : AndroidScreen<OuterRendering> {
override val viewFactory: ScreenViewFactory<OuterRendering> =
ScreenViewRunner.bind(StubVisibilityLayoutBinding::inflate) { rendering, env ->
fromViewBinding(StubVisibilityLayoutBinding::inflate) { rendering, env ->
shouldBeFilledStub.show(rendering.top, env)
shouldBeWrappedStub.show(rendering.bottom, env)
}
Expand Down
Loading