package org.osmdroid.mapsforge;
import android.os.Build;
import org.osmdroid.tileprovider.IRegisterReceiver;
import org.osmdroid.tileprovider.MapTileProviderArray;
import org.osmdroid.tileprovider.modules.IFilesystemCache;
import org.osmdroid.tileprovider.modules.MapTileFileArchiveProvider;
import org.osmdroid.tileprovider.modules.MapTileFilesystemProvider;
import org.osmdroid.tileprovider.modules.SqlTileWriter;
import org.osmdroid.tileprovider.modules.TileWriter;
/**
* This lets you hook up multiple MapsForge files, it will render to the screen the first
* image that's available.
*
* Adapted from code from here: https://github.com/MKergall/osmbonuspack, which is LGPL
* http://www.salidasoftware.com/how-to-render-mapsforge-tiles-in-osmdroid/
* @author Salida Software
* Adapted from code found here : http://www.sieswerda.net/2012/08/15/upping-the-developer-friendliness/
*/
public class MapsForgeTileProvider extends MapTileProviderArray {
IFilesystemCache tileWriter;
/**
*
* @param pRegisterReceiver
*/
public MapsForgeTileProvider(IRegisterReceiver pRegisterReceiver, MapsForgeTileSource pTileSource, IFilesystemCache cacheWriter) {
super(pTileSource, pRegisterReceiver);
final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider(
pRegisterReceiver, pTileSource);
mTileProviderList.add(fileSystemProvider);
final MapTileFileArchiveProvider archiveProvider = new MapTileFileArchiveProvider(
pRegisterReceiver, pTileSource);
mTileProviderList.add(archiveProvider);
if (cacheWriter != null) {
tileWriter = cacheWriter;
} else {
if (Build.VERSION.SDK_INT < 10) {
tileWriter = new TileWriter();
} else {
tileWriter = new SqlTileWriter();
}
}
// Create the module provider; this class provides a TileLoader that
// actually loads the tile from the map file.
MapsForgeTileModuleProvider moduleProvider = new MapsForgeTileModuleProvider(pRegisterReceiver, (MapsForgeTileSource) getTileSource(), tileWriter);
//this is detached by super
// Add the module provider to the array of providers; mTileProviderList
// is defined by the superclass.
mTileProviderList.add(moduleProvider);
}
@Override
public void detach() {
if (tileWriter!=null)
tileWriter.onDetach();
tileWriter=null;
super.detach();
}
}