Mapsforge themes compatibility improvements #100 (#802)

This commit is contained in:
Emux
2021-01-11 17:30:44 +02:00
committed by GitHub
parent c0d5f4a0ca
commit 6801b895e4
8 changed files with 59 additions and 36 deletions

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2016-2017 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov * Copyright 2017 Andrey Novikov
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
@@ -18,10 +18,8 @@ package org.oscim.android.theme;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.text.TextUtils; import android.text.TextUtils;
import org.oscim.theme.IRenderTheme.ThemeException; import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.theme.ThemeFile; import org.oscim.theme.ThemeFile;
import org.oscim.theme.ThemeUtils;
import org.oscim.theme.XmlRenderThemeMenuCallback; import org.oscim.theme.XmlRenderThemeMenuCallback;
import org.oscim.utils.Utils; import org.oscim.utils.Utils;
@@ -37,6 +35,7 @@ public class AssetsRenderTheme implements ThemeFile {
private final AssetManager mAssetManager; private final AssetManager mAssetManager;
private final String mFileName; private final String mFileName;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback; private XmlRenderThemeMenuCallback mMenuCallback;
private final String mRelativePathPrefix; private final String mRelativePathPrefix;
@@ -102,7 +101,12 @@ public class AssetsRenderTheme implements ThemeFile {
@Override @Override
public boolean isMapsforgeTheme() { public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this); return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
} }
@Override @Override

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2020 devemux86 * Copyright 2020-2021 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -18,7 +18,6 @@ import android.content.ContentResolver;
import android.net.Uri; import android.net.Uri;
import org.oscim.theme.IRenderTheme.ThemeException; import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.theme.ThemeFile; import org.oscim.theme.ThemeFile;
import org.oscim.theme.ThemeUtils;
import org.oscim.theme.XmlRenderThemeMenuCallback; import org.oscim.theme.XmlRenderThemeMenuCallback;
import org.oscim.utils.Utils; import org.oscim.utils.Utils;
@@ -33,6 +32,7 @@ public class ContentRenderTheme implements ThemeFile {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private final ContentResolver mContentResolver; private final ContentResolver mContentResolver;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback; private XmlRenderThemeMenuCallback mMenuCallback;
private final String mRelativePathPrefix; private final String mRelativePathPrefix;
private final Uri mUri; private final Uri mUri;
@@ -99,7 +99,12 @@ public class ContentRenderTheme implements ThemeFile {
@Override @Override
public boolean isMapsforgeTheme() { public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this); return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
} }
@Override @Override

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2017 nebular * Copyright 2017 nebular
* Copyright 2017 Andrey Novikov * Copyright 2017 Andrey Novikov
* *
@@ -64,6 +64,10 @@ public enum VtmThemes implements ThemeFile {
return false; return false;
} }
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
}
@Override @Override
public void setMenuCallback(XmlRenderThemeMenuCallback menuCallback) { public void setMenuCallback(XmlRenderThemeMenuCallback menuCallback) {
} }

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov * Copyright 2017 Andrey Novikov
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -34,6 +34,7 @@ public class ExternalRenderTheme implements ThemeFile {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private final long mFileModificationDate; private final long mFileModificationDate;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback; private XmlRenderThemeMenuCallback mMenuCallback;
private final String mPath; private final String mPath;
@@ -110,7 +111,12 @@ public class ExternalRenderTheme implements ThemeFile {
@Override @Override
public boolean isMapsforgeTheme() { public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this); return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
} }
@Override @Override

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2016-2017 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov * Copyright 2017 Andrey Novikov
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
@@ -18,8 +18,6 @@ package org.oscim.theme;
import org.oscim.theme.IRenderTheme.ThemeException; import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.utils.Utils; import org.oscim.utils.Utils;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
/** /**
@@ -30,6 +28,7 @@ public class StreamRenderTheme implements ThemeFile {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private final InputStream mInputStream; private final InputStream mInputStream;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback; private XmlRenderThemeMenuCallback mMenuCallback;
private final String mRelativePathPrefix; private final String mRelativePathPrefix;
@@ -48,8 +47,7 @@ public class StreamRenderTheme implements ThemeFile {
*/ */
public StreamRenderTheme(String relativePathPrefix, InputStream inputStream, XmlRenderThemeMenuCallback menuCallback) { public StreamRenderTheme(String relativePathPrefix, InputStream inputStream, XmlRenderThemeMenuCallback menuCallback) {
mRelativePathPrefix = relativePathPrefix; mRelativePathPrefix = relativePathPrefix;
mInputStream = new BufferedInputStream(inputStream); mInputStream = inputStream;
mInputStream.mark(0);
mMenuCallback = menuCallback; mMenuCallback = menuCallback;
} }
@@ -82,17 +80,17 @@ public class StreamRenderTheme implements ThemeFile {
@Override @Override
public InputStream getRenderThemeAsStream() throws ThemeException { public InputStream getRenderThemeAsStream() throws ThemeException {
try {
mInputStream.reset();
} catch (IOException e) {
throw new ThemeException(e.getMessage());
}
return mInputStream; return mInputStream;
} }
@Override @Override
public boolean isMapsforgeTheme() { public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this); return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
} }
@Override @Override

View File

@@ -1,7 +1,7 @@
/* /*
* Copyright 2010, 2011, 2012 mapsforge.org * Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov * Copyright 2017 Andrey Novikov
* *
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -51,6 +51,11 @@ public interface ThemeFile extends Serializable {
*/ */
boolean isMapsforgeTheme(); boolean isMapsforgeTheme();
/**
* @param mapsforgeTheme true if theme file is in Mapsforge format
*/
void setMapsforgeTheme(boolean mapsforgeTheme);
/** /**
* @param menuCallback the interface callback to create a settings menu on the fly. * @param menuCallback the interface callback to create a settings menu on the fly.
*/ */

View File

@@ -1,6 +1,6 @@
/* /*
* Copyright 2017 Longri * Copyright 2017 Longri
* Copyright 2017-2020 devemux86 * Copyright 2017-2021 devemux86
* *
* This program is free software: you can redistribute it and/or modify it under the * This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software * terms of the GNU Lesser General Public License as published by the Free Software
@@ -117,7 +117,7 @@ public class XmlAtlasThemeBuilder extends XmlThemeBuilder {
@Override @Override
RenderTheme createTheme(Rule[] rules) { RenderTheme createTheme(Rule[] rules) {
return new AtlasRenderTheme(mMapBackground, mTextScale, rules, mLevels, mMapsforgeTheme, regionMap, atlasList); return new AtlasRenderTheme(mMapBackground, mTextScale, rules, mLevels, mTheme.isMapsforgeTheme(), regionMap, atlasList);
} }
@Override @Override

View File

@@ -2,7 +2,7 @@
* Copyright 2010, 2011, 2012, 2013 mapsforge.org * Copyright 2010, 2011, 2012, 2013 mapsforge.org
* Copyright 2013 Hannes Janetzek * Copyright 2013 Hannes Janetzek
* Copyright 2014 Ludwig M Brinckmann * Copyright 2014 Ludwig M Brinckmann
* Copyright 2016-2020 devemux86 * Copyright 2016-2021 devemux86
* Copyright 2016-2017 Longri * Copyright 2016-2017 Longri
* Copyright 2016-2020 Andrey Novikov * Copyright 2016-2020 Andrey Novikov
* Copyright 2018-2019 Gustl22 * Copyright 2018-2019 Gustl22
@@ -175,7 +175,6 @@ public class XmlThemeBuilder {
private final ThemeCallback mThemeCallback; private final ThemeCallback mThemeCallback;
RenderTheme mRenderTheme; RenderTheme mRenderTheme;
final boolean mMapsforgeTheme;
private final float mScale; private final float mScale;
private Set<String> mCategories; private Set<String> mCategories;
@@ -193,7 +192,6 @@ public class XmlThemeBuilder {
mTheme = theme; mTheme = theme;
mPullParser = pullParser; mPullParser = pullParser;
mThemeCallback = themeCallback; mThemeCallback = themeCallback;
mMapsforgeTheme = theme.isMapsforgeTheme();
mScale = CanvasAdapter.getScale(); mScale = CanvasAdapter.getScale();
} }
@@ -215,14 +213,14 @@ public class XmlThemeBuilder {
} }
public void endDocument() { public void endDocument() {
if (mMapsforgeTheme) { if (mTheme.isMapsforgeTheme()) {
// Building rule for Mapsforge themes // Building rule for Mapsforge themes
mRulesList.add(buildingRule()); mRulesList.add(buildingRule());
} }
Rule[] rules = new Rule[mRulesList.size()]; Rule[] rules = new Rule[mRulesList.size()];
for (int i = 0, n = rules.length; i < n; i++) for (int i = 0, n = rules.length; i < n; i++)
rules[i] = mRulesList.get(i).onComplete(mMapsforgeTheme ? new int[1] : null); rules[i] = mRulesList.get(i).onComplete(mTheme.isMapsforgeTheme() ? new int[1] : null);
mRenderTheme = createTheme(rules); mRenderTheme = createTheme(rules);
@@ -237,7 +235,7 @@ public class XmlThemeBuilder {
} }
RenderTheme createTheme(Rule[] rules) { RenderTheme createTheme(Rule[] rules) {
return new RenderTheme(mMapBackground, mTextScale, rules, mLevels, mTransformKeyMap, mTransformTagMap, mMapsforgeTheme); return new RenderTheme(mMapBackground, mTextScale, rules, mLevels, mTransformKeyMap, mTransformTagMap, mTheme.isMapsforgeTheme());
} }
public void endElement() { public void endElement() {
@@ -431,13 +429,13 @@ public class XmlThemeBuilder {
else if ("NODE".equals(val)) else if ("NODE".equals(val))
element = Rule.Element.NODE; element = Rule.Element.NODE;
} else if ("k".equals(name)) { } else if ("k".equals(name)) {
if (mMapsforgeTheme) { if (mTheme.isMapsforgeTheme()) {
if (!"*".equals(value)) if (!"*".equals(value))
keys = value; keys = value;
} else } else
keys = value; keys = value;
} else if ("v".equals(name)) { } else if ("v".equals(name)) {
if (mMapsforgeTheme) { if (mTheme.isMapsforgeTheme()) {
if (!"*".equals(value)) if (!"*".equals(value))
values = value; values = value;
} else } else
@@ -935,7 +933,10 @@ public class XmlThemeBuilder {
if ("schemaLocation".equals(name)) if ("schemaLocation".equals(name))
continue; continue;
if ("version".equals(name)) if ("xmlns".equals(name))
mTheme.setMapsforgeTheme("http://mapsforge.org/renderTheme".equals(value));
else if ("version".equals(name))
version = Integer.parseInt(value); version = Integer.parseInt(value);
else if ("map-background".equals(name)) { else if ("map-background".equals(name)) {
@@ -956,7 +957,7 @@ public class XmlThemeBuilder {
validateExists("version", version, elementName); validateExists("version", version, elementName);
int renderThemeVersion = mMapsforgeTheme ? RENDER_THEME_VERSION_MAPSFORGE : RENDER_THEME_VERSION_VTM; int renderThemeVersion = mTheme.isMapsforgeTheme() ? RENDER_THEME_VERSION_MAPSFORGE : RENDER_THEME_VERSION_VTM;
if (version > renderThemeVersion) if (version > renderThemeVersion)
throw new ThemeException("invalid render theme version:" + version); throw new ThemeException("invalid render theme version:" + version);
@@ -1006,7 +1007,7 @@ public class XmlThemeBuilder {
b.themeCallback(mThemeCallback); b.themeCallback(mThemeCallback);
String symbol = null; String symbol = null;
if (mMapsforgeTheme) { if (mTheme.isMapsforgeTheme()) {
// Reset default priority // Reset default priority
b.priority = DEFAULT_PRIORITY; b.priority = DEFAULT_PRIORITY;
} }
@@ -1051,7 +1052,7 @@ public class XmlThemeBuilder {
else if ("priority".equals(name)) { else if ("priority".equals(name)) {
b.priority = Integer.parseInt(value); b.priority = Integer.parseInt(value);
if (mMapsforgeTheme) { if (mTheme.isMapsforgeTheme()) {
// Mapsforge: higher priorities are drawn first (0 = default priority) // Mapsforge: higher priorities are drawn first (0 = default priority)
// VTM: lower priorities are drawn first (0 = highest priority) // VTM: lower priorities are drawn first (0 = highest priority)
b.priority = FastMath.clamp(DEFAULT_PRIORITY - b.priority, 0, Integer.MAX_VALUE); b.priority = FastMath.clamp(DEFAULT_PRIORITY - b.priority, 0, Integer.MAX_VALUE);