/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import androidx.build.Publish
import androidx.build.RunApiTasks

plugins {
    id("AndroidXPlugin")
    id("kotlin")
    id("com.google.protobuf")
}

dependencies {
    api(libs.kotlinStdlib)
    implementation(libs.protobufLite)
    implementation("androidx.datastore:datastore-core:1.0.0")
}

protobuf {
    protoc {
        artifact = libs.protobufCompiler.get()
    }

    // Generates the java proto-lite code for the protos in this project. See
    // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
    // for more information.
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option "lite"
                }
            }
        }
    }
}

afterEvaluate {
    lint {
        lintOptions {
            // protobuf generates unannotated and synthetic accessor methods
            disable("UnknownNullness", "SyntheticAccessor")
        }
    }
}

// Create export artifact for for JarJaring
def preferencesProtoJarJarTask = tasks.register("exportJar", Jar) {
    archiveBaseName.set("export")
    from(sourceSets.main.output)
    // The proto-lite dependency includes .proto files, which are not used by glance. When apps
    // depend on datastore as well as proto-lite directly, these files conflict since jarjar only
    // renames the java classes. Remove them here since they are unused.
    exclude("**/*.proto")

    from(zipTree(configurations.detachedConfiguration(
            dependencies.create(libs.protobufLite.get())).getSingleFile()))
}

def jarjarConf = configurations.register("export")
artifacts.add(jarjarConf.name, preferencesProtoJarJarTask.flatMap { it.archiveFile })

androidx {
    name = "Glance AppWidget Protos"
    publish = Publish.NONE
    mavenGroup = LibraryGroups.GLANCE
    inceptionYear = "2021"
    runApiTasks = new RunApiTasks.No("No public API required for internal use with app widgets.")
    description = "Protos for use with glance app widgets."
}

