Support variable font family

A variable font family sets the requested weight and italic style
axes before passing down to the rendering pipeline.
Also, add more accessors to the PositionedGlyph APIs for knowing
fake bold/italic information as well as wght/ital overrides.

Bug: 281769620
Test: minikin_tests
Test: atest CtsTextTestCases:android.text.cts.VariableFamilyTest

Change-Id: I4a4770bf185a1c21113a293fe3d831573411ec26
diff --git a/libs/hwui/jni/text/TextShaper.cpp b/libs/hwui/jni/text/TextShaper.cpp
index d69a47c..8c377b9 100644
--- a/libs/hwui/jni/text/TextShaper.cpp
+++ b/libs/hwui/jni/text/TextShaper.cpp
@@ -148,6 +148,30 @@
 }
 
 // CriticalNative
+static jboolean TextShaper_Result_getFakeBold(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).isFakeBold();
+}
+
+// CriticalNative
+static jboolean TextShaper_Result_getFakeItalic(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).isFakeItalic();
+}
+
+// CriticalNative
+static jfloat TextShaper_Result_getWeightOverride(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).wghtAdjustment();
+}
+
+// CriticalNative
+static jfloat TextShaper_Result_getItalicOverride(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).italAdjustment();
+}
+
+// CriticalNative
 static jlong TextShaper_Result_getFont(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
     const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
     std::shared_ptr<minikin::Font> fontRef = layout->layout.getFontRef(i);
@@ -185,15 +209,19 @@
 };
 
 static const JNINativeMethod gResultMethods[] = {
-    { "nGetGlyphCount", "(J)I", (void*)TextShaper_Result_getGlyphCount },
-    { "nGetTotalAdvance", "(J)F", (void*)TextShaper_Result_getTotalAdvance },
-    { "nGetAscent", "(J)F", (void*)TextShaper_Result_getAscent },
-    { "nGetDescent", "(J)F", (void*)TextShaper_Result_getDescent },
-    { "nGetGlyphId", "(JI)I", (void*)TextShaper_Result_getGlyphId },
-    { "nGetX", "(JI)F", (void*)TextShaper_Result_getX },
-    { "nGetY", "(JI)F", (void*)TextShaper_Result_getY },
-    { "nGetFont", "(JI)J", (void*)TextShaper_Result_getFont },
-    { "nReleaseFunc", "()J", (void*)TextShaper_Result_nReleaseFunc },
+        {"nGetGlyphCount", "(J)I", (void*)TextShaper_Result_getGlyphCount},
+        {"nGetTotalAdvance", "(J)F", (void*)TextShaper_Result_getTotalAdvance},
+        {"nGetAscent", "(J)F", (void*)TextShaper_Result_getAscent},
+        {"nGetDescent", "(J)F", (void*)TextShaper_Result_getDescent},
+        {"nGetGlyphId", "(JI)I", (void*)TextShaper_Result_getGlyphId},
+        {"nGetX", "(JI)F", (void*)TextShaper_Result_getX},
+        {"nGetY", "(JI)F", (void*)TextShaper_Result_getY},
+        {"nGetFont", "(JI)J", (void*)TextShaper_Result_getFont},
+        {"nGetFakeBold", "(JI)Z", (void*)TextShaper_Result_getFakeBold},
+        {"nGetFakeItalic", "(JI)Z", (void*)TextShaper_Result_getFakeItalic},
+        {"nGetWeightOverride", "(JI)F", (void*)TextShaper_Result_getWeightOverride},
+        {"nGetItalicOverride", "(JI)F", (void*)TextShaper_Result_getItalicOverride},
+        {"nReleaseFunc", "()J", (void*)TextShaper_Result_nReleaseFunc},
 };
 
 int register_android_graphics_text_TextShaper(JNIEnv* env) {