// 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-sources",
    srcs: [
        "java/**/*.java",
        "java/**/*.aidl",
    ],
    exclude_srcs: [
        ":framework-wifi-non-updatable-sources"
    ],
    path: "java",
}

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/WifiOemConfigStoreMigrationHook.java",
        "java/android/net/wifi/wificond/*.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__",

    "//frameworks/opt/net/wifi/libs/WifiTrackerLib/tests",
    "//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/140299412) should be core_current once we build against framework-system-stubs
    sdk_version: "core_platform",
    static_libs: [
        "framework-wifi-util-lib",
        "android.hardware.wifi-V1.0-java-constants",
    ],
    libs: [
        // TODO(b/140299412) should be framework-system-stubs once we fix all @hide dependencies
        "framework-minus-apex",
        "framework-annotations-lib",
        "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
        "unsupportedappusage-annotation", // for dalvik.annotation.compat.UnsupportedAppUsage
    ],
    srcs: [
        ":framework-wifi-updatable-sources",
    ],
    installable: false,
    visibility: [
        "//frameworks/opt/net/wifi/service",
        "//frameworks/opt/net/wifi/tests/wifitests",
    ],
}

// post-jarjar version of framework-wifi
java_library {
    name: "framework-wifi",
    // TODO(b/140299412) should be core_current once we build against framework-system-stubs
    sdk_version: "core_platform",
    static_libs: [
        "framework-wifi-pre-jarjar",
    ],
    jarjar_rules: ":wifi-jarjar-rules",

    installable: true,
    optimize: {
        enabled: false
    },
    hostdex: true, // for hiddenapi check
    visibility: [
        "//frameworks/base", // TODO(b/140299412) remove once all dependencies are fixed
        "//frameworks/opt/net/wifi/service:__subpackages__",
    ] + test_access_hidden_api_whitelist,
    apex_available: [
        "com.android.wifi",
        "test_com.android.wifi",
    ],
    plugins: ["java_api_finder"],
}

droidstubs {
    name: "framework-wifi-stubs-srcs",
    srcs: [
        ":framework-annotations",
        ":framework-wifi-updatable-sources",
    ],
    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"],
    aidl: {
        export_include_dirs: [
            "java",
        ],
    },
    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"],
}
