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

apply plugin: 'android'

def toolVersion = "20.0.0"
sdkLoc = getSdkPath()

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

dependencies {
	compile project(':support-v4')
	compile project(':support-appcompat-v7')
	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')
	compile project(':extern:zxing-core')
	compile( project(':extern:android-support-v4-preferencefragment') ) {
		exclude module: 'support-v4'
	}
}

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']
				res.srcDirs = ['res']
				assets.srcDirs = ['assets']
			}
		}
	}
}

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

	compileOptions {
		sourceCompatibility JavaVersion.VERSION_1_7
		targetCompatibility JavaVersion.VERSION_1_7
	}

	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'
	}
}

subprojects {

	// The support-v4 library assumes certain things are defined in the 
	// root project (which is usually the android-support project, but 
	// this time it is the F-Droid project.
	if (project.name.equals("support-v4")) {
		apply plugin: 'maven'
		rootProject.ext.supportRepoOut = ""
	}

	// This is the hacky way which we force the subprojects to use the same build tools:
	// http://stackoverflow.com/a/21032272
	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")
			}
		}
	}
}

/**
 * Currently a bit hacky, because android.plugin is protected.
 * The end goal is to find something in the android BaseExtension class found here:
 *  https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy
 * which ends up asking their Sdk class for it's location. That class knows about
 * both ANDROID_HOME env variables, and also local.properties sdk.loc properties.
 * 
 * If in the future, the android.adbExe is found to be inappropriate, deprecated,
 * or a better way of finding the sdk path exists, we can change the implementation
 * of this method to reflect that.
 */
def getSdkPath() {
	new File( "$android.adbExe/../../" ).canonicalPath
}