#
# Copyright (C) 2015 The CyanogenMod Project
#               2017-2023 The LineageOS 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.
#
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# We have a special case here where we build the library's resources
# independently from its code, so we need to find where the resource
# class source got placed in the course of building the resources.
# Thus, the magic here.
# Also, this module cannot depend directly on the R.java file; if it
# did, the PRIVATE_* vars for R.java wouldn't be guaranteed to be correct.
# Instead, it depends on the R.stamp file, which lists the corresponding
# R.java file as a prerequisite.
lineage_platform_res := APPS/org.lineageos.platform-res_intermediates/aapt

# List of packages used in lineage-api-stubs
lineage_stub_packages := lineageos.app:lineageos.content:lineageos.hardware:lineageos.media:lineageos.os:lineageos.preference:lineageos.profiles:lineageos.providers:lineageos.platform:lineageos.util:lineageos.trust

lineage_framework_module := $(LOCAL_INSTALLED_MODULE)

# Make sure that R.java and Manifest.java are built before we build
# the source for this library.
lineage_framework_res_R_stamp := \
    $(call intermediates-dir-for,APPS,org.lineageos.platform-res,,COMMON)/src/R.stamp
LOCAL_ADDITIONAL_DEPENDENCIES := $(lineage_framework_res_R_stamp)

$(lineage_framework_module): | $(dir $(lineage_framework_module))org.lineageos.platform-res.apk

lineage_framework_built := $(call java-lib-deps, org.lineageos.platform)

# ===========================================================
# Common Droiddoc vars
lineage_platform_docs_src_files := \
    $(call all-java-files-under, $(lineage_sdk_src)) \
    $(call all-html-files-under, $(lineage_sdk_src))

lineage_platform_docs_java_libraries := \
    org.lineageos.platform.sdk

# SDK version as defined
lineage_platform_docs_SDK_VERSION := 15.1

# release version
lineage_platform_docs_SDK_REL_ID := 9

lineage_platform_docs_LOCAL_MODULE_CLASS := JAVA_LIBRARIES

lineage_platform_docs_LOCAL_DROIDDOC_SOURCE_PATH := \
    $(lineage_platform_docs_src_files)

lineage_platform_docs_LOCAL_ADDITIONAL_JAVA_DIR := \
    $(call intermediates-dir-for,JAVA_LIBRARIES,org.lineageos.platform.sdk,,COMMON)

# ====  the api stubs and current.xml ===========================
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
    $(lineage_platform_docs_src_files)
LOCAL_INTERMEDIATE_SOURCES:= $(lineage_platform_LOCAL_INTERMEDIATE_SOURCES)
LOCAL_JAVA_LIBRARIES:= $(lineage_platform_docs_java_libraries)
LOCAL_MODULE_CLASS:= $(lineage_platform_docs_LOCAL_MODULE_CLASS)
LOCAL_DROIDDOC_SOURCE_PATH:= $(lineage_platform_docs_LOCAL_DROIDDOC_SOURCE_PATH)
LOCAL_ADDITIONAL_JAVA_DIR:= $(lineage_platform_docs_LOCAL_ADDITIONAL_JAVA_DIR)
LOCAL_ADDITIONAL_DEPENDENCIES:= $(lineage_platform_docs_LOCAL_ADDITIONAL_DEPENDENCIES)

LOCAL_MODULE := lineage-api-stubs

LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:= external/doclava/res/assets/templates-sdk

LOCAL_DROIDDOC_STUB_OUT_DIR := $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/lineage-sdk_stubs_current_intermediates/src

LOCAL_DROIDDOC_OPTIONS:= \
        -referenceonly \
        -stubpackages $(lineage_stub_packages) \
        -exclude org.lineageos.platform.internal \
        -api $(INTERNAL_LINEAGE_PLATFORM_API_FILE) \
        -removedApi $(INTERNAL_LINEAGE_PLATFORM_REMOVED_API_FILE) \
        -nodocs

LOCAL_UNINSTALLABLE_MODULE := true

#include $(BUILD_DROIDDOC)

# $(gen), i.e. framework.aidl, is also needed while building against the current stub.
$(full_target): $(lineage_framework_built) $(gen)
$(INTERNAL_LINEAGE_PLATFORM_API_FILE): $(full_target)
$(call dist-for-goals,sdk,$(INTERNAL_LINEAGE_PLATFORM_API_FILE))


# Documentation
# ===========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := org.lineageos.platform.sdk
LOCAL_INTERMEDIATE_SOURCES:= $(lineage_platform_LOCAL_INTERMEDIATE_SOURCES)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(lineage_platform_docs_src_files)
LOCAL_ADDITONAL_JAVA_DIR := $(lineage_platform_docs_LOCAL_ADDITIONAL_JAVA_DIR)

LOCAL_IS_HOST_MODULE := false
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR := vendor/lineage/build/tools/droiddoc/templates-lineage-sdk
LOCAL_ADDITIONAL_DEPENDENCIES := \
    services

LOCAL_JAVA_LIBRARIES := $(lineage_platform_docs_java_libraries)

LOCAL_DROIDDOC_OPTIONS := \
        -android \
        -offlinemode \
        -exclude org.lineageos.platform.internal \
        -hidePackage org.lineageos.platform.internal \
        -hdf android.whichdoc offline \
        -hdf sdk.version $(lineage_platform_docs_docs_SDK_VERSION) \
        -hdf sdk.rel.id $(lineage_platform_docs_docs_SDK_REL_ID) \
        -hdf sdk.preview 0 \
        -since $(LINEAGE_SRC_API_DIR)/1.txt 1 \
        -since $(LINEAGE_SRC_API_DIR)/2.txt 2 \
        -since $(LINEAGE_SRC_API_DIR)/3.txt 3 \
        -since $(LINEAGE_SRC_API_DIR)/4.txt 4 \
        -since $(LINEAGE_SRC_API_DIR)/5.txt 5 \
        -since $(LINEAGE_SRC_API_DIR)/6.txt 6 \
        -since $(LINEAGE_SRC_API_DIR)/7.txt 7 \
        -since $(LINEAGE_SRC_API_DIR)/8.txt 8 \
        -since $(LINEAGE_SRC_API_DIR)/9.txt 9

$(full_target): $(lineage_framework_built) $(gen)
#include $(BUILD_DROIDDOC)

include $(call first-makefiles-under,$(LOCAL_PATH))

# Cleanup temp vars
# ===========================================================
lineage_platform_docs_src_files :=
lineage_platform_docs_java_libraries :=
lineage_platform_docs_LOCAL_ADDITIONAL_JAVA_DIR :=
