// Signature format: 4.0
package androidx.appactions.interaction.capabilities.core {

  public interface BaseExecutionSession<ArgumentsT, OutputT> {
    method public default void onCreate(androidx.appactions.interaction.capabilities.core.SessionConfig sessionConfig);
    method public default void onDestroy();
    method public default suspend Object? onExecute(ArgumentsT arguments, kotlin.coroutines.Continuation<? super androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>>);
    method public default com.google.common.util.concurrent.ListenableFuture<androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>> onExecuteAsync(ArgumentsT arguments);
  }

  public abstract class Capability {
    method public String getId();
    property public String id;
  }

  public abstract static class Capability.Builder<BuilderT extends androidx.appactions.interaction.capabilities.core.Capability.Builder<BuilderT, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT>, ArgumentsT, OutputT, ConfirmationT, ExecutionSessionT extends androidx.appactions.interaction.capabilities.core.BaseExecutionSession<ArgumentsT, OutputT>> {
    method public androidx.appactions.interaction.capabilities.core.Capability build();
    method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallback<ArgumentsT,OutputT> executionCallback);
    method public final BuilderT setExecutionCallback(androidx.appactions.interaction.capabilities.core.ExecutionCallbackAsync<ArgumentsT,OutputT> executionCallbackAsync);
    method protected BuilderT setExecutionSessionFactory(kotlin.jvm.functions.Function1<? super androidx.appactions.interaction.capabilities.core.HostProperties?,? extends ExecutionSessionT> sessionFactory);
    method public final BuilderT setId(String id);
  }

  public fun interface ExecutionCallback<ArgumentsT, OutputT> {
    method public suspend Object? onExecute(ArgumentsT arguments, kotlin.coroutines.Continuation<? super androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>>);
  }

  public fun interface ExecutionCallbackAsync<ArgumentsT, OutputT> {
    method public com.google.common.util.concurrent.ListenableFuture<androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT>> onExecute(ArgumentsT arguments);
  }

  public final class ExecutionResult<OutputT> {
    method public OutputT? getOutput();
    property public final OutputT? output;
  }

  public static final class ExecutionResult.Builder<OutputT> {
    ctor public ExecutionResult.Builder();
    method public androidx.appactions.interaction.capabilities.core.ExecutionResult<OutputT> build();
    method public androidx.appactions.interaction.capabilities.core.ExecutionResult.Builder<OutputT> setOutput(OutputT output);
  }

  public final class HostProperties {
    method public android.util.SizeF getMaxHostSizeDp();
    property public final android.util.SizeF maxHostSizeDp;
  }

  public final class SessionConfig {
  }

}

package androidx.appactions.interaction.capabilities.core.properties {

  public final class Property<T> {
    ctor public Property(optional java.util.List<? extends T> possibleValues);
    ctor public Property(optional java.util.List<? extends T> possibleValues, optional boolean isRequiredForExecution);
    ctor public Property(optional java.util.List<? extends T> possibleValues, optional boolean isRequiredForExecution, optional boolean shouldMatchPossibleValues);
    ctor public Property(kotlin.jvm.functions.Function0<? extends java.util.List<? extends T>> possibleValueSupplier);
    ctor public Property(kotlin.jvm.functions.Function0<? extends java.util.List<? extends T>> possibleValueSupplier, optional boolean isRequiredForExecution);
    ctor public Property(kotlin.jvm.functions.Function0<? extends java.util.List<? extends T>> possibleValueSupplier, optional boolean isRequiredForExecution, optional boolean shouldMatchPossibleValues);
    method public java.util.List<T> getPossibleValues();
    method public boolean isRequiredForExecution();
    method public boolean isSupported();
    method public boolean shouldMatchPossibleValues();
    method public static <T> androidx.appactions.interaction.capabilities.core.properties.Property<T> unsupported();
    property public final boolean isRequiredForExecution;
    property public final boolean isSupported;
    property public final java.util.List<T> possibleValues;
    property public final boolean shouldMatchPossibleValues;
    field public static final androidx.appactions.interaction.capabilities.core.properties.Property.Companion Companion;
  }

  public static final class Property.Companion {
    method public <T> androidx.appactions.interaction.capabilities.core.properties.Property<T> unsupported();
  }

  public final class StringValue {
    ctor public StringValue(String name);
    ctor public StringValue(String name, optional java.util.List<java.lang.String> alternateNames);
    method public java.util.List<java.lang.String> getAlternateNames();
    method public String getName();
    property public final java.util.List<java.lang.String> alternateNames;
    property public final String name;
  }

}

