diff options
| author | 2021-04-22 03:59:40 +0000 | |
|---|---|---|
| committer | 2021-04-22 03:59:40 +0000 | |
| commit | 62e854c466dd14fad3abb82d9ad6f42c0bf5db2b (patch) | |
| tree | 5bca82364296b7452106303626c8d02c35938a4e | |
| parent | bf8262b57d006a9f0202c48ff40508524ffb2f57 (diff) | |
| parent | 679a824773aee8c4424787e9f36d10de1f984112 (diff) | |
Merge "Do not actually reboot the device in VTS test." into sc-dev
5 files changed, 46 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java index 7269a8f021f6..91581997849e 100644 --- a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java +++ b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java @@ -314,6 +314,10 @@ public final class FontManagerService extends IFontManager.Stub { } } + /* package */ void restart() { + initialize(); + } + /* package */ Map<String, File> getFontFileMap() { if (mUpdatableFontDir == null) { return Collections.emptyMap(); diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java index 5457ef2c77a9..8508aa786926 100644 --- a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java +++ b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java @@ -95,6 +95,15 @@ public class FontManagerShellCommand extends ShellCommand { w.println(); w.println("clear"); w.println(" Remove all installed font files and reset to the initial state."); + w.println(); + w.println("restart"); + w.println(" Restart FontManagerService emulating device reboot."); + w.println(" WARNING: this is not a safe operation. Other processes may misbehave if"); + w.println(" they are using fonts updated by FontManagerService."); + w.println(" This command exists merely for testing."); + w.println(); + w.println("status"); + w.println(" Prints status of current system font configuration."); } /* package */ void dumpAll(@NonNull IndentingPrintWriter w) { @@ -368,7 +377,13 @@ public class FontManagerShellCommand extends ShellCommand { return 0; } - private int status(ShellCommand shell) throws SystemFontException { + private int restart(ShellCommand shell) { + mService.restart(); + shell.getOutPrintWriter().println("Success"); + return 0; + } + + private int status(ShellCommand shell) { final IndentingPrintWriter writer = new IndentingPrintWriter(shell.getOutPrintWriter(), " "); FontConfig config = mService.getSystemFontConfig(); @@ -396,6 +411,8 @@ public class FontManagerShellCommand extends ShellCommand { return update(shell); case "clear": return clear(shell); + case "restart": + return restart(shell); case "status": return status(shell); default: diff --git a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java index c0ab09319a06..b39bd7db797d 100644 --- a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java +++ b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java @@ -125,7 +125,7 @@ final class UpdatableFontDir { private final Supplier<Long> mCurrentTimeSupplier; private long mLastModifiedMillis; - private int mConfigVersion = 1; + private int mConfigVersion; /** * A mutable map containing mapping from font file name (e.g. "NotoColorEmoji.ttf") to {@link @@ -152,9 +152,15 @@ final class UpdatableFontDir { mCurrentTimeSupplier = currentTimeSupplier; } + /** + * Loads fonts from file system, validate them, and delete obsolete font files. + * Note that this method may be called by multiple times in integration tests via {@link + * FontManagerService#restart()}. + */ /* package */ void loadFontFileMap() { mFontFileInfoMap.clear(); mLastModifiedMillis = 0; + mConfigVersion = 1; boolean success = false; try { PersistentSystemFontConfig.Config config = new PersistentSystemFontConfig.Config(); diff --git a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java index 8e5136d9659b..f1e5782f110d 100644 --- a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java +++ b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java @@ -381,6 +381,21 @@ public final class UpdatableFontDirTest { } @Test + public void loadFontFileMap_twice() throws Exception { + FakeFontFileParser parser = new FakeFontFileParser(); + FakeFsverityUtil fakeFsverityUtil = new FakeFsverityUtil(); + UpdatableFontDir dir = new UpdatableFontDir( + mUpdatableFontFilesDir, mPreinstalledFontDirs, parser, fakeFsverityUtil, + mConfigFile, mCurrentTimeSupplier); + dir.loadFontFileMap(); + dir.update(Collections.singletonList(newFontUpdateRequest("test.ttf,1", GOOD_SIGNATURE))); + assertThat(dir.getFontFileMap()).containsKey("test.ttf"); + File fontFile = dir.getFontFileMap().get("test.ttf"); + dir.loadFontFileMap(); + assertThat(dir.getFontFileMap().get("test.ttf")).isEqualTo(fontFile); + } + + @Test public void installFontFile() throws Exception { FakeFontFileParser parser = new FakeFontFileParser(); FakeFsverityUtil fakeFsverityUtil = new FakeFsverityUtil(); diff --git a/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java b/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java index 19dfdabd936f..74f6bca4d7a0 100644 --- a/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java +++ b/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java @@ -196,9 +196,8 @@ public class UpdatableSystemFontTest extends BaseHostJUnit4Test { String fontPath = getFontPath(NOTO_COLOR_EMOJI_TTF); assertThat(fontPath).startsWith(DATA_FONTS_DIR); - expectRemoteCommandToSucceed("stop"); - expectRemoteCommandToSucceed("start"); - waitUntilFontCommandIsReady(); + // Emulate reboot by 'cmd font restart'. + expectRemoteCommandToSucceed("cmd font restart"); String fontPathAfterReboot = getFontPath(NOTO_COLOR_EMOJI_TTF); assertThat(fontPathAfterReboot).isEqualTo(fontPath); } @@ -242,17 +241,6 @@ public class UpdatableSystemFontTest extends BaseHostJUnit4Test { .isNotEqualTo(CommandStatus.SUCCESS); } - private void waitUntilFontCommandIsReady() { - waitUntil(SECONDS.toMillis(30), () -> { - try { - return getDevice().executeShellV2Command("cmd font status").getStatus() - == CommandStatus.SUCCESS; - } catch (DeviceNotAvailableException e) { - return false; - } - }); - } - private void waitUntil(long timeoutMillis, ThrowingSupplier<Boolean> func) { long untilMillis = System.currentTimeMillis() + timeoutMillis; do { |