All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.gfx.ribbonizer.RibbonizerPlugin.groovy Maven / Gradle / Ivy

package com.github.gfx.ribbonizer
import com.android.build.gradle.AppExtension
import com.android.build.gradle.api.ApplicationVariant
import groovy.transform.CompileStatic
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
// see http://www.gradle.org/docs/current/userguide/custom_plugins.html

@CompileStatic
public class RibbonizerPlugin implements Plugin {

    static {
        System.setProperty("java.awt.headless", "true")
    }

    @Override
    void apply(Project project) {
        project.extensions.add(RibbonizerExtension.NAME, RibbonizerExtension)

        project.afterEvaluate {
            def android = project.extensions.findByType(AppExtension)
            if (!android) {
                throw new Exception("Not an Android application; you forget `apply plugin: 'com.android.application`?")
            }
            def extension = project.extensions.findByType(RibbonizerExtension)

            def tasks = new ArrayList();

            android.applicationVariants.all { ApplicationVariant variant ->
                if (!variant.buildType.debuggable) {
                    project.logger.
                            info("[ribbonizer] skip ${variant.name} because it is not debuggable.")
                    return;
                }
                def generatedResDir = new File(project.buildDir,
                        "generated/ribbonizer/res/${variant.name}")
                android.sourceSets.findByName(variant.name).res.srcDir(generatedResDir)

                def name = "${RibbonizerTask.NAME}${capitalize(variant.name)}"
                def task = project.task(name, type: RibbonizerTask) as RibbonizerTask
                task.variant = variant
                task.outputDir = generatedResDir
                for (FilterBuilder builder : extension.filterBuilders) {
                    task.filters.add(builder.apply(variant))
                }
                tasks.add(task)

                def generateResources = project.
                        getTasksByName("generate${capitalize(variant.name)}Resources", false)
                generateResources.forEach { Task t ->
                    t.dependsOn(task)
                }
            }

            project.task(RibbonizerTask.NAME, dependsOn: tasks);
        }
    }

    static String capitalize(String str) {
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy