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

Commit 626434f0 authored by Seigo Nonaka's avatar Seigo Nonaka Committed by Android (Google) Code Review
Browse files

Merge "Put updatable font failure fix behind the flag" into main

parents e9edc671 815b2114
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -160,3 +160,14 @@ flag {
  description: "Feature flag for showing error message when user tries stylus handwriting on a text field which doesn't support it"
  bug: "297962571"
}

flag {
  name: "fix_font_update_failure"
  namespace: "text"
  description: "There was a bug of updating system font from Android 13 to 14. This flag for fixing the migration failure."
  is_fixed_read_only: true
  bug: "331717791"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}
+37 −24
Original line number Diff line number Diff line
@@ -196,7 +196,12 @@ final class UpdatableFontDir {
                File signatureFile = new File(dir, FONT_SIGNATURE_FILE);
                if (!signatureFile.exists()) {
                    Slog.i(TAG, "The signature file is missing.");
                    if (com.android.text.flags.Flags.fixFontUpdateFailure()) {
                        return;
                    } else {
                        FileUtils.deleteContentsAndDir(dir);
                        continue;
                    }
                }
                byte[] signature;
                try {
@@ -221,12 +226,17 @@ final class UpdatableFontDir {

                FontFileInfo fontFileInfo = validateFontFile(fontFile, signature);
                if (fontConfig == null) {
                    if (com.android.text.flags.Flags.fixFontUpdateFailure()) {
                        // Use preinstalled font config for checking revision number.
                        fontConfig = mConfigSupplier.apply(Collections.emptyMap());
                    } else {
                        fontConfig = getSystemFontConfig();
                    }
                }
                addFileToMapIfSameOrNewer(fontFileInfo, fontConfig, true /* deleteOldFile */);
            }

            if (com.android.text.flags.Flags.fixFontUpdateFailure()) {
                // Treat as error if post script name of font family was not installed.
                for (int i = 0; i < config.fontFamilies.size(); ++i) {
                    FontUpdateRequest.Family family = config.fontFamilies.get(i);
@@ -250,6 +260,7 @@ final class UpdatableFontDir {
                        return;
                    }
                }
            }

            success = true;
        } catch (Throwable t) {
@@ -262,10 +273,12 @@ final class UpdatableFontDir {
                mFontFileInfoMap.clear();
                mLastModifiedMillis = 0;
                FileUtils.deleteContents(mFilesDir);
                if (com.android.text.flags.Flags.fixFontUpdateFailure()) {
                    mConfigFile.delete();
                }
            }
        }
    }

    /**
     * Applies multiple {@link FontUpdateRequest}s in transaction.
+33 −0
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ import android.graphics.fonts.SystemFonts;
import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.system.Os;
import android.text.FontConfig;
import android.util.Xml;
@@ -38,8 +41,11 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.text.flags.Flags;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.xmlpull.v1.XmlPullParser;
@@ -69,6 +75,9 @@ public final class UpdatableFontDirTest {

    private static final String LEGACY_FONTS_XML = "/system/etc/fonts.xml";

    @Rule
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();

    /**
     * A {@link UpdatableFontDir.FontFileParser} for testing. Instead of using real font files,
     * this test uses fake font files. A fake font file has its PostScript naem and revision as the
@@ -1097,6 +1106,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1116,6 +1126,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureMissingCase_fontFamilyInstalled_fontInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1);
@@ -1135,6 +1146,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureMissingCase_fontFileInstalled_fontFamilyInstallLater() {
        // Install font file, foo.ttf and bar.ttf
        installTestFontFile(2 /* numFonts */, 1 /* version */);
@@ -1154,6 +1166,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureMissingCase_fontFileInstalled_fontFileInstallLater() {
        // Install font file, foo.ttf and bar.ttf
        installTestFontFile(2 /* numFonts */, 1 /* version */);
@@ -1173,6 +1186,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1192,6 +1206,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureAllMissingCase_fontFamilyInstalled_fontInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1211,6 +1226,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1230,6 +1246,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void signatureAllMissingCase_fontFileInstalled_fontFileInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1249,6 +1266,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1268,6 +1286,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontMissingCase_fontFamilyInstalled_fontInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1);
@@ -1287,6 +1306,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontMissingCase_fontFileInstalled_fontFamilyInstallLater() {
        // Install font file, foo.ttf and bar.ttf
        installTestFontFile(2 /* numFonts */, 1 /* version */);
@@ -1306,6 +1326,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontMissingCase_fontFileInstalled_fontFileInstallLater() {
        // Install font file, foo.ttf and bar.ttf
        installTestFontFile(2 /* numFonts */, 1 /* version */);
@@ -1325,6 +1346,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1344,6 +1366,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontAllMissingCase_fontFamilyInstalled_fontInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1363,6 +1386,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1382,6 +1406,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontAllMissingCase_fontFileInstalled_fontFileInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1401,6 +1426,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontDirAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1420,6 +1446,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontDirAllMissingCase_fontFamilyInstalled_fontInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1439,6 +1466,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontDirAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1458,6 +1486,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void fontDirAllMissingCase_fontFileInstalled_fontFileInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1477,6 +1506,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void dirContentAllMissingCase_fontFamilyInstalled_fontFamilyInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1497,6 +1527,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void dirContentAllMissingCase_fontFamilyInstalled_fontInstallLater() {
        // Install font families, foo.ttf, bar.ttf.
        installTestFontFamilies(1 /* version */);
@@ -1517,6 +1548,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void dirContentAllMissingCase_fontFileInstalled_fontFamilyInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);
@@ -1537,6 +1569,7 @@ public final class UpdatableFontDirTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_FIX_FONT_UPDATE_FAILURE)
    public void dirContentAllMissingCase_fontFileInstalled_fontFileInstallLater() {
        // Install font file, foo.ttf
        installTestFontFile(1 /* numFonts */, 1 /* version */);