List<String> samples = [
//    "connectivity/bluetooth/BluetoothLeGatt",
//    "connectivity/sync/BasicSyncAdapter",
//    "connectivity/network/BasicNetworkDemo",
//    "connectivity/network/NetworkConnect",
//    "content/multiuser/AppRestrictions",
//    "content/contacts/BasicContactables",
    "sampleSamples/BaseSample",
    "sampleSamples/singleViewSample",
    "sampleSamples/ActivityCards",
//    "ui/notifications/CustomNotifications",
//    "ui/notifications/BasicNotifications",
//    "ui/ImmersiveMode",
//    "ui/actionbarcompat/ListPopupMenu",
//    "ui/actionbarcompat/Styled",
//    "ui/actionbarcompat/ShareActionProvider",
//    "ui/actionbarcompat/Basic",
//    "ui/actionbar/DoneBar",
//    "ui/accessibility/BasicAccessibility",
//    "ui/lists/CustomChoiceList",
//    "ui/views/TextSwitcher",
//    "ui/views/HorizontalPaging",
//    "ui/holo/BorderlessButtons",
//    "security/keystore/BasicAndroidKeyStore",
//    "views/TextLinkify",
//    "background/alarms/repeatingAlarm",
//    "media/BasicMediaRouter",
//    "media/BasicMediaDecoder",
//    "media/MediaRecorder",
//    "input/multitouch/BasicMultitouch",
//    "input/gestures/BasicGestureDetect",
]

List<String> taskNames = [
    "refresh",
    "build",
    "emitAnt",
    "emitGradle",
    "emitBrowseable",
]

taskNames.each { taskName ->
    def task = project.hasProperty(taskName) ? project.tasks[taskName] : project.task(taskName)
    println task
    samples.each { sample ->
        File sampleDir = new File(sample)
        task.dependsOn project.task([type: GradleBuild], "${sample}_${taskName}", {
            buildFile = "${sample}/build.gradle"
            dir = sample
            tasks = [taskName]
        })
    }
}

