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

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

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

java_genrule {
    name: "wm_shell_protolog_src",
    srcs: [
        ":protolog-impl",
        ":wm_shell_protolog-groups",
        ":wm_shell-sources",
    ],
    tools: ["protologtool"],
    cmd: "$(location protologtool) transform-protolog-calls " +
        "--protolog-class com.android.internal.protolog.ProtoLog " +
        "--loggroups-class com.android.wm.shell.protolog.ShellProtoLogGroup " +
        "--loggroups-jar $(location :wm_shell_protolog-groups) " +
        "--viewer-config-file-path /system_ext/etc/wmshell.protolog.pb " +
        "--legacy-viewer-config-file-path /system_ext/etc/wmshell.protolog.json.gz " +
        "--legacy-output-file-path /data/misc/wmtrace/shell_log.winscope " +
        "--output-srcjar $(out) " +
        "$(locations :wm_shell-sources)",
    out: ["wm_shell_protolog.srcjar"],
}

java_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.ProtoLog " +
        "--loggroups-class com.android.wm.shell.protolog.ShellProtoLogGroup " +
        "--loggroups-jar $(location :wm_shell_protolog-groups) " +
        "--viewer-config-type json " +
        "--viewer-config $(out) " +
        "$(locations :wm_shell-sources)",
    out: ["wm_shell_protolog.json"],
}

java_genrule {
    name: "gen-wmshell.protolog.pb",
    srcs: [
        ":wm_shell_protolog-groups",
        ":wm_shell-sources",
    ],
    tools: ["protologtool"],
    cmd: "$(location protologtool) generate-viewer-config " +
        "--protolog-class com.android.internal.protolog.ProtoLog " +
        "--loggroups-class com.android.wm.shell.protolog.ShellProtoLogGroup " +
        "--loggroups-jar $(location :wm_shell_protolog-groups) " +
        "--viewer-config-type proto " +
        "--viewer-config $(out) " +
        "$(locations :wm_shell-sources)",
    out: ["wmshell.protolog.pb"],
}

java_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,
}

prebuilt_etc {
    name: "wmshell.protolog.pb",
    system_ext_specific: true,
    src: ":gen-wmshell.protolog.pb",
    filename_from_src: true,
}

// End ProtoLog

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

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

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

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

    srcs: [
        "src/com/android/wm/shell/desktopmode/education/data/proto/**/*.proto",
        "src/com/android/wm/shell/desktopmode/persistence/*.proto",
    ],
    proto: {
        type: "lite",
    },
}

filegroup {
    name: "wm_shell-shared-aidls",

    srcs: [
        "shared/**/*.aidl",
    ],

    path: "shared/src",
}

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

    srcs: [
        "shared/**/*.java",
        "shared/**/*.kt",
        ":wm_shell-shared-aidls",
    ],
    static_libs: [
        "androidx.core_core-animation",
        "androidx.dynamicanimation_dynamicanimation",
        "jsr330",
    ],
    kotlincflags: ["-Xjvm-default=all"],
}

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

    srcs: [
        "shared/**/desktopmode/*.java",
        "shared/**/desktopmode/*.kt",
    ],
    static_libs: [
        "com.android.window.flags.window-aconfig-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",
        ":wm_shell-shared-aidls",
    ],
    resource_dirs: [
        "res",
    ],
    static_libs: [
        "androidx.appcompat_appcompat",
        "androidx.core_core-ktx",
        "androidx.arch.core_core-runtime",
        "androidx.datastore_datastore",
        "androidx.compose.material3_material3",
        "androidx-constraintlayout_constraintlayout",
        "androidx.dynamicanimation_dynamicanimation",
        "androidx.recyclerview_recyclerview",
        "kotlinx-coroutines-android",
        "kotlinx-coroutines-core",
        "//frameworks/libs/systemui:com_android_systemui_shared_flags_lib",
        "//frameworks/libs/systemui:iconloader_base",
        "com_android_wm_shell_flags_lib",
        "WindowManager-Shell-proto",
        "WindowManager-Shell-lite-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",
    ],
    required: [
        "wmshell.protolog.json.gz",
        "wmshell.protolog.pb",
    ],
    flags_packages: [
        "com_android_wm_shell_flags",
    ],
    kotlincflags: ["-Xjvm-default=all"],
    manifest: "AndroidManifest.xml",
    plugins: ["dagger2-compiler"],
    use_resource_processor: true,
}
