// Signature format: 4.0
package androidx.window.extensions {

  @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalWindowExtensionsApi {
  }

  public interface WindowExtensions {
    method @androidx.window.extensions.ExperimentalWindowExtensionsApi public androidx.window.extensions.embedding.ActivityEmbeddingComponent? getActivityEmbeddingComponent();
    method public default int getVendorApiLevel();
    method public androidx.window.extensions.layout.WindowLayoutComponent? getWindowLayoutComponent();
  }

  public class WindowExtensionsProvider {
    method public static androidx.window.extensions.WindowExtensions getWindowExtensions();
  }

}

package androidx.window.extensions.embedding {

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public interface ActivityEmbeddingComponent {
    method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
    method public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public class ActivityRule extends androidx.window.extensions.embedding.EmbeddingRule {
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean matchesActivity(android.app.Activity);
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean matchesIntent(android.content.Intent);
    method public boolean shouldAlwaysExpand();
  }

  public static final class ActivityRule.Builder {
    ctor public ActivityRule.Builder(java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>);
    method public androidx.window.extensions.embedding.ActivityRule build();
    method public androidx.window.extensions.embedding.ActivityRule.Builder setShouldAlwaysExpand(boolean);
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public class ActivityStack {
    ctor public ActivityStack(java.util.List<android.app.Activity!>, boolean);
    method public java.util.List<android.app.Activity!> getActivities();
    method public boolean isEmpty();
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public abstract class EmbeddingRule {
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public class SplitInfo {
    ctor public SplitInfo(androidx.window.extensions.embedding.ActivityStack, androidx.window.extensions.embedding.ActivityStack, float);
    method public androidx.window.extensions.embedding.ActivityStack getPrimaryActivityStack();
    method public androidx.window.extensions.embedding.ActivityStack getSecondaryActivityStack();
    method public float getSplitRatio();
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public class SplitPairRule extends androidx.window.extensions.embedding.SplitRule {
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean matchesActivityIntentPair(android.app.Activity, android.content.Intent);
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean matchesActivityPair(android.app.Activity, android.app.Activity);
    method public boolean shouldClearTop();
    method public boolean shouldFinishPrimaryWithSecondary();
    method public boolean shouldFinishSecondaryWithPrimary();
  }

  public static final class SplitPairRule.Builder {
    ctor public SplitPairRule.Builder(java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.app.Activity!>!>, java.util.function.Predicate<android.util.Pair<android.app.Activity!,android.content.Intent!>!>, java.util.function.Predicate<android.view.WindowMetrics!>);
    method public androidx.window.extensions.embedding.SplitPairRule build();
    method public androidx.window.extensions.embedding.SplitPairRule.Builder setLayoutDirection(int);
    method public androidx.window.extensions.embedding.SplitPairRule.Builder setShouldClearTop(boolean);
    method public androidx.window.extensions.embedding.SplitPairRule.Builder setShouldFinishPrimaryWithSecondary(boolean);
    method public androidx.window.extensions.embedding.SplitPairRule.Builder setShouldFinishSecondaryWithPrimary(boolean);
    method public androidx.window.extensions.embedding.SplitPairRule.Builder setSplitRatio(float);
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public class SplitPlaceholderRule extends androidx.window.extensions.embedding.SplitRule {
    method public android.content.Intent getPlaceholderIntent();
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean matchesActivity(android.app.Activity);
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean matchesIntent(android.content.Intent);
  }

  public static final class SplitPlaceholderRule.Builder {
    ctor public SplitPlaceholderRule.Builder(android.content.Intent, java.util.function.Predicate<android.app.Activity!>, java.util.function.Predicate<android.content.Intent!>, java.util.function.Predicate<android.view.WindowMetrics!>);
    method public androidx.window.extensions.embedding.SplitPlaceholderRule build();
    method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setLayoutDirection(int);
    method public androidx.window.extensions.embedding.SplitPlaceholderRule.Builder setSplitRatio(float);
  }

  @androidx.window.extensions.ExperimentalWindowExtensionsApi public abstract class SplitRule extends androidx.window.extensions.embedding.EmbeddingRule {
    method @RequiresApi(api=android.os.Build.VERSION_CODES.N) public boolean checkParentMetrics(android.view.WindowMetrics);
    method public int getLayoutDirection();
    method public float getSplitRatio();
  }

}

package androidx.window.extensions.layout {

  public interface DisplayFeature {
    method public android.graphics.Rect getBounds();
  }

  public class FoldingFeature implements androidx.window.extensions.layout.DisplayFeature {
    ctor public FoldingFeature(android.graphics.Rect, int, int);
    method public android.graphics.Rect getBounds();
    method public int getState();
    method public int getType();
    field public static final int STATE_FLAT = 1; // 0x1
    field public static final int STATE_HALF_OPENED = 2; // 0x2
    field public static final int TYPE_FOLD = 1; // 0x1
    field public static final int TYPE_HINGE = 2; // 0x2
  }

  public interface WindowLayoutComponent {
    method public void addWindowLayoutInfoListener(android.app.Activity, java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
    method public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
  }

  public class WindowLayoutInfo {
    ctor public WindowLayoutInfo(java.util.List<androidx.window.extensions.layout.DisplayFeature!>);
    method public java.util.List<androidx.window.extensions.layout.DisplayFeature!> getDisplayFeatures();
  }

}

