// Created by plusminus on 01:08:10 - 12.10.2008
package org.androad.ui.map;
import java.util.List;
import org.osmdroid.ResourceProxy;
import org.osmdroid.views.overlay.Overlay;
import org.osmdroid.views.overlay.OverlayManager;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.tileprovider.util.CloudmadeUtil;
import org.androad.R;
import org.androad.osm.OpenStreetMapActivity;
import org.androad.osm.views.overlay.OSMMapViewSimpleTraceOverlay;
import org.androad.osm.views.util.OSMMapGoogleRenderer;
import org.androad.osm.views.util.OSMMapMicrosoftRenderer;
import org.androad.osm.views.util.OSMMapYahooRenderer;
import org.androad.preferences.PreferenceConstants;
import org.androad.preferences.Preferences;
import org.androad.ui.map.overlay.ColorSchemeOverlay;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
public abstract class OpenStreetMapAndNavBaseActivity extends OpenStreetMapActivity {
// ===========================================================
// Constants
// ===========================================================
private static final int MENU_SHOWTRACE_ID = 100;
private static final int MENU_SUBMITTRACE_ID = MENU_SHOWTRACE_ID + 1;
// ===========================================================
// Fields
// ===========================================================
protected boolean mMenuVoiceEnabled = false;
//
// protected boolean mIsLandScapeMode = false;
protected ColorSchemeOverlay mColorSchemeOverlay;
protected OSMMapViewSimpleTraceOverlay mSimpleTraceOverlay;
// ===========================================================
// Constructors
// ===========================================================
@Override
protected void onCreate(final Bundle savedInstanceState) {
this.onCreate(savedInstanceState, true, true);
}
/** Called when the activity is first created.
* @param savedInstanceState
* @param pDoGPSRecordingAndContributing If <code>true</code>, it automatically contributes to the OpenStreetMap Project in the background.
* @param pShowTitleBarInMap <code>true</code> if the title bar should remain visible.
*/
@Override
protected void onCreate(final Bundle savedInstanceState, final boolean pDoGPSRecordingAndContributing, final boolean pShowTitleBarInMap) {
super.onCreate(savedInstanceState, pDoGPSRecordingAndContributing, pShowTitleBarInMap);
final boolean showTitleBarInMap = Preferences.getShowTitleBarInMap(this);
/* The app-title-bar just takes some pixels away without being useful. */
if(!showTitleBarInMap) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
}
// Cloudmap
CloudmadeUtil.retrieveCloudmadeKey(this.getApplicationContext());
// Add google maps
final int size = TileSourceFactory.getTileSources().size();
TileSourceFactory.addTileSource(
new OSMMapGoogleRenderer("Google Maps", ResourceProxy.string.unknown, 0, 19, 256, ".png",
size, "http://mt0.google.com/vt/lyrs=m@127&"));
TileSourceFactory.addTileSource(
new OSMMapGoogleRenderer("Google Maps Satellite", ResourceProxy.string.unknown, 0, 19, 256, ".jpg",
size+1, "http://mt0.google.com/vt/lyrs=s@127,h@127&"));
TileSourceFactory.addTileSource(
new OSMMapGoogleRenderer("Google Maps Terrain", ResourceProxy.string.unknown, 0, 15, 256, ".jpg",
size+2, "http://mt0.google.com/vt/lyrs=t@127,r@127&"));
// Add yahoo maps
TileSourceFactory.addTileSource(
new OSMMapYahooRenderer("Yahoo Maps", ResourceProxy.string.unknown, 0, 17, 256, ".jpg",
size+3, "http://maps.yimg.com/hw/tile?"));
TileSourceFactory.addTileSource(
new OSMMapYahooRenderer("Yahoo Maps Satellite", ResourceProxy.string.unknown, 0, 17, 256, ".jpg",
size+4, "http://maps.yimg.com/ae/ximg?"));
// Add microsoft maps
TileSourceFactory.addTileSource(
new OSMMapMicrosoftRenderer("Microsoft Maps", ResourceProxy.string.unknown, 0, 19, 256, ".png",
size+5, "http://r0.ortho.tiles.virtualearth.net/tiles/r"));
TileSourceFactory.addTileSource(
new OSMMapMicrosoftRenderer("Microsoft Earth", ResourceProxy.string.unknown, 0, 19, 256, ".jpg",
size+6, "http://a0.ortho.tiles.virtualearth.net/tiles/a"));
TileSourceFactory.addTileSource(
new OSMMapMicrosoftRenderer("Microsoft Hybrid", ResourceProxy.string.unknown, 0, 19, 256, ".jpg",
size+7, "http://h0.ortho.tiles.virtualearth.net/tiles/h"));
this.onSetupContentView();
// Add multi touch zoom
this.mOSMapView.setBuiltInZoomControls(false);
this.mOSMapView.setMultiTouchControls(true);
final OverlayManager overlaymanager = this.mOSMapView.getOverlayManager();
this.mSimpleTraceOverlay = new OSMMapViewSimpleTraceOverlay(this, super.getRouteRecorder().getRecordedGeoPoints(), PreferenceConstants.PREF_DISPLAYQUALITY_HIGH);
this.mSimpleTraceOverlay.setEnabled(false);
overlaymanager.add(this.mSimpleTraceOverlay);
this.mColorSchemeOverlay = new ColorSchemeOverlay(this);
overlaymanager.add(this.mColorSchemeOverlay);
this.mMenuVoiceEnabled = Preferences.getMenuVoiceEnabled(this);
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
@Override
protected void onResume() {
this.mColorSchemeOverlay.setColorScheme(Preferences.getSharedThemeID(this));
this.setRequestedOrientation(Preferences.getRequestedScreenOrientation(this));
super.onResume();
}
protected abstract void onSetupContentView();
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
int pos = 100;
{ // Trace-Item
menu.add(pos, MENU_SHOWTRACE_ID, pos, getString(R.string.maps_menu_trace_show))
.setIcon(R.drawable.trace)
.setAlphabeticShortcut('t');
pos++;
}
{ // Submit-Item
menu.add(pos, MENU_SUBMITTRACE_ID, pos, getString(R.string.maps_menu_trace_submit))
.setIcon(R.drawable.trace_submit)
.setAlphabeticShortcut('s');
pos++;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuItemSelected(final int featureId, final MenuItem item) {
switch(item.getItemId()){
case MENU_SHOWTRACE_ID:
this.mSimpleTraceOverlay.setEnabled(!this.mSimpleTraceOverlay.isEnabled());
return true;
case MENU_SUBMITTRACE_ID:
disableDoGPSRecordingAndContributing(true);
enableDoGPSRecordingAndContributing();
return true;
default:
return super.onMenuItemSelected(featureId, item);
}
}
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
/* Refresh Show/Hide Trace item. */
menu.findItem(MENU_SHOWTRACE_ID).setTitle((this.mSimpleTraceOverlay.isEnabled()) ? R.string.maps_menu_trace_hide : R.string.maps_menu_trace_show);
return super.onPrepareOptionsMenu(menu);
}
@Override
public void disableDoGPSRecordingAndContributing(final boolean pContributdeCurrentRoute) {
super.disableDoGPSRecordingAndContributing(pContributdeCurrentRoute);
/* Make the Overlay use the new Polyline. */
this.mSimpleTraceOverlay.setPolyline(super.getRouteRecorder().getRecordedGeoPoints());
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}