// Top level gradle declarations

buildscript {
    repositories {
        jcenter()
        maven { url 'http://repo1.maven.org/maven2' }
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

// Module level gradle declarations

apply plugin: 'com.android.application'

apply plugin: 'crashlytics'

repositories {
    maven { url 'http://download.crashlytics.com/maven' }
}

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.fairphone.fplauncher3"
        minSdkVersion 17
        targetSdkVersion 22
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            renderscriptDebuggable true
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src', 'protoBufSrc', 'WallpaperPicker/src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src', 'WallpaperPicker/src']
            res.srcDirs = ['res', 'WallpaperPicker/res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')
        androidTest.setRoot('tests')
        
        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }

    dexOptions {
        incremental false
        preDexLibraries = false
    }
}

dependencies {
    compile 'com.android.support:support-v13:22.+'
    compile 'com.crashlytics.android:crashlytics:1.+'
    compile 'com.googlecode.libphonenumber:libphonenumber:6.+'
}
