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

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

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

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

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