// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file is included from `<app>/android/settings.gradle`,
// so it can be versioned with the Flutter SDK.

import groovy.json.JsonSlurper

def flutterProjectRoot = rootProject.projectDir.parentFile

// Note: if this logic is changed, also change the logic in module_plugin_loader.gradle.
def pluginsFile = new File(flutterProjectRoot, '.flutter-plugins-dependencies')
if (!pluginsFile.exists()) {
  return
}

def object = new JsonSlurper().parseText(pluginsFile.text)
assert object instanceof Map
assert object.plugins instanceof Map
assert object.plugins.android instanceof List
// Includes the Flutter plugins that support the Android platform.
object.plugins.android.each { androidPlugin ->
  assert androidPlugin.name instanceof String
  assert androidPlugin.path instanceof String
  // Skip plugins that have no native build (such as a Dart-only implementation
  // of a federated plugin).
  def needsBuild = androidPlugin.containsKey('native_build') ? androidPlugin['native_build'] : true
  if (!needsBuild) {
    return
  }
  def pluginDirectory = new File(androidPlugin.path, 'android')
  assert pluginDirectory.exists()
  include ":${androidPlugin.name}"
  project(":${androidPlugin.name}").projectDir = pluginDirectory
}
