Merge "Add NetworkStackApi34Shims to allowed deps"
diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py
index 132c426..eebb389 100755
--- a/build/mainline_modules_sdks.py
+++ b/build/mainline_modules_sdks.py
@@ -485,36 +485,6 @@
     producer.produce_bundled_dist_for_build_release(build_release, modules)
 
 
-def create_legacy_dist_structures(build_release: BuildRelease,
-                                  producer: "SdkDistProducer",
-                                  modules: List["MainlineModule"]):
-    """Creates legacy file structures."""
-
-    # Only put unbundled modules in the legacy dist and stubs structures.
-    modules = [m for m in modules if not m.is_bundled()]
-
-    snapshots_dir = producer.produce_unbundled_dist_for_build_release(
-        build_release, modules)
-
-    # Create the out/dist/mainline-sdks/stubs structure.
-    # TODO(b/199759953): Remove stubs once it is no longer used by gantry.
-    # Clear and populate the stubs directory.
-    dist_dir = producer.dist_dir
-    stubs_dir = os.path.join(dist_dir, "stubs")
-    shutil.rmtree(stubs_dir, ignore_errors=True)
-
-    for module in modules:
-        apex = module.apex
-        dest_dir = os.path.join(dist_dir, "stubs", apex)
-        for sdk in module.sdks:
-            # If the sdk's name ends with -sdk then extract sdk library
-            # related files from its zip file.
-            if sdk.endswith("-sdk"):
-                sdk_file = sdk_snapshot_zip_file(snapshots_dir, sdk, "current")
-                extract_matching_files_from_zip(sdk_file, dest_dir,
-                                                sdk_library_files_pattern())
-
-
 Q = BuildRelease(
     name="Q",
     # At the moment we do not generate a snapshot for Q.
@@ -546,8 +516,7 @@
 # before LATEST.
 
 # The build release for the latest build supported by this build, i.e. the
-# current build. This must be the last BuildRelease defined in this script,
-# before LEGACY_BUILD_RELEASE.
+# current build. This must be the last BuildRelease defined in this script.
 LATEST = BuildRelease(
     name="latest",
     creator=create_latest_sdk_snapshots,
@@ -556,20 +525,6 @@
     soong_env={},
 )
 
-# The build release to populate the legacy dist structure that does not specify
-# a particular build release. This MUST come after LATEST so that it includes
-# all the modules for which sdk snapshot source is available.
-LEGACY_BUILD_RELEASE = BuildRelease(
-    name="legacy",
-    # There is no build release specific sub directory.
-    sub_dir="",
-    # Create snapshots needed for legacy tools.
-    creator=create_legacy_dist_structures,
-    # There are no build release specific environment variables to pass to
-    # Soong.
-    soong_env={},
-)
-
 
 @dataclasses.dataclass(frozen=True)
 class SdkLibrary:
@@ -611,11 +566,7 @@
     #       source was first included. So, a module that was added in build T
     #       could potentially be used in an S release and so its SDK will need
     #       to be made available for S builds.
-    #
-    # Defaults to the latest build, i.e. the build on which this script is run
-    # as the snapshot is assumed to be needed in the build containing the sdk
-    # source.
-    first_release: BuildRelease = LATEST
+    first_release: BuildRelease
 
     # The configuration variable, defaults to ANDROID:module_build_from_source
     configVar: ConfigVar = ConfigVar(
@@ -660,6 +611,10 @@
     A bundled module is always preloaded into the platform images.
     """
 
+    # Defaults to the latest build, i.e. the build on which this script is run
+    # as bundled modules are, by definition, only needed in this build.
+    first_release: BuildRelease = LATEST
+
     def is_bundled(self):
         return True
 
@@ -740,6 +695,11 @@
         ]),
     ),
     MainlineModule(
+        apex="com.android.scheduling",
+        sdks=["scheduling-sdk"],
+        first_release=S,
+    ),
+    MainlineModule(
         apex="com.android.sdkext",
         sdks=["sdkextensions-sdk"],
         first_release=R,
@@ -773,7 +733,7 @@
     ),
 ]
 
-# List of Mainline modules that currently are never built unbundled. They should
+# List of Mainline modules that currently are never built unbundled. They must
 # not specify first_release, and they don't have com.google.android
 # counterparts.
 BUNDLED_MAINLINE_MODULES = [
diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py
index 6d06303..7cad583 100644
--- a/build/mainline_modules_sdks_test.py
+++ b/build/mainline_modules_sdks_test.py
@@ -15,7 +15,6 @@
 # limitations under the License.
 """Unit tests for mainline_modules_sdks.py."""
 import dataclasses
-import pathlib
 import re
 import typing
 from pathlib import Path
@@ -128,19 +127,12 @@
             mm.R,
             mm.S,
             mm.LATEST,
-            mm.LEGACY_BUILD_RELEASE,
         ]
         self.produce_dist(modules, build_releases)
 
         # pylint: disable=line-too-long
         self.assertEqual(
             [
-                # Legacy copy of the snapshots, for use by tools that don't support build specific snapshots.
-                "mainline-sdks/current/com.android.art/host-exports/art-module-host-exports-current.zip",
-                "mainline-sdks/current/com.android.art/sdk/art-module-sdk-current.zip",
-                "mainline-sdks/current/com.android.art/test-exports/art-module-test-exports-current.zip",
-                "mainline-sdks/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
-                "mainline-sdks/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
                 # Build specific snapshots.
                 "mainline-sdks/for-R-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
                 "mainline-sdks/for-R-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
@@ -154,19 +146,6 @@
                 "mainline-sdks/for-latest-build/current/com.android.art/test-exports/art-module-test-exports-current.zip",
                 "mainline-sdks/for-latest-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
                 "mainline-sdks/for-latest-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
-                # Legacy stubs directory containing unpacked java_sdk_library artifacts.
-                "stubs/com.android.art/sdk_library/public/art-removed.txt",
-                "stubs/com.android.art/sdk_library/public/art-stubs.jar",
-                "stubs/com.android.art/sdk_library/public/art.srcjar",
-                "stubs/com.android.art/sdk_library/public/art.txt",
-                "stubs/com.android.ipsec/sdk_library/public/android.net.ipsec.ike-removed.txt",
-                "stubs/com.android.ipsec/sdk_library/public/android.net.ipsec.ike-stubs.jar",
-                "stubs/com.android.ipsec/sdk_library/public/android.net.ipsec.ike.srcjar",
-                "stubs/com.android.ipsec/sdk_library/public/android.net.ipsec.ike.txt",
-                "stubs/com.google.android.wifi/sdk_library/public/framework-wifi-removed.txt",
-                "stubs/com.google.android.wifi/sdk_library/public/framework-wifi-stubs.jar",
-                "stubs/com.google.android.wifi/sdk_library/public/framework-wifi.srcjar",
-                "stubs/com.google.android.wifi/sdk_library/public/framework-wifi.txt",
             ],
             sorted(self.list_files_in_dir(self.tmp_dist_dir)))
 
@@ -246,30 +225,6 @@
             ],
             sorted(self.list_files_in_dir(self.tmp_dist_dir)))
 
-    def test_legacy_release(self):
-        modules = [
-            MAINLINE_MODULES_BY_APEX["com.android.art"],  # An unnbundled module
-            MAINLINE_MODULES_BY_APEX["com.android.runtime"],  # A bundled module
-            MAINLINE_MODULES_BY_APEX["platform-mainline"],  # Platform SDK
-        ]
-        build_releases = [mm.LEGACY_BUILD_RELEASE]
-        self.produce_dist(modules, build_releases)
-
-        # pylint: disable=line-too-long
-        self.assertEqual(
-            [
-                # Legacy copy of the snapshots.
-                "mainline-sdks/current/com.android.art/host-exports/art-module-host-exports-current.zip",
-                "mainline-sdks/current/com.android.art/sdk/art-module-sdk-current.zip",
-                "mainline-sdks/current/com.android.art/test-exports/art-module-test-exports-current.zip",
-                # Legacy stubs directory containing unpacked java_sdk_library artifacts.
-                "stubs/com.android.art/sdk_library/public/art-removed.txt",
-                "stubs/com.android.art/sdk_library/public/art-stubs.jar",
-                "stubs/com.android.art/sdk_library/public/art.srcjar",
-                "stubs/com.android.art/sdk_library/public/art.txt",
-            ],
-            sorted(self.list_files_in_dir(self.tmp_dist_dir)))
-
     def create_build_number_file(self):
         soong_dir = os.path.join(self.tmp_out_dir, "soong")
         os.makedirs(soong_dir, exist_ok=True)
@@ -305,7 +260,6 @@
             mm.R,
             mm.S,
             mm.LATEST,
-            mm.LEGACY_BUILD_RELEASE,
         ]
 
         producer.produce_dist(modules, build_releases)
@@ -328,15 +282,6 @@
                 ],
             ),
             (
-                "legacy",
-                {},
-                ["current"],
-                [
-                    "com.android.art", "com.android.ipsec",
-                    "com.google.android.wifi"
-                ],
-            ),
-            (
                 "S",
                 {
                     "SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE": "S"
diff --git a/generate_ml_bundle.sh b/generate_ml_bundle.sh
deleted file mode 100755
index 06fd6c4..0000000
--- a/generate_ml_bundle.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/bash -ex
-
-# Usage:
-# generate_ml_bundle.sh [args] source_tree dest_tree api_level
-#
-# Args:
-# -p Sets prefer=true in generated java_sdk_library_import rules
-# -a Also update artifects; default behaviour is just to generate build rules.
-
-PREFER=false
-UPDATE_ARTIFACTS=false
-while getopts "pa" opt; do
-    case ${opt} in
-          p ) PREFER=true;;
-          a ) UPDATE_ARTIFACTS=true;;
-          \? ) echo "Invalid option."
-            exit
-            ;;
-    esac
-done
-shift $((OPTIND -1))
-
-SOURCE_TREE=$1
-DESTINATION_TREE=$2
-API_LEVEL=$3
-SOURCE_TREE_TYPE=$(test -e ${DESTINATION_TREE}/vendor/unbundled_google/modules && echo GOOGLE || echo PARTNER)
-
-function sdk_lib_bp() {
-    modulename=$1
-    apexname=$2
-    shared_library=$(test \( "$apexname" == com.android.ipsec \) -a \( "$API_LEVEL" -lt 31 \) && echo true || echo false)
-    cat << EOF
-java_sdk_library_import {
-    name: "${modulename}",
-    owner: "google",
-    prefer: ${PREFER},
-    shared_library: ${shared_library},
-    apex_available: [
-        "${apexname}",
-        "test_${apexname}",
-    ],
-    public: {
-        jars: ["current/public/${modulename}.jar"],
-        stub_srcs: ["current/public/${modulename}.srcjar"],
-        current_api: "current/public/${modulename}.txt",
-        removed_api: "current/public/${modulename}-removed.txt",
-        sdk_version: "module_current",
-    },
-    system: {
-        jars: ["current/system/${modulename}.jar"],
-        stub_srcs: ["current/system/${modulename}.srcjar"],
-        current_api: "current/system/${modulename}.txt",
-        removed_api: "current/system/${modulename}-removed.txt",
-        sdk_version: "module_current",
-    },
-    module_lib: {
-        jars: ["current/module_lib/${modulename}.jar"],
-        stub_srcs: ["current/module_lib/${modulename}.srcjar"],
-        current_api: "current/module_lib/${modulename}.txt",
-        removed_api: "current/module_lib/${modulename}-removed.txt",
-        sdk_version: "module_current",
-    },
-}
-EOF
-}
-
-function make_sdk_library() {
-    libnames=$1
-    destdir=$2
-    apexname=$3
-    bp=${destdir}/Android.bp
-
-    #test -e "$bp"
-    mkdir -p "$(dirname "$bp")"
-
-    # Remove existing java_sdk_library_import and double newlines
-    existing_bp="$(sed -e '/java_sdk_library_import {/,/^}/d' "$bp" | tr -s \\n)"
-    echo "$existing_bp" > "$bp"
-    for libname in $libnames; do
-        echo >> "$bp"
-        echo "$(sdk_lib_bp ${libname} ${apexname})" | grep -v test_com.android.tethering >> "$bp"
-    done
-    #echo >> "$bp"
-
-    if [ "${UPDATE_ARTIFACTS}" == "true" ] ; then
-        rm -rf "${destdir}/current"
-        mkdir -p "${destdir}/current/"{public,system,module_lib}
-        for libname in $libnames; do
-            cp public/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/current/public"
-            cp system/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/current/system"
-            cp module-lib/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/current/module_lib"
-        done
-    fi
-}
-
-function copy_notices() {
-    destdir=$1
-    apks=$(find $destdir -name '*.apks' | head -1)
-    if [[ -z "$apks" ]]; then
-        echo "no apks found in $destdir" >&2
-        exit
-    fi
-    filename=$(zipinfo -1 "$apks" *.apex */base-master.apk | head -1)
-    # com.android.ipsec is not expected to have a LICENSE, so don't fail if it doesn't.
-    unzip -p "$apks" "$filename" | bsdtar -xOf- assets/NOTICE.html.gz > "${destdir}/NOTICE.html.gz" || test "$2" == "com.android.ipsec"
-}
-
-function get_dest_dir() {
-    if [[ "$SOURCE_TREE_TYPE" == "PARTNER" ]]; then
-        echo "${DESTINATION_TREE}/vendor/partner_modules/${1}"
-    elif [[ "$SOURCE_TREE_TYPE" == "GOOGLE" ]]; then
-        echo -n "${DESTINATION_TREE}/prebuilts/module_sdk/"
-        case "$1" in
-            "IKEPrebuilt") echo "IPsec";;
-            "MediaFrameworkPrebuilt") echo "Media";;
-            "MediaProviderPrebuilt") echo "MediaProvider";;
-            "PermissionControllerPrebuilt") echo "Permission";;
-            "SdkExtensionsPrebuilt") echo "SdkExtensions";;
-            "StatsdPrebuilt") echo "StatsD";;
-            "TetheringPrebuilt") echo "Connectivity";;
-            "WiFiPrebuilt") echo "Wifi";;
-            *) exit 1;;
-        esac
-    else
-        # Unknown tree type
-        exit 2
-    fi
-    #ConscryptPrebuilt ???
-}
-
-function setup_stub_prebuilts() {
-    destdir=$(get_dest_dir $2)
-
-    make_sdk_library "$1" "$destdir" "$3"
-    #copy_notices "$destdir" "$3"
-}
-
-cd "$SOURCE_TREE/prebuilts/sdk/$API_LEVEL"
-setup_stub_prebuilts android.net.ipsec.ike IKEPrebuilt com.android.ipsec
-setup_stub_prebuilts framework-media MediaFrameworkPrebuilt com.android.media
-setup_stub_prebuilts framework-mediaprovider MediaProviderPrebuilt com.android.mediaprovider
-if [[ "$API_LEVEL" -ge 31 ]]; then
-    setup_stub_prebuilts 'framework-permission framework-permission-s' PermissionControllerPrebuilt com.android.permission
-else
-    setup_stub_prebuilts framework-permission PermissionControllerPrebuilt com.android.permission
-fi
-setup_stub_prebuilts framework-sdkextensions SdkExtensionsPrebuilt com.android.sdkext
-setup_stub_prebuilts framework-statsd StatsdPrebuilt com.android.os.statsd
-setup_stub_prebuilts framework-tethering TetheringPrebuilt com.android.tethering
-setup_stub_prebuilts framework-wifi WiFiPrebuilt com.android.wifi
diff --git a/tools/finalize_sdk.py b/tools/finalize_sdk.py
index 004a793..32b2fb7 100755
--- a/tools/finalize_sdk.py
+++ b/tools/finalize_sdk.py
@@ -22,7 +22,7 @@
 # This build target is used when fetching from a non-train build (XXXXXXXX)
 BUILD_TARGET_CONTINUOUS = 'mainline_modules-user'
 # The glob of sdk artifacts to fetch
-ARTIFACT_PATTERN = 'mainline-sdks/current/{module_name}/sdk/*.zip'
+ARTIFACT_PATTERN = 'mainline-sdks/for-latest-build/current/{module_name}/sdk/*.zip'
 COMMIT_TEMPLATE = """Finalize artifacts for extension SDK %d
 
 Import from build id %s.