// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.facebook.testing.screenshot:plugin:0.12.0'
        // leakcanary uses Kotlin. This app does not, but the plugin is
        // needed to specify language version options.
        // Gradle 8.0 requires minimum kotlin 1.6.10
        // https://docs.gradle.org/current/userguide/upgrading_version_7.html#legacy_incrementaltaskinputs_api
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10'
        // Requries Minimum AGP 7.3.
        // https://docs.gradle.org/current/userguide/upgrading_version_7.html#legacy_incrementaltaskinputs_api
        classpath 'com.android.tools.build:gradle:7.4.2'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
    configurations.classpath {
        resolutionStrategy.activateDependencyLocking()
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = project.hasProperty('out_dir')
    ? project.property('out_dir')
    : '../build'

subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
    project.evaluationDependsOn(':app')

    dependencyLocking {
        lockAllConfigurations()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
