Copy styles to app dir (it speeds up rendering)
This commit is contained in:
parent
e83021c57f
commit
eab650987d
4 changed files with 79 additions and 68 deletions
|
@ -193,39 +193,6 @@ public class AppInitializer implements IProgress {
|
|||
|
||||
}
|
||||
|
||||
// TODO
|
||||
private void applicationInstalledFirstTime(final Activity ctx) {
|
||||
final OsmandApplication app = (OsmandApplication)ctx.getApplication();
|
||||
boolean netOsmandWasInstalled = false;
|
||||
try {
|
||||
ApplicationInfo applicationInfo = ctx.getPackageManager().getApplicationInfo("net.osmand", PackageManager.GET_META_DATA);
|
||||
netOsmandWasInstalled = applicationInfo != null && !Version.isFreeVersion(app);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
netOsmandWasInstalled = false;
|
||||
}
|
||||
|
||||
if (netOsmandWasInstalled) {
|
||||
// Builder builder = new AccessibleAlertBuilder(this);
|
||||
// builder.setMessage(R.string.osmand_net_previously_installed);
|
||||
// builder.setPositiveButton(R.string.shared_string_ok, null);
|
||||
// builder.show();
|
||||
} else {
|
||||
AlertDialog.Builder builder = new AccessibleAlertBuilder(ctx);
|
||||
builder.setMessage(R.string.first_time_msg);
|
||||
builder.setPositiveButton(R.string.first_time_download, new DialogInterface.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
ctx.startActivity(new Intent(ctx, app.getAppCustomization().getDownloadIndexActivity()));
|
||||
}
|
||||
|
||||
});
|
||||
builder.setNegativeButton(R.string.first_time_continue, null);
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void indexRegionsBoundaries(List<String> warnings) {
|
||||
try {
|
||||
File file = app.getAppPath("regions.ocbf");
|
||||
|
@ -299,7 +266,7 @@ public class AppInitializer implements IProgress {
|
|||
String clang = "".equals(lang) ? new Locale(lang).getLanguage() : lang;
|
||||
app.regions.setLocale(clang);
|
||||
app.poiFilters = startupInit(new PoiFiltersHelper(app), PoiFiltersHelper.class);
|
||||
app.rendererRegistry = startupInit(new RendererRegistry(), RendererRegistry.class);
|
||||
app.rendererRegistry = startupInit(new RendererRegistry(app), RendererRegistry.class);
|
||||
app.targetPointsHelper = startupInit(new TargetPointsHelper(app), TargetPointsHelper.class);
|
||||
}
|
||||
|
||||
|
@ -380,7 +347,7 @@ public class AppInitializer implements IProgress {
|
|||
notifyEvent(InitEvents.POI_TYPES_INITIALIZED);
|
||||
app.resourceManager.reloadIndexesOnStart(this, warnings);
|
||||
|
||||
app.resourceManager.initRenderers(this);
|
||||
app.getRendererRegistry().initRenderers(this);
|
||||
notifyEvent(InitEvents.INIT_RENDERERS);
|
||||
// native depends on renderers
|
||||
initNativeCore();
|
||||
|
|
|
@ -216,6 +216,7 @@ public class MapRenderRepositories {
|
|||
if (searchRequest != null) {
|
||||
searchRequest.setInterrupted(true);
|
||||
}
|
||||
log.info("Interrupt rendering map");
|
||||
}
|
||||
|
||||
private boolean checkWhetherInterrupted() {
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.osmand.plus.render;
|
|||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Collection;
|
||||
|
@ -10,9 +11,13 @@ import java.util.LinkedHashMap;
|
|||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
|
||||
import net.osmand.IProgress;
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.render.RenderingRulesStorage;
|
||||
import net.osmand.render.RenderingRulesStorage.RenderingRulesStorageResolver;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
@ -41,8 +46,11 @@ public class RendererRegistry {
|
|||
}
|
||||
|
||||
private IRendererLoadedEventListener rendererLoadedEventListener;
|
||||
|
||||
private OsmandApplication app;
|
||||
|
||||
public RendererRegistry(){
|
||||
public RendererRegistry(OsmandApplication app){
|
||||
this.app = app;
|
||||
internalRenderers.put(DEFAULT_RENDER, "default.render.xml");
|
||||
internalRenderers.put(TOURING_VIEW, "Touring-view_(more-contrast-and-details)" +".render.xml");
|
||||
internalRenderers.put("UniRS", "UniRS" + ".render.xml");
|
||||
|
@ -150,12 +158,66 @@ public class RendererRegistry {
|
|||
if(externalRenderers.containsKey(name)){
|
||||
is = new FileInputStream(externalRenderers.get(name));
|
||||
} else if(internalRenderers.containsKey(name)){
|
||||
is = RenderingRulesStorage.class.getResourceAsStream(internalRenderers.get(name));
|
||||
File fl = getFileForInternalStyle(name);
|
||||
if(fl.exists()) {
|
||||
is = new FileInputStream(fl);
|
||||
} else {
|
||||
copyFileForInternalStyle(name);
|
||||
is = RenderingRulesStorage.class.getResourceAsStream(internalRenderers.get(name));
|
||||
}
|
||||
} else {
|
||||
throw new IllegalArgumentException("Not found " + name); //$NON-NLS-1$
|
||||
}
|
||||
return is;
|
||||
}
|
||||
|
||||
public void copyFileForInternalStyle(String name) {
|
||||
try {
|
||||
FileOutputStream fout = new FileOutputStream(getFileForInternalStyle(name));
|
||||
Algorithms.streamCopy(RenderingRulesStorage.class.getResourceAsStream(internalRenderers.get(name)),
|
||||
fout);
|
||||
fout.close();
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, String> getInternalRenderers() {
|
||||
return internalRenderers;
|
||||
}
|
||||
|
||||
public File getFileForInternalStyle(String name) {
|
||||
if(internalRenderers.containsKey(name)) {
|
||||
return new File(app.getAppPath(IndexConstants.RENDERERS_DIR), "style.render.xml");
|
||||
}
|
||||
File fl = new File(app.getAppPath(IndexConstants.RENDERERS_DIR), internalRenderers.get(name));
|
||||
return fl;
|
||||
}
|
||||
|
||||
public void initRenderers(IProgress progress) {
|
||||
File file = app.getAppPath(IndexConstants.RENDERERS_DIR);
|
||||
file.mkdirs();
|
||||
Map<String, File> externalRenderers = new LinkedHashMap<String, File>();
|
||||
if (file.exists() && file.canRead()) {
|
||||
File[] lf = file.listFiles();
|
||||
if (lf != null) {
|
||||
for (File f : lf) {
|
||||
if (f != null && f.getName().endsWith(IndexConstants.RENDERER_INDEX_EXT)) {
|
||||
String name = f.getName().substring(0, f.getName().length() - IndexConstants.RENDERER_INDEX_EXT.length());
|
||||
externalRenderers.put(name, f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
setExternalRenderers(externalRenderers);
|
||||
String r = app.getSettings().RENDERER.get();
|
||||
if(r != null){
|
||||
RenderingRulesStorage obj = getRenderer(r);
|
||||
if(obj != null){
|
||||
setCurrentSelectedRender(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setExternalRenderers(Map<String, File> externalRenderers) {
|
||||
|
|
|
@ -51,7 +51,6 @@ import net.osmand.plus.resources.AsyncLoadingThread.TileLoadDownloadRequest;
|
|||
import net.osmand.plus.resources.AsyncLoadingThread.TransportLoadRequest;
|
||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
import net.osmand.render.RenderingRulesStorage;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
|
@ -465,6 +464,12 @@ public class ResourceManager {
|
|||
context.getSettings().PREVIOUS_INSTALLED_VERSION.set(fv);
|
||||
copyRegionsBoundaries();
|
||||
copyPoiTypes();
|
||||
for (String internalStyle : context.getRendererRegistry().getInternalRenderers().keySet()) {
|
||||
File fl = context.getRendererRegistry().getFileForInternalStyle(internalStyle);
|
||||
if (fl.exists()) {
|
||||
context.getRendererRegistry().copyFileForInternalStyle(internalStyle);
|
||||
}
|
||||
}
|
||||
} catch (SQLiteException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
} catch (IOException e) {
|
||||
|
@ -481,8 +486,9 @@ public class ResourceManager {
|
|||
try {
|
||||
File file = context.getAppPath("regions.ocbf");
|
||||
if (file != null) {
|
||||
Algorithms.streamCopy(OsmandRegions.class.getResourceAsStream("regions.ocbf"), new FileOutputStream(
|
||||
file));
|
||||
FileOutputStream fout = new FileOutputStream(file);
|
||||
Algorithms.streamCopy(OsmandRegions.class.getResourceAsStream("regions.ocbf"), fout);
|
||||
fout.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
@ -493,8 +499,9 @@ public class ResourceManager {
|
|||
try {
|
||||
File file = context.getAppPath("poi_types.xml");
|
||||
if (file != null) {
|
||||
Algorithms.streamCopy(MapPoiTypes.class.getResourceAsStream("poi_types.xml"), new FileOutputStream(
|
||||
file));
|
||||
FileOutputStream fout = new FileOutputStream(file);
|
||||
Algorithms.streamCopy(MapPoiTypes.class.getResourceAsStream("poi_types.xml"), fout);
|
||||
fout.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
@ -556,7 +563,6 @@ public class ResourceManager {
|
|||
isBundledAssetsXml.close();
|
||||
}
|
||||
|
||||
//TODO consider some other place for this method?
|
||||
public static void copyAssets(AssetManager assetManager, String assetName, File file) throws IOException {
|
||||
if(file.exists()){
|
||||
Algorithms.removeAllFiles(file);
|
||||
|
@ -569,31 +575,6 @@ public class ResourceManager {
|
|||
Algorithms.closeStream(is);
|
||||
}
|
||||
|
||||
public void initRenderers(IProgress progress) {
|
||||
File file = context.getAppPath(IndexConstants.RENDERERS_DIR);
|
||||
file.mkdirs();
|
||||
Map<String, File> externalRenderers = new LinkedHashMap<String, File>();
|
||||
if (file.exists() && file.canRead()) {
|
||||
File[] lf = file.listFiles();
|
||||
if (lf != null) {
|
||||
for (File f : lf) {
|
||||
if (f != null && f.getName().endsWith(IndexConstants.RENDERER_INDEX_EXT)) {
|
||||
String name = f.getName().substring(0, f.getName().length() - IndexConstants.RENDERER_INDEX_EXT.length());
|
||||
externalRenderers.put(name, f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
context.getRendererRegistry().setExternalRenderers(externalRenderers);
|
||||
String r = context.getSettings().RENDERER.get();
|
||||
if(r != null){
|
||||
RenderingRulesStorage obj = context.getRendererRegistry().getRenderer(r);
|
||||
if(obj != null){
|
||||
context.getRendererRegistry().setCurrentSelectedRender(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<File> collectFiles(File dir, String ext, List<File> files) {
|
||||
if(dir.exists() && dir.canRead()) {
|
||||
File[] lf = dir.listFiles();
|
||||
|
|
Loading…
Reference in a new issue