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 VERSION_NAME
    multiDexEnabled true
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    vectorDrawables.useSupportLibrary = true
    buildConfigField("String", "BITRISE_GIT_BRANCH", "\"" + System.getenv("BITRISE_GIT_BRANCH") + "\"")
    buildConfigField("String", "GIT_SHA", "\"" + gitSha + "\"")
    buildConfigField("String", "GIT_BRANCH", "\"" + gitBranch + "\"")
  }
  buildTypes {
    debug {
      multiDexKeepProguard file('proguard-multidex-rules.pro')
      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") + "\"")
    }
    release {
      multiDexKeepProguard file('proguard-multidex-rules.pro')
      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.fragment:fragment:1.1.0-alpha09"
  implementation("androidx.appcompat:appcompat:1.1.0-alpha05") {
    exclude group: 'androidx.fragment'
  }
  implementation "androidx.recyclerview:recyclerview:1.0.0"
  implementation "com.google.android.material:material:1.0.0"
  implementation "androidx.cardview:cardview:1.0.0"
  implementation 'androidx.core:core:1.2.0-alpha01'
  implementation 'androidx.core:core-ktx:1.1.0-beta01'
  implementation "androidx.browser:browser:1.0.0"
  implementation 'androidx.multidex:multidex:2.0.1'
  implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-beta01'
  kapt "androidx.lifecycle:lifecycle-common-java8:2.1.0-beta01"
  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-beta1'
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
  implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0'
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'
  implementation 'com.jakewharton:butterknife:9.0.0-rc1'
  kapt 'com.jakewharton:butterknife-compiler:9.0.0-rc1'
  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'
  implementation 'com.amazonaws:aws-android-sdk-s3:2.7.+'
  implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }
  implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.7.+@aar') { transitive = true }
  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'

  debugImplementation("androidx.fragment:fragment-testing:1.1.0-alpha09") {
    exclude group: 'androidx.test'
  }

  testImplementation 'junit:junit:4.12'

  androidTestImplementation 'androidx.test:core:1.2.0'
  androidTestImplementation 'androidx.test.ext:junit:1.1.0'
  androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
  androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.1.0-alpha4'
  androidTestImplementation "androidx.fragment:fragment-testing:1.1.0-alpha09"
  androidTestImplementation 'androidx.test:rules:1.2.0'
  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 'io.jsonwebtoken:jjwt:0.9.0'
  androidTestImplementation 'com.amazonaws:aws-android-sdk-core:2.6.31'
  androidTestImplementation 'com.amazonaws:aws-android-sdk-s3:2.6.31'
  androidTestImplementation "org.mockito:mockito-android:2.28.2"
  androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
}
