group 'io.flutter.plugins.googlesignin'
version '1.0-SNAPSHOT'

buildscript {
    repositories {
        google()
        mavenCentral()
    }

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

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

apply plugin: 'com.android.library'

android {
    compileSdkVersion 31

    defaultConfig {
        minSdkVersion 16
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    lintOptions {
        // TODO(stuartmorgan): Enable when gradle is updated.
        // disable 'AndroidGradlePluginVersion'
        disable 'InvalidPackage'
        disable 'GradleDependency'
    }


    testOptions {
        unitTests.includeAndroidResources = true
        unitTests.returnDefaultValues = true
        unitTests.all {
            testLogging {
               events "passed", "skipped", "failed", "standardOut", "standardError"
               outputs.upToDateWhen {false}
               showStandardStreams = true
            }
        }
    }
}

dependencies {
    implementation 'com.google.android.gms:play-services-auth:20.4.1'
    implementation 'com.google.guava:guava:31.1-android'
    testImplementation 'junit:junit:4.13.2'
    testImplementation 'org.mockito:mockito-inline:5.0.0'
}
