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,4 +1,4 @@
@file:OptIn(WorkflowUiExperimentalApi::class, WorkflowUiExperimentalApi::class)
@file:OptIn(WorkflowUiExperimentalApi::class)

package com.squareup.sample.compose.preview

Expand Down
14 changes: 14 additions & 0 deletions workflow-ui/core-android/api/core-android.api
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,20 @@ public abstract interface class com/squareup/workflow1/ui/container/OverlayDialo
public abstract fun updateDialog (Landroid/app/Dialog;Lcom/squareup/workflow1/ui/container/Overlay;Lcom/squareup/workflow1/ui/ViewEnvironment;)V
}

public abstract interface class com/squareup/workflow1/ui/container/OverlayDialogFactoryFinder {
public static final field Companion Lcom/squareup/workflow1/ui/container/OverlayDialogFactoryFinder$Companion;
public abstract fun getDialogFactoryForRendering (Lcom/squareup/workflow1/ui/ViewEnvironment;Lcom/squareup/workflow1/ui/container/Overlay;)Lcom/squareup/workflow1/ui/container/OverlayDialogFactory;
}

public final class com/squareup/workflow1/ui/container/OverlayDialogFactoryFinder$Companion : com/squareup/workflow1/ui/ViewEnvironmentKey {
public fun getDefault ()Lcom/squareup/workflow1/ui/container/OverlayDialogFactoryFinder;
public synthetic fun getDefault ()Ljava/lang/Object;
}

public final class com/squareup/workflow1/ui/container/OverlayDialogFactoryFinder$DefaultImpls {
public static fun getDialogFactoryForRendering (Lcom/squareup/workflow1/ui/container/OverlayDialogFactoryFinder;Lcom/squareup/workflow1/ui/ViewEnvironment;Lcom/squareup/workflow1/ui/container/Overlay;)Lcom/squareup/workflow1/ui/container/OverlayDialogFactory;
}

public final class com/squareup/workflow1/ui/container/OverlayDialogFactoryKt {
public static final fun toDialogFactory (Lcom/squareup/workflow1/ui/container/Overlay;Lcom/squareup/workflow1/ui/ViewEnvironment;)Lcom/squareup/workflow1/ui/container/OverlayDialogFactory;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import com.squareup.workflow1.ui.buildView
import com.squareup.workflow1.ui.environment
import com.squareup.workflow1.ui.showRendering
import com.squareup.workflow1.ui.start
import java.lang.IllegalStateException
import kotlin.reflect.KClass

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,5 @@ public interface OverlayDialogFactory<RenderingT : Overlay> : ViewRegistry.Entry
@WorkflowUiExperimentalApi
public fun <T : Overlay> T.toDialogFactory(
viewEnvironment: ViewEnvironment
): OverlayDialogFactory<T> {
val entry = viewEnvironment[ViewRegistry].getEntryFor(this::class)

@Suppress("UNCHECKED_CAST")
return entry as? OverlayDialogFactory<T>
?: (this as? AndroidOverlay<*>)?.dialogFactory as? OverlayDialogFactory<T>
?: (this as? AlertOverlay)?.let { AlertOverlayDialogFactory as OverlayDialogFactory<T> }
?: throw IllegalArgumentException(
"An OverlayDialogFactory should have been registered to display $this, " +
"or that class should implement AndroidOverlay. Instead found $entry."
)
}
): OverlayDialogFactory<T> =
viewEnvironment[OverlayDialogFactoryFinder].getDialogFactoryForRendering(viewEnvironment, this)
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.squareup.workflow1.ui.container

import com.squareup.workflow1.ui.ViewEnvironment
import com.squareup.workflow1.ui.ViewEnvironmentKey
import com.squareup.workflow1.ui.ViewRegistry
import com.squareup.workflow1.ui.WorkflowUiExperimentalApi

/**
* [ViewEnvironment] service object used by [Overlay.toDialogFactory] to find the right
* [OverlayDialogFactoryScreenViewFactory]. The default implementation makes [AndroidOverlay]
* work, and provides a default binding for [AlertOverlay].
*/
@WorkflowUiExperimentalApi
public interface OverlayDialogFactoryFinder {
public fun <OverlayT : Overlay> getDialogFactoryForRendering(
environment: ViewEnvironment,
rendering: OverlayT
): OverlayDialogFactory<OverlayT> {
val entry = environment[ViewRegistry].getEntryFor(rendering::class)

@Suppress("UNCHECKED_CAST")
return entry as? OverlayDialogFactory<OverlayT>
?: (rendering as? AndroidOverlay<*>)?.dialogFactory as? OverlayDialogFactory<OverlayT>
?: (rendering as? AlertOverlay)?.let {
AlertOverlayDialogFactory as OverlayDialogFactory<OverlayT>
}
?: throw IllegalArgumentException(
"An OverlayDialogFactory should have been registered to display $this, " +
"or that class should implement AndroidOverlay. Instead found $entry."
)
}

public companion object : ViewEnvironmentKey<OverlayDialogFactoryFinder>(
OverlayDialogFactoryFinder::class
) {
override val default: OverlayDialogFactoryFinder = object : OverlayDialogFactoryFinder {}
}
}