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 133
        versionName "20180920"
        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-SNAPSHOT"
    def dagger_version = "2.17"

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

    implementation "androidx.core:core:$android_support_version"
    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:$android_support_version"
    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.1.0'

    withFirebaseImplementation 'com.google.firebase:firebase-core:16.0.3'
    withFirebaseImplementation 'com.google.firebase:firebase-messaging:17.3.2'
}

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