group 'io.flutter.plugins.videoplayer'
version '1.0-SNAPSHOT'
def args = ["-Xlint:deprecation","-Xlint:unchecked","-Werror"]

buildscript {
    repositories {
        google()
        mavenCentral()
    }

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

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

project.getTasks().withType(JavaCompile){
    options.compilerArgs.addAll(args)
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 31

    defaultConfig {
        minSdkVersion 16
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    lintOptions {
        disable 'InvalidPackage'
        disable 'GradleDependency'
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    dependencies {
        implementation 'com.google.android.exoplayer:exoplayer-core:2.17.1'
        implementation 'com.google.android.exoplayer:exoplayer-hls:2.17.1'
        implementation 'com.google.android.exoplayer:exoplayer-dash:2.17.1'
        implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.17.1'
        testImplementation 'junit:junit:4.13.2'
        testImplementation 'androidx.test:core:1.3.0'
        testImplementation 'org.mockito:mockito-inline:3.9.0'
        testImplementation 'org.robolectric:robolectric:4.5'
    }


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