apply plugin: 'com.android.application'

def buildFirebase = project.hasProperty('buildFirebase') || getGradle().getStartParameter().getTaskRequests().toString().contains('Firebase')

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 164
        versionName "20190525-6"
    }

    sourceSets {
        main {
            aidl.srcDirs = ['src/main/java']
            jniLibs.srcDir 'src/main/libs'
            jni.srcDirs = []
        }
    }
    buildTypes {
        debug {
            minifyEnabled true
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    flavorDimensions "push"
    productFlavors {
        noPush {
            dimension "push"
        }
        withFirebase {
            dimension "push"
        }
    }
    signingConfigs {
        config {
            keyAlias 'ring'
            storeFile file('../keystore.bin')
        }
    }
    lintOptions {
        disable 'MissingTranslation'
    }
    splits {
        abi {
            enable true
            reset()
            def sp = archs.split(',')
            include(sp)
            universalApk true
        }
    }
    dataBinding {
        enabled true
    }
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

dependencies {
    def android_support_version = '1.0.0'
    def material_version = '1.0.0'
    def butterknife_version = '10.1.0'
    def dagger_version = '2.22.1'

    implementation fileTree(include: '*.jar', dir: 'libs')
    implementation project(':libringclient')

    implementation "androidx.core:core:1.0.2"
    implementation "androidx.legacy:legacy-support-core-utils:$android_support_version"

    implementation "androidx.cardview:cardview:$android_support_version"
    implementation "androidx.preference:preference:$android_support_version"
    implementation "androidx.recyclerview:recyclerview:$android_support_version"
    implementation "androidx.appcompat:appcompat:1.0.2"
    implementation "androidx.leanback:leanback:$android_support_version"
    implementation "androidx.leanback:leanback-preference:$android_support_version"
    implementation "com.google.android.material:material:$material_version"

    // ORM
    implementation 'com.j256.ormlite:ormlite-android:5.1'

    // Barcode scanning
    implementation 'com.journeyapps:zxing-android-embedded:3.6.0@aar'

    // Butterknife
    implementation "com.jakewharton:butterknife:$butterknife_version"
    annotationProcessor "com.jakewharton:butterknife-compiler:$butterknife_version"

    implementation 'com.rodolfonavalon:ShapeRippleLibrary:1.0.0'

    // Dagger dependency injection
    implementation "com.google.dagger:dagger:$dagger_version"
    annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"

    // Glide
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

    // RxAndroid
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

    implementation 'com.jsibbold:zoomage:1.2.0'

    withFirebaseImplementation 'com.google.firebase:firebase-core:16.0.9'
    withFirebaseImplementation 'com.google.firebase:firebase-messaging:18.0.0'
}

if (buildFirebase) {
    println 'apply plugin ' + buildFirebase
    apply plugin: 'com.google.gms.google-services'
}