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


package {
    default_applicable_licenses: ["Android-Apache-2.0"],
}

genrule {
  name: "statslog-qns-java-gen",
  tools: ["stats-log-api-gen"],
  cmd: "$(location stats-log-api-gen) --java $(out) --module qns --javaPackage com.android.telephony.qns.stats --javaClass QnsStatsLog --worksource",
  out: ["com/android/telephony/qns/stats/QnsStatsLog.java"],
}

android_app {
    name: "QualifiedNetworksService",
    system_ext_specific: true,
    platform_apis: true,
    manifest: "AndroidManifest.xml",
    srcs: [
        "src/**/*.java",
        "src/**/I*.aidl",
        ":statslog-qns-java-gen",
    ],

    static_libs: [
        "androidx.appcompat_appcompat",
        "androidx.browser_browser",
        "TelephonyStatsLib",
    ],

    libs: [
        "telephony-common",
        "ims-common",
        "framework-annotations-lib",
        "framework-connectivity",
        "framework-wifi"
    ],

    plugins: ["auto_value_plugin"],

    required: [
        "privapp-permissions_com.android.telephony.qns",
    ],

    apex_available: [
        "//apex_available:platform",
        "com.android.telephonymodules",
    ],

    owner: "google",
    privileged: true,
    certificate: "platform",
}

prebuilt_etc {
    name: "privapp-permissions_com.android.telephony.qns",
    sub_dir: "permissions",
    src: "privapp-permissions_com.android.telephony.qns.xml",
    filename_from_src: true,
    system_ext_specific: true,
}


android_test {
    name: "QualifiedNetworksServiceTests",
    manifest: "tests/AndroidManifest.xml",
    srcs: [
        "src/**/*.java",
        "src/**/I*.aidl",
        "tests/**/*.java",
        ":statslog-qns-java-gen",
    ],
    libs: [
        "android.test.runner",
        "telephony-common",
        "ims-common",
        "android.test.mock",
        "android.test.base"
    ],
    static_libs: [
        "androidx.appcompat_appcompat",
        "androidx.browser_browser",
        "androidx.test.ext.truth",
        "androidx.test.ext.junit",
        "androidx.test.rules",
        "androidx.test.core",
        "frameworks-base-testutils",
        "mockito-target-extended-minus-junit4",
        "platform-test-annotations",
        "truth-prebuilt",
        "testables",
        "TelephonyStatsLib",
    ],
    jni_libs: [
        "libdexmakerjvmtiagent",
        "libstaticjvmtiagent",
    ],
    platform_apis: true,
    certificate: "platform",
    instrumentation_for: "QualifiedNetworksService",
    test_suites: ["device-tests"],
}

