package org.osmdroid.tileprovider;

import java.util.LinkedHashMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

public class LRUMapTileCache extends LinkedHashMap<MapTile, Drawable> {

	private static final Logger logger = LoggerFactory.getLogger(LRUMapTileCache.class);

	private static final long serialVersionUID = -541142277575493335L;

	private int mCapacity;

	public LRUMapTileCache(final int aCapacity) {
		super(aCapacity + 2, 0.1f, true);
		mCapacity = aCapacity;
	}

	public void ensureCapacity(final int aCapacity) {
		if (aCapacity > mCapacity) {
			logger.info("Tile cache increased from " + mCapacity + " to " + aCapacity);
			mCapacity = aCapacity;
		}
	}

	@Override
	public Drawable remove(final Object aKey) {
		final Drawable drawable = super.remove(aKey);
		if (drawable instanceof BitmapDrawable) {
			final Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
			if (bitmap != null) {
				bitmap.recycle();
			}
		}
		return drawable;
	}

	@Override
	public void clear() {
		// remove them all individually so that they get recycled
		while (!isEmpty()) {
			remove(keySet().iterator().next());
		}

		// and then clear
		super.clear();
	}

	@Override
	protected boolean removeEldestEntry(final java.util.Map.Entry<MapTile, Drawable> aEldest) {
		if (size() > mCapacity) {
			remove(aEldest.getKey());
			// don't return true because we've already removed it
		}
		return false;
	}
}

@@ -62,16 +62,95 @@
 shMap;%0A%0A
+import org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants;%0A
 import o
@@ -393,16 +393,63 @@
 rawable%3E
+%0A%09implements OpenStreetMapTileProviderConstants
  %7B%0A%0A%09pri
@@ -1566,31 +1566,138 @@
 %0A%09%09%09
-remove(aEldest.getKey()
+final MapTile eldest = aEldest.getKey();%0A%09%09%09if (DEBUGMODE) %7B%0A%09%09%09%09logger.debug(%22Remove old tile: %22 + eldest);%0A%09%09%09%7D%0A%09%09%09remove(eldest
 );%0A%09

add a debug log message