package de.blau.android.services.util; import java.util.HashSet; import java.util.concurrent.ExecutorService; import de.blau.android.services.IMapTileProviderCallback; /** * * <br/> * This class was taken from OpenStreetMapViewer (original package org.andnav.osm) in 2010-06 * by Marcus Wolschon to be integrated into the de.blau.androin * OSMEditor. * @author Nicolas Gramlich * @author Marcus Wolschon <Marcus@Wolschon.biz> * */ public abstract class MapAsyncTileProvider { public static final int IOERR = 1; public static final int DOESNOTEXIST = 2; public static final int NONETWORK = 3; ExecutorService mThreadPool; private final HashSet<String> mPending = new HashSet<String>(); public void loadMapTileAsync(final MapTile aTile, final IMapTileProviderCallback aCallback) { final String tileID = aTile.toId(); if(mPending.contains(tileID)) return; mPending.add(tileID); mThreadPool.execute(getTileLoader(aTile, aCallback)); } protected abstract Runnable getTileLoader(final MapTile aTile, final IMapTileProviderCallback aCallback); abstract class TileLoader implements Runnable { final MapTile mTile; final IMapTileProviderCallback mCallback; public TileLoader(final MapTile aTile, final IMapTileProviderCallback aCallback) { mTile = aTile; mCallback = aCallback; } void finished() { mPending.remove(mTile.toId()); } } }