migrate --android_platforms
#FLAG_CHANGE

PiperOrigin-RevId: 949713985
Change-Id: I9eb51c959ca639fa2a6f94c345ca9cc15060c0f7
diff --git a/rules/android_platforms_transition.bzl b/rules/android_platforms_transition.bzl
index 5bc4b98..59efb73 100644
--- a/rules/android_platforms_transition.bzl
+++ b/rules/android_platforms_transition.bzl
@@ -22,10 +22,12 @@
 
 visibility(PROJECT_VISIBILITY)
 
+_ANDROID_PLATFORMS_SETTING = utils.ANDROID_PLATFORMS_SETTING
+
 def _android_platforms_transition_impl(settings, attrs):
     new_settings = dict(settings)
 
-    android_platforms = utils.get_cls(settings, "android_platforms")
+    android_platforms = utils.get_android_platforms(settings)
     new_platforms = utils.get_cls(settings, "platforms")
 
     # Set the value of --platforms for this target and its dependencies.
@@ -55,11 +57,13 @@
     implementation = _android_platforms_transition_impl,
     inputs = [
         "//command_line_option:android_platforms",
+        _ANDROID_PLATFORMS_SETTING,
         "//command_line_option:platforms",
         min_sdk_version.SETTING,
     ],
     outputs = [
         "//command_line_option:android_platforms",
+        _ANDROID_PLATFORMS_SETTING,
         "//command_line_option:platforms",
         min_sdk_version.SETTING,
     ],
diff --git a/rules/android_split_transition.bzl b/rules/android_split_transition.bzl
index fbb40b9..2eaf5eb 100644
--- a/rules/android_split_transition.bzl
+++ b/rules/android_split_transition.bzl
@@ -32,6 +32,8 @@
 
 visibility(PROJECT_VISIBILITY)
 
+_ANDROID_PLATFORMS_SETTING = utils.ANDROID_PLATFORMS_SETTING
+
 def _android_split_transition_impl(settings, attrs):
     settings = dict(settings)
 
@@ -41,7 +43,7 @@
         settings["//rules/flags:bytecode_transformer"] = getattr(attrs, "bytecode_transformer", None)
 
     # Always use `--android_platforms` when toolchain resolution is enabled.
-    platforms_to_split = utils.get_cls(settings, "android_platforms")
+    platforms_to_split = utils.get_android_platforms(settings)
     if not platforms_to_split:
         # If `--android_platforms` is unset, instead use only the first
         # value from `--platforms`.
@@ -56,14 +58,14 @@
     # we apply this transition to. In that case we end up applying this transition twice.
     # The second transition will fail. Since the transition clears out --android_platforms we can
     # use that as a signal to do nothing.
-    if not utils.get_cls(settings, "android_platforms"):
+    if not utils.get_android_platforms(settings):
         return None
 
     configs = _android_split_transition_impl(settings, attr)
 
     # Always pick the config based on the first value in --android_platforms
     # This ensures the choice is consistent with the android_platforms_transition
-    return configs[utils.get_cls(settings, "android_platforms")[0].name]
+    return configs[utils.get_android_platforms(settings)[0].name]
 
 def _handle_android_platforms(settings, platforms_to_split):
     """
@@ -80,6 +82,7 @@
 
         # Disable fat APKs for the child configurations.
         split_options[utils.add_cls_prefix("android_platforms")] = []
+        split_options[_ANDROID_PLATFORMS_SETTING] = []
 
         # The cpu flag will be set by platform mapping if a mapping exists.
         split_options[utils.add_cls_prefix("platforms")] = [platform]
@@ -98,6 +101,7 @@
     "//command_line_option:Android configuration distinguisher",
     "//command_line_option:android_compiler",
     "//command_line_option:android_platforms",
+    _ANDROID_PLATFORMS_SETTING,
     "//command_line_option:compiler",
     "//command_line_option:dynamic_mode",
     "//command_line_option:platforms",
@@ -108,6 +112,7 @@
     "//command_line_option:Android configuration distinguisher",
     "//command_line_option:android_compiler",
     "//command_line_option:android_platforms",
+    _ANDROID_PLATFORMS_SETTING,
     "//command_line_option:compiler",
     "//command_line_option:dynamic_mode",
     "//command_line_option:platforms",
diff --git a/rules/utils.bzl b/rules/utils.bzl
index d0f5b55..8a72620 100644
--- a/rules/utils.bzl
+++ b/rules/utils.bzl
@@ -424,6 +424,8 @@
 def get_android_sdk(ctx):
     return ctx.toolchains[ANDROID_SDK_TOOLCHAIN_TYPE].android_sdk_info
 
+_ANDROID_PLATFORMS_SETTING = "//flags:android_platforms"
+
 # Add command line setting prefix
 def _add_cls_prefix(name):
     return "//command_line_option:" + name
@@ -432,6 +434,13 @@
 def _get_cls(settings, name, default = None):
     return settings.get(_add_cls_prefix(name), default)
 
+# Get android_platforms setting either from Starlark flag or native command_line_option
+def _get_android_platforms(settings):
+    starlark_val = settings.get(_ANDROID_PLATFORMS_SETTING)
+    if starlark_val != None and len(starlark_val) > 0:
+        return [Label(p) if type(p) == "string" else p for p in starlark_val]
+    return _get_cls(settings, "android_platforms")
+
 def _get_compilation_mode(ctx):
     """Retrieves the compilation mode from the context.
 
@@ -465,6 +474,8 @@
     list_or_depset_to_list = _list_or_depset_to_list,
     add_cls_prefix = _add_cls_prefix,
     get_cls = _get_cls,
+    get_android_platforms = _get_android_platforms,
+    ANDROID_PLATFORMS_SETTING = _ANDROID_PLATFORMS_SETTING,
 )
 
 log = struct(
diff --git a/test/rules/android_binary/test.bzl b/test/rules/android_binary/test.bzl
index 35439d0..e26438f 100644
--- a/test/rules/android_binary/test.bzl
+++ b/test/rules/android_binary/test.bzl
@@ -65,6 +65,9 @@
             "//test/rules/android_binary:fake_arm64-v8a_toolchain",
             "//test/rules/android_binary:fake_armeabi-v7a_toolchain",
         ],
-        "//command_line_option:android_platforms": "@@//:arm64-v8a,@@//:armeabi-v7a",
+        "//command_line_option:android_platforms": [
+            "@@//:arm64-v8a",
+            "@@//:armeabi-v7a",
+        ],
     },
 )