Merge "Migrated MultiSimSettingController"
diff --git a/Android.bp b/Android.bp
index 0c9b82e..62d2632 100644
--- a/Android.bp
+++ b/Android.bp
@@ -506,7 +506,7 @@
     "--hide Todo " +
     "--hide Typo " +
     "--hide UnavailableSymbol " +
-    "--manifest $(location core/res/AndroidManifest.xml) "
+    "--manifest $(location :frameworks-base-core-AndroidManifest.xml) "
 
 packages_to_document = [
     "android",
@@ -543,7 +543,7 @@
     sdk_version: "none",
     system_modules: "none",
     java_version: "1.8",
-    arg_files: ["core/res/AndroidManifest.xml"],
+    arg_files: [":frameworks-base-core-AndroidManifest.xml"],
     aidl: {
         local_include_dirs: [
             "media/aidl",
@@ -619,12 +619,3 @@
     "ProtoLibraries.bp",
     "TestProtoLibraries.bp",
 ]
-
-java_api_contribution {
-    name: "api-stubs-docs-non-updatable-public-stubs",
-    api_surface: "public",
-    api_file: "core/api/current.txt",
-    visibility: [
-        "//build/orchestrator/apis",
-    ],
-}
diff --git a/StubLibraries.bp b/StubLibraries.bp
index 38413c2..b005591 100644
--- a/StubLibraries.bp
+++ b/StubLibraries.bp
@@ -36,8 +36,8 @@
     args: metalava_framework_docs_args,
     check_api: {
         current: {
-            api_file: "core/api/current.txt",
-            removed_api_file: "core/api/removed.txt",
+            api_file: ":non-updatable-current.txt",
+            removed_api_file: ":non-updatable-removed.txt",
         },
         last_released: {
             api_file: ":android-non-updatable.api.public.latest",
@@ -88,8 +88,8 @@
     args: metalava_framework_docs_args + priv_apps,
     check_api: {
         current: {
-            api_file: "core/api/system-current.txt",
-            removed_api_file: "core/api/system-removed.txt",
+            api_file: ":non-updatable-system-current.txt",
+            removed_api_file: ":non-updatable-system-removed.txt",
         },
         last_released: {
             api_file: ":android-non-updatable.api.system.latest",
@@ -99,7 +99,7 @@
         api_lint: {
             enabled: true,
             new_since: ":android.api.system.latest",
-            baseline_file: "core/api/system-lint-baseline.txt",
+            baseline_file: ":non-updatable-system-lint-baseline.txt",
         },
     },
     dists: [
@@ -127,12 +127,12 @@
     args: metalava_framework_docs_args + test + priv_apps_in_stubs,
     check_api: {
         current: {
-            api_file: "core/api/test-current.txt",
-            removed_api_file: "core/api/test-removed.txt",
+            api_file: ":non-updatable-test-current.txt",
+            removed_api_file: ":non-updatable-test-removed.txt",
         },
         api_lint: {
             enabled: true,
-            baseline_file: "core/api/test-lint-baseline.txt",
+            baseline_file: ":non-updatable-test-lint-baseline.txt",
         },
     },
     dists: [
@@ -172,8 +172,8 @@
     args: metalava_framework_docs_args + priv_apps_in_stubs + module_libs,
     check_api: {
         current: {
-            api_file: "core/api/module-lib-current.txt",
-            removed_api_file: "core/api/module-lib-removed.txt",
+            api_file: ":non-updatable-module-lib-current.txt",
+            removed_api_file: ":non-updatable-module-lib-removed.txt",
         },
         last_released: {
             api_file: ":android-non-updatable.api.module-lib.latest",
@@ -183,7 +183,7 @@
         api_lint: {
             enabled: true,
             new_since: ":android.api.module-lib.latest",
-            baseline_file: "core/api/module-lib-lint-baseline.txt",
+            baseline_file: ":non-updatable-module-lib-lint-baseline.txt",
         },
     },
     dists: [
@@ -364,15 +364,15 @@
 
 java_library {
     name: "android_system_server_stubs_current",
-    defaults: ["android_stubs_dists_default"],
+    defaults: [
+        "android.jar_defaults",
+        "android_stubs_dists_default",
+    ],
     srcs: [":services-non-updatable-stubs"],
     installable: false,
     static_libs: [
         "android_module_lib_stubs_current",
     ],
-    sdk_version: "none",
-    system_modules: "none",
-    java_version: "1.8",
     dist: {
         dir: "apistubs/android/system-server",
     },
@@ -575,20 +575,7 @@
 
 droidstubs {
     name: "hwbinder-stubs-docs",
-    srcs: [
-        "core/java/android/os/HidlSupport.java",
-        "core/java/android/os/HidlMemory.java",
-        "core/java/android/os/HwBinder.java",
-        "core/java/android/os/HwBlob.java",
-        "core/java/android/os/HwParcel.java",
-        "core/java/android/os/IHwBinder.java",
-        "core/java/android/os/IHwInterface.java",
-        "core/java/android/os/DeadObjectException.java",
-        "core/java/android/os/DeadSystemException.java",
-        "core/java/android/os/NativeHandle.java",
-        "core/java/android/os/RemoteException.java",
-        "core/java/android/util/AndroidException.java",
-    ],
+    srcs: [":hwbinder-stubs-srcs"],
     libs: ["framework-annotations-lib"],
     installable: false,
     sdk_version: "core_platform",
@@ -610,12 +597,3 @@
     ],
     visibility: ["//visibility:public"],
 }
-
-java_api_contribution {
-    name: "frameworks-base-core-api-module-lib-stubs",
-    api_surface: "module-lib",
-    api_file: "core/api/module-lib-current.txt",
-    visibility: [
-        "//build/orchestrator/apis",
-    ],
-}
diff --git a/api/Android.bp b/api/Android.bp
index a2b8038..20528f2d 100644
--- a/api/Android.bp
+++ b/api/Android.bp
@@ -31,10 +31,12 @@
         "blueprint",
         "soong",
         "soong-android",
+        "soong-bp2build",
         "soong-genrule",
         "soong-java",
     ],
     srcs: ["api.go"],
+    testSrcs: ["api_test.go"],
     pluginFor: ["soong_build"],
 }
 
diff --git a/api/api.go b/api/api.go
index 077ab96..25d9728 100644
--- a/api/api.go
+++ b/api/api.go
@@ -20,6 +20,7 @@
 	"github.com/google/blueprint/proptools"
 
 	"android/soong/android"
+	"android/soong/bazel"
 	"android/soong/genrule"
 	"android/soong/java"
 )
@@ -30,6 +31,7 @@
 const virtualization = "framework-virtualization"
 
 var core_libraries_modules = []string{art, conscrypt, i18n}
+
 // List of modules that are not yet updatable, and hence they can still compile
 // against hidden APIs. These modules are filtered out when building the
 // updatable-framework-module-impl (because updatable-framework-module-impl is
@@ -59,6 +61,7 @@
 
 type CombinedApis struct {
 	android.ModuleBase
+	android.BazelModuleBase
 
 	properties CombinedApisProperties
 }
@@ -99,6 +102,19 @@
 	Visibility []string
 }
 
+type Bazel_module struct {
+	Bp2build_available *bool
+}
+type bazelProperties struct {
+	*Bazel_module
+}
+
+var bp2buildNotAvailable = bazelProperties{
+	&Bazel_module{
+		Bp2build_available: proptools.BoolPtr(false),
+	},
+}
+
 // Struct to pass parameters for the various merged [current|removed].txt file modules we create.
 type MergedTxtDefinition struct {
 	// "current.txt" or "removed.txt"
@@ -144,7 +160,7 @@
 		},
 	}
 	props.Visibility = []string{"//visibility:public"}
-	ctx.CreateModule(genrule.GenRuleFactory, &props)
+	ctx.CreateModule(genrule.GenRuleFactory, &props, &bp2buildNotAvailable)
 }
 
 func createMergedAnnotationsFilegroups(ctx android.LoadHookContext, modules, system_server_modules []string) {
@@ -174,7 +190,7 @@
 		props := fgProps{}
 		props.Name = proptools.StringPtr(i.name)
 		props.Srcs = createSrcs(i.modules, i.tag)
-		ctx.CreateModule(android.FileGroupFactory, &props)
+		ctx.CreateModule(android.FileGroupFactory, &props, &bp2buildNotAvailable)
 	}
 }
 
@@ -223,7 +239,7 @@
 		props.Tools = []string{"api_versions_trimmer"}
 		props.Cmd = proptools.StringPtr("$(location api_versions_trimmer) $(out) $(in)")
 		props.Dists = []android.Dist{{Targets: []string{"sdk"}}}
-		ctx.CreateModule(genrule.GenRuleFactory, &props)
+		ctx.CreateModule(genrule.GenRuleFactory, &props, &bp2buildNotAvailable)
 	}
 }
 
@@ -315,7 +331,7 @@
 	props.Name = proptools.StringPtr("all-modules-public-stubs-source")
 	props.Srcs = createSrcs(modules, "{.public.stubs.source}")
 	props.Visibility = []string{"//frameworks/base"}
-	ctx.CreateModule(android.FileGroupFactory, &props)
+	ctx.CreateModule(android.FileGroupFactory, &props, &bp2buildNotAvailable)
 }
 
 func createMergedTxts(ctx android.LoadHookContext, bootclasspath, system_server_classpath []string) {
@@ -389,9 +405,57 @@
 	module.AddProperties(&module.properties)
 	android.InitAndroidModule(module)
 	android.AddLoadHook(module, func(ctx android.LoadHookContext) { module.createInternalModules(ctx) })
+	android.InitBazelModule(module)
 	return module
 }
 
+type bazelCombinedApisAttributes struct {
+	Scope bazel.StringAttribute
+	Base  bazel.LabelAttribute
+	Deps  bazel.LabelListAttribute
+}
+
+// combined_apis bp2build converter
+func (a *CombinedApis) ConvertWithBp2build(ctx android.TopDownMutatorContext) {
+	basePrefix := "non-updatable"
+	scopeNames := []string{"public", "system", "module-lib", "system-server"}
+	scopeToSuffix := map[string]string{
+		"public":        "-current.txt",
+		"system":        "-system-current.txt",
+		"module-lib":    "-module-lib-current.txt",
+		"system-server": "-system-server-current.txt",
+	}
+
+	for _, scopeName := range scopeNames{
+		suffix := scopeToSuffix[scopeName]
+		name := a.Name() + suffix
+
+		var scope bazel.StringAttribute
+		scope.SetValue(scopeName)
+
+		var base bazel.LabelAttribute
+		base.SetValue(android.BazelLabelForModuleDepSingle(ctx, basePrefix+suffix))
+
+		var deps bazel.LabelListAttribute
+		classpath := a.properties.Bootclasspath
+		if scopeName == "system-server" {
+			classpath = a.properties.System_server_classpath
+		}
+		deps = bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, classpath))
+
+		attrs := bazelCombinedApisAttributes{
+			Scope: scope,
+			Base:  base,
+			Deps:  deps,
+		}
+		props := bazel.BazelTargetModuleProperties{
+			Rule_class:        "merged_txts",
+			Bzl_load_location: "//build/bazel/rules/java:merged_txts.bzl",
+		}
+		ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: name}, &attrs)
+	}
+}
+
 // Various utility methods below.
 
 // Creates an array of ":<m><tag>" for each m in <modules>.
diff --git a/api/api_test.go b/api/api_test.go
new file mode 100644
index 0000000..15b695c
--- /dev/null
+++ b/api/api_test.go
@@ -0,0 +1,68 @@
+// Copyright (C) 2023 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 api
+
+import (
+	"testing"
+
+	"android/soong/android"
+	"android/soong/bp2build"
+)
+
+func runCombinedApisTestCaseWithRegistrationCtxFunc(t *testing.T, tc bp2build.Bp2buildTestCase, registrationCtxFunc func(ctx android.RegistrationContext)) {
+	t.Helper()
+	(&tc).ModuleTypeUnderTest = "combined_apis"
+	(&tc).ModuleTypeUnderTestFactory = combinedApisModuleFactory
+	bp2build.RunBp2BuildTestCase(t, registrationCtxFunc, tc)
+}
+
+func runCombinedApisTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) {
+	t.Helper()
+	runCombinedApisTestCaseWithRegistrationCtxFunc(t, tc, func(ctx android.RegistrationContext) {})
+}
+
+func TestCombinedApisGeneral(t *testing.T) {
+	runCombinedApisTestCase(t, bp2build.Bp2buildTestCase{
+		Description: "combined_apis, general case",
+		Blueprint: `combined_apis {
+    name: "foo",
+    bootclasspath: ["bcp"],
+    system_server_classpath: ["ssc"],
+}
+`,
+		ExpectedBazelTargets: []string{
+			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-current.txt", bp2build.AttrNameToString{
+				"scope": `"public"`,
+				"base":  `":non-updatable-current.txt__BP2BUILD__MISSING__DEP"`,
+				"deps":  `[":bcp__BP2BUILD__MISSING__DEP"]`,
+			}),
+			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-system-current.txt", bp2build.AttrNameToString{
+				"scope": `"system"`,
+				"base":  `":non-updatable-system-current.txt__BP2BUILD__MISSING__DEP"`,
+				"deps":  `[":bcp__BP2BUILD__MISSING__DEP"]`,
+			}),
+			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-module-lib-current.txt", bp2build.AttrNameToString{
+				"scope": `"module-lib"`,
+				"base":  `":non-updatable-module-lib-current.txt__BP2BUILD__MISSING__DEP"`,
+				"deps":  `[":bcp__BP2BUILD__MISSING__DEP"]`,
+			}),
+			bp2build.MakeBazelTargetNoRestrictions("merged_txts", "foo-system-server-current.txt", bp2build.AttrNameToString{
+				"scope": `"system-server"`,
+				"base":  `":non-updatable-system-server-current.txt__BP2BUILD__MISSING__DEP"`,
+				"deps":  `[":ssc__BP2BUILD__MISSING__DEP"]`,
+			}),
+		},
+	})
+}
diff --git a/core/api/Android.bp b/core/api/Android.bp
index 114a957..71a2ca2 100644
--- a/core/api/Android.bp
+++ b/core/api/Android.bp
@@ -13,7 +13,10 @@
 // limitations under the License.
 
 package {
-    default_visibility: ["//visibility:private"],
+    default_visibility: [
+        "//frameworks/base",
+        "//frameworks/base/api",
+    ],
     // 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"
@@ -27,31 +30,33 @@
 filegroup {
     name: "non-updatable-current.txt",
     srcs: ["current.txt"],
-    visibility: ["//frameworks/base/api"],
 }
 
 filegroup {
     name: "non-updatable-removed.txt",
     srcs: ["removed.txt"],
-    visibility: ["//frameworks/base/api"],
 }
 
 filegroup {
     name: "non-updatable-system-current.txt",
     srcs: ["system-current.txt"],
-    visibility: ["//frameworks/base/api"],
 }
 
 filegroup {
     name: "non-updatable-system-removed.txt",
     srcs: ["system-removed.txt"],
-    visibility: ["//frameworks/base/api"],
+}
+
+filegroup {
+    name: "non-updatable-system-lint-baseline.txt",
+    srcs: ["system-lint-baseline.txt"],
 }
 
 filegroup {
     name: "non-updatable-module-lib-current.txt",
     srcs: ["module-lib-current.txt"],
     visibility: [
+        "//frameworks/base",
         "//frameworks/base/api",
         "//cts/tests/signature/api",
     ],
@@ -61,7 +66,46 @@
     name: "non-updatable-module-lib-removed.txt",
     srcs: ["module-lib-removed.txt"],
     visibility: [
+        "//frameworks/base",
         "//frameworks/base/api",
         "//cts/tests/signature/api",
     ],
 }
+
+filegroup {
+    name: "non-updatable-module-lib-lint-baseline.txt",
+    srcs: ["module-lib-lint-baseline.txt"],
+}
+
+filegroup {
+    name: "non-updatable-test-current.txt",
+    srcs: ["test-current.txt"],
+}
+
+filegroup {
+    name: "non-updatable-test-removed.txt",
+    srcs: ["test-removed.txt"],
+}
+
+filegroup {
+    name: "non-updatable-test-lint-baseline.txt",
+    srcs: ["test-lint-baseline.txt"],
+}
+
+java_api_contribution {
+    name: "api-stubs-docs-non-updatable-public-stubs",
+    api_surface: "public",
+    api_file: "current.txt",
+    visibility: [
+        "//build/orchestrator/apis",
+    ],
+}
+
+java_api_contribution {
+    name: "frameworks-base-core-api-module-lib-stubs",
+    api_surface: "module-lib",
+    api_file: "module-lib-current.txt",
+    visibility: [
+        "//build/orchestrator/apis",
+    ],
+}
diff --git a/core/java/Android.bp b/core/java/Android.bp
index 3921408..7df3d1e 100644
--- a/core/java/Android.bp
+++ b/core/java/Android.bp
@@ -293,6 +293,28 @@
     ],
 }
 
+filegroup {
+    name: "hwbinder-stubs-srcs",
+    srcs: [
+        "android/os/HidlSupport.java",
+        "android/os/HidlMemory.java",
+        "android/os/HwBinder.java",
+        "android/os/HwBlob.java",
+        "android/os/HwParcel.java",
+        "android/os/IHwBinder.java",
+        "android/os/IHwInterface.java",
+        "android/os/DeadObjectException.java",
+        "android/os/DeadSystemException.java",
+        "android/os/NativeHandle.java",
+        "android/os/RemoteException.java",
+        "android/util/AndroidException.java",
+    ],
+    visibility: [
+        "//frameworks/base",
+        "//frameworks/base/api",
+    ],
+}
+
 cc_defaults {
     name: "incremental_default",
     cflags: [
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp
index 4bc567a..ad54004 100644
--- a/core/jni/android_view_InputEventSender.cpp
+++ b/core/jni/android_view_InputEventSender.cpp
@@ -20,20 +20,21 @@
 
 #include <android_runtime/AndroidRuntime.h>
 #include <input/InputTransport.h>
+#include <inttypes.h>
 #include <log/log.h>
 #include <nativehelper/JNIHelp.h>
 #include <nativehelper/ScopedLocalRef.h>
 #include <utils/Looper.h>
+
+#include <optional>
+#include <unordered_map>
+
 #include "android_os_MessageQueue.h"
 #include "android_view_InputChannel.h"
 #include "android_view_KeyEvent.h"
 #include "android_view_MotionEvent.h"
 #include "core_jni_helpers.h"
 
-#include <inttypes.h>
-#include <unordered_map>
-
-
 using android::base::Result;
 
 namespace android {
@@ -67,7 +68,7 @@
     jobject mSenderWeakGlobal;
     InputPublisher mInputPublisher;
     sp<MessageQueue> mMessageQueue;
-    std::unordered_map<uint32_t, uint32_t> mPublishedSeqMap;
+    std::unordered_map<uint32_t, std::optional<uint32_t>> mPublishedSeqMap;
 
     uint32_t mNextPublishedSeq;
 
@@ -165,8 +166,14 @@
                     getInputChannelName().c_str(), status);
             return status;
         }
+        // mPublishedSeqMap tracks all sequences published from this sender. Only the last
+        // sequence number is used to signal this motion event is finished.
+        if (i == event->getHistorySize()) {
+            mPublishedSeqMap.emplace(publishedSeq, seq);
+        } else {
+            mPublishedSeqMap.emplace(publishedSeq, std::nullopt);
+        }
     }
-    mPublishedSeqMap.emplace(publishedSeq, seq);
     return OK;
 }
 
@@ -277,8 +284,16 @@
         // does something wrong and sends bad data. Just ignore and process other events.
         return true;
     }
-    const uint32_t seq = it->second;
+
+    const std::optional<uint32_t> seqOptional = it->second;
     mPublishedSeqMap.erase(it);
+    // If this optional does not have a value, it means we are processing an event that had history
+    // and was split. There are more events coming, so we can't call 'dispatchInputEventFinished'
+    // yet. The final split event will have a valid sequence number.
+    if (!seqOptional.has_value()) {
+        return true;
+    }
+    const uint32_t seq = seqOptional.value();
 
     if (kDebugDispatchCycle) {
         ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, pendingEvents=%zu.",
diff --git a/core/res/Android.bp b/core/res/Android.bp
index 93ce783..42c95d6 100644
--- a/core/res/Android.bp
+++ b/core/res/Android.bp
@@ -172,3 +172,12 @@
         " > $(out)",
     tools: ["xmllint"],
 }
+
+filegroup {
+    name: "frameworks-base-core-AndroidManifest.xml",
+    srcs: ["AndroidManifest.xml"],
+    visibility: [
+        "//frameworks/base",
+        "//frameworks/base/api",
+    ],
+}
diff --git a/libs/hwui/jni/fonts/Font.cpp b/libs/hwui/jni/fonts/Font.cpp
index 09be630..d78df3d 100644
--- a/libs/hwui/jni/fonts/Font.cpp
+++ b/libs/hwui/jni/fonts/Font.cpp
@@ -105,8 +105,9 @@
         std::move(data), std::string_view(fontPath.c_str(), fontPath.size()),
         fontPtr, fontSize, ttcIndex, builder->axes);
     if (minikinFont == nullptr) {
-        jniThrowException(env, "java/lang/IllegalArgumentException",
-                          "Failed to create internal object. maybe invalid font data.");
+        jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
+                             "Failed to create internal object. maybe invalid font data. filePath %s",
+                             fontPath.c_str());
         return 0;
     }
     uint32_t localeListId = minikin::registerLocaleList(langTagStr.c_str());