apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
androidExtensions {
  experimental = true
}

android {
  compileSdkVersion 28
  defaultConfig {
    applicationId "com.airbnb.lottie"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode 67
    versionName "2.8.0"
    multiDexEnabled true
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    vectorDrawables.useSupportLibrary = true
    buildConfigField("String", "S3AccessKey", "\"" + System.getenv("LOTTIE_S3_API_KEY") + "\"")
    buildConfigField("String", "S3SecretKey", "\"" + System.getenv("LOTTIE_S3_SECRET_KEY") + "\"")
    buildConfigField("String", "HappoApiKey", "\"" + System.getenv("LOTTIE_HAPPO_API_KEY") + "\"")
    buildConfigField("String", "HappoSecretKey", "\"" + System.getenv("LOTTIE_HAPPO_SECRET_KEY") + "\"")
    buildConfigField("String", "TRAVIS_GIT_BRANCH", "\"" + System.getenv("TRAVIS_GIT_BRANCH") + "\"")
    buildConfigField("String", "GIT_SHA", "\"" + gitSha + "\"")
    buildConfigField("String", "GIT_BRANCH", "\"" + gitBranch + "\"")
  }
  buildTypes {
    release {
      minifyEnabled false
    }
  }
  lintOptions {
    ignore 'InvalidPackage'
    textReport true
    textOutput 'stdout'
    baseline file("lint-baseline.xml")
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
  }
  packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
  }
}

dependencies {
  implementation project(':lottie')
  implementation "androidx.appcompat:appcompat:${androidXVersion}"
  implementation "androidx.recyclerview:recyclerview:${androidXVersion}"
  implementation "com.google.android.material:material:${androidXVersion}"
  implementation "androidx.cardview:cardview:${androidXVersion}"
  implementation "androidx.core:core-ktx:${androidXVersion}"
  implementation "androidx.browser:browser:${androidXVersion}"
  implementation 'androidx.multidex:multidex:2.0.0'
  implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
  kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
  implementation 'com.airbnb.android:epoxy:2.17.0'
  kapt 'com.airbnb.android:epoxy-processor:2.17.0'
  implementation 'com.airbnb.android:mvrx:0.5.0'
  implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
  implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
  implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT'
  kapt 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'
  implementation 'com.matthew-tamlin:sliding-intro-screen:3.2.0'
  implementation 'com.dlazaro66.qrcodereaderview:qrcodereaderview:2.0.2'
  implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'
  testImplementation 'junit:junit:4.12'
  androidTestImplementation 'com.airbnb.android:happo:0.0.15@aar'
  // TODO: figure out why transitive deps of happo are needed
  androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
  androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
  androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.1.0-alpha4'
  androidTestImplementation 'io.reactivex.rxjava2:rxjava:2.2.1'
  androidTestImplementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
  androidTestImplementation 'com.squareup.okhttp3:okhttp:3.11.0'
  androidTestImplementation 'com.amazonaws:aws-android-sdk-core:2.6.31'
  androidTestImplementation 'com.amazonaws:aws-android-sdk-s3:2.6.31'
  androidTestImplementation 'io.jsonwebtoken:jjwt:0.9.0'
  androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha4', {
    exclude group: 'com.android.support', module: 'support-annotations'
    exclude group: 'org.hamcrest', module: 'hamcrest-integration'
  })
  androidTestImplementation('androidx.test:runner:1.1.0-alpha4', {
    exclude group: 'com.android.support', module: 'support-annotations'
  })
  androidTestImplementation('androidx.test:rules:1.1.0-alpha4', {
    exclude group: 'com.android.support', module: 'support-annotations'
  })
  implementation 'com.google.code.gson:gson:2.8.2'
  implementation 'com.squareup.okhttp3:okhttp:3.11.0'
  implementation 'com.squareup.retrofit2:retrofit:2.4.0'
  implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
  implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
  implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
  implementation 'io.reactivex.rxjava2:rxjava:2.2.1'
  implementation 'com.github.bumptech.glide:glide:4.8.0'
}
repositories {
  mavenCentral()
}
