apply plugin: "com.android.application"
apply plugin: 'com.github.triplet.play'

import com.android.build.OutputFile

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "react.gradle"` line.
 *
 */

project.ext.react = [
        // whether to bundle JS and assets in debug mode
        bundleInDebug: true,

        // whether to bundle JS and assets in release mode
        bundleInRelease: true,

        // whether to bundle JS and assets in another build variant (if configured).
        // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
        // The configuration property can be in the following formats
        //         'bundleIn${productFlavor}${buildType}'
        //         'bundleIn${buildType}'
        // bundleInFreeDebug: true,
        // bundleInPaidRelease: true,
        // bundleInBeta: true,

        // the root of your project, i.e. where "package.json" lives
        root: "../../../",

        // where to put the JS bundle asset in debug mode
        jsBundleDirDebug: "$buildDir/intermediates/assets/debug",

        // where to put the JS bundle asset in release mode
        jsBundleDirRelease: "$buildDir/intermediates/assets/release",

        // where to put drawable resources / React Native assets, e.g. the ones you use via
        // require('./image.png')), in debug mode
        resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",

        // where to put drawable resources / React Native assets, e.g. the ones you use via
        // require('./image.png')), in release mode
        resourcesDirRelease: "$buildDir/intermediates/res/merged/release",

        // by default the gradle tasks are skipped if none of the JS files or assets change; this means
        // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
        // date; if you have any other folders that you want to ignore for performance reasons (gradle
        // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
        // for example, you might want to remove it from here.
        inputExcludes: ["android/**", "ios/**"]
]

apply from: "react.gradle"

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
// Disabling for now since it makes automating the builds a little trickier
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

// Returns minutes from January 1 2016
def Integer timestamp() {
    def minutesSinceEpoch = (new Date()).getTime()/(1000 * 60)
    def cal = new GregorianCalendar()
    cal.clear()
    cal.set(2016,0,1)
    def minutesJan2016 = cal.getTimeInMillis()/(1000 * 60)

    return minutesSinceEpoch - minutesJan2016
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "io.keybase.ossifrage"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode timestamp()
        versionName "1.0.0-alpha-2"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }

    signingConfigs {
        release {
            storeFile file(KB_RELEASE_STORE_FILE)
            storePassword KB_RELEASE_STORE_PASSWORD
            keyAlias KB_RELEASE_KEY_ALIAS
            keyPassword KB_RELEASE_KEY_PASSWORD
        }
    }

    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }

        releaseUnsigned.initWith(buildTypes.release)
        releaseUnsigned {
            signingConfig buildTypes.debug.signingConfig
        }

    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

play {
    track = 'alpha'
    jsonFile = file(KB_SERVICE_ACCT_JSON)
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.msgpack:msgpack:0.6.12'
    compile "com.google.android.gms:play-services-gcm:10.0.0"
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile "com.facebook.react:react-native:+"  // From node_modules
    compile project(':react-native-push-notification')
    compile 'org.slf4j:slf4j-api:1.7.21'
    compile 'com.github.tony19:logback-android-core:1.1.1-5'
    compile('com.github.tony19:logback-android-classic:1.1.1-5') {
        // workaround issue https://github.com/tony19/logback-android/issues/73
        exclude group: 'com.google.android', module: 'android'
    }
    // Manually include GIF support for Fresco b/c it was removed from
    // core library and RN doesn't auto add it back yet (RN 0.30.0)
    // @see DESKTOP-1703
    compile 'com.facebook.fresco:animated-gif:0.11.0'
    debugCompile 'com.hanhuy.android:viewserver:1.0.3'
    compile project(':keybaselib')
    testCompile 'junit:junit:4.12'
    compile project(':react-native-camera')
    compile project(':react-native-image-picker')
    compile project(':react-native-fs')
}
