apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

androidExtensions {
  features = ["parcelize"]
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
  kotlinOptions {
    freeCompilerArgs += ["-Xuse-experimental=kotlinx.coroutines.ExperimentalCoroutinesApi"]
  }
}

android {
  compileSdkVersion 29
  defaultConfig {
    applicationId "com.airbnb.lottie"
    minSdkVersion 16
    targetSdkVersion 29
    versionCode 69
    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
    }
  }
  viewBinding {
    enabled = true
  }
  lintOptions {
    ignore 'InvalidPackage'
    textReport true
    textOutput 'stdout'
    baseline file("lint-baseline.xml")
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  kotlinOptions {
    jvmTarget = "1.8"
  }
  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.multidex:multidex:2.0.1'

  implementation "androidx.fragment:fragment-ktx:1.2.5"
  implementation "androidx.appcompat:appcompat:1.2.0"
  implementation "androidx.recyclerview:recyclerview:1.1.0"
  implementation "androidx.paging:paging-runtime:3.0.0-alpha5"
  implementation "androidx.paging:paging-runtime-ktx:3.0.0-alpha06"
  implementation "androidx.cardview:cardview:1.0.0"
  implementation 'androidx.core:core-ktx:1.3.1'
  implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
  implementation "androidx.browser:browser:1.2.0"
  implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
  kapt "androidx.lifecycle:lifecycle-common-java8:2.2.0"
  implementation "com.google.android.material:material:1.2.1"

  implementation 'com.airbnb.android:epoxy:4.0.0-beta6'
  kapt 'com.airbnb.android:epoxy-processor:4.0.0-beta6'
  implementation 'com.airbnb.android:mvrx:1.5.1'

  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.3.9'
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
  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.8.3'
  implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.8.3@aar') { transitive = true }
  implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.8.3@aar') { transitive = true }
  implementation 'com.google.code.gson:gson:2.8.6'
  implementation 'com.squareup.okhttp3:okhttp:4.8.1'
  implementation 'com.squareup.retrofit2:retrofit:2.9.0'
  implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
  implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
  implementation 'com.github.bumptech.glide:glide:4.8.0'

  debugImplementation("androidx.fragment:fragment-testing:1.3.0-alpha08")

  testImplementation 'junit:junit:4.13'

  androidTestImplementation 'androidx.test:core:1.3.0-rc01'
  androidTestImplementation 'androidx.test.ext:junit:1.1.2'
  androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
  androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.3.0'
  androidTestImplementation 'androidx.test:rules:1.3.0'
  androidTestImplementation 'com.squareup.okhttp3:okhttp:4.8.1'
  androidTestImplementation 'io.jsonwebtoken:jjwt:0.9.0'
  androidTestImplementation "org.mockito:mockito-android:2.28.2"
  androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
}
