apply plugin: 'com.android.application'

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

android {
    compileSdkVersion 29
    buildToolsVersion '29.0.0'
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 171
        versionName "20190628-01"
    }

    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 = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_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.constraintlayout:constraintlayout:1.1.3'
    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:17.0.0'
    withFirebaseImplementation 'com.google.firebase:firebase-messaging:19.0.1'
}

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