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

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

// Begin ProtoLog
java_library {
    name: "wm_shell_protolog-groups",
    srcs: [
        "src/com/android/wm/shell/protolog/ShellProtoLogGroup.java",
        ":protolog-common-src",
    ],
}

filegroup {
    name: "wm_shell-sources",
    srcs: [
        "src/**/*.java",
    ],
    path: "src",
}

// Sources that have no dependencies that can be used directly downstream of this library
// TODO(b/322791067): move these sources to WindowManager-Shell-shared
filegroup {
    name: "wm_shell_util-sources",
    srcs: [
        "src/com/android/wm/shell/animation/Interpolators.java",
        "src/com/android/wm/shell/animation/PhysicsAnimator.kt",
        "src/com/android/wm/shell/common/bubbles/*.kt",
        "src/com/android/wm/shell/common/bubbles/*.java",
        "src/com/android/wm/shell/common/magnetictarget/MagnetizedObject.kt",
        "src/com/android/wm/shell/common/split/SplitScreenConstants.java",
        "src/com/android/wm/shell/common/TransactionPool.java",
        "src/com/android/wm/shell/common/TriangleShape.java",
        "src/com/android/wm/shell/draganddrop/DragAndDropConstants.java",
        "src/com/android/wm/shell/pip/PipContentOverlay.java",
        "src/com/android/wm/shell/startingsurface/SplashScreenExitAnimationUtils.java",
        "src/com/android/wm/shell/sysui/ShellSharedConstants.java",
        "src/com/android/wm/shell/util/**/*.java",
    ],
    path: "src",
}

// Aidls which can be used directly downstream of this library
filegroup {
    name: "wm_shell-aidls",
    srcs: [
        "src/**/*.aidl",
    ],
    path: "src",
}

// TODO(b/168581922) protologtool do not support kotlin(*.kt)
filegroup {
    name: "wm_shell-sources-kt",
    srcs: [
        "src/**/*.kt",
    ],
    path: "src",
}

genrule {
    name: "wm_shell_protolog_src",
    srcs: [
        ":wm_shell_protolog-groups",
        ":wm_shell-sources",
    ],
    tools: ["protologtool"],
    cmd: "$(location protologtool) transform-protolog-calls " +
        "--protolog-class com.android.internal.protolog.common.ProtoLog " +
        "--protolog-impl-class com.android.wm.shell.protolog.ShellProtoLogImpl " +
        "--protolog-cache-class com.android.wm.shell.protolog.ShellProtoLogCache " +
        "--loggroups-class com.android.wm.shell.protolog.ShellProtoLogGroup " +
        "--loggroups-jar $(location :wm_shell_protolog-groups) " +
        "--output-srcjar $(out) " +
        "$(locations :wm_shell-sources)",
    out: ["wm_shell_protolog.srcjar"],
}

genrule {
    name: "generate-wm_shell_protolog.json",
    srcs: [
        ":wm_shell_protolog-groups",
        ":wm_shell-sources",
    ],
    tools: ["protologtool"],
    cmd: "$(location protologtool) generate-viewer-config " +
        "--protolog-class com.android.internal.protolog.common.ProtoLog " +
        "--loggroups-class com.android.wm.shell.protolog.ShellProtoLogGroup " +
        "--loggroups-jar $(location :wm_shell_protolog-groups) " +
        "--viewer-conf $(out) " +
        "$(locations :wm_shell-sources)",
    out: ["wm_shell_protolog.json"],
}

genrule {
    name: "protolog.json.gz",
    srcs: [":generate-wm_shell_protolog.json"],
    out: ["wmshell.protolog.json.gz"],
    cmd: "gzip -c < $(in) > $(out)",
}

prebuilt_etc {
    name: "wmshell.protolog.json.gz",
    system_ext_specific: true,
    src: ":protolog.json.gz",
    filename_from_src: true,
}

// End ProtoLog

java_library {
    name: "WindowManager-Shell-proto",

    srcs: ["proto/*.proto"],

    proto: {
        type: "nano",
    },
}

java_library {
    name: "WindowManager-Shell-shared",

    srcs: ["shared/**/*.java"],
}

android_library {
    name: "WindowManager-Shell",
    srcs: [
        ":wm_shell_protolog_src",
        // TODO(b/168581922) protologtool do not support kotlin(*.kt)
        ":wm_shell-sources-kt",
        ":wm_shell-aidls",
    ],
    resource_dirs: [
        "res",
    ],
    static_libs: [
        "androidx.appcompat_appcompat",
        "androidx.core_core-animation",
        "androidx.core_core-ktx",
        "androidx.arch.core_core-runtime",
        "androidx-constraintlayout_constraintlayout",
        "androidx.dynamicanimation_dynamicanimation",
        "androidx.recyclerview_recyclerview",
        "kotlinx-coroutines-android",
        "kotlinx-coroutines-core",
        "iconloader_base",
        "com_android_wm_shell_flags_lib",
        "com.android.window.flags.window-aconfig-java",
        "WindowManager-Shell-proto",
        "WindowManager-Shell-shared",
        "perfetto_trace_java_protos",
        "dagger2",
        "jsr330",
    ],
    libs: [
        // Soong fails to automatically add this dependency because all the
        // *.kt sources are inside a filegroup.
        "kotlin-annotations",
    ],
    kotlincflags: ["-Xjvm-default=all"],
    manifest: "AndroidManifest.xml",
    plugins: ["dagger2-compiler"],
    use_resource_processor: true,
}

android_app {
    name: "WindowManagerShellRobolectric",
    platform_apis: true,
    static_libs: [
        "WindowManager-Shell",
    ],
    manifest: "multivalentTests/AndroidManifestRobolectric.xml",
    use_resource_processor: true,
}

android_robolectric_test {
    name: "WMShellRobolectricTests",
    instrumentation_for: "WindowManagerShellRobolectric",
    upstream: true,
    java_resource_dirs: [
        "multivalentTests/robolectric/config",
    ],
    srcs: [
        "multivalentTests/src/**/*.kt",
    ],
    static_libs: [
        "junit",
        "androidx.test.runner",
        "androidx.test.rules",
        "androidx.test.ext.junit",
        "mockito-robolectric-prebuilt",
        "mockito-kotlin2",
        "truth",
    ],
}

android_test {
    name: "WMShellMultivalentTestsOnDevice",
    srcs: [
        "multivalentTests/src/**/*.kt",
    ],
    static_libs: [
        "WindowManager-Shell",
        "junit",
        "androidx.test.runner",
        "androidx.test.rules",
        "androidx.test.ext.junit",
        "frameworks-base-testutils",
        "mockito-kotlin2",
        "mockito-target-extended-minus-junit4",
        "truth",
        "platform-test-annotations",
        "platform-test-rules",
    ],
    libs: [
        "android.test.base",
        "android.test.runner",
    ],
    jni_libs: [
        "libdexmakerjvmtiagent",
        "libstaticjvmtiagent",
    ],
    kotlincflags: ["-Xjvm-default=all"],
    optimize: {
        enabled: false,
    },
    test_suites: ["device-tests"],
    platform_apis: true,
    certificate: "platform",
    aaptflags: [
        "--extra-packages",
        "com.android.wm.shell",
    ],
    manifest: "multivalentTests/AndroidManifest.xml",
}
