/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import androidx.build.AndroidXRootPlugin

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url 'https://androidx.dev/metalava/builds/6401339/artifacts/repo/m2repository'
            metadataSources {
                mavenPom()
                artifact()
            }
        }
        maven {
            url 'https://androidx.dev/dokka/builds/6402791/artifacts/repository'
            metadataSources {
                mavenPom()
                artifact()
            }
        }
    }

    ext.supportRootFolder = project.projectDir.getParentFile()
    // The docs-* tasks expect a property `repos` to be defined so we
    // are just initializing it to an empty Map.
    ext.repos = [:]
    apply from: '../buildSrc/build_dependencies.gradle'
    dependencies {
        classpath build_libs.agp
        classpath build_libs.kotlin.gradle_plugin
        classpath 'androidx.build:gradle-plugin:0.1.0'
    }
}

apply from: "../buildSrc/out.gradle"
init.chooseOutDir("/playground")

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url 'https://androidx.dev/metalava/builds/6401339/artifacts/repo/m2repository'
            metadataSources {
                mavenPom()
                artifact()
            }
        }
        maven {
            url 'https://androidx.dev/dokka/builds/6402791/artifacts/repository'
            metadataSources {
                mavenPom()
                artifact()
            }
        }
    }
}

apply plugin: AndroidXRootPlugin
