From 6ba389149c7dc23b62da64a38d30705d58528b05 Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Sat, 6 Mar 2021 09:32:18 +0900 Subject: [PATCH] Refresh skins and fonts list after download them --- forge-gui-mobile/src/forge/assets/FSkin.java | 9 ++++++ .../src/forge/assets/FSkinFont.java | 10 ++++-- .../src/forge/screens/settings/FilesPage.java | 32 +++++++++++++++++-- .../forge/screens/settings/SettingsPage.java | 29 ++++++++++++++--- .../screens/settings/SettingsScreen.java | 10 ++++++ 5 files changed, 81 insertions(+), 9 deletions(-) diff --git a/forge-gui-mobile/src/forge/assets/FSkin.java b/forge-gui-mobile/src/forge/assets/FSkin.java index 6dfe5e20133..48544a63648 100644 --- a/forge-gui-mobile/src/forge/assets/FSkin.java +++ b/forge-gui-mobile/src/forge/assets/FSkin.java @@ -446,6 +446,15 @@ public class FSkin { } public static Iterable getAllSkins() { + if (allSkins != null) { + allSkins.clear(); + allSkins.add("Default"); //init default + final Array skinDirectoryNames = getSkinDirectoryNames(); + for (final String skinDirectoryName : skinDirectoryNames) { + allSkins.add(WordUtil.capitalize(skinDirectoryName.replace('_', ' '))); + } + allSkins.sort(); + } return allSkins; } diff --git a/forge-gui-mobile/src/forge/assets/FSkinFont.java b/forge-gui-mobile/src/forge/assets/FSkinFont.java index dddcd1bb4c0..b568835d639 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinFont.java +++ b/forge-gui-mobile/src/forge/assets/FSkinFont.java @@ -24,7 +24,6 @@ import forge.util.LineReader; import forge.util.TextBounds; import forge.util.Utils; -import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -87,8 +86,13 @@ public class FSkinFont { //delete all cached font files public static void deleteCachedFiles() { - FileUtil.deleteDirectory(new File(ForgeConstants.FONTS_DIR)); - FileUtil.ensureDirectoryExists(ForgeConstants.FONTS_DIR); + final FileHandle dir = Gdx.files.absolute(ForgeConstants.FONTS_DIR); + for (FileHandle fontFile : dir.list()) { + String name = fontFile.name(); + if (name.endsWith(".fnt") || name.endsWith(".png")) { + fontFile.delete(); + } + } } public static void updateAll() { diff --git a/forge-gui-mobile/src/forge/screens/settings/FilesPage.java b/forge-gui-mobile/src/forge/screens/settings/FilesPage.java index 045e78f0aed..ebc224e9cfd 100644 --- a/forge-gui-mobile/src/forge/screens/settings/FilesPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/FilesPage.java @@ -91,6 +91,10 @@ public class FilesPage extends TabPage { protected GuiDownloadService createService() { return new GuiDownloadSkins(); } + @Override + protected void finishCallback() { + SettingsScreen.getSettingsScreen().getSettingsPage().refreshSkinsList(); + } }, 0); lstItems.addItem(new OptionContentDownloader(localizer.getMessage("btnDownloadCJKFonts"), localizer.getMessage("lblDownloadCJKFonts"), @@ -112,6 +116,10 @@ public class FilesPage extends TabPage { } return categories; } + @Override + protected void finishCallback() { + SettingsScreen.getSettingsScreen().getSettingsPage().refreshCJKFontsList(); + } }, 0); //storage locations final StorageOption cardPicsOption = new StorageOption(localizer.getMessage("lblCardPicsLocation"), ForgeProfileProperties.getCardPicsDir()) { @@ -201,9 +209,19 @@ public class FilesPage extends TabPage { @Override public void select() { - new GuiDownloader(createService()).show(); + new GuiDownloader(createService(), new Callback() { + @Override + public void run(Boolean finished) { + if (finished) { + finishCallback(); + } + } + }).show(); } protected abstract GuiDownloadService createService(); + + protected void finishCallback() { + } } private abstract class OptionContentDownloader extends FilesItem { @@ -222,11 +240,21 @@ public class FilesPage extends TabPage { public void run(String result) { final String url = categories.get(result); final String name = url.substring(url.lastIndexOf("/") + 1); - new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null)).show(); + new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), new Callback() { + @Override + public void run(Boolean finished) { + if (finished) { + finishCallback(); + } + } + }).show(); } }); } protected abstract Map getCategories(); + + protected void finishCallback() { + } } private abstract class StorageOption extends FilesItem { diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java index a5fc1e2b419..d8b7994f297 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsPage.java @@ -37,6 +37,8 @@ import java.util.List; public class SettingsPage extends TabPage { private final FGroupList lstSettings = add(new FGroupList<>()); + private final CustomSelectSetting settingSkins; + private final CustomSelectSetting settingCJKFonts; public SettingsPage() { super(Localizer.getInstance().getMessage("lblSettings"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS); @@ -84,15 +86,16 @@ public class SettingsPage extends TabPage { }); } }, 0); - lstSettings.addItem(new CustomSelectSetting(FPref.UI_SKIN, localizer.getMessage("lblTheme"), + settingSkins = new CustomSelectSetting(FPref.UI_SKIN, localizer.getMessage("lblTheme"), localizer.getMessage("nlTheme"), FSkin.getAllSkins()) { @Override public void valueChanged(String newValue) { FSkin.changeSkin(newValue); } - }, 0); - lstSettings.addItem(new CustomSelectSetting(FPref.UI_CJK_FONT, localizer.getMessage("lblCJKFont"), + }; + lstSettings.addItem(settingSkins, 0); + settingCJKFonts = new CustomSelectSetting(FPref.UI_CJK_FONT, localizer.getMessage("lblCJKFont"), localizer.getMessage("nlCJKFont"), FSkinFont.getAllCJKFonts()) { @Override @@ -111,7 +114,8 @@ public class SettingsPage extends TabPage { } super.valueChanged(newValue); } - }, 0); + }; + lstSettings.addItem(settingCJKFonts, 0); lstSettings.addItem(new BooleanSetting(FPref.UI_LANDSCAPE_MODE, localizer.getMessage("lblLandscapeMode"), localizer.getMessage("nlLandscapeMode")) { @@ -549,6 +553,14 @@ public class SettingsPage extends TabPage { 7);*/ } + public void refreshSkinsList() { + settingSkins.updateOptions(FSkin.getAllSkins()); + } + + public void refreshCJKFontsList() { + settingCJKFonts.updateOptions(FSkinFont.getAllCJKFonts()); + } + @Override protected void doLayout(float width, float height) { lstSettings.setBounds(0, 0, width, height); @@ -618,6 +630,15 @@ public class SettingsPage extends TabPage { FModel.getPreferences().save(); } + public void updateOptions(Iterable options0) { + options.clear(); + if (options0 != null) { + for (String option : options0) { + options.add(option); + } + } + } + @Override public void select() { Forge.openScreen(new CustomSelectScreen()); diff --git a/forge-gui-mobile/src/forge/screens/settings/SettingsScreen.java b/forge-gui-mobile/src/forge/screens/settings/SettingsScreen.java index 6ea7d76ce4c..2b6d45306ad 100644 --- a/forge-gui-mobile/src/forge/screens/settings/SettingsScreen.java +++ b/forge-gui-mobile/src/forge/screens/settings/SettingsScreen.java @@ -19,6 +19,7 @@ public class SettingsScreen extends TabPageScreen { private static boolean fromHomeScreen; private static SettingsScreen settingsScreen; //keep settings screen around so scroll positions maintained + private final SettingsPage settingsPage; public static void show(boolean fromHomeScreen0) { if (settingsScreen == null) { @@ -40,6 +41,14 @@ public class SettingsScreen extends TabPageScreen { return insets; } + public SettingsPage getSettingsPage() { + return settingsPage; + } + + public static SettingsScreen getSettingsScreen() { + return settingsScreen; + } + @SuppressWarnings("unchecked") private SettingsScreen() { super(new TabHeader(new TabPage[] { @@ -51,6 +60,7 @@ public class SettingsScreen extends TabPageScreen { return !fromHomeScreen; //don't show back button if launched from home screen } }); + settingsPage = (SettingsPage) tabPages[0]; } public FScreen getLandscapeBackdropScreen() {