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
@@ -1,3 +1,5 @@
@file:Suppress("DEPRECATION")

package com.squareup.sample.compose.hellocomposebinding

import android.os.Bundle
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:Suppress("DEPRECATION")

package com.squareup.sample.compose.hellocomposeworkflow

import android.os.Bundle
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:Suppress("DEPRECATION")

package com.squareup.sample.compose.inlinerendering

import android.os.Bundle
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
@file:Suppress("DEPRECATION")
@file:OptIn(WorkflowUiExperimentalApi::class)

package com.squareup.sample.compose.inlinerendering
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:Suppress("DEPRECATION")

package com.squareup.sample.compose.nestedrenderings

import androidx.compose.foundation.layout.fillMaxSize
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:Suppress("DEPRECATION")

package com.squareup.sample.compose.nestedrenderings

import android.os.Bundle
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.squareup.sample.container

import com.squareup.workflow1.ui.Screen
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

/**
Expand All @@ -16,8 +17,8 @@ import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
* is pressed, or null to set no handler. Defaults to `null`.
*/
@WorkflowUiExperimentalApi
data class BackButtonScreen<W : Any>(
data class BackButtonScreen<W : Screen>(
val wrapped: W,
val override: Boolean = false,
val onBackPressed: (() -> Unit)? = null
)
) : Screen
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
package com.squareup.sample.container

import com.squareup.workflow1.ui.DecorativeViewFactory
import com.squareup.workflow1.ui.ViewFactory
import com.squareup.workflow1.ui.DecorativeScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.backPressedHandler

/**
* [ViewFactory] that performs the work required by [BackButtonScreen].
* [ScreenViewFactory] that performs the work required by [BackButtonScreen].
*/
@WorkflowUiExperimentalApi
object BackButtonViewFactory : ViewFactory<BackButtonScreen<*>>
by DecorativeViewFactory(
type = BackButtonScreen::class,
map = { outer -> outer.wrapped },
doShowRendering = { view, innerShowRendering, outerRendering, viewEnvironment ->
if (!outerRendering.override) {
// Place our handler before invoking innerShowRendering, so that
// its later calls to view.backPressedHandler will take precedence
// over ours.
view.backPressedHandler = outerRendering.onBackPressed
}
object BackButtonViewFactory : ScreenViewFactory<BackButtonScreen<*>>
by DecorativeScreenViewFactory(
type = BackButtonScreen::class,
map = { outer -> outer.wrapped },
doShowRendering = { view, innerShowRendering, outerRendering, viewEnvironment ->
if (!outerRendering.override) {
// Place our handler before invoking innerShowRendering, so that
// its later calls to view.backPressedHandler will take precedence
// over ours.
view.backPressedHandler = outerRendering.onBackPressed
}

innerShowRendering.invoke(outerRendering.wrapped, viewEnvironment)
innerShowRendering.invoke(outerRendering.wrapped, viewEnvironment)

if (outerRendering.override) {
// Place our handler after invoking innerShowRendering, so that ours wins.
view.backPressedHandler = outerRendering.onBackPressed
}
})
if (outerRendering.override) {
// Place our handler after invoking innerShowRendering, so that ours wins.
view.backPressedHandler = outerRendering.onBackPressed
}
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import com.squareup.sample.container.R
import com.squareup.sample.container.overviewdetail.OverviewDetailConfig.Detail
import com.squareup.sample.container.overviewdetail.OverviewDetailConfig.Overview
import com.squareup.sample.container.overviewdetail.OverviewDetailConfig.Single
import com.squareup.workflow1.ui.LayoutRunner
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.ViewFactory
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.WorkflowViewStub
import com.squareup.workflow1.ui.backstack.BackStackScreen
import com.squareup.workflow1.ui.backstack.withBackStackStateKeyPrefix
import com.squareup.workflow1.ui.container.BackStackScreen
import com.squareup.workflow1.ui.container.withBackStackStateKeyPrefix

/**
* Displays [OverviewDetailScreen] renderings in either split pane or single pane
Expand All @@ -25,7 +25,7 @@ import com.squareup.workflow1.ui.backstack.withBackStackStateKeyPrefix
* with [OverviewDetailScreen.overviewRendering] as the base of the stack.
*/
@OptIn(WorkflowUiExperimentalApi::class)
class OverviewDetailContainer(view: View) : LayoutRunner<OverviewDetailScreen> {
class OverviewDetailContainer(view: View) : ScreenViewRunner<OverviewDetailScreen> {

private val overviewStub: WorkflowViewStub? = view.findViewById(R.id.overview_stub)
private val detailStub: WorkflowViewStub? = view.findViewById(R.id.detail_stub)
Expand Down Expand Up @@ -53,15 +53,15 @@ class OverviewDetailContainer(view: View) : LayoutRunner<OverviewDetailScreen> {
if (rendering.detailRendering == null && rendering.selectDefault != null) {
rendering.selectDefault!!.invoke()
} else {
// Since we have two sibling backstacks, we need to give them each different
// Since we have two sibling back stacks, we need to give them each different
// SavedStateRegistry key prefixes.
val overviewViewEnvironment = viewEnvironment
.withBackStackStateKeyPrefix(OverviewBackStackKey) + (OverviewDetailConfig to Overview)
overviewStub!!.update(rendering.overviewRendering, overviewViewEnvironment)
overviewStub!!.show(rendering.overviewRendering, overviewViewEnvironment)
rendering.detailRendering
?.let { detail ->
detailStub!!.actual.visibility = VISIBLE
detailStub.update(
detailStub.show(
detail,
viewEnvironment + (OverviewDetailConfig to Detail)
)
Expand All @@ -81,10 +81,10 @@ class OverviewDetailContainer(view: View) : LayoutRunner<OverviewDetailScreen> {
?.let { rendering.overviewRendering + it }
?: rendering.overviewRendering

stub.update(combined, viewEnvironment + (OverviewDetailConfig to Single))
stub.show(combined, viewEnvironment + (OverviewDetailConfig to Single))
}

companion object : ViewFactory<OverviewDetailScreen> by LayoutRunner.bind(
companion object : ScreenViewFactory<OverviewDetailScreen> by ScreenViewRunner.bind(
layoutId = R.layout.overview_detail,
constructor = ::OverviewDetailContainer
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import com.squareup.sample.container.R
import com.squareup.workflow1.ui.BuilderViewFactory
import com.squareup.workflow1.ui.ViewFactory
import com.squareup.workflow1.ui.ManualScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.bindShowRendering
import com.squareup.workflow1.ui.modal.ModalViewContainer
Expand Down Expand Up @@ -59,7 +59,7 @@ class PanelContainer @JvmOverloads constructor(
}
}

companion object : ViewFactory<PanelContainerScreen<*, *>> by BuilderViewFactory(
companion object : ScreenViewFactory<PanelContainerScreen<*, *>> by ManualScreenViewFactory(
type = PanelContainerScreen::class,
viewConstructor = { initialRendering, initialEnv, contextForNewView, _ ->
PanelContainer(contextForNewView).apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import com.squareup.sample.container.R
import com.squareup.workflow1.ui.BuilderViewFactory
import com.squareup.workflow1.ui.ManualScreenViewFactory
import com.squareup.workflow1.ui.ScreenViewFactory
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.ViewFactory
import com.squareup.workflow1.ui.WorkflowViewStub
import com.squareup.workflow1.ui.bindShowRendering

Expand Down Expand Up @@ -91,7 +91,7 @@ class ScrimContainer @JvmOverloads constructor(
}

@OptIn(WorkflowUiExperimentalApi::class)
companion object : ViewFactory<ScrimContainerScreen<*>> by BuilderViewFactory(
companion object : ScreenViewFactory<ScrimContainerScreen<*>> by ManualScreenViewFactory(
type = ScrimContainerScreen::class,
viewConstructor = { initialRendering, initialViewEnvironment, contextForNewView, _ ->
val stub = WorkflowViewStub(contextForNewView)
Expand All @@ -104,7 +104,7 @@ class ScrimContainer @JvmOverloads constructor(
bindShowRendering(
initialRendering, initialViewEnvironment
) { rendering, environment ->
stub.update(rendering.wrapped, environment)
stub.show(rendering.wrapped, environment)
isDimmed = rendering.dimmed
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,25 @@ import com.squareup.sample.container.overviewdetail.OverviewDetailConfig
import com.squareup.sample.container.overviewdetail.OverviewDetailConfig.Overview
import com.squareup.sample.container.poetryapp.R
import com.squareup.sample.poetry.model.Poem
import com.squareup.workflow1.ui.AndroidViewRendering
import com.squareup.workflow1.ui.LayoutRunner
import com.squareup.workflow1.ui.AndroidScreen
import com.squareup.workflow1.ui.ScreenViewRunner
import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

@OptIn(WorkflowUiExperimentalApi::class)
data class PoemListRendering(
data class PoemListScreen(
val poems: List<Poem>,
val onPoemSelected: (Int) -> Unit,
val selection: Int = -1
) : AndroidViewRendering<PoemListRendering> {
override val viewFactory = LayoutRunner.bind(
) : AndroidScreen<PoemListScreen> {
override val viewFactory = ScreenViewRunner.bind(
R.layout.list,
::PoemListLayoutRunner
)
}

@OptIn(WorkflowUiExperimentalApi::class)
private class PoemListLayoutRunner(view: View) : LayoutRunner<PoemListRendering> {
private class PoemListLayoutRunner(view: View) : ScreenViewRunner<PoemListScreen> {
init {
view.findViewById<Toolbar>(R.id.list_toolbar)
.apply {
Expand All @@ -44,7 +44,7 @@ private class PoemListLayoutRunner(view: View) : LayoutRunner<PoemListRendering>
private val adapter = Adapter()

override fun showRendering(
rendering: PoemListRendering,
rendering: PoemListScreen,
viewEnvironment: ViewEnvironment
) {
adapter.rendering = rendering
Expand All @@ -58,7 +58,7 @@ private class PoemListLayoutRunner(view: View) : LayoutRunner<PoemListRendering>
private class ViewHolder(val view: TextView) : RecyclerView.ViewHolder(view)

private class Adapter : RecyclerView.Adapter<ViewHolder>() {
lateinit var rendering: PoemListRendering
lateinit var rendering: PoemListScreen
lateinit var environment: ViewEnvironment

override fun onCreateViewHolder(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import com.squareup.workflow1.StatelessWorkflow
/**
* Renders a given ordered list of [Poem]s. Reports the index of any that are clicked.
*/
object PoemListWorkflow : StatelessWorkflow<List<Poem>, Int, PoemListRendering>() {
object PoemListWorkflow : StatelessWorkflow<List<Poem>, Int, PoemListScreen>() {

override fun render(
renderProps: List<Poem>,
context: RenderContext
): PoemListRendering {
return PoemListRendering(
): PoemListScreen {
return PoemListScreen(
poems = renderProps,
onPoemSelected = context.eventHandler { index -> setOutput(index) }
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.squareup.workflow1.StatefulWorkflow
import com.squareup.workflow1.action
import com.squareup.workflow1.parse
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.backstack.BackStackScreen
import com.squareup.workflow1.ui.container.BackStackScreen

typealias SelectedPoem = Int

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.squareup.sample.container.SampleContainers
import com.squareup.sample.poetry.model.Poem
import com.squareup.workflow1.ui.Screen
import com.squareup.workflow1.ui.WorkflowLayout
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.backstack.BackStackContainer
import com.squareup.workflow1.ui.plus
import com.squareup.workflow1.ui.container.withRegistry
import com.squareup.workflow1.ui.renderWorkflowIn
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
import timber.log.Timber

@OptIn(WorkflowUiExperimentalApi::class)
private val viewRegistry = SampleContainers + BackStackContainer
private val viewRegistry = SampleContainers

class PoetryActivity : AppCompatActivity() {
@OptIn(WorkflowUiExperimentalApi::class)
Expand All @@ -26,7 +27,7 @@ class PoetryActivity : AppCompatActivity() {

val model: PoetryModel by viewModels()
setContentView(
WorkflowLayout(this).apply { start(model.renderings, viewRegistry) }
WorkflowLayout(this).apply { take(model.renderings.map { it.withRegistry(viewRegistry) }) }
)
}

Expand All @@ -39,7 +40,7 @@ class PoetryActivity : AppCompatActivity() {

class PoetryModel(savedState: SavedStateHandle) : ViewModel() {
@OptIn(WorkflowUiExperimentalApi::class)
val renderings: StateFlow<Any> by lazy {
val renderings: StateFlow<Screen> by lazy {
renderWorkflowIn(
workflow = PoemsBrowserWorkflow,
scope = viewModelScope,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:OptIn(WorkflowUiExperimentalApi::class)

package com.squareup.sample.ravenapp

import android.os.Bundle
Expand All @@ -10,27 +12,26 @@ import androidx.lifecycle.viewModelScope
import com.squareup.sample.container.SampleContainers
import com.squareup.sample.poetry.PoemWorkflow
import com.squareup.sample.poetry.model.Raven
import com.squareup.workflow1.ui.Screen
import com.squareup.workflow1.ui.WorkflowLayout
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
import com.squareup.workflow1.ui.backstack.BackStackContainer
import com.squareup.workflow1.ui.plus
import com.squareup.workflow1.ui.container.withRegistry
import com.squareup.workflow1.ui.renderWorkflowIn
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import timber.log.Timber

@OptIn(WorkflowUiExperimentalApi::class)
private val viewRegistry = SampleContainers + BackStackContainer
private val viewRegistry = SampleContainers

class RavenActivity : AppCompatActivity() {
@OptIn(WorkflowUiExperimentalApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val model: RavenModel by viewModels()
setContentView(
WorkflowLayout(this).apply { start(model.renderings, viewRegistry) }
WorkflowLayout(this).apply { take(model.renderings.map { it.withRegistry(viewRegistry) }) }
)

lifecycleScope.launch {
Expand All @@ -49,8 +50,7 @@ class RavenActivity : AppCompatActivity() {
class RavenModel(savedState: SavedStateHandle) : ViewModel() {
private val running = Job()

@OptIn(WorkflowUiExperimentalApi::class)
val renderings: StateFlow<Any> by lazy {
val renderings: StateFlow<Screen> by lazy {
renderWorkflowIn(
workflow = PoemWorkflow,
scope = viewModelScope,
Expand Down
Loading