package id.ac.itats.skripsi.util;
import id.ac.itats.skripsi.astarku.RoutingEngine;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.mapsforge.core.graphics.Bitmap;
import org.mapsforge.core.graphics.Paint;
import org.mapsforge.core.graphics.Style;
import org.mapsforge.core.model.LatLong;
import org.mapsforge.map.android.graphics.AndroidGraphicFactory;
import org.mapsforge.map.layer.Layer;
import org.mapsforge.map.layer.cache.FileSystemTileCache;
import org.mapsforge.map.layer.cache.InMemoryTileCache;
import org.mapsforge.map.layer.cache.TileCache;
import org.mapsforge.map.layer.cache.TwoLevelTileCache;
import org.mapsforge.map.layer.overlay.Marker;
import org.mapsforge.map.layer.renderer.TileRendererLayer;
import org.mapsforge.map.model.MapViewPosition;
import org.mapsforge.map.rendertheme.InternalRenderTheme;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.MeasureSpec;
public final class MapviewUtils {
private static String TAG = "MapviewUtils";
@TargetApi(11)
public static void enableHome(Activity a) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Show the Up button in the action bar.
a.getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
public static void setBackground(View view, Drawable background) {
if (android.os.Build.VERSION.SDK_INT >= 16) {
view.setBackgroundDrawable(background);
} else {
view.setBackgroundDrawable(background);
}
}
public static TileCache createExternalStorageTileCache(Context c, String id) {
TileCache firstLevelTileCache = new InMemoryTileCache(32);
String cacheDirectoryName = c.getExternalCacheDir().getAbsolutePath() + File.separator + id;
File cacheDirectory = new File(cacheDirectoryName);
if (!cacheDirectory.exists()) {
cacheDirectory.mkdir();
}
TileCache secondLevelTileCache = new FileSystemTileCache(1024, cacheDirectory, AndroidGraphicFactory.INSTANCE);
return new TwoLevelTileCache(firstLevelTileCache, secondLevelTileCache);
}
public static Marker createMarker(Context c, int resourceIdentifier, LatLong latLong) {
Drawable drawable = c.getResources().getDrawable(resourceIdentifier);
Bitmap bitmap = AndroidGraphicFactory.convertToBitmap(drawable);
return new Marker(latLong, bitmap, 0, -bitmap.getHeight() / 2);
}
public static Paint createPaint(int color, int strokeWidth, Style style) {
Paint paint = AndroidGraphicFactory.INSTANCE.createPaint();
paint.setColor(color);
paint.setStrokeWidth(strokeWidth);
paint.setStyle(style);
paint.setDashPathEffect(new float[] { 25, 15 });
return paint;
}
public static TileCache createTileCache(Context c, String id) {
TileCache firstLevelTileCache = new InMemoryTileCache(32);
File cacheDirectory = c.getDir(id, Context.MODE_PRIVATE);
TileCache secondLevelTileCache = new FileSystemTileCache(1024, cacheDirectory, AndroidGraphicFactory.INSTANCE);
return new TwoLevelTileCache(firstLevelTileCache, secondLevelTileCache);
}
public static Layer createTileRendererLayer(TileCache tileCache, MapViewPosition mapViewPosition, File mapFile) {
if(!mapFile.exists()){
copyMap();
}
TileRendererLayer tileRendererLayer = new TileRendererLayer(tileCache, mapViewPosition,
AndroidGraphicFactory.INSTANCE);
tileRendererLayer.setMapFile(mapFile);
tileRendererLayer.setXmlRenderTheme(InternalRenderTheme.OSMARENDER);
tileRendererLayer.setTextScale(1.5f);
return tileRendererLayer;
}
public static Bitmap viewToBitmap(Context c, View view) {
view.measure(MeasureSpec.getSize(view.getMeasuredWidth()), MeasureSpec.getSize(view.getMeasuredHeight()));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.setDrawingCacheEnabled(true);
Drawable drawable = new BitmapDrawable(c.getResources(), android.graphics.Bitmap.createBitmap(view
.getDrawingCache()));
view.setDrawingCacheEnabled(false);
return AndroidGraphicFactory.convertToBitmap(drawable);
}
private static void copyMap(){
String name = "surabaya_new.map";
String path = Environment.getExternalStorageDirectory()+ "/routingengine/maps/";
File dir = new File(path);
File file = new File(path + name);
if(!dir.exists()){
dir.mkdirs();
}
if(!file.exists()){
try {
InputStream mInput = RoutingEngine.getAppContext().getAssets().open(name);
String outFileName = path + name;
OutputStream mOutput = new FileOutputStream(outFileName);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer)) > 0) {
mOutput.write(mBuffer, 0, mLength);
}
mOutput.flush();
mOutput.close();
mInput.close();
Log.i(TAG, "copy succes..");
} catch(IOException e) {
throw new Error(e);
}
}
}
private MapviewUtils() {
throw new IllegalStateException();
}
}