buildscript {
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath 'com.android.tools.build:gradle:0.10.0'
	}
}

def toolVersion = "19.1"
apply plugin: 'android'

sdkLoc = System.getenv("ANDROID_HOME")
FileCollection getAndroidPrebuilt(String apiLevel) {
	files("$sdkLoc/platforms/android-$apiLevel/android.jar")
}

dependencies {
	compile files('libs/core-3.0.1.jar')
	compile project(':support-v4')
	compile project(':extern:AndroidPinning')
	compile project(':extern:UniversalImageLoader:library')
	compile project(':extern:MemorizingTrustManager')
	compile project(':extern:libsuperuser:libsuperuser')
	compile project(':extern:nanohttpd:core')
	compile project(':extern:jmdns')
	compile project(':extern:zipsigner')
}

project(':extern:UniversalImageLoader:library') {
	buildscript {
		repositories {
			mavenCentral()
		}
		dependencies {
			classpath 'com.android.tools.build:gradle:0.10.0'
		}
	}

	apply plugin: 'android-library'

	android {
		compileSdkVersion 16
		buildToolsVersion toolVersion

		sourceSets {
			main {
				manifest.srcFile 'AndroidManifest.xml'
				java.srcDirs = ['src']
				resources.srcDirs = ['src']
				aidl.srcDirs = ['src']
				renderscript.srcDirs = ['src']
			}
		}
	}
}

project(':extern:zipsigner') {

    apply plugin: 'java'

    dependencies {
        compile project(':extern:spongycastle:core')
        compile project(':extern:spongycastle:pkix')
        compile project(':extern:spongycastle:prov')
    }
}

android {
	compileSdkVersion 19
	buildToolsVersion toolVersion

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

		instrumentTest.setRoot('test')
	}

	buildTypes {
		release {
			runProguard true
			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
		}
	}

	tasks.withType(Compile) { task ->
		options.encoding = "UTF-8"
	}

}

// TODO: This person took the example code below from another blogpost online, however
// I lost the reference to it:
// http://stackoverflow.com/questions/23297562/gradle-javadoc-and-android-documentation
android.applicationVariants.all { variant ->

	task("generate${variant.name}Javadoc", type: Javadoc) {
		title = "$name $version API"
		description "Generates Javadoc for F-Droid."
		source = variant.javaCompile.source
		ext.androidJar = "$sdkLoc/platforms/${android.compileSdkVersion}/android.jar"
		classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
		options.links("http://docs.oracle.com/javase/7/docs/api/");
		options.links("http://d.android.com/reference/");
		exclude '**/BuildConfig.java'
		exclude '**/R.java'
	}
}

// This is the hacky way which we force the subprojects to use the same build tools:
// http://stackoverflow.com/a/21032272
subprojects {
	afterEvaluate {
		android {

			// The android build task only lets you configure the buildToolsVersion once, so if
			// we execute the closure below to configure our subprojects, it will fail when it
			// hits the second subproject. Therefore, we will only do it once, and I guess the
			// android plubin will re-use the existing value I set. 
			// https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy
			try {
				buildToolsVersion toolVersion
				logger.info("Set buildToolsVersion to $toolVersion")
			} catch (GradleException e) {
				logger.info("Tried to set the buildToolsVersion, however we were not allowed to: $e.message")
			}
		}
	}
}