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); + } +}