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 47
    versionName "2.6.0-beta7"
    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.10.0'
  kapt 'com.airbnb.android:epoxy-processor:2.10.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()
}
