// 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.

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",
    ],
    exclude_srcs: [
        ":framework-wifi-non-updatable-sources"
    ],
    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-non-updatable-sources",
    srcs: [
        // TODO(b/146011398) package android.net.wifi is now split amongst 2 jars: framework.jar and
        // framework-wifi.jar. This is not a good idea, should move WifiNetworkScoreCache
        // to a separate package.
        "java/android/net/wifi/WifiNetworkScoreCache.java",
        "java/android/net/wifi/WifiOemMigrationHook.java",
        "java/android/net/wifi/nl80211/*.java",
        ":libwificond_ipc_aidl",
    ],
}

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/opt/net/wifi/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",
    // TODO(b/146757305): sdk_version should be "module_lib_current"
    sdk_version: "core_current",
    static_libs: [
        "framework-wifi-util-lib",
        "android.hardware.wifi-V1.0-java-constants",
    ],
    libs: [
        "framework-annotations-lib",
        "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
        "unsupportedappusage-annotation", // for dalvik.annotation.compat.UnsupportedAppUsage
        "framework-telephony-stubs",
        // TODO(b/146757305): should be unnecessary once
        // sdk_version="module_lib_current"
        "android_system_stubs_current",
        "framework_mediaprovider_annotation", // for android.annotation.CurrentTimeMillisLong
    ],
    srcs: [
        ":framework-wifi-updatable-sources",
    ],
    // java_api_finder must accompany `srcs`
    plugins: ["java_api_finder"],
    installable: false,
    visibility: [
        "//frameworks/opt/net/wifi/service",
        "//frameworks/opt/net/wifi/tests/wifitests",
    ],

    // TODO(b/146757305): should be unnecessary once
    // sdk_version="module_lib_current"
    aidl: {
        include_dirs: [
            "frameworks/base/core/java",
        ],
    },
}

// post-jarjar version of framework-wifi
java_library {
    name: "framework-wifi",
    // TODO(b/146757305): sdk_version should be "module_lib_current"
    sdk_version: "core_current",
    static_libs: [
        "framework-wifi-pre-jarjar",
    ],
    jarjar_rules: ":wifi-jarjar-rules",

    installable: true,
    optimize: {
        enabled: false
    },
    hostdex: true, // for hiddenapi check
    visibility: [
        "//frameworks/opt/net/wifi/service:__subpackages__",
    ] + test_access_hidden_api_whitelist,
    apex_available: [
        "com.android.wifi",
        "test_com.android.wifi",
    ],
}

droidstubs {
    name: "framework-wifi-stubs-srcs",
    srcs: [
        ":framework-annotations",
        ":framework-wifi-updatable-sources",
    ],
    // This is needed as IOnWifiActivityEnergyInfoListener.aidl in framework-wifi depends on
    // WifiActivityEnergyInfo.aidl in framework-minus-apex
    aidl: {
        include_dirs: ["frameworks/base/core/java"],
    },
    defaults: [ "framework-module-stubs-defaults-systemapi" ],
    sdk_version: "core_current",
    libs: ["android_system_stubs_current"],
}

java_library {
    name: "framework-wifi-stubs",
    srcs: [":framework-wifi-stubs-srcs"],
    sdk_version: "core_current",
    libs: ["android_system_stubs_current"],
    installable: false,
}

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