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 2016-2017 devemux86
* Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov
*
* 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.text.TextUtils;
import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.theme.ThemeFile;
import org.oscim.theme.ThemeUtils;
import org.oscim.theme.XmlRenderThemeMenuCallback;
import org.oscim.utils.Utils;
@@ -37,6 +35,7 @@ public class AssetsRenderTheme implements ThemeFile {
private final AssetManager mAssetManager;
private final String mFileName;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback;
private final String mRelativePathPrefix;
@@ -102,7 +101,12 @@ public class AssetsRenderTheme implements ThemeFile {
@Override
public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this);
return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
}
@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
* 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 org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.theme.ThemeFile;
import org.oscim.theme.ThemeUtils;
import org.oscim.theme.XmlRenderThemeMenuCallback;
import org.oscim.utils.Utils;
@@ -33,6 +32,7 @@ public class ContentRenderTheme implements ThemeFile {
private static final long serialVersionUID = 1L;
private final ContentResolver mContentResolver;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback;
private final String mRelativePathPrefix;
private final Uri mUri;
@@ -99,7 +99,12 @@ public class ContentRenderTheme implements ThemeFile {
@Override
public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this);
return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
}
@Override

View File

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

View File

@@ -1,7 +1,7 @@
/*
* Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86
* Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov
*
* 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 final long mFileModificationDate;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback;
private final String mPath;
@@ -110,7 +111,12 @@ public class ExternalRenderTheme implements ThemeFile {
@Override
public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this);
return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
}
@Override

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2017 devemux86
* Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov
*
* 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.utils.Utils;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
@@ -30,6 +28,7 @@ public class StreamRenderTheme implements ThemeFile {
private static final long serialVersionUID = 1L;
private final InputStream mInputStream;
private boolean mMapsforgeTheme;
private XmlRenderThemeMenuCallback mMenuCallback;
private final String mRelativePathPrefix;
@@ -48,8 +47,7 @@ public class StreamRenderTheme implements ThemeFile {
*/
public StreamRenderTheme(String relativePathPrefix, InputStream inputStream, XmlRenderThemeMenuCallback menuCallback) {
mRelativePathPrefix = relativePathPrefix;
mInputStream = new BufferedInputStream(inputStream);
mInputStream.mark(0);
mInputStream = inputStream;
mMenuCallback = menuCallback;
}
@@ -82,17 +80,17 @@ public class StreamRenderTheme implements ThemeFile {
@Override
public InputStream getRenderThemeAsStream() throws ThemeException {
try {
mInputStream.reset();
} catch (IOException e) {
throw new ThemeException(e.getMessage());
}
return mInputStream;
}
@Override
public boolean isMapsforgeTheme() {
return ThemeUtils.isMapsforgeTheme(this);
return mMapsforgeTheme;
}
@Override
public void setMapsforgeTheme(boolean mapsforgeTheme) {
mMapsforgeTheme = mapsforgeTheme;
}
@Override

View File

@@ -1,7 +1,7 @@
/*
* Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86
* Copyright 2016-2021 devemux86
* Copyright 2017 Andrey Novikov
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -51,6 +51,11 @@ public interface ThemeFile extends Serializable {
*/
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.
*/

View File

@@ -1,6 +1,6 @@
/*
* 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
* terms of the GNU Lesser General Public License as published by the Free Software
@@ -117,7 +117,7 @@ public class XmlAtlasThemeBuilder extends XmlThemeBuilder {
@Override
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

View File

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