//
// Copyright (C) 2018-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.
//

android_app {
    name: "org.lineageos.platform-res",
    sdk_version: "core_platform",
    certificate: "platform",

    manifest: "lineage/res/AndroidManifest.xml",

    // Disable dexpreopt and verify_uses_libraries check as the app
    // contains no Java code to be dexpreopted.
    enforce_uses_libs: false,
    dex_preopt: {
        enabled: false,
    },

    // Soong special-cases org.lineageos.platform-res to install this alongside
    // the libraries at /system_ext/framework/org.lineageos.platform-res.apk.

    aaptflags: [
        "--private-symbols",
        "org.lineageos.platform.internal",

        // Framework doesn't need versioning since it IS the platform.
        "--no-auto-version",

        // Allow overlay to add resource
        "--auto-add-overlay",

        // Tell aapt to create "extending (non-application)" resource IDs,
        // since these resources will be used by many apps.
        "--allow-reserved-package-id",
        // Use id 0x3f (one less than app id).
        "--package-id",
        "63",
    ],

    resource_dirs: [
        "lineage/res/res",
    ],

    // Create package-export.apk, which other packages can use to get
    // PRODUCT-agnostic resource data like IDs and type definitions.
    export_package_resources: true,
}

// The LineageOS Platform Framework Library
// ============================================================

lineage_sdk_src = "sdk/src/java/lineageos"
lineage_sdk_internal_src = "sdk/src/java/org/lineageos/internal"
lineage_sdk_minimal_internal_src = "sdk/src/java/org/lineageos/internal/minimal"
library_src = "lineage/lib/main/java"

lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES = [
    "vendor.lineage.health-V1-java",
    "vendor.lineage.livedisplay-V2.0-java",
    "vendor.lineage.livedisplay-V2.1-java",
    "vendor.lineage.touch-V1.0-java",
    "vendor.lineage.trust-V1.0-java",
]

java_library {
    name: "services",
    installable: true,
    sdk_version: "core_platform",
    static_libs: [
        "original.services",
    ] + lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES,

    libs: [
        "framework",
    ],

    srcs: [
        library_src + "/**/*.java",
        lineage_sdk_minimal_internal_src + "/**/*.java",
        lineage_sdk_src + "/**/*.java",
        lineage_sdk_src + "/app/I*.aidl",
        lineage_sdk_src + "/**/I*.aidl",
    ],
    // Include aidl files from lineageos.app namespace as well as internal src aidl files
    aidl: {
        local_include_dirs: ["sdk/src/java"],
    },
}

// READ ME: ########################################################
//
// When updating this list of aidl files, consider if that aidl is
// part of the SDK API.  If it is, also add it to the list below that
// is preprocessed and distributed with the SDK. This list should
// not contain any aidl files for parcelables, but the one below should
// if you intend for 3rd parties to be able to send those objects
// across process boundaries.
//
// READ ME: ########################################################

java_library {
    name: "org.lineageos.platform",
    installable: true,
    sdk_version: "core_platform",
    static_libs: lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES,

    libs: [
        "framework",
        "original.services",
    ],

    srcs: [
        lineage_sdk_src + "/**/*.java",
        lineage_sdk_internal_src + "/**/*.java",
        library_src + "/**/*.java",
        lineage_sdk_src + "/**/I*.aidl",
        lineage_sdk_internal_src + "/**/I*.aidl",
    ],

    // Include aidl files from lineageos.app namespace as well as internal src aidl files
    aidl: {
        local_include_dirs: ["sdk/src/java"],
    },
}

// Full target for use by platform apps
// ============================================================

java_library {
    name: "org.lineageos.platform.internal",
    required: ["original.services"],
    static_libs: lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES,

    srcs: [
        lineage_sdk_src + "/**/*.java",
        lineage_sdk_internal_src + "/**/*.java",
        lineage_sdk_src + "/**/I*.aidl",
        lineage_sdk_internal_src + "/**/I*.aidl",
    ],

    aidl: {
        local_include_dirs: ["sdk/src/java"],
    },
}

// Resources only target for use by core
// ============================================================

java_library {
    name: "org.lineageos.platform.resources",

    srcs: [
        // For the generated R.java and Manifest.java
        ":org.lineageos.platform-res{.aapt.srcjar}",
    ],

    sdk_version: "core_current",
}

// The SDK
// ============================================================

// Included aidl files from lineageos.app namespace

java_library {
    name: "org.lineageos.platform.sdk",
    required: ["original.services"],
    static_libs: lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES,

    srcs: [
        lineage_sdk_src + "/**/*.java",
        lineage_sdk_src + "/**/I*.aidl",

        // For the generated R.java and Manifest.java
        ":org.lineageos.platform-res{.aapt.srcjar}",
    ],

    aidl: {
        local_include_dirs: ["sdk/src/java"],
    },
}

// Minimal LineageSettings lib for apex use.
// ============================================================

java_library {
    name: "org.lineageos.platform.lineagesettings",
    min_sdk_version: "30",

    // LineageSettings is our main target, the rest are deps.
    srcs: [
        lineage_sdk_src + "/app/LineageContextConstants.java",
        lineage_sdk_src + "/providers/LineageSettings.java",
        lineage_sdk_src + "/trust/ITrustInterface.aidl",
        lineage_sdk_src + "/trust/TrustInterface.java",

        // For the generated R.java and Manifest.java
        ":org.lineageos.platform-res{.aapt.srcjar}",
    ],

    // List of apex modules that can link against this lib
    apex_available: [
        "com.android.tethering",
    ],
}
