Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4131277b authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Remove SystemFonts#getSystemFallback and use Typeface instead for fallback

Bug: 173752727
Test: atest CtsTextTestCases
Test: atest CtsGraphicsTestCases
Test: atest TextViewTests
Test: atest TypefaceSystemFallbackTest
Test: atest TypefaceTest
Change-Id: I1c242ef6f651876e83d72fc5620035805fed2475
parent 53156a94
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -808,18 +808,16 @@ public class Typeface {
         */
        public @NonNull Typeface build() {
            final int userFallbackSize = mFamilies.size();
            final FontFamily[] fallback = SystemFonts.getSystemFallback(mFallbackName);
            final long[] ptrArray = new long[fallback.length + userFallbackSize];
            final Typeface fallbackTypeface = getSystemDefaultTypeface(mFallbackName);
            final long[] ptrArray = new long[userFallbackSize];
            for (int i = 0; i < userFallbackSize; ++i) {
                ptrArray[i] = mFamilies.get(i).getNativePtr();
            }
            for (int i = 0; i < fallback.length; ++i) {
                ptrArray[i + userFallbackSize] = fallback[i].getNativePtr();
            }
            final int weight = mStyle == null ? 400 : mStyle.getWeight();
            final int italic =
                    (mStyle == null || mStyle.getSlant() == FontStyle.FONT_SLANT_UPRIGHT) ?  0 : 1;
            return new Typeface(nativeCreateFromArray(ptrArray, weight, italic));
            return new Typeface(nativeCreateFromArray(
                    ptrArray, fallbackTypeface.native_instance, weight, italic));
        }
    }

@@ -1056,7 +1054,8 @@ public class Typeface {
            ptrArray[i] = families[i].mNativePtr;
        }
        return new Typeface(nativeCreateFromArray(
                ptrArray, RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE));
                ptrArray, 0, RESOLVE_BY_FONT_TABLE,
                RESOLVE_BY_FONT_TABLE));
    }

    /**
@@ -1069,7 +1068,7 @@ public class Typeface {
        for (int i = 0; i < families.length; ++i) {
            ptrArray[i] = families[i].getNativePtr();
        }
        return new Typeface(nativeCreateFromArray(ptrArray,
        return new Typeface(nativeCreateFromArray(ptrArray, 0,
                  RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE));
    }

@@ -1104,15 +1103,13 @@ public class Typeface {
    @Deprecated
    private static Typeface createFromFamiliesWithDefault(android.graphics.FontFamily[] families,
                String fallbackName, int weight, int italic) {
        android.graphics.fonts.FontFamily[] fallback = SystemFonts.getSystemFallback(fallbackName);
        long[] ptrArray = new long[families.length + fallback.length];
        final Typeface fallbackTypeface = getSystemDefaultTypeface(fallbackName);
        long[] ptrArray = new long[families.length];
        for (int i = 0; i < families.length; i++) {
            ptrArray[i] = families[i].mNativePtr;
        }
        for (int i = 0; i < fallback.length; i++) {
            ptrArray[i + families.length] = fallback[i].getNativePtr();
        }
        return new Typeface(nativeCreateFromArray(ptrArray, weight, italic));
        return new Typeface(nativeCreateFromArray(
                ptrArray, fallbackTypeface.native_instance, weight, italic));
    }

    // don't allow clients to call this directly
@@ -1350,7 +1347,8 @@ public class Typeface {
    @UnsupportedAppUsage
    private static native long nativeCreateWeightAlias(long native_instance, int weight);
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private static native long nativeCreateFromArray(long[] familyArray, int weight, int italic);
    private static native long nativeCreateFromArray(
            long[] familyArray, long fallbackTypeface, int weight, int italic);
    private static native int[] nativeGetSupportedAxes(long native_instance);

    @CriticalNative
+0 −13
Original line number Diff line number Diff line
@@ -66,19 +66,6 @@ public final class SystemFonts {
        return set;
    }

    /**
     * Returns fallback list for the given family name.
     *
     * If no fallback found for the given family name, returns fallback for the default family.
     *
     * @param familyName family name, e.g. "serif"
     * @hide
     */
    public static @NonNull FontFamily[] getSystemFallback(@Nullable String familyName) {
        final FontFamily[] families = sSystemFallbackMap.get(familyName);
        return families == null ? sSystemFallbackMap.get(DEFAULT_FAMILY) : families;
    }

    /**
     * Returns raw system fallback map.
     *
+20 −6
Original line number Diff line number Diff line
@@ -94,14 +94,28 @@ static jint Typeface_getWeight(CRITICAL_JNI_PARAMS_COMMA jlong faceHandle) {
}

static jlong Typeface_createFromArray(JNIEnv *env, jobject, jlongArray familyArray,
        int weight, int italic) {
                                      jlong fallbackPtr, int weight, int italic) {
    ScopedLongArrayRO families(env, familyArray);
    std::vector<std::shared_ptr<minikin::FontFamily>> familyVec;
    Typeface* typeface = (fallbackPtr == 0) ? nullptr : toTypeface(fallbackPtr);
    if (typeface != nullptr) {
        const std::vector<std::shared_ptr<minikin::FontFamily>>& fallbackFamilies =
            toTypeface(fallbackPtr)->fFontCollection->getFamilies();
        familyVec.reserve(families.size() + fallbackFamilies.size());
        for (size_t i = 0; i < families.size(); i++) {
            FontFamilyWrapper* family = reinterpret_cast<FontFamilyWrapper*>(families[i]);
            familyVec.emplace_back(family->family);
        }
        for (size_t i = 0; i < fallbackFamilies.size(); i++) {
            familyVec.emplace_back(fallbackFamilies[i]);
        }
    } else {
        familyVec.reserve(families.size());
        for (size_t i = 0; i < families.size(); i++) {
            FontFamilyWrapper* family = reinterpret_cast<FontFamilyWrapper*>(families[i]);
            familyVec.emplace_back(family->family);
        }
    }
    return toJLong(Typeface::createFromFamilies(std::move(familyVec), weight, italic));
}

@@ -243,7 +257,7 @@ static const JNINativeMethod gTypefaceMethods[] = {
    { "nativeGetReleaseFunc",     "()J",  (void*)Typeface_getReleaseFunc },
    { "nativeGetStyle",           "(J)I",  (void*)Typeface_getStyle },
    { "nativeGetWeight",      "(J)I",  (void*)Typeface_getWeight },
    { "nativeCreateFromArray",    "([JII)J",
    { "nativeCreateFromArray",    "([JJII)J",
                                           (void*)Typeface_createFromArray },
    { "nativeSetDefault",         "(J)V",   (void*)Typeface_setDefault },
    { "nativeGetSupportedAxes",   "(J)[I",  (void*)Typeface_getSupportedAxes },