pluginManagement {
    repositories {
        maven {
            url = new File(buildscript.sourceFile.parent + "/../../../prebuilts/androidx/external").getCanonicalFile()
        }
    }
}

// Calling includeProject(name, filePath) is shorthand for:
//
//   include(name)
//   project(name).projectDir = new File(filePath)
//
// Note that <name> directly controls the Gradle project name, and also indirectly sets:
//   the project name in the IDE
//   the Maven artifactId
//
def includeProject(name, filePath) {
    settings.include(name)

    def file
    if (filePath instanceof String) {
        file = new File(filePath)
    } else {
        file = filePath
    }
    project(name).projectDir = file
}

includeProject(":annotation:annotation-sampled", "../annotation/annotation-sampled")
includeProject(":annotation:annotation-experimental", "../annotation/annotation-experimental")
includeProject(":annotation:annotation-experimental-lint", "../annotation/annotation-experimental-lint")
includeProject(":annotation:annotation-experimental-lint-integration-tests", "../annotation/annotation-experimental-lint/integration-tests")
includeProject(":benchmark:benchmark-common", "../benchmark/common")
includeProject(":benchmark:benchmark-junit4", "../benchmark/junit4")
includeProject(":compose:compose-compiler", "../compose/compose-compiler")
includeProject(":compose:compose-compiler-hosted", "../compose/compose-compiler-hosted")
includeProject(":compose:compose-compiler-hosted:integration-tests", "../compose/compose-compiler-hosted/integration-tests")
includeProject(":compose:compose-ide-plugin", "../compose/compose-ide-plugin")
includeProject(":compose:compose-runtime", "../compose/compose-runtime")
includeProject(":compose:compose-runtime-benchmark", "../compose/compose-runtime/compose-runtime-benchmark")
includeProject(":compose:compose-runtime:integration-tests:samples", "../compose/compose-runtime/integration-tests/samples")
includeProject(":ui:integration-tests:benchmark", "integration-tests/benchmark")
includeProject(":ui:integration-tests:demos", "integration-tests/demos")
includeProject(":ui:integration-tests:test", "integration-tests/test")
includeProject(":ui:ui-android-text", "ui-android-text")
includeProject(":ui:ui-android-view", "ui-android-view")
includeProject(":ui:ui-android-view-non-ir", "ui-android-view-non-ir")
includeProject(":ui:ui-animation", "ui-animation")
includeProject(":ui:ui-animation-core", "ui-animation-core")
includeProject(":ui:ui-animation-core:integration-tests:samples", "ui-animation-core/integration-tests/samples")
includeProject(":ui:ui-animation:integration-tests:ui-animation-demos", "ui-animation/integration-tests/animation-demos")
includeProject(":ui:ui-animation:integration-tests:samples", "ui-animation/integration-tests/samples")
includeProject(":ui:ui-core", "ui-core")
includeProject(":ui:ui-core:integration-tests:samples", "ui-core/integration-tests/samples")
includeProject(":ui:ui-foundation", "ui-foundation")
includeProject(":ui:ui-foundation:integration-tests:samples", "ui-foundation/integration-tests/samples")
includeProject(":ui:ui-foundation:integration-tests:ui-foundation-demos", "ui-foundation/integration-tests/foundation-demos")
includeProject(":ui:ui-framework", "ui-framework")
includeProject(":ui:ui-framework:integration-tests:ui-framework-demos", "ui-framework/integration-tests/framework-demos")
includeProject(":ui:ui-framework:integration-tests:samples", "ui-framework/integration-tests/samples")
includeProject(":ui:ui-internal-lint-checks", "ui-internal-lint-checks")
includeProject(":ui:ui-geometry", "ui-geometry")
includeProject(":ui:ui-graphics", "ui-graphics")
includeProject(":ui:ui-layout", "ui-layout")
includeProject(":ui:ui-layout:integration-tests:samples", "ui-layout/integration-tests/samples")
includeProject(":ui:ui-layout:integration-tests:ui-layout-demos", "ui-layout/integration-tests/layout-demos")
includeProject(":ui:ui-material", "ui-material")
includeProject(":ui:ui-material:integration-tests:samples", "ui-material/integration-tests/samples")
includeProject(":ui:ui-material:integration-tests:ui-material-demos", "ui-material/integration-tests/material-demos")
includeProject(":ui:ui-material:integration-tests:ui-material-studies", "ui-material/integration-tests/material-studies")
includeProject(":ui:ui-platform", "ui-platform")
includeProject(":ui:ui-platform:integration-tests:samples", "ui-platform/integration-tests/samples")
includeProject(":ui:ui-test", "ui-test")
includeProject(":ui:ui-text", "ui-text")
includeProject(":ui:ui-text:integration-tests:ui-text-demos", "ui-text/integration-tests/text-demos")
includeProject(":ui:ui-text:integration-tests:ui-text-samples", "ui-text/integration-tests/samples")
includeProject(":ui:ui-tooling", "ui-tooling")
includeProject(":ui:ui-unit", "ui-unit")
includeProject(":ui:ui-util", "ui-util")
includeProject(":ui:ui-vector", "ui-vector")

/////////////////////////////
//
// External
//
/////////////////////////////

apply(from: "../include-composite-deps.gradle")

if (!startParameter.projectProperties.containsKey('android.injected.invoked.from.ide')) {
    // we don't need it in ide, so we don't configure it there
    includeProject(":docs-fake", "../docs-fake")
    includeProject(":docs-runner", "../docs-runner")
}

// dumb test project that has a test for each size to ensure that at least one test is run
// for each size and test runner is happy when there is nothing to test.
includeProject(":dumb-tests", "../dumb-tests")

includeProject(":fakeannotations", "../fakeannotations")
