diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..a4763d1
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..2d0e361
--- /dev/null
+++ b/.project
@@ -0,0 +1,33 @@
+
+
+ osmosa-viewer
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9e11528
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Tue Apr 24 12:16:17 WIT 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100644
index 0000000..50f2916
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libs/osmdroid-android-3.0.7.jar b/libs/osmdroid-android-3.0.7.jar
new file mode 100644
index 0000000..c712e61
Binary files /dev/null and b/libs/osmdroid-android-3.0.7.jar differ
diff --git a/libs/osmdroid-third-party-3.0.7.jar b/libs/osmdroid-third-party-3.0.7.jar
new file mode 100644
index 0000000..1ca284f
Binary files /dev/null and b/libs/osmdroid-third-party-3.0.7.jar differ
diff --git a/libs/slf4j-android-1.6.1-RC1.jar b/libs/slf4j-android-1.6.1-RC1.jar
new file mode 100644
index 0000000..480348f
Binary files /dev/null and b/libs/slf4j-android-1.6.1-RC1.jar differ
diff --git a/proguard-project.txt b/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/project.properties b/project.properties
new file mode 100644
index 0000000..cc924e7
--- /dev/null
+++ b/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=Google Inc.:Google APIs:7
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..e45d6f2
Binary files /dev/null and b/res/drawable-hdpi/ic_launcher.png differ
diff --git a/res/drawable-ldpi/ic_launcher.png b/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000..cd002e5
Binary files /dev/null and b/res/drawable-ldpi/ic_launcher.png differ
diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c54706d
Binary files /dev/null and b/res/drawable-mdpi/ic_launcher.png differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..13081f5
Binary files /dev/null and b/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/res/drawable/marker_default.png b/res/drawable/marker_default.png
new file mode 100644
index 0000000..007fda2
Binary files /dev/null and b/res/drawable/marker_default.png differ
diff --git a/res/layout/main.xml b/res/layout/main.xml
new file mode 100644
index 0000000..fd1b59e
--- /dev/null
+++ b/res/layout/main.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/popup.xml b/res/layout/popup.xml
new file mode 100644
index 0000000..20c3b1d
--- /dev/null
+++ b/res/layout/popup.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml
new file mode 100644
index 0000000..72ae124
--- /dev/null
+++ b/res/menu/main_menu.xml
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
new file mode 100644
index 0000000..60e9806
--- /dev/null
+++ b/res/values/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Osmosa Viewer
+ Change Server
+
\ No newline at end of file
diff --git a/src/net/osmosa/viewer/Constant.java b/src/net/osmosa/viewer/Constant.java
new file mode 100644
index 0000000..bde7147
--- /dev/null
+++ b/src/net/osmosa/viewer/Constant.java
@@ -0,0 +1,9 @@
+package net.osmosa.viewer;
+
+import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase;
+import org.osmdroid.tileprovider.tilesource.XYTileSource;
+
+public class Constant {
+ public static final OnlineTileSourceBase OSMOSA_TILE = new XYTileSource("OSMOSA-ID", null, 3, 18, 256, ".png",
+ "http://www.osmosa.net/osm_tiles3/");
+}
diff --git a/src/net/osmosa/viewer/MainActivity.java b/src/net/osmosa/viewer/MainActivity.java
new file mode 100644
index 0000000..d22fa4f
--- /dev/null
+++ b/src/net/osmosa/viewer/MainActivity.java
@@ -0,0 +1,121 @@
+package net.osmosa.viewer;
+
+import static net.osmosa.viewer.Constant.OSMOSA_TILE;
+
+import java.util.ArrayList;
+
+import net.osmosa.viewer.overlay.PointItemizedOverlay;
+
+import org.osmdroid.tileprovider.MapTileProviderBasic;
+import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase;
+import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
+import org.osmdroid.util.GeoPoint;
+import org.osmdroid.views.MapView;
+import org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener;
+import org.osmdroid.views.overlay.OverlayItem;
+import org.osmdroid.views.overlay.TilesOverlay;
+
+import android.app.Activity;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.SubMenu;
+import android.widget.RelativeLayout;
+import android.widget.RelativeLayout.LayoutParams;
+import android.widget.Toast;
+
+public class MainActivity extends Activity {
+
+ private MapView osmMapview;
+ private PointItemizedOverlay mLocationOverlay;
+
+ private static final int TILE_SOURCE = Menu.FIRST;
+ private static final int OSMOSA = TILE_SOURCE + 1;
+ private static final int OPENSTREETMAP = OSMOSA + 1;
+ private boolean isOsmosa = true;
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ RelativeLayout relativeLayout = new RelativeLayout(this);
+
+ osmMapview = new MapView(this, 256);
+ relativeLayout.addView(osmMapview, new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,
+ LayoutParams.FILL_PARENT));
+
+ osmMapview.setBuiltInZoomControls(true);
+ osmMapview.setMultiTouchControls(true);
+ osmMapview.getController().setZoom(2);
+ osmMapview.getController().setCenter(new GeoPoint((int) (-2.56 * 1E6), (int) (116.97 * 1E6)));
+
+ changeServer(OSMOSA_TILE);
+ {
+ ArrayList items = new ArrayList();
+ items.add(new OverlayItem("Cempaka Putih", "Meruvian", new GeoPoint((int) (-6.29 * 1E6), (int) (106.75 * 1E6))));
+ items.add(new OverlayItem("Blitar", "Home", new GeoPoint((int) (-8.10 * 1E6), (int) (112.16 * 1E6))));
+ mLocationOverlay = new PointItemizedOverlay(items,
+ this.getResources().getDrawable(R.drawable.marker_default), itemGestureListener, this);
+ osmMapview.getOverlays().add(mLocationOverlay);
+ }
+
+ setContentView(relativeLayout);
+ }
+
+ private OnItemGestureListener itemGestureListener = new OnItemGestureListener() {
+ @Override
+ public boolean onItemLongPress(int index, OverlayItem item) {
+ Toast.makeText(MainActivity.this, item.mTitle, Toast.LENGTH_LONG).show();
+ return true;
+ }
+
+ @Override
+ public boolean onItemSingleTapUp(int index, OverlayItem item) {
+ Toast.makeText(MainActivity.this, item.mTitle, Toast.LENGTH_LONG).show();
+ return false;
+ }
+ };
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ SubMenu subMenu = menu.addSubMenu(Menu.CATEGORY_CONTAINER, TILE_SOURCE, Menu.NONE, "Choose Tile Source");
+ {
+ subMenu.add(Menu.CATEGORY_SECONDARY, OSMOSA, Menu.NONE, "osmosa.net");
+ subMenu.add(Menu.CATEGORY_SECONDARY, OPENSTREETMAP, Menu.NONE, "openstreetmap.org");
+ }
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case OPENSTREETMAP:
+ if (isOsmosa)
+ changeServer(TileSourceFactory.MAPNIK);
+ isOsmosa = false;
+ return true;
+ case OSMOSA:
+ if (!isOsmosa)
+ changeServer(OSMOSA_TILE);
+ isOsmosa = true;
+ return true;
+ }
+ return false;
+ }
+
+ public void changeServer(OnlineTileSourceBase tileSource) {
+ MapTileProviderBasic tileProvider = new MapTileProviderBasic(getApplicationContext());
+ tileProvider.setTileSource(tileSource);
+
+ TilesOverlay tilesOverlay = new TilesOverlay(tileProvider, this.getBaseContext());
+ tilesOverlay.setLoadingBackgroundColor(Color.TRANSPARENT);
+
+ if (osmMapview.getOverlays().isEmpty()) {
+ osmMapview.getOverlays().add(tilesOverlay);
+ } else {
+ osmMapview.getOverlays().set(0, tilesOverlay);
+ }
+ osmMapview.invalidate();
+ }
+}
\ No newline at end of file
diff --git a/src/net/osmosa/viewer/overlay/PointItemizedOverlay.java b/src/net/osmosa/viewer/overlay/PointItemizedOverlay.java
new file mode 100644
index 0000000..8ac4ad8
--- /dev/null
+++ b/src/net/osmosa/viewer/overlay/PointItemizedOverlay.java
@@ -0,0 +1,30 @@
+package net.osmosa.viewer.overlay;
+
+import java.util.List;
+
+import org.osmdroid.DefaultResourceProxyImpl;
+import org.osmdroid.views.MapView;
+import org.osmdroid.views.overlay.ItemizedIconOverlay;
+import org.osmdroid.views.overlay.OverlayItem;
+import org.osmdroid.views.overlay.OverlayItem.HotspotPlace;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+
+public class PointItemizedOverlay- extends ItemizedIconOverlay
- {
+
+ private Drawable marker;
+
+ public PointItemizedOverlay(List
- aList, Drawable pMarker, OnItemGestureListener
- aOnItemTapListener,
+ Context ctx) {
+ super(aList, pMarker, aOnItemTapListener, new DefaultResourceProxyImpl(ctx));
+ this.marker = pMarker;
+ }
+
+ @Override
+ public void draw(Canvas c, MapView osmv, boolean shadow) {
+ super.draw(c, osmv, shadow);
+ boundToHotspot(marker, HotspotPlace.BOTTOM_CENTER);
+ }
+}