/**
 * Base rules for building setup wizard library. This build file is not used directly but rather
 * included in scripts like build.gradle or standalone.gradle using 'apply from'.
 *
 * This allows the dependencies to be configured so that for builds in the Android tree, the
 * dependencies like support library is built directly from source, while for standalone builds they
 * will be fetched from maven central.
 */

apply plugin: 'com.android.library'

android {

    publishNonDefault true

    flavorDimensions 'compat'

    productFlavors {
        // DEPRECATED: Platform version that will not include the compatibility libraries
        platformDeprecated {
            dimension 'compat'
            // TODO(yukl): Bump this file to v28 once we can properly test that
            minSdkVersion 27
        }

        // Provides backwards compatibility for Gingerbread or above, using support libraries.
        gingerbreadCompat {
            dimension 'compat'
            minSdkVersion 9
        }
    }

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

        platformDeprecated {
            java.srcDirs = ['platform/src']
            res.srcDirs = ['platform/res']
        }

        gingerbreadCompat {
            java.srcDirs = ['gingerbread/src', 'recyclerview/src']
            res.srcDirs = ['gingerbread/res', 'recyclerview/res']
        }
    }
}

dependencies {
    // Read the dependencies from the "deps" map in the extra properties.
    //
    // For builds in the Android tree we want to build the dependencies from source
    // for reproducible builds, for example in build.gradle define something like
    // this:
    //      ext {
    //          deps = ['project-name': project(':project-path')]
    //      }
    //
    // For standalone project clients, since the source may not be available, we
    // fetch the dependencies from maven. For example in standalone.gradle define
    // something like this:
    //      ext {
    //          deps = ['project-name': 'com.example.group:project-name:1.0.0']
    //      }
    //
    platformDeprecatedCompile deps['support-annotations']

    gingerbreadCompatCompile deps['support-appcompat-v7']
    gingerbreadCompatCompile deps['support-recyclerview-v7']
}
