Fixes crashes by making native library thread-safe, makes Annotate calls much faster by
re-using tokens, fixes default values in enums in FlatBuffer schema.

Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationManagerTest
Test: bit CtsViewTestCases:android.view.textclassifier.cts.TextClassificationManagerTest

Bug: 74193987
Bug: 68239358
Change-Id: Ic5ca42b628280bece59d31203748072084ac452c
(cherry picked from commit 2191547d7109587d73077f9d4818c691f7d7dafb)
Merged-In: Ic5ca42b628280bece59d31203748072084ac452c
diff --git a/cached-features_test.cc b/cached-features_test.cc
index 9566a8d..f064a63 100644
--- a/cached-features_test.cc
+++ b/cached-features_test.cc
@@ -37,22 +37,15 @@
   return ElementsAreArray(matchers);
 }
 
-// EmbeddingExecutor that always returns features based on
-class FakeEmbeddingExecutor : public EmbeddingExecutor {
- public:
-  bool AddEmbedding(const TensorView<int>& sparse_features, float* dest,
-                    int dest_size) override {
-    TC_CHECK_GE(dest_size, 2);
-    EXPECT_EQ(sparse_features.size(), 1);
-
-    dest[0] = sparse_features.data()[0] * 11.0f;
-    dest[1] = -sparse_features.data()[0] * 11.0f;
-    return true;
+std::unique_ptr<std::vector<float>> MakeFeatures(int num_tokens) {
+  std::unique_ptr<std::vector<float>> features(new std::vector<float>());
+  for (int i = 1; i <= num_tokens; ++i) {
+    features->push_back(i * 11.0f);
+    features->push_back(-i * 11.0f);
+    features->push_back(i * 0.1f);
   }
-
- private:
-  std::vector<float> storage_;
-};
+  return features;
+}
 
 std::vector<float> GetCachedClickContextFeatures(
     const CachedFeatures& cached_features, int click_pos) {
@@ -78,25 +71,15 @@
   builder.Finish(CreateFeatureProcessorOptions(builder, &options));
   flatbuffers::DetachedBuffer options_fb = builder.Release();
 
-  std::vector<std::vector<int>> sparse_features(9);
-  for (int i = 0; i < sparse_features.size(); ++i) {
-    sparse_features[i].push_back(i + 1);
-  }
-  std::vector<std::vector<float>> dense_features(9);
-  for (int i = 0; i < dense_features.size(); ++i) {
-    dense_features[i].push_back((i + 1) * 0.1);
-  }
+  std::unique_ptr<std::vector<float>> features = MakeFeatures(9);
+  std::unique_ptr<std::vector<float>> padding_features(
+      new std::vector<float>{112233.0, -112233.0, 321.0});
 
-  std::vector<int> padding_sparse_features = {10203};
-  std::vector<float> padding_dense_features = {321.0};
-
-  FakeEmbeddingExecutor executor;
   const std::unique_ptr<CachedFeatures> cached_features =
       CachedFeatures::Create(
-          {3, 10}, sparse_features, dense_features, padding_sparse_features,
-          padding_dense_features,
+          {3, 10}, std::move(features), std::move(padding_features),
           flatbuffers::GetRoot<FeatureProcessorOptions>(options_fb.data()),
-          &executor, /*feature_vector_size=*/3);
+          /*feature_vector_size=*/3);
   ASSERT_TRUE(cached_features);
 
   EXPECT_THAT(GetCachedClickContextFeatures(*cached_features, 5),
@@ -129,25 +112,15 @@
   builder.Finish(CreateFeatureProcessorOptions(builder, &options));
   flatbuffers::DetachedBuffer options_fb = builder.Release();
 
-  std::vector<std::vector<int>> sparse_features(6);
-  for (int i = 0; i < sparse_features.size(); ++i) {
-    sparse_features[i].push_back(i + 1);
-  }
-  std::vector<std::vector<float>> dense_features(6);
-  for (int i = 0; i < dense_features.size(); ++i) {
-    dense_features[i].push_back((i + 1) * 0.1);
-  }
+  std::unique_ptr<std::vector<float>> features = MakeFeatures(9);
+  std::unique_ptr<std::vector<float>> padding_features(
+      new std::vector<float>{112233.0, -112233.0, 321.0});
 
-  std::vector<int> padding_sparse_features = {10203};
-  std::vector<float> padding_dense_features = {321.0};
-
-  FakeEmbeddingExecutor executor;
   const std::unique_ptr<CachedFeatures> cached_features =
       CachedFeatures::Create(
-          {3, 9}, sparse_features, dense_features, padding_sparse_features,
-          padding_dense_features,
+          {3, 9}, std::move(features), std::move(padding_features),
           flatbuffers::GetRoot<FeatureProcessorOptions>(options_fb.data()),
-          &executor, /*feature_vector_size=*/3);
+          /*feature_vector_size=*/3);
   ASSERT_TRUE(cached_features);
 
   EXPECT_THAT(