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 149
        versionName "20190213"
    }

    sourceSets {
        main {
            aidl.srcDirs = ['src/main/java']
            jniLibs.srcDir 'src/main/libs'
            jni.srcDirs = []
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    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
    }
}

dependencies {
    def android_support_version = '1.0.0'
    def material_version = '1.0.0'
    def butterknife_version = "10.0.0"
    def dagger_version = "2.17"

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

    implementation "androidx.core:core:1.0.1"
    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:4.48'

    // 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.8.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.8.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.7'
    withFirebaseImplementation 'com.google.firebase:firebase-messaging:17.3.4'
}

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