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(rootDir, filePath)
    } else {
        file = filePath
    }
    if (!file.exists()) {
        throw new Exception("Path " + file + " does not exist; cannot include project " + name)
    }
    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-runtime", "../compose/compose-runtime")
includeProject(":compose:compose-runtime-benchmark", "../compose/compose-runtime/compose-runtime-benchmark")
includeProject(":compose:compose-runtime:samples", "../compose/compose-runtime/samples")
includeProject(":lint-checks", "../lint-checks")
includeProject(":tracing:tracing", "../tracing/tracing")
includeProject(":tracing:tracing-ktx", "../tracing/tracing-ktx")
includeProject(":ui:integration-tests:benchmark", "integration-tests/benchmark")
includeProject(":ui:integration-tests:demos", "integration-tests/demos")
includeProject(":ui:integration-tests:demos:common", "integration-tests/demos/common")
includeProject(":ui:integration-tests:test", "integration-tests/test")
includeProject(":ui:ui-text-android", "ui-text-android")
includeProject(":ui:ui-android-view", "ui-android-view")
includeProject(":ui:ui-android-view:integration-tests:ui-android-view-demos", "ui-android-view/integration-tests/android-view-demos")
includeProject(":ui:ui-android-view:samples", "ui-android-view/samples")
includeProject(":ui:ui-animation", "ui-animation")
includeProject(":ui:ui-animation-core", "ui-animation-core")
includeProject(":ui:ui-animation-core:samples", "ui-animation-core/samples")
includeProject(":ui:ui-animation:integration-tests:ui-animation-demos", "ui-animation/integration-tests/animation-demos")
includeProject(":ui:ui-animation:samples", "ui-animation/samples")
includeProject(":ui:ui-core", "ui-core")
includeProject(":ui:ui-core:samples", "ui-core/samples")
includeProject(":ui:ui-foundation", "ui-foundation")
includeProject(":ui:ui-foundation:integration-tests:ui-foundation-demos", "ui-foundation/integration-tests/foundation-demos")
includeProject(":ui:ui-foundation:samples", "ui-foundation/samples")
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:samples", "ui-framework/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:ui-layout-demos", "ui-layout/integration-tests/layout-demos")
includeProject(":ui:ui-layout:samples", "ui-layout/samples")
includeProject(":ui:ui-material", "ui-material")
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-material:samples", "ui-material/samples")
includeProject(":ui:ui-material-icons-core", "ui-material/icons/core")
includeProject(":ui:ui-material-icons-core:samples", "ui-material/icons/core/samples")
includeProject(":ui:ui-material-icons-extended", "ui-material/icons/extended")
includeProject(":ui:ui-material:icons:generator", "ui-material/icons/generator")
includeProject(":ui:ui-platform", "ui-platform")
includeProject(":ui:ui-platform:samples", "ui-platform/samples")
includeProject(":ui:ui-test", "ui-test")
includeProject(":ui:ui-text", "ui-text")
includeProject(":ui:ui-text-core", "ui-text-core")
includeProject(":ui:ui-text-core:integration-tests:ui-text-demos", "ui-text-core/integration-tests/text-demos")
includeProject(":ui:ui-text-core:samples", "ui-text-core/samples")
includeProject(":ui:ui-tooling", "ui-tooling")
includeProject(":ui:ui-unit", "ui-unit")
includeProject(":ui:ui-unit:samples", "ui-unit/samples")
includeProject(":ui:ui-util", "ui-util")
includeProject(":ui:ui-vector", "ui-vector")
includeProject(":ui:ui-saved-instance-state", "ui-saved-instance-state")
includeProject(":ui:ui-saved-instance-state:samples", "ui-saved-instance-state/samples")
includeProject(":test-screenshot", "../test/screenshot")

/////////////////////////////
//
// 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")

/////////////////////////////
//
// Remote build cache set up
//
/////////////////////////////

apply from: new File('buildSrc/remoteBuildCache.gradle')
