1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-06 03:50:19 +02:00

fonts catalog rescan has been added

This commit is contained in:
Nikolay Pultsin 2010-11-11 01:53:17 +00:00
parent 5a8ea802f7
commit b11d3bdf81
4 changed files with 34 additions and 12 deletions

View file

@ -1,2 +1 @@
* Пересканировать файлы шрифтов время от времени -- чтобы замечать добавившиеся
* (?) Показывать названия шрифтов соответсвующими шрифтами

View file

@ -36,7 +36,7 @@ class FontOption extends ZLStringListPreference {
myOption = option;
final ArrayList<String> fonts = new ArrayList<String>();
AndroidFontUtil.fillFamiliesList(fonts);
AndroidFontUtil.fillFamiliesList(fonts, true);
setList((String[])fonts.toArray(new String[fonts.size()]));
final String initialValue = AndroidFontUtil.realFontFamilyName(option.getValue());

View file

@ -56,18 +56,41 @@ public final class AndroidFontUtil {
}
private static Map<String,File[]> ourFontMap;
public static Map<String,File[]> getFontMap() {
if (ourFontMap == null) {
private static File[] ourFileList;
private static long myTimeStamp;
public static Map<String,File[]> getFontMap(boolean forceReload) {
final long timeStamp = System.currentTimeMillis();
if (forceReload && timeStamp < myTimeStamp + 1000) {
forceReload = false;
}
myTimeStamp = timeStamp;
if (ourFontMap == null || forceReload) {
boolean rebuildMap = ourFontMap == null;
if (ourFontCreationMethod == null) {
ourFontMap = new HashMap<String,File[]>();
if (rebuildMap) {
ourFontMap = new HashMap<String,File[]>();
}
} else {
ourFontMap = new ZLTTFInfoDetector().collectFonts(new File(Paths.FontsDirectoryOption().getValue()).listFiles(
final File[] fileList = new File(Paths.FontsDirectoryOption().getValue()).listFiles(
new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".ttf") && !name.startsWith(".");
}
}
));
);
if (fileList == null) {
if (ourFileList != null) {
ourFileList = null;
rebuildMap = true;
}
}
if (fileList != null && !fileList.equals(ourFileList)) {
ourFileList = fileList;
rebuildMap = true;
}
if (rebuildMap) {
ourFontMap = new ZLTTFInfoDetector().collectFonts(fileList);
}
}
}
return ourFontMap;
@ -83,7 +106,7 @@ public final class AndroidFontUtil {
if ("monospace".equalsIgnoreCase(fontFamily) || "droid mono".equalsIgnoreCase(fontFamily)) {
return "monospace";
}
for (String name : getFontMap().keySet()) {
for (String name : getFontMap(false).keySet()) {
if (name.equalsIgnoreCase(fontFamily)) {
return name;
}
@ -91,11 +114,11 @@ public final class AndroidFontUtil {
return "sans-serif";
}
public static void fillFamiliesList(ArrayList<String> families) {
public static void fillFamiliesList(ArrayList<String> families, boolean forceReload) {
families.add("Droid Sans");
families.add("Droid Serif");
families.add("Droid Mono");
families.addAll(getFontMap().keySet());
families.addAll(getFontMap(forceReload).keySet());
Collections.sort(families);
}
}

View file

@ -116,7 +116,7 @@ public final class ZLAndroidPaintContext extends ZLPaintContext {
}
Typeface tf = typefaces[style];
if (tf == null) {
File[] files = AndroidFontUtil.getFontMap().get(family);
File[] files = AndroidFontUtil.getFontMap(false).get(family);
if (files != null) {
try {
if (files[style] != null) {
@ -233,6 +233,6 @@ public final class ZLAndroidPaintContext extends ZLPaintContext {
}
protected void fillFamiliesList(ArrayList<String> families) {
AndroidFontUtil.fillFamiliesList(families);
AndroidFontUtil.fillFamiliesList(families, false);
}
}