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 19
        targetSdkVersion 28
        versionCode 138
        versionName "20181202"
        vectorDrawables.useSupportLibrary = true
    }

    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
        }
    }
}

dependencies {
    def android_support_version = '1.0.0'
    def material_version = '1.0.0'
    def butterknife_version = "9.0.0-rc2"
    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.5'
    withFirebaseImplementation 'com.google.firebase:firebase-messaging:17.3.4'
}

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