/**
 * build.common.gradle
 *
 * Try to avoid editing this file, as it may be updated from time to time as the FTC SDK
 * evolves. Rather, if it is necessary to customize the build process, do those edits in
 * the build.gradle file in TeamCode.
 *
 * This file contains the necessary content of the 'build.gradle' files for robot controller
 * applications built using the FTC SDK. Each individual 'build.gradle' in those applications
 * can simply contain the one line:
 *
 *      apply from: '../build.common.gradle'
 *
 * which will pick up this file here. This approach allows makes it easier to integrate
 * updates to the FTC SDK into your code.
 */

import java.util.regex.Pattern

apply plugin: 'com.android.application'

android {

    compileSdkVersion 30

    signingConfigs {
        release {
            def apkStoreFile = System.getenv("APK_SIGNING_STORE_FILE")
            if (apkStoreFile != null) {
                keyAlias System.getenv("APK_SIGNING_KEY_ALIAS")
                keyPassword System.getenv("APK_SIGNING_KEY_PASSWORD")
                storeFile file(System.getenv("APK_SIGNING_STORE_FILE"))
                storePassword System.getenv("APK_SIGNING_STORE_PASSWORD")
            } else {
                keyAlias 'androiddebugkey'
                keyPassword 'android'
                storeFile rootProject.file('libs/ftc.debug.keystore')
                storePassword 'android'
            }
        }

        debug {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile rootProject.file('libs/ftc.debug.keystore')
            storePassword 'android'
        }
    }

    defaultConfig {
        signingConfig signingConfigs.debug
        applicationId 'com.qualcomm.ftcrobotcontroller'
        minSdkVersion 24
        //noinspection ExpiredTargetSdkVersion
        targetSdkVersion 28

        /**
         * We keep the versionCode and versionName of robot controller applications in sync with
         * the master information published in the AndroidManifest.xml file of the FtcRobotController
         * module. This helps avoid confusion that might arise from having multiple versions of
         * a robot controller app simultaneously installed on a robot controller device.
         *
         * We accomplish this with the help of a funky little Groovy script that maintains that
         * correspondence automatically.
         *
         * @see <a href="http://developer.android.com/tools/building/configuring-gradle.html">Configure Your Build</a>
         * @see <a href="http://developer.android.com/tools/publishing/versioning.html">Versioning Your App</a>
         */
        def manifestFile = project(':FtcRobotController').file('src/main/AndroidManifest.xml');
        def manifestText = manifestFile.getText()
        //
        def vCodePattern = Pattern.compile("versionCode=\"(\\d+(\\.\\d+)*)\"")
        def matcher = vCodePattern.matcher(manifestText)
        matcher.find()
        def vCode = Integer.parseInt(matcher.group(1))
        //
        def vNamePattern = Pattern.compile("versionName=\"(.*)\"")
        matcher = vNamePattern.matcher(manifestText);
        matcher.find()
        def vName = matcher.group(1)
        //
        versionCode vCode
        versionName vName
    }

    // http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.BuildType.html
    buildTypes {
        release {
            signingConfig signingConfigs.release

            ndk {
                abiFilters "armeabi-v7a", "arm64-v8a"
            }
        }
        debug {
            debuggable true
            jniDebuggable true
            ndk {
                abiFilters "armeabi-v7a", "arm64-v8a"
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    packagingOptions {
        pickFirst '**/*.so'
    }
    ndkVersion '21.3.6528147'
}

repositories {
}

