package org.osmdroid.tileprovider; import android.content.Context; import android.os.Build; import org.osmdroid.tileprovider.modules.IFilesystemCache; import org.osmdroid.tileprovider.modules.INetworkAvailablityCheck; import org.osmdroid.tileprovider.modules.MapTileAssetsProvider; import org.osmdroid.tileprovider.modules.MapTileDownloader; import org.osmdroid.tileprovider.modules.MapTileFileArchiveProvider; import org.osmdroid.tileprovider.modules.MapTileFilesystemProvider; import org.osmdroid.tileprovider.modules.MapTileSqlCacheProvider; import org.osmdroid.tileprovider.modules.NetworkAvailabliltyCheck; import org.osmdroid.tileprovider.modules.SqlTileWriter; import org.osmdroid.tileprovider.modules.TileWriter; import org.osmdroid.tileprovider.tilesource.ITileSource; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.osmdroid.tileprovider.util.SimpleRegisterReceiver; /** * This top-level tile provider implements a basic tile request chain which includes a * {@link MapTileFilesystemProvider} (a file-system cache), a {@link MapTileFileArchiveProvider} * (archive provider), and a {@link MapTileDownloader} (downloads map tiles via tile source). * * Behavior change since osmdroid 5.3: If the device is less than API 10, the file system based cache and writer are used * otherwise, the sqlite based * * @see TileWriter * @see SqlTileWriter * @see MapTileFilesystemProvider * @see MapTileSqlCacheProvider * @author Marc Kurtz * */ public class MapTileProviderBasic extends MapTileProviderArray implements IMapTileProviderCallback { protected IFilesystemCache tileWriter; /** * Creates a {@link MapTileProviderBasic}. */ public MapTileProviderBasic(final Context pContext) { this(pContext, TileSourceFactory.DEFAULT_TILE_SOURCE); } /** * Creates a {@link MapTileProviderBasic}. */ public MapTileProviderBasic(final Context pContext, final ITileSource pTileSource) { this(new SimpleRegisterReceiver(pContext), new NetworkAvailabliltyCheck(pContext), pTileSource, pContext,null); } /** * Creates a {@link MapTileProviderBasic}. */ public MapTileProviderBasic(final Context pContext, final ITileSource pTileSource, final IFilesystemCache cacheWriter) { this(new SimpleRegisterReceiver(pContext), new NetworkAvailabliltyCheck(pContext), pTileSource, pContext,cacheWriter); } /** * Creates a {@link MapTileProviderBasic}. */ public MapTileProviderBasic(final IRegisterReceiver pRegisterReceiver, final INetworkAvailablityCheck aNetworkAvailablityCheck, final ITileSource pTileSource, final Context pContext, final IFilesystemCache cacheWriter) { super(pTileSource, pRegisterReceiver); if (cacheWriter != null) { tileWriter = cacheWriter; } else { if (Build.VERSION.SDK_INT < 10) { tileWriter = new TileWriter(); } else { tileWriter = new SqlTileWriter(); } } final MapTileAssetsProvider assetsProvider = new MapTileAssetsProvider( pRegisterReceiver, pContext.getAssets(), pTileSource); mTileProviderList.add(assetsProvider); if (Build.VERSION.SDK_INT < 10) { final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider( pRegisterReceiver, pTileSource); mTileProviderList.add(fileSystemProvider); } else { final MapTileSqlCacheProvider cachedProvider = new MapTileSqlCacheProvider(pRegisterReceiver, pTileSource); mTileProviderList.add(cachedProvider); } final MapTileFileArchiveProvider archiveProvider = new MapTileFileArchiveProvider( pRegisterReceiver, pTileSource); mTileProviderList.add(archiveProvider); final MapTileDownloader downloaderProvider = new MapTileDownloader(pTileSource, tileWriter, aNetworkAvailablityCheck); mTileProviderList.add(downloaderProvider); } @Override public IFilesystemCache getTileWriter() { return tileWriter; } @Override public void detach(){ //https://github.com/osmdroid/osmdroid/issues/213 //close the writer if (tileWriter!=null) tileWriter.onDetach(); tileWriter=null; super.detach(); } }