apply plugin: 'com.android.application'

// Global Parameters accepted
// APK_NUMBER_VERSION - version number of apk
// APK_VERSION - build number like #9999Z, for dev builds appended to app_version like 2.0.0 in no_translate.xml)
//               flavor                 Z : M=-master, D=-design, B=-Blackberry, MD=-main-default, MQA=-main-qt-arm, MQDA=-main-qt-default-arm, S=-sherpafy
// TARGET_APP_NAME - app name
// APP_EDITION - date stamp of builds
// APP_FEATURES - features +play_market +gps_status -parking_plugin -blackberry -free_version -amazon


// 1. To be done Filter fonts
// <unzip src="OsmAndCore_android.aar" dest=".">
//            <patternset>
//                <include name="assets/**/map/fonts/OpenSans/*"/>
//                <include name="assets/**/map/fonts/NotoSans/*"/>
//            </patternset>
//        </unzip>
// Less important

android {
	compileSdkVersion 21
	buildToolsVersion "21.1.2"

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

		publishing {
			storeFile file("/var/lib/jenkins/osmand_key")
			storePassword System.getenv("OSMAND_APK_PASSWORD")
			keyAlias "osmand"
			keyPassword System.getenv("OSMAND_APK_PASSWORD")
		}
	}

	defaultConfig {
		minSdkVersion 9
		targetSdkVersion 21

		versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
		//versionName already assigned in code
		//versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName
	}

	lintOptions {
		lintConfig file("lint.xml")
		abortOnError false
		warningsAsErrors false
	}

	// This is from OsmAndCore_android.aar - for some reason it's not inherited
	aaptOptions {
		// Don't compress any embedded resources
		noCompress "qz"
	}

	dexOptions {
		jumboMode = true
	}

	sourceSets {
		main {
			manifest.srcFile "AndroidManifest.xml"
			jni.srcDirs = []
			jniLibs.srcDirs = ["libs"]
			aidl.srcDirs = ["src"]
			java.srcDirs = ["src"]
			resources.srcDirs = ["src"]
			renderscript.srcDirs = ["src"]
			res.srcDirs = ["res"]
			assets.srcDirs = ["assets"]
		}
		free {
			manifest.srcFile "AndroidManifest-free.xml"
		}

		legacy {
			jniLibs.srcDirs = ["libgnustl"]
		}
	}

	flavorDimensions "version", "coreversion", "abi"
	productFlavors {
		// ABI
		armv7 {
			flavorDimension "abi"
			ndk {
				abiFilter "armeabi-v7a"
			}
		}
		armv5 {
			flavorDimension "abi"
			ndk {
				abiFilter "armeabi"
			}
		}
		x86 {
			flavorDimension "abi"
			ndk {
				abiFilter "x86"
			}
		}
		mips {
			flavorDimension "abi"
			ndk {
				abiFilter "mips"
			}
		}
		fat {
			flavorDimension "abi"
		}

		// Version
		free {
			flavorDimension "version"
			applicationId "net.osmand"
		}
		full {
			flavorDimension "version"
			applicationId "net.osmand.plus"
		}

		// CoreVersion
		legacy {
			flavorDimension "coreversion"
		}

		qtcore {
			flavorDimension "coreversion"
		}

		qtcoredebug {
			flavorDimension "coreversion"
		}
	}

	buildTypes {
		debug {
		    // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
		    // minifyEnabled true
		    // proguardFiles 'proguard-project.txt'
			signingConfig signingConfigs.development
		}
		release {
		    // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
		    // minifyEnabled true
		    //proguardFiles 'proguard-project.txt'
			signingConfig signingConfigs.publishing
		}
	}
}

def replaceNoTranslate(line) {
	if (line.contains("\"app_name\"") && System.getenv("TARGET_APP_NAME")) {
		return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<")
	}
	if (line.contains("\"app_edition\"") && System.getenv("APP_EDITION")) {
		return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_EDITION") + "<")
	}
	if (line.contains("\"app_version\"") && System.getenv("APK_VERSION")) {
		return line.replaceAll(">[^<]*<", ">" + System.getenv("APK_VERSION") + "<")
	}
	if (line.contains("\"app_version\"") && System.getenv("APK_VERSION_SUFFIX")) {
		// appends build number to version number for dev builds
		return line.replaceAll("</", System.getenv("APK_VERSION_SUFFIX") + "</")
	}
	if (line.contains("\"versionFeatures\"") && System.getenv("APP_FEATURES")) {
		return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_FEATURES") + "<")
	}
	return line;
}

task updateNoTranslate(type: Copy) {
	from('.') {
		include 'no_translate.xml'
		filter {
			line -> replaceNoTranslate(line);
		}
	}
	into 'res/values/'
}

task collectVoiceAssets(type: Sync) {
	from "../../resources/voice"
	into "assets/voice"
	include "**/*.p"
}

task collectHelpContentsAssets(type: Sync) {
	from "../../help/help"
	into "assets/help"
	include "*.html"
	include "images/**/*.png"

	from "assets/"
	into "assets/help"
	include "style.css"
}

task collectRoutingResources(type: Sync) {
	from "../../resources/routing"
	into "src/net/osmand/router"
	include "*.xml"
}

task collectMiscResources(type: Copy) {
	into "src/net/osmand/osm"
	from("../../resources/obf_creation") {
		include "rendering_types.xml"
	}
	from("../../resources/poi") {
		include "poi_types.xml"
	}
}

task collectRenderingStylesResources(type: Sync) {
	from "../../resources/rendering_styles"
	into "src/net/osmand/render"
	include "*.xml"
}

task collectRegionsInfoResources(type: Copy) {
	from "../../resources/countries-info"
	into "src/net/osmand/map"
	include "regions.ocbf"
}

task copyStyleIcons(type: Copy) {
	from "../../resources/rendering_styles/style-icons/"
	into "res/"
	include "**/*.png"
}

task collectExternalResources << {}
collectExternalResources.dependsOn collectVoiceAssets,
		collectHelpContentsAssets,
		collectRoutingResources,
		collectRenderingStylesResources,
		collectRegionsInfoResources,
		collectMiscResources,
		copyStyleIcons,
		updateNoTranslate
// tasks.whenTaskAdded { task ->
//	if (task.name.startsWith("generate") && task.name.endsWith("Resources")) {
//		task.dependsOn collectExternalResources
//	}
// }

// Legacy core build
import org.apache.tools.ant.taskdefs.condition.Os

task buildOsmAndCore(type: Exec) {
	description "Build Legacy OsmAndCore"

	if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
		commandLine "bash", file("./old-ndk-build.sh").getAbsolutePath()
	} else {
		commandLine "cmd", "/c", "echo", "Not supported"
	}
}

task cleanupDuplicatesInCore() {
	dependsOn buildOsmAndCore
	// doesn't work for legacy debug builds
	doLast {
		file("libgnustl/armeabi").mkdirs()
		file("libs/armeabi/libgnustl_shared.so").renameTo(file("libgnustl/armeabi/libgnustl_shared.so"))
		file("libgnustl/armeabi-v7a").mkdirs()
		file("libs/armeabi-v7a/libgnustl_shared.so").renameTo(file("libgnustl/armeabi-v7a/libgnustl_shared.so"))
		file("libgnustl/mips").mkdirs()
		file("libs/mips/libgnustl_shared.so").renameTo(file("libgnustl/mips/libgnustl_shared.so"))
		file("libgnustl/x86").mkdirs()
		file("libs/x86/libgnustl_shared.so").renameTo(file("libgnustl/x86/libgnustl_shared.so"))
	}
}
tasks.withType(JavaCompile) {
	compileTask -> compileTask.dependsOn << [collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore]
}

clean.dependsOn 'cleanNoTranslate'

task cleanNoTranslate() {
    delete ('res/values/no_translate.xml')
}

repositories {
	ivy {
		name = "OsmAndBinariesIvy"
		url = "http://builder.osmand.net"
		layout "pattern", {
			artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
		}
	}
	// mavenCentral()
}

dependencies {
	compile project(path: ":OsmAnd-java", configuration: "android")
    compile project(":eclipse-compile:appcompat")
	compile fileTree(
			dir: "libs",
			include: ["*.jar"],
			exclude: [
					"QtAndroid-bundled.jar",
					"QtAndroidAccessibility-bundled.jar",
					"OsmAndCore_android.jar",
					"OsmAndCore_wrapper.jar"])
	// compile "com.github.ksoichiro:android-observablescrollview:1.5.0"
	// compile "com.android.support:appcompat-v7:21.0.3"
	// compile "com.github.shell-software:fab:1.0.5"
	legacyCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@jar"
	qtcoredebugCompile "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar"
	qtcoredebugCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
	qtcoreCompile "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
	qtcoreCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
}
