import net.ltgt.gradle.errorprone.CheckSeverity

apply from: 'gradle-maven-push.gradle'
apply plugin: 'com.android.library'
apply plugin: 'net.ltgt.errorprone'

android {
  compileSdkVersion 28
  resourcePrefix 'lottie_'

  defaultConfig {
    minSdkVersion 16
    targetSdkVersion 28
  }
  lintOptions {
    abortOnError true
    textReport true
    textOutput 'stdout'
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}

dependencies {
  implementation "androidx.appcompat:appcompat:1.0.0"
  testImplementation "org.mockito:mockito-core:2.15.0"
  testImplementation 'junit:junit:4.12'
  testImplementation "org.robolectric:robolectric:4.0-alpha-3"
  // Do not ugprade to 2.0 because it will bring in Kotlin as a transitive dependency.
  implementation("com.squareup.okio:okio:1.17.4")
  annotationProcessor "com.uber.nullaway:nullaway:0.7.5"
  errorprone "com.google.errorprone:error_prone_core:2.3.2"
  errorproneJavac "com.google.errorprone:javac:9+181-r4173-1"
}

task javadoc(type: Javadoc) {
  source = android.sourceSets.main.java.srcDirs
  configurations.implementation.setCanBeResolved(true)
  classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.implementation
  failOnError false
}

tasks.withType(JavaCompile) {
  // remove the if condition if you want to run NullAway on test code
  if (!name.toLowerCase().contains("test")) {
    options.errorprone {
      option("NullAway:AnnotatedPackages", "com.airbnb.lottie")
      // TODO: enable these and fix errors one by one.
      check("NullAway", CheckSeverity.OFF)
      check("StringSplitter", CheckSeverity.OFF)
      check("DefaultCharset", CheckSeverity.OFF)
      check("HidingField", CheckSeverity.OFF)
      check("NarrowingCompoundAssignment", CheckSeverity.OFF)
      check("MissingOverride", CheckSeverity.OFF)
      check("ReferenceEquality", CheckSeverity.OFF)
      check("FallThrough", CheckSeverity.OFF)
      check("FloatingPointLiteralPrecision", CheckSeverity.OFF)
      check("MissingCasesInEnumSwitch", CheckSeverity.OFF)
      check("OperatorPrecedence", CheckSeverity.OFF)
    }
  }
}

// Re-enable this if releases are uploaded from CI.
//gradle.taskGraph.whenReady { taskGraph ->
//  if (taskGraph.allTasks.any { it instanceof Sign }) {
//    allprojects { ext."signing.keyId" = System.getenv("GRADLE_SIGNING_KEY_ID") }
//    allprojects { ext."signing.secretKeyRingFile" = "~/.gnupg/secring.gpg" }
//    allprojects { ext."signing.password" = System.getenv("GRADLE_SIGNING_PASSWORD") }
//  }
//}
