summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/jni/fonts/Font.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/libs/hwui/jni/fonts/Font.cpp b/libs/hwui/jni/fonts/Font.cpp
index 5a972f56ea87..bd3b7c93466c 100644
--- a/libs/hwui/jni/fonts/Font.cpp
+++ b/libs/hwui/jni/fonts/Font.cpp
@@ -35,6 +35,7 @@
#include <minikin/FontFamily.h>
#include <minikin/FontFileParser.h>
#include <minikin/LocaleList.h>
+#include <minikin/SystemFonts.h>
#include <ui/FatVector.h>
#include <memory>
@@ -282,6 +283,22 @@ static jint Font_getSourceId(CRITICAL_JNI_PARAMS_COMMA jlong fontPtr) {
return font->font->typeface()->GetSourceId();
}
+static jlongArray Font_getAvailableFontSet(JNIEnv* env, jobject) {
+ std::vector<jlong> refArray;
+ minikin::SystemFonts::getFontSet(
+ [&refArray](const std::vector<std::shared_ptr<minikin::Font>>& fontSet) {
+ refArray.reserve(fontSet.size());
+ for (const auto& font : fontSet) {
+ std::shared_ptr<minikin::Font> fontRef = font;
+ refArray.push_back(
+ reinterpret_cast<jlong>(new FontWrapper(std::move(fontRef))));
+ }
+ });
+ jlongArray r = env->NewLongArray(refArray.size());
+ env->SetLongArrayRegion(r, 0, refArray.size(), refArray.data());
+ return r;
+}
+
// Fast Native
static jlong FontFileUtil_getFontRevision(JNIEnv* env, jobject, jobject buffer, jint index) {
NPE_CHECK_RETURN_ZERO(env, buffer);
@@ -373,6 +390,9 @@ static const JNINativeMethod gFontMethods[] = {
{"nGetAxisCount", "(J)I", (void*)Font_getAxisCount},
{"nGetAxisInfo", "(JI)J", (void*)Font_getAxisInfo},
{"nGetSourceId", "(J)I", (void*)Font_getSourceId},
+
+ // System font accessors
+ {"nGetAvailableFontSet", "()[J", (void*)Font_getAvailableFontSet},
};
static const JNINativeMethod gFontFileUtilMethods[] = {