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

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0'
        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.
	classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30'

        // 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
}
