apply from: "../commonHeader.gradle"
buildscript { apply from: "../commonBuildScript.gradle", to: buildscript }
apply from: "../commonLocalRepo.gradle"

apply plugin: 'com.android.application'


dependencies {
    compile 'com.android.support:support-v4:13.0.0'
    compile 'com.google.android.gms:play-services:3.1.36'

    debugCompile 'com.android.support:support-v13:13.0.0'
    releaseCompile 'com.android.support:support-v13:21.0.0'

    // hamcrest-library depends on hamcrest-core, both provide a /LICENSE.txt file
    // which used to cause packaging conflict. We added a special case for license files.
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
}

android {
    compileSdkVersion 21
    buildToolsVersion = rootProject.ext.buildToolsVersion

    testBuildType "debug"

    signingConfigs {
        myConfig {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    defaultConfig {
        versionCode 12
        versionName "2.0"
        minSdkVersion 16
        targetSdkVersion 16

        testInstrumentationRunner "android.test.InstrumentationTestRunner"
        testInstrumentationRunnerArgument "size", "medium"

        testHandleProfiling false

        buildConfigField "boolean", "DEFAULT", "true"
        buildConfigField "String", "FOO", "\"foo\""
        buildConfigField "String", "FOO", "\"foo2\""

        resValue "string", "foo", "foo"

        resConfig "en"
        resConfigs "nodpi", "hdpi"

        manifestPlaceholders = [ "someKey":12 ]
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            signingConfig signingConfigs.myConfig

            testCoverageEnabled true

            buildConfigField "String", "FOO", "\"bar1\""
            buildConfigField "String", "FOO", "\"bar\""

            resValue "string", "foo", "foo2"

            useJack project.ext.useJack
        }
    }

    aaptOptions {
        noCompress 'txt'
        ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }

    adbOptions {
          timeOutInMs 5000 // 5 seconds in ms.
          installOptions "-d","-t"
    }

    lintOptions {
        // set to true to turn off analysis progress reporting by lint
        quiet true
        // if true, stop the gradle build if errors are found
        abortOnError false
        // if true, only report errors
        ignoreWarnings true
        // if true, emit full/absolute paths to files with errors (true by default)
        //absolutePaths true
        // if true, check all issues, including those that are off by default
        checkAllWarnings true
        // if true, treat all warnings as errors
        warningsAsErrors true
        // turn off checking the given issue id's
        disable 'TypographyFractions','TypographyQuotes'
        // turn on the given issue id's
        enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
        // check *only* the given issue id's
        check 'NewApi', 'InlinedApi'
        // if true, don't include source code lines in the error output
        noLines true
        // if true, show all locations for an error, do not truncate lists, etc.
        showAll true
        // Fallback lint configuration (default severities, etc.)
        lintConfig file("default-lint.xml")
        // if true, generate a text report of issues (false by default)
        textReport true
        // location to write the output; can be a file or 'stdout'
        textOutput 'stdout'
        // if true, generate an XML report for use by for example Jenkins
        xmlReport false
        // file to write report to (if not specified, defaults to lint-results.xml)
        xmlOutput file("lint-report.xml")
        // if true, generate an HTML report (with issue explanations, sourcecode, etc)
        htmlReport true
        // optional path to report (default will be lint-results.html in the builddir)
        htmlOutput file("lint-report.html")
    }

    // Override the versionCode of the release version
    applicationVariants.all { variant ->
        if (variant.buildType.name == "release") {
            variant.outputs.get(0).versionCodeOverride = 13
        }
    }
}
