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

android {
  compileSdkVersion 27
  defaultConfig {
    applicationId "com.airbnb.lottie"
    minSdkVersion 16
    targetSdkVersion 27
    versionCode 65
    versionName "2.6.1"
    multiDexEnabled true
    testInstrumentationRunner "android.support.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 "com.android.support:appcompat-v7:$supportLibVersion"
  implementation "com.android.support:recyclerview-v7:$supportLibVersion"
  implementation "com.android.support:design:$supportLibVersion"
  implementation "com.android.support:cardview-v7:$supportLibVersion"
  implementation 'com.android.support:multidex:1.0.1'
  implementation 'android.arch.lifecycle:extensions:1.1.0'
  kapt "android.arch.lifecycle:compiler:1.1.0"
  implementation "com.android.support:customtabs:$supportLibVersion"
  implementation 'com.airbnb.android:epoxy:2.16.4'
  kapt 'com.airbnb.android:epoxy-processor:2.16.4'
  implementation 'com.airbnb.android:mvrx:0.5.0'
  implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta5'
  implementation 'androidx.core:core-ktx:0.2'
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
  implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
  implementation 'com.jakewharton:butterknife:8.8.1'
  kapt 'com.jakewharton:butterknife-compiler:8.8.1'
  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 'com.android.support.test.espresso:espresso-core:3.0.1'
  androidTestImplementation 'com.android.support.test:runner:1.0.1'
  androidTestImplementation 'com.android.support.test.espresso:espresso-idling-resource:3.0.1'
  androidTestImplementation 'io.reactivex.rxjava2:rxjava:2.1.5'
  androidTestImplementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
  androidTestImplementation 'com.squareup.okhttp3:okhttp:3.9.0'
  androidTestImplementation 'com.amazonaws:aws-android-sdk-core:2.6.5'
  androidTestImplementation 'com.amazonaws:aws-android-sdk-s3:2.6.5'
  androidTestImplementation 'io.jsonwebtoken:jjwt:0.8.0'
  androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
    exclude group: 'com.android.support', module: 'support-annotations'
    exclude group: 'org.hamcrest', module: 'hamcrest-integration'
  })
  androidTestImplementation('com.android.support.test:runner:0.5', {
    exclude group: 'com.android.support', module: 'support-annotations'
  })
  androidTestImplementation('com.android.support.test:rules:0.5', {
    exclude group: 'com.android.support', module: 'support-annotations'
  })
  implementation 'com.google.code.gson:gson:2.8.2'
  implementation 'com.squareup.okhttp3:okhttp:3.10.0'
  implementation 'com.squareup.retrofit2:retrofit:2.3.0'
  implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
  implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
  implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
  implementation 'com.github.bumptech.glide:glide:4.6.1'
}
repositories {
  mavenCentral()
}
