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-graphics:samples", "ui-graphics/samples")
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-test-font", "ui-test-font")
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(":ui:ui-livedata", "ui-livedata")
includeProject(":ui:ui-livedata:samples", "ui-livedata/samples")
includeProject(":test-screenshot", "../test/screenshot")
includeProject(":ui:ui-rxjava2", "ui-rxjava2")
includeProject(":ui:ui-rxjava2:samples", "ui-rxjava2/samples")

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