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

java_defaults {
    name: "wifi-module-sdk-version-defaults",
    min_sdk_version: "30",
    target_sdk_version: "30",
}

filegroup {
    name: "framework-wifi-updatable-exported-aidl-sources",
    srcs: ["aidl-export/**/*.aidl"],
    path: "aidl-export",
    visibility: ["//visibility:private"],
}

filegroup {
    name: "framework-wifi-updatable-java-sources",
    srcs: [
        "java/**/*.java",
        "java/**/*.aidl",
    ],
    path: "java",
    visibility: ["//visibility:private"],
}

filegroup {
    name: "framework-wifi-updatable-sources",
    srcs: [
        ":framework-wifi-updatable-java-sources",
        ":framework-wifi-updatable-exported-aidl-sources",
    ],
}

filegroup {
    name: "framework-wifi-annotations",
    srcs: ["java/android/net/wifi/WifiAnnotations.java"],
}

// list of tests that are allowed to access @hide APIs from framework-wifi
test_access_hidden_api_whitelist = [
    "//frameworks/base/wifi/tests",
    "//frameworks/base/wifi/non-updatable/tests",
    "//frameworks/opt/net/wifi/tests/wifitests:__subpackages__",

    "//packages/modules/Wifi/framework/tests",
    "//packages/modules/Wifi/service/tests/wifitests:__subpackages__",

    "//external/robolectric-shadows:__subpackages__",
    "//frameworks/base/packages/SettingsLib/tests/integ",
    "//external/sl4a:__subpackages__",
]

// wifi-service needs pre-jarjared version of framework-wifi so it can reference copied utility
// classes before they are renamed.
java_library {
    name: "framework-wifi-pre-jarjar",
    defaults: ["wifi-module-sdk-version-defaults"],
    sdk_version: "module_current",
    static_libs: [
        "framework-wifi-util-lib",
        "android.hardware.wifi-V1.0-java-constants",
    ],
    libs: [
        "framework-annotations-lib",
        "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
    ],
    srcs: [
        ":framework-wifi-updatable-sources",
        ":framework-wifi-util-lib-aidls",
    ],
    // java_api_finder must accompany `srcs`
    plugins: ["java_api_finder"],
    installable: false,
    visibility: [
        "//frameworks/opt/net/wifi/service",
        "//frameworks/opt/net/wifi/tests/wifitests",
        "//packages/modules/Wifi/service",
        "//packages/modules/Wifi/service/tests/wifitests",
    ],
}

// post-jarjar version of framework-wifi
java_sdk_library {
    name: "framework-wifi",
    defaults: [
        "framework-module-defaults",
        "wifi-module-sdk-version-defaults",
    ],
    static_libs: [
        "framework-wifi-util-lib",
        "android.hardware.wifi-V1.0-java-constants",
    ],
    libs: [
        "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
    ],
    srcs: [
        ":framework-wifi-updatable-sources",
        ":framework-wifi-util-lib-aidls",
    ],

    jarjar_rules: ":wifi-jarjar-rules",

    installable: true,
    optimize: {
        enabled: false
    },
    hostdex: true, // for hiddenapi check

    // Restrict access to implementation library.
    impl_library_visibility: [
        "//frameworks/opt/net/wifi/service:__subpackages__",
        "//packages/modules/Wifi/service:__subpackages__",
    ] + test_access_hidden_api_whitelist,

    apex_available: [
        "com.android.wifi",
        "test_com.android.wifi",
    ],
    permitted_packages: [
        "android.hardware.wifi",
        "android.net.wifi",
        // Created by jarjar rules.
        "com.android.wifi.x",
    ],
}

// defaults for tests that need to build against framework-wifi's @hide APIs
java_defaults {
    name: "framework-wifi-test-defaults",
    sdk_version: "core_platform", // tests can use @CorePlatformApi's
    libs: [
        // order matters: classes in framework-wifi are resolved before framework, meaning
        // @hide APIs in framework-wifi are resolved before @SystemApi stubs in framework
        "framework-wifi.impl",
        "framework",

        // if sdk_version="" this gets automatically included, but here we need to add manually.
        "framework-res",
    ],
    visibility: test_access_hidden_api_whitelist,
}

filegroup {
    name: "wifi-jarjar-rules",
    srcs: ["jarjar-rules.txt"],
}
