//
// Copyright (C) 2018-2021 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",
    certificate: "platform",
    sdk_version: "core_platform",
    manifest: "lineage/res/AndroidManifest.xml",

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

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

        // 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",
        "sdk/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"
library_src = "lineage/lib/main/java"

lineage_sdk_LOCAL_STATIC_ANDROID_LIBRARIES = [
    "androidx.preference_preference",
]

lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES = [
    "vendor.lineage.livedisplay-V2.0-java",
    "vendor.lineage.livedisplay-V2.1-java",
    "vendor.lineage.touch-V1.0-java",
    "vendor.lineage.trust-V1.0-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_ANDROID_LIBRARIES + lineage_sdk_LOCAL_STATIC_JAVA_LIBRARIES,

    libs: [
        "framework",
        "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: ["services"],
    static_libs: lineage_sdk_LOCAL_STATIC_ANDROID_LIBRARIES + 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"],
    },
}

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

// Included aidl files from lineageos.app namespace

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

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

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

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

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

    // 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",
    ],

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