// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

buildscript {
    repositories {
        google()
        mavenCentral()
        // TODO(jmagman): Remove with https://github.com/flutter/flutter/issues/78338
        jcenter {
            content {
                includeModule("org.jetbrains.trove4j", "trove4j")
            }
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        // TODO(jmagman): Remove with https://github.com/flutter/flutter/issues/78338
        jcenter {
            content {
                includeModule("org.jetbrains.trove4j", "trove4j")
            }
        }
        maven {
            url 'https://google.bintray.com/exoplayer/'
        }
    }
}

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

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