package org.osmdroid.tileprovider.modules;
import android.util.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.osmdroid.api.IMapView;
import org.osmdroid.tileprovider.IMapTileProviderCallback;
import org.osmdroid.tileprovider.IRegisterReceiver;
import org.osmdroid.tileprovider.MapTileProviderArray;
import org.osmdroid.tileprovider.MapTileProviderBasic;
import org.osmdroid.tileprovider.tilesource.FileBasedTileSource;
/**
* Causes Osmdroid to load from tiles from only the referenced file sources and
* no where else. online sources are not even attempted.
*
* @since 5.0 Created by alex on 6/14/2015.
*/
public class OfflineTileProvider extends MapTileProviderArray implements IMapTileProviderCallback {
IArchiveFile[] archives;
/**
* Creates a {@link MapTileProviderBasic}.
* throws with the source[] is null or empty
*/
public OfflineTileProvider(final IRegisterReceiver pRegisterReceiver, File[] source
)
throws Exception {
super(FileBasedTileSource.getSource(source[0].getName()), pRegisterReceiver);
List<IArchiveFile> files = new ArrayList<IArchiveFile>();
for (int i=0; i < source.length; i++){
IArchiveFile temp=ArchiveFileFactory.getArchiveFile(source[i]);
if (temp!=null)
files.add(temp);
else{
Log.w(IMapView.LOGTAG, "Skipping " + source[i] + ", no tile provider is registered to handle the file extension");
}
}
archives = new IArchiveFile[files.size()];
archives=files.toArray(archives);
mTileProviderList.add(new MapTileFileArchiveProvider(pRegisterReceiver, getTileSource(), archives));
}
public IArchiveFile[] getArchives(){
return archives;
}
public void detach() {
if (archives!=null){
for (int i=0; i < archives.length; i++){
archives[i].close();
}
}
super.detach();
}
}