Skip to content

Commit f306916

Browse files
committed
Eliminates WorkflowUiExperimentalApi
This was a triumph.
1 parent a2bdd0a commit f306916

File tree

224 files changed

+24
-611
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

224 files changed

+24
-611
lines changed

README.md

-8
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,6 @@ Workflow is:
2222
* A corresponding testing framework that facilitates simple-to-write unit
2323
tests for all application business logic and helps ensure correctness.
2424

25-
_**1.0.0-rc is ready and the core is stable. There are still experimental /**
26-
**under construction areas of the API for UI integration however.**
27-
These classes and functions are marked with `@WorkflowUIExperimentalApi`.
28-
They are suitable for production use (we've been shipping them for months
29-
at the very heart of our flagship app), but may require signature tweaks as
30-
we iterate a bit more on Dialog management, and configuring transition effects.
31-
If they do change, we will take care to minimize the impact via deprecation, etc._
32-
3325
## Using Workflows in your project
3426

3527
### Maven Artifacts

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/MaybeLoadingGatekeeperWorkflow.kt

-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ import com.squareup.workflow1.StatefulWorkflow
1010
import com.squareup.workflow1.Workflow
1111
import com.squareup.workflow1.action
1212
import com.squareup.workflow1.runningWorker
13-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1413
import kotlinx.coroutines.flow.Flow
1514

1615
typealias IsLoading = Boolean
1716

18-
@OptIn(WorkflowUiExperimentalApi::class)
1917
class MaybeLoadingGatekeeperWorkflow<T : Any>(
2018
private val childWithLoading: Workflow<T, Any, OverviewDetailScreen<*>>,
2119
private val childProps: T,

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/PerformancePoemWorkflow.kt

-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import com.squareup.workflow1.WorkflowAction
3232
import com.squareup.workflow1.WorkflowAction.Companion.noAction
3333
import com.squareup.workflow1.action
3434
import com.squareup.workflow1.runningWorker
35-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
3635
import com.squareup.workflow1.ui.navigation.BackStackScreen
3736
import com.squareup.workflow1.ui.navigation.toBackStackScreen
3837
import kotlinx.coroutines.delay
@@ -94,7 +93,6 @@ class PerformancePoemWorkflow(
9493
}
9594
}
9695

97-
@OptIn(WorkflowUiExperimentalApi::class)
9896
override fun render(
9997
renderProps: Poem,
10098
renderState: State,

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/PerformancePoemsBrowserWorkflow.kt

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import com.squareup.workflow1.StatefulWorkflow
2424
import com.squareup.workflow1.WorkflowAction.Companion.noAction
2525
import com.squareup.workflow1.action
2626
import com.squareup.workflow1.runningWorker
27-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
2827
import com.squareup.workflow1.ui.navigation.BackStackScreen
2928
import kotlinx.coroutines.delay
3029
import kotlinx.coroutines.flow.MutableStateFlow
@@ -84,7 +83,6 @@ class PerformancePoemsBrowserWorkflow(
8483
}
8584
}
8685

87-
@OptIn(WorkflowUiExperimentalApi::class)
8886
override fun render(
8987
renderProps: ConfigAndPoems,
9088
renderState: State,

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/PerformancePoetryActivity.kt

-6
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,18 @@ import com.squareup.sample.container.SampleContainers
2222
import com.squareup.sample.poetry.model.Poem
2323
import com.squareup.workflow1.RuntimeConfig
2424
import com.squareup.workflow1.RuntimeConfigOptions.Companion.RENDER_PER_ACTION
25-
import com.squareup.workflow1.WorkflowExperimentalRuntime
2625
import com.squareup.workflow1.WorkflowInterceptor
2726
import com.squareup.workflow1.ui.Screen
2827
import com.squareup.workflow1.ui.ViewEnvironment.Companion.EMPTY
2928
import com.squareup.workflow1.ui.ViewRegistry
3029
import com.squareup.workflow1.ui.WorkflowLayout
31-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
3230
import com.squareup.workflow1.ui.renderWorkflowIn
3331
import com.squareup.workflow1.ui.withEnvironment
3432
import kotlinx.coroutines.flow.StateFlow
3533
import kotlinx.coroutines.flow.map
3634
import kotlinx.coroutines.flow.onEach
3735
import timber.log.Timber
3836

39-
@OptIn(WorkflowUiExperimentalApi::class)
4037
private val viewEnvironment = EMPTY + (ViewRegistry to SampleContainers)
4138

4239
class PerformancePoetryActivity : AppCompatActivity() {
@@ -53,7 +50,6 @@ class PerformancePoetryActivity : AppCompatActivity() {
5350
private var selectTimeoutCount = 0
5451
private var selectTimeoutMainThreadMessageLatch = 0
5552

56-
@OptIn(WorkflowUiExperimentalApi::class, WorkflowExperimentalRuntime::class)
5753
override fun onCreate(savedInstanceState: Bundle?) {
5854
super.onCreate(savedInstanceState)
5955

@@ -164,7 +160,6 @@ class PerformancePoetryActivity : AppCompatActivity() {
164160
}
165161
}
166162

167-
@OptIn(WorkflowUiExperimentalApi::class)
168163
private fun traceRenderingLatency(screen: Screen) {
169164
// Start the trace sections for new rendering produced -> shown.
170165
val navigationHolder = navigationInFlight
@@ -269,7 +264,6 @@ class PoetryModel(
269264
interceptor: WorkflowInterceptor?,
270265
runtimeConfig: RuntimeConfig
271266
) : ViewModel() {
272-
@OptIn(WorkflowUiExperimentalApi::class)
273267
val renderings: StateFlow<Screen> by lazy {
274268
renderWorkflowIn(
275269
workflow = workflow,

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/views/BlankScreen.kt

-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ import android.widget.FrameLayout
66
import com.squareup.workflow1.ui.AndroidScreen
77
import com.squareup.workflow1.ui.ScreenViewFactory
88
import com.squareup.workflow1.ui.ScreenViewHolder
9-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
109

11-
@OptIn(WorkflowUiExperimentalApi::class)
1210
object BlankScreen : AndroidScreen<BlankScreen> {
1311
override val viewFactory: ScreenViewFactory<BlankScreen>
1412
get() = ScreenViewFactory.fromCode<BlankScreen> { _, initialEnvironment, context, container ->

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/views/LoaderSpinner.kt

-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import com.squareup.benchmarks.performance.complex.poetry.R
99
import com.squareup.workflow1.ui.AndroidScreen
1010
import com.squareup.workflow1.ui.ScreenViewFactory
1111
import com.squareup.workflow1.ui.ScreenViewHolder
12-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1312

14-
@OptIn(WorkflowUiExperimentalApi::class)
1513
object LoaderSpinner : AndroidScreen<LoaderSpinner> {
1614
override val viewFactory =
1715
ScreenViewFactory.fromCode<LoaderSpinner> { _, initialEnvironment, context, _ ->

benchmarks/performance-poetry/complex-poetry/src/main/java/com/squareup/benchmarks/performance/complex/poetry/views/MayBeLoadingScreen.kt

-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ package com.squareup.benchmarks.performance.complex.poetry.views
22

33
import com.squareup.sample.container.overviewdetail.OverviewDetailScreen
44
import com.squareup.sample.container.panel.ScrimScreen
5-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
65
import com.squareup.workflow1.ui.navigation.BodyAndOverlaysScreen
76
import com.squareup.workflow1.ui.navigation.FullScreenModal
87

9-
@OptIn(WorkflowUiExperimentalApi::class)
108
typealias MayBeLoadingScreen =
119
BodyAndOverlaysScreen<ScrimScreen<OverviewDetailScreen<*>>, FullScreenModal<LoaderSpinner>>
1210

13-
@OptIn(WorkflowUiExperimentalApi::class)
1411
fun MayBeLoadingScreen(
1512
baseScreen: OverviewDetailScreen<*>,
1613
loaders: List<LoaderSpinner> = emptyList()

fileTemplates/Layout Runner (ViewBinding).kt

-27
This file was deleted.

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/hellocompose/HelloComposeTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule
55
import androidx.compose.ui.test.onNodeWithText
66
import androidx.compose.ui.test.performClick
77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
98
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
109
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1110
import com.squareup.workflow1.ui.internal.test.compose.settleForNextRendering
@@ -18,7 +17,6 @@ import org.junit.rules.RuleChain
1817
import org.junit.runner.RunWith
1918

2019
@RunWith(AndroidJUnit4::class)
21-
@OptIn(WorkflowUiExperimentalApi::class)
2220
class HelloComposeTest {
2321

2422
private val composeRule = createAndroidComposeRule<HelloComposeActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/hellocomposebinding/HelloBindingTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule
55
import androidx.compose.ui.test.onNodeWithText
66
import androidx.compose.ui.test.performClick
77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
98
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
109
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1110
import leakcanary.DetectLeaksAfterTestSuccess
@@ -15,7 +14,6 @@ import org.junit.rules.RuleChain
1514
import org.junit.runner.RunWith
1615

1716
@RunWith(AndroidJUnit4::class)
18-
@OptIn(WorkflowUiExperimentalApi::class)
1917
class HelloBindingTest {
2018

2119
private val composeRule = createAndroidComposeRule<HelloBindingActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/hellocomposeworkflow/HelloComposeWorkflowTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.ui.test.junit4.createAndroidComposeRule
55
import androidx.compose.ui.test.onNodeWithText
66
import androidx.compose.ui.test.performClick
77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
98
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
109
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1110
import leakcanary.DetectLeaksAfterTestSuccess
@@ -15,7 +14,6 @@ import org.junit.rules.RuleChain
1514
import org.junit.runner.RunWith
1615

1716
@RunWith(AndroidJUnit4::class)
18-
@OptIn(WorkflowUiExperimentalApi::class)
1917
class HelloComposeWorkflowTest {
2018

2119
private val composeRule = createAndroidComposeRule<HelloComposeWorkflowActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/inlinerendering/InlineRenderingTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.compose.ui.test.hasClickAction
66
import androidx.compose.ui.test.junit4.createAndroidComposeRule
77
import androidx.compose.ui.test.performClick
88
import androidx.test.ext.junit.runners.AndroidJUnit4
9-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
109
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
1110
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1211
import com.squareup.workflow1.ui.internal.test.compose.settleForNextRendering
@@ -19,7 +18,6 @@ import org.junit.rules.RuleChain
1918
import org.junit.runner.RunWith
2019

2120
@RunWith(AndroidJUnit4::class)
22-
@OptIn(WorkflowUiExperimentalApi::class)
2321
class InlineRenderingTest {
2422

2523
private val composeRule = createAndroidComposeRule<InlineRenderingActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/launcher/SampleLauncherTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import androidx.test.espresso.Espresso.pressBack
1010
import androidx.test.ext.junit.runners.AndroidJUnit4
1111
import androidx.test.platform.app.InstrumentationRegistry
1212
import com.squareup.sample.compose.R
13-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1413
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
1514
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1615
import leakcanary.DetectLeaksAfterTestSuccess
@@ -20,7 +19,6 @@ import org.junit.rules.RuleChain
2019
import org.junit.runner.RunWith
2120

2221
@RunWith(AndroidJUnit4::class)
23-
@OptIn(WorkflowUiExperimentalApi::class)
2422
class SampleLauncherTest {
2523

2624
private val composeRule = createAndroidComposeRule<SampleLauncherActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/nestedrenderings/NestedRenderingsTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import androidx.compose.ui.test.onAllNodesWithText
99
import androidx.compose.ui.test.onNodeWithText
1010
import androidx.compose.ui.test.performClick
1111
import androidx.test.ext.junit.runners.AndroidJUnit4
12-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1312
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
1413
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1514
import leakcanary.DetectLeaksAfterTestSuccess
@@ -21,7 +20,6 @@ import org.junit.runner.RunWith
2120
private const val ADD_BUTTON_TEXT = "Add Child"
2221

2322
@RunWith(AndroidJUnit4::class)
24-
@OptIn(WorkflowUiExperimentalApi::class)
2523
class NestedRenderingsTest {
2624

2725
private val composeRule = createAndroidComposeRule<NestedRenderingsActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/preview/PreviewTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.ui.test.assertTextContains
55
import androidx.compose.ui.test.junit4.createAndroidComposeRule
66
import androidx.compose.ui.test.onNodeWithText
77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
98
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
109
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1110
import leakcanary.DetectLeaksAfterTestSuccess
@@ -15,7 +14,6 @@ import org.junit.rules.RuleChain
1514
import org.junit.runner.RunWith
1615

1716
@RunWith(AndroidJUnit4::class)
18-
@OptIn(WorkflowUiExperimentalApi::class)
1917
class PreviewTest {
2018

2119
private val composeRule = createAndroidComposeRule<PreviewActivity>()

samples/compose-samples/src/androidTest/java/com/squareup/sample/compose/textinput/TextInputTest.kt

-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import androidx.compose.ui.test.performClick
99
import androidx.compose.ui.test.performTextInput
1010
import androidx.compose.ui.test.performTextReplacement
1111
import androidx.test.ext.junit.runners.AndroidJUnit4
12-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1312
import com.squareup.workflow1.ui.internal.test.IdleAfterTestRule
1413
import com.squareup.workflow1.ui.internal.test.IdlingDispatcherRule
1514
import com.squareup.workflow1.ui.internal.test.compose.settleForNextRendering
@@ -22,7 +21,6 @@ import org.junit.rules.RuleChain
2221
import org.junit.runner.RunWith
2322

2423
@RunWith(AndroidJUnit4::class)
25-
@OptIn(WorkflowUiExperimentalApi::class)
2624
class TextInputTest {
2725

2826
private val composeRule = createAndroidComposeRule<TextInputActivity>()

samples/compose-samples/src/main/java/com/squareup/sample/compose/hellocompose/App.kt

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@file:OptIn(WorkflowUiExperimentalApi::class, WorkflowExperimentalRuntime::class)
1+
@file:OptIn(WorkflowExperimentalRuntime::class)
22

33
package com.squareup.sample.compose.hellocompose
44

@@ -13,21 +13,24 @@ import androidx.compose.ui.tooling.preview.Preview
1313
import androidx.compose.ui.unit.dp
1414
import com.squareup.workflow1.WorkflowExperimentalRuntime
1515
import com.squareup.workflow1.config.AndroidRuntimeConfigTools
16+
import com.squareup.workflow1.mapRendering
1617
import com.squareup.workflow1.ui.ViewEnvironment
17-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1818
import com.squareup.workflow1.ui.compose.WorkflowRendering
1919
import com.squareup.workflow1.ui.compose.renderAsState
2020
import com.squareup.workflow1.ui.compose.withComposeInteropSupport
21+
import com.squareup.workflow1.ui.withEnvironment
2122

2223
private val viewEnvironment = ViewEnvironment.EMPTY.withComposeInteropSupport()
2324

2425
@Composable fun App() {
2526
MaterialTheme {
26-
val rendering by HelloComposeWorkflow.renderAsState(
27-
props = Unit,
28-
runtimeConfig = AndroidRuntimeConfigTools.getAppWorkflowRuntimeConfig(),
29-
onOutput = {}
30-
)
27+
val rendering by HelloComposeWorkflow
28+
.mapRendering { it.withEnvironment(viewEnvironment) }
29+
.renderAsState(
30+
props = Unit,
31+
runtimeConfig = AndroidRuntimeConfigTools.getAppWorkflowRuntimeConfig(),
32+
onOutput = {}
33+
)
3134
WorkflowRendering(
3235
rendering,
3336
Modifier.border(

samples/compose-samples/src/main/java/com/squareup/sample/compose/hellocompose/HelloComposeScreen.kt

-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ import androidx.compose.runtime.Composable
88
import androidx.compose.ui.Alignment
99
import androidx.compose.ui.Modifier
1010
import androidx.compose.ui.tooling.preview.Preview
11-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1211
import com.squareup.workflow1.ui.compose.ComposeScreen
1312
import com.squareup.workflow1.ui.compose.tooling.Preview
1413

15-
@OptIn(WorkflowUiExperimentalApi::class)
1614
data class HelloComposeScreen(
1715
val message: String,
1816
val onClick: () -> Unit
@@ -28,7 +26,6 @@ data class HelloComposeScreen(
2826
}
2927
}
3028

31-
@OptIn(WorkflowUiExperimentalApi::class)
3229
@Preview(heightDp = 150, showBackground = true)
3330
@Composable
3431
private fun HelloPreview() {

samples/compose-samples/src/main/java/com/squareup/sample/compose/hellocomposebinding/HelloBinding.kt

-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ import androidx.compose.runtime.Composable
88
import androidx.compose.ui.Modifier
99
import androidx.compose.ui.tooling.preview.Preview
1010
import com.squareup.sample.compose.hellocomposebinding.HelloWorkflow.Rendering
11-
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi
1211
import com.squareup.workflow1.ui.compose.ScreenComposableFactory
1312
import com.squareup.workflow1.ui.compose.tooling.Preview
1413

15-
@OptIn(WorkflowUiExperimentalApi::class)
1614
val HelloBinding = ScreenComposableFactory<Rendering> { rendering ->
1715
Text(
1816
rendering.message,
@@ -23,7 +21,6 @@ val HelloBinding = ScreenComposableFactory<Rendering> { rendering ->
2321
)
2422
}
2523

26-
@OptIn(WorkflowUiExperimentalApi::class)
2724
@Preview(heightDp = 150, showBackground = true)
2825
@Composable
2926
fun DrawHelloRenderingPreview() {

0 commit comments

Comments
 (0)