Introduce Plugin api

This commit is contained in:
Victor Shcherb 2012-05-21 00:09:13 +02:00
parent a4ed0d2509
commit 84d36f084c
14 changed files with 321 additions and 164 deletions

View file

@ -305,7 +305,7 @@ public class IndexUploader {
File zFile = new File(f.getParentFile(), unzipped.getName() + ".zip");
zip(files, zFile, description, timestampCreated);
uploadIndex(zFile, description, uploadCredentials);
uploadIndex(f, zFile, description, uploadCredentials);
} finally {
if (!f.getName().equals(unzipped.getName()) ||
(targetDirectory != null && !targetDirectory.equals(directory))) {
@ -491,13 +491,12 @@ public class IndexUploader {
}
private void uploadIndex(File zipFile, String summary, UploadCredentials uc) {
private void uploadIndex(File srcFile, File zipFile, String summary, UploadCredentials uc) {
double mbLengh = (double) zipFile.length() / MB;
String fileName = zipFile.getName();
if (mbLengh < MIN_SIZE_TO_UPLOAD) {
log.info("Skip uploading index due to size " + fileName);
// do not upload small files
return;
}
try {
log.info("Upload index " + fileName);
@ -510,6 +509,9 @@ public class IndexUploader {
toBackup.delete();
}
toUpload.renameTo(toBackup);
if(srcFile.equals(zipFile)){
srcFile.delete();
}
}
} catch (IOException e) {
log.error("Input/output exception uploading " + fileName, e);

View file

@ -141,7 +141,7 @@ public class NavigationInfo {
public NavigationInfo(final Context context) {
this.context = context;
settings = OsmandApplication.getSettings();
settings = ((OsmandApplication) context.getApplicationContext()).getSettings();
currentLocation = null;
lastDirection = new RelativeDirection();
lastNotificationTime = SystemClock.uptimeMillis();
@ -265,48 +265,47 @@ public class NavigationInfo {
// Show all available info
public void show(final LatLon point, Float heading) {
final List<String> attributes = new ArrayList<String>();
String item;
public void show(final LatLon point, Float heading) {
final List<String> attributes = new ArrayList<String>();
String item;
item = getDirectionString(point, heading);
if (item != null)
attributes.add(item);
item = getSpeedString();
if (item != null)
attributes.add(item);
item = getAccuracyString();
if (item != null)
attributes.add(item);
item = getAltitudeString();
if (item != null)
attributes.add(item);
if (attributes.isEmpty())
attributes.add(getString(R.string.no_info));
item = getDirectionString(point, heading);
if (item != null)
attributes.add(item);
item = getSpeedString();
if (item != null)
attributes.add(item);
item = getAccuracyString();
if (item != null)
attributes.add(item);
item = getAltitudeString();
if (item != null)
attributes.add(item);
if (attributes.isEmpty())
attributes.add(getString(R.string.no_info));
AlertDialog.Builder info = new AlertDialog.Builder(context);
if (point != null)
info.setPositiveButton(autoAnnounce ? R.string.auto_announce_off : R.string.auto_announce_on,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
autoAnnounce = !autoAnnounce;
dialog.cancel();
}
});
info.setNegativeButton(R.string.close, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
info.setItems(attributes.toArray(new String[attributes.size()]),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
info.show();
}
AlertDialog.Builder info = new AlertDialog.Builder(context);
if (point != null)
info.setPositiveButton(autoAnnounce ? R.string.auto_announce_off : R.string.auto_announce_on,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
autoAnnounce = !autoAnnounce;
dialog.cancel();
}
});
info.setNegativeButton(R.string.close, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
info.setItems(attributes.toArray(new String[attributes.size()]), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
info.show();
}
}

View file

@ -125,7 +125,7 @@ public class OsmandApplication extends Application {
* Application settings
* @return Reference to instance of OsmandSettings
*/
public static OsmandSettings getSettings() {
public OsmandSettings getSettings() {
if(osmandSettings == null) {
LOG.error("Trying to access settings before they were created");
}

View file

@ -0,0 +1,87 @@
package net.osmand.plus;
import gnu.trove.list.array.TIntArrayList;
import java.util.ArrayList;
import java.util.List;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.views.OsmandMapTileView;
public abstract class OsmandPlugin {
private static List<OsmandPlugin> plugins = new ArrayList<OsmandPlugin>();
static {
plugins.add(new OsmEditingPlugin());
}
public static List<OsmandPlugin> getAvailablePlugins(){
return plugins;
}
@SuppressWarnings("unchecked")
public static <T extends OsmandPlugin> T getEnabledPlugin(Class<T> clz) {
for(OsmandPlugin lr : plugins) {
if(clz.isInstance(lr)){
return (T) lr;
}
}
return null;
}
public abstract String getId();
/**
* Initialize plugin runs just after creation
*/
public abstract boolean init(OsmandApplication app);
/**
* ????
*/
public abstract void updateLayers(OsmandMapTileView mapView);
public static void refreshLayers(OsmandMapTileView mapView) {
for (OsmandPlugin plugin : plugins) {
plugin.updateLayers(mapView);
}
}
public abstract void registerLayers(MapActivity activity);
public static void createLayers(OsmandMapTileView mapView, MapActivity activity) {
for (OsmandPlugin plugin : plugins) {
plugin.registerLayers(activity);
}
}
public abstract void mapActivityCreate(MapActivity activity);
public static void onMapActivityCreate(MapActivity activity) {
for (OsmandPlugin plugin : plugins) {
plugin.mapActivityCreate(activity);
}
}
public abstract boolean handleContextMenuAction(int resId, double latitude, double longitude);
public abstract void registerContextMenuActions(double latitude, double longitude, TIntArrayList list);
public static void registerContextMenu(double latitude, double longitude, TIntArrayList list) {
for (OsmandPlugin plugin : plugins) {
plugin.registerContextMenuActions(latitude, longitude, list);
}
}
public static boolean contextMenuAction(int resId, double latitude, double longitude) {
for (OsmandPlugin plugin : plugins) {
if(plugin.handleContextMenuAction(resId, latitude, longitude)){
return true;
}
}
return false;
}
}

View file

@ -21,6 +21,7 @@ import net.osmand.osm.LatLon;
import net.osmand.plus.BusyIndicator;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.ResourceManager;
@ -29,7 +30,6 @@ import net.osmand.plus.routing.RouteAnimation;
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.views.AnimateDraggingMapThread;
import net.osmand.plus.views.MapTileLayer;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.PointLocationLayer;
import android.app.Activity;
@ -109,7 +109,6 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
/** Called when the activity is first created. */
private OsmandMapTileView mapView;
final private MapActivityActions mapActions = new MapActivityActions(this);
private EditingPOIActivity poiActions;
final private MapActivityLayers mapLayers = new MapActivityLayers(this);
private NavigationInfo navigationInfo;
@ -183,7 +182,7 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
}
});
poiActions = new EditingPOIActivity(this);
getMyApplication().getResourceManager().getMapTileDownloader().addDownloaderCallback(new IMapDownloaderCallback(){
@Override
public void tileDownloaded(DownloadRequest request) {
@ -235,8 +234,7 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
}
addDialogProvider(mapActions);
addDialogProvider(poiActions);
addDialogProvider(mapLayers.getOsmBugsLayer());
OsmandPlugin.onMapActivityCreate(this);
}
@Override
@ -385,7 +383,7 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
return ((OsmandApplication) getApplication());
}
private void addDialogProvider(DialogProvider dp) {
public void addDialogProvider(DialogProvider dp) {
dialogProviders.add(dp);
}
@ -1312,84 +1310,18 @@ public class MapActivity extends AccessibleActivity implements IMapLocationListe
public void contextMenuPoint(final double latitude, final double longitude){
contextMenuPoint(latitude, longitude, null, null);
mapActions.contextMenuPoint(latitude, longitude, null, null);
}
public void contextMenuPoint(final double latitude, final double longitude, List<String> additionalItems,
final DialogInterface.OnClickListener additionalActions){
Builder builder = new AlertDialog.Builder(this);
final int sizeAdditional = additionalActions == null || additionalItems == null ? 0 : additionalItems.size();
List<String> actions = new ArrayList<String>();
if(sizeAdditional > 0){
actions.addAll(additionalItems);
}
final int[] contextMenuStandardActions = new int[]{
R.string.context_menu_item_navigate_point,
R.string.context_menu_item_show_route,
R.string.context_menu_item_search,
R.string.context_menu_item_add_favorite,
R.string.context_menu_item_share_location,
R.string.context_menu_item_create_poi,
R.string.context_menu_item_add_waypoint,
R.string.context_menu_item_open_bug,
//MapTileLayer menu actions
R.string.context_menu_item_update_map,
R.string.context_menu_item_download_map
};
int actionsToUse = (mapView.getMainLayer() instanceof MapTileLayer) ? contextMenuStandardActions.length : contextMenuStandardActions.length - 2;
for(int j = 0; j<actionsToUse; j++){
actions.add(getResources().getString(contextMenuStandardActions[j]));
}
builder.setItems(actions.toArray(new String[actions.size()]), new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
if(which < sizeAdditional){
additionalActions.onClick(dialog, which);
return;
}
int standardId = contextMenuStandardActions[which - sizeAdditional];
if(standardId == R.string.context_menu_item_navigate_point){
navigateToPoint(new LatLon(latitude, longitude));
} else if(standardId == R.string.context_menu_item_show_route){
mapActions.getDirections(latitude, longitude, false);
} else if(standardId == R.string.context_menu_item_search){
Intent intent = new Intent(MapActivity.this, SearchActivity.class);
intent.putExtra(SearchActivity.SEARCH_LAT, latitude);
intent.putExtra(SearchActivity.SEARCH_LON, longitude);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else if(standardId == R.string.context_menu_item_add_favorite){
mapActions.addFavouritePoint(latitude, longitude);
} else if(standardId == R.string.context_menu_item_share_location){
mapActions.shareLocation(latitude, longitude, mapView.getZoom());
} else if(standardId == R.string.context_menu_item_create_poi){
getPoiActions().showCreateDialog(latitude, longitude);
} else if(standardId == R.string.context_menu_item_add_waypoint){
mapActions.addWaypoint(latitude, longitude);
} else if(standardId == R.string.context_menu_item_open_bug){
mapLayers.getOsmBugsLayer().openBug(latitude, longitude);
} else if(standardId == R.string.context_menu_item_update_map){
mapActions.reloadTile(mapView.getZoom(), latitude, longitude);
} else if(standardId == R.string.context_menu_item_download_map){
DownloadTilesDialog dlg = new DownloadTilesDialog(MapActivity.this,
(OsmandApplication) getApplication(), mapView);
dlg.openDialog();
}
}
});
builder.create().show();
final DialogInterface.OnClickListener additionalActions) {
mapActions.contextMenuPoint(latitude, longitude, additionalItems, additionalActions);
}
public MapActivityActions getMapActions() {
return mapActions;
}
public EditingPOIActivity getPoiActions() {
return poiActions;
}
public MapActivityLayers getMapLayers() {
return mapLayers;
}

View file

@ -1,5 +1,7 @@
package net.osmand.plus.activities;
import gnu.trove.list.array.TIntArrayList;
import java.io.File;
import java.text.MessageFormat;
import java.util.ArrayList;
@ -22,9 +24,11 @@ import net.osmand.osm.MapUtils;
import net.osmand.plus.AmenityIndexRepositoryOdb;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.ResourceManager;
import net.osmand.plus.activities.search.SearchActivity;
import net.osmand.plus.routing.RouteProvider.GPXRouteParams;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.views.BaseMapLayer;
@ -710,6 +714,67 @@ public class MapActivityActions implements DialogProvider {
}
}
public void contextMenuPoint(final double latitude, final double longitude, List<String> additionalItems,
final DialogInterface.OnClickListener additionalActions) {
Builder builder = new AlertDialog.Builder(mapActivity);
final int sizeAdditional = additionalActions == null || additionalItems == null ? 0 : additionalItems.size();
List<String> actions = new ArrayList<String>();
if (sizeAdditional > 0) {
actions.addAll(additionalItems);
}
final OsmandMapTileView mapView = mapActivity.getMapView();
final TIntArrayList contextMenuStandardActions = new TIntArrayList();
contextMenuStandardActions.add(new int[] { R.string.context_menu_item_navigate_point,
R.string.context_menu_item_show_route, R.string.context_menu_item_search, R.string.context_menu_item_add_favorite,
R.string.context_menu_item_share_location, R.string.context_menu_item_add_waypoint});
OsmandPlugin.registerContextMenu(latitude, longitude, contextMenuStandardActions);
if(mapView.getMainLayer() instanceof MapTileLayer) {
contextMenuStandardActions.add(R.string.context_menu_item_update_map);
contextMenuStandardActions.add(R.string.context_menu_item_download_map);
}
for (int j = 0; j < contextMenuStandardActions.size(); j++) {
actions.add(mapActivity.getString(contextMenuStandardActions.get(j)));
}
builder.setItems(actions.toArray(new String[actions.size()]), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which < sizeAdditional) {
additionalActions.onClick(dialog, which);
return;
}
int standardId = contextMenuStandardActions.get(which - sizeAdditional);
if(OsmandPlugin.contextMenuAction(standardId, latitude, longitude)) {
// Plugin action
} else if (standardId == R.string.context_menu_item_navigate_point) {
mapActivity.navigateToPoint(new LatLon(latitude, longitude));
} else if (standardId == R.string.context_menu_item_show_route) {
getDirections(latitude, longitude, false);
} else if (standardId == R.string.context_menu_item_search) {
Intent intent = new Intent(mapActivity, SearchActivity.class);
intent.putExtra(SearchActivity.SEARCH_LAT, latitude);
intent.putExtra(SearchActivity.SEARCH_LON, longitude);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mapActivity.startActivity(intent);
} else if (standardId == R.string.context_menu_item_add_favorite) {
addFavouritePoint(latitude, longitude);
} else if (standardId == R.string.context_menu_item_share_location) {
shareLocation(latitude, longitude, mapView.getZoom());
} else if (standardId == R.string.context_menu_item_add_waypoint) {
addWaypoint(latitude, longitude);
} else if (standardId == R.string.context_menu_item_update_map) {
reloadTile(mapView.getZoom(), latitude, longitude);
} else if (standardId == R.string.context_menu_item_download_map) {
DownloadTilesDialog dlg = new DownloadTilesDialog(mapActivity, (OsmandApplication) mapActivity.getApplication(), mapView);
dlg.openDialog();
}
}
});
builder.create().show();
}
@Override
public Dialog onCreateDialog(int id) {

View file

@ -23,6 +23,7 @@ import net.osmand.data.AmenityType;
import net.osmand.map.ITileSource;
import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.OsmandSettings.CommonPreference;
import net.osmand.plus.PoiFilter;
@ -40,7 +41,6 @@ import net.osmand.plus.views.GPXLayer;
import net.osmand.plus.views.MapControlsLayer;
import net.osmand.plus.views.MapInfoLayer;
import net.osmand.plus.views.MapTileLayer;
import net.osmand.plus.views.OsmBugsLayer;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.POIMapLayer;
import net.osmand.plus.views.PointLocationLayer;
@ -84,7 +84,6 @@ public class MapActivityLayers {
private MapTileLayer underlayLayer;
private GPXLayer gpxLayer;
private RouteLayer routeLayer;
private OsmBugsLayer osmBugsLayer;
private POIMapLayer poiMapLayer;
private FavoritesLayer favoritesLayer;
private TransportStopsLayer transportStopsLayer;
@ -132,7 +131,7 @@ public class MapActivityLayers {
mapView.addLayer(routeLayer, 1);
// 2. osm bugs layer
osmBugsLayer = new OsmBugsLayer(activity);
// 3. poi layer
poiMapLayer = new POIMapLayer(activity);
// 4. favorites layer
@ -160,7 +159,8 @@ public class MapActivityLayers {
// 11. route info layer
mapControlsLayer = new MapControlsLayer(activity);
mapView.addLayer(mapControlsLayer, 11);
OsmandPlugin.createLayers(mapView, activity);
}
@ -173,13 +173,7 @@ public class MapActivityLayers {
mapView.removeLayer(transportStopsLayer);
}
}
if(mapView.getLayers().contains(osmBugsLayer) != settings.SHOW_OSM_BUGS.get()){
if(settings.SHOW_OSM_BUGS.get()){
mapView.addLayer(osmBugsLayer, 2);
} else {
mapView.removeLayer(osmBugsLayer);
}
}
if(mapView.getLayers().contains(poiMapLayer) != settings.SHOW_POI_OVER_MAP.get()){
if(settings.SHOW_POI_OVER_MAP.get()){
@ -196,6 +190,7 @@ public class MapActivityLayers {
mapView.removeLayer(favoritesLayer);
}
}
OsmandPlugin.refreshLayers(mapView);
updateGPXLayer();
}
@ -765,7 +760,4 @@ public class MapActivityLayers {
return poiMapLayer;
}
public OsmBugsLayer getOsmBugsLayer() {
return osmBugsLayer;
}
}

View file

@ -109,7 +109,7 @@ public class TipsAndTricksActivity {
dlg.setContentView(R.layout.tips_and_tricks);
dlg.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
final TextView tipDescription = (TextView) dlg.findViewById(R.id.TipDescription);
if (!OsmandApplication.getSettings().ACCESSIBILITY_EXTENSIONS.get())
if (!((OsmandApplication)ctx.getApplicationContext()).getSettings().ACCESSIBILITY_EXTENSIONS.get())
tipDescription.setMovementMethod(ScrollingMovementMethod.getInstance());
int nextInd = 0;
final TIntArrayList toShow = new TIntArrayList();

View file

@ -1,4 +1,4 @@
package net.osmand.plus.activities;
package net.osmand.plus.osmedit;
import java.text.MessageFormat;
import java.util.ArrayList;
@ -24,6 +24,9 @@ import net.osmand.osm.OpeningHoursParser.OpeningHoursRule;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.DialogProvider;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.OpeningHoursView;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;

View file

@ -1,4 +1,5 @@
package net.osmand.plus.views;
package net.osmand.plus.osmedit;
import java.io.BufferedReader;
import java.io.IOException;
@ -20,6 +21,10 @@ import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.DialogProvider;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.views.ContextMenuLayer.IContextMenuProvider;
import net.osmand.plus.views.OsmandMapLayer;
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
import net.osmand.plus.views.OsmandMapTileView;
import org.apache.commons.logging.Log;
@ -43,7 +48,7 @@ import android.view.WindowManager;
import android.widget.EditText;
import android.widget.Toast;
public class OsmBugsLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider, DialogProvider {
public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider, DialogProvider {
private static final Log log = LogUtil.getLog(OsmBugsLayer.class);
private final static int startZoom = 8;
@ -361,7 +366,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements ContextMenuLayer.ICo
String text = ((EditText)openBug.findViewById(R.id.BugMessage)).getText().toString();
String author = ((EditText)openBug.findViewById(R.id.AuthorName)).getText().toString();
// do not set name as author it is ridiculous in that case
OsmandApplication.getSettings().USER_OSM_BUG_NAME.set(author);
view.getApplication().getSettings().USER_OSM_BUG_NAME.set(author);
boolean bug = createNewBug(latitude, longitude, text, author);
if (bug) {
AccessibleToast.makeText(activity, activity.getResources().getString(R.string.osb_add_dialog_success), Toast.LENGTH_LONG).show();
@ -378,7 +383,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements ContextMenuLayer.ICo
public void openBug(final double latitude, final double longitude){
OsmandSettings settings = OsmandApplication.getSettings();
OsmandSettings settings = view.getApplication().getSettings();
openBugAlertDialog(latitude, longitude, "", settings.USER_OSM_BUG_NAME.get());
}
@ -392,7 +397,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements ContextMenuLayer.ICo
builder.setTitle(R.string.osb_comment_dialog_title);
final View view = activity.getLayoutInflater().inflate(R.layout.open_bug, null);
builder.setView(view);
((EditText)view.findViewById(R.id.AuthorName)).setText(OsmandApplication.getSettings().USER_OSM_BUG_NAME.get());
((EditText)view.findViewById(R.id.AuthorName)).setText(this.view.getApplication().getSettings().USER_OSM_BUG_NAME.get());
builder.setNegativeButton(R.string.default_buttons_cancel, null);
builder.setPositiveButton(R.string.osb_comment_dialog_add_button, new DialogInterface.OnClickListener() {
@Override
@ -400,7 +405,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements ContextMenuLayer.ICo
OpenStreetBug bug = (OpenStreetBug) args.getSerializable(KEY_BUG);
String text = ((EditText)view.findViewById(R.id.BugMessage)).getText().toString();
String author = ((EditText)view.findViewById(R.id.AuthorName)).getText().toString();
OsmandApplication.getSettings().USER_OSM_BUG_NAME.set(author);
OsmBugsLayer.this.view.getApplication().getSettings().USER_OSM_BUG_NAME.set(author);
boolean added = addingComment(bug.getId(), text, author);
if (added) {
AccessibleToast.makeText(activity, activity.getResources().getString(R.string.osb_comment_dialog_success), Toast.LENGTH_LONG).show();

View file

@ -0,0 +1,75 @@
package net.osmand.plus.osmedit;
import gnu.trove.list.array.TIntArrayList;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.views.OsmandMapTileView;
public class OsmEditingPlugin extends OsmandPlugin {
private static final String ID = "osm.editing.plugin";
private OsmandSettings settings;
@Override
public String getId() {
return ID;
}
@Override
public boolean init(OsmandApplication app) {
settings = app.getSettings();
return true;
}
private OsmBugsLayer osmBugsLayer;
private EditingPOIActivity poiActions;
@Override
public void updateLayers(OsmandMapTileView mapView){
if(mapView.getLayers().contains(osmBugsLayer) != settings.SHOW_OSM_BUGS.get()){
if(settings.SHOW_OSM_BUGS.get()){
mapView.addLayer(osmBugsLayer, 2);
} else {
mapView.removeLayer(osmBugsLayer);
}
}
}
@Override
public void registerLayers(MapActivity activity){
osmBugsLayer = new OsmBugsLayer(activity);
}
@Override
public void mapActivityCreate(MapActivity activity) {
poiActions = new EditingPOIActivity(activity);
activity.addDialogProvider(poiActions);
activity.addDialogProvider(osmBugsLayer);
}
public EditingPOIActivity getPoiActions() {
return poiActions;
}
@Override
public boolean handleContextMenuAction(int resId, final double latitude, final double longitude) {
if (resId == R.string.context_menu_item_create_poi) {
poiActions.showCreateDialog(latitude, longitude);
return true;
} else if (resId == R.string.context_menu_item_open_bug) {
osmBugsLayer.openBug(latitude, longitude);
return true;
}
return false;
}
@Override
public void registerContextMenuActions(double latitude, double longitude, TIntArrayList list) {
list.add(R.string.context_menu_item_create_poi);
list.add(R.string.context_menu_item_open_bug);
}
}

View file

@ -27,8 +27,6 @@ import android.widget.TextView;
public class ContextMenuLayer extends OsmandMapLayer {
public interface IContextMenuProvider {
public void collectObjectsFromPoint(PointF point, List<Object> o);
@ -41,7 +39,6 @@ public class ContextMenuLayer extends OsmandMapLayer {
public DialogInterface.OnClickListener getActionListener(List<String> actionsList, Object o);
}
private LatLon latLon;
private IContextMenuProvider selectedContextProvider;

View file

@ -11,11 +11,12 @@ import net.osmand.access.AccessibleToast;
import net.osmand.data.Amenity;
import net.osmand.data.AmenityType;
import net.osmand.osm.LatLon;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.PoiFilter;
import net.osmand.plus.R;
import net.osmand.plus.ResourceManager;
import net.osmand.plus.activities.EditingPOIActivity;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.render.RenderingIcons;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
@ -54,10 +55,8 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
private ResourceManager resourceManager;
private PoiFilter filter;
private DisplayMetrics dm;
private final MapActivity activity;
public POIMapLayer(MapActivity activity) {
this.activity = activity;
}
@ -307,30 +306,27 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
final int phoneIndex = a.getPhone() != null ? ind++ : -1;
final int siteIndex = a.getSite() != null ? ind++ : -1;
final int descriptionIndex = a.getDescription() != null ? ind++ : -1;
if(a.getDescription() != null){
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_showdescription));
}
if(a.getPhone() != null){
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_call));
}
if(a.getSite() != null){
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_website));
}
if(a.getDescription() != null){
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_showdescription));
final OsmEditingPlugin editingPlugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class);
final int modifyInd = editingPlugin != null ? ind++ : -1;
final int deleteInd = editingPlugin != null ? ind++ : -1;
if (editingPlugin != null) {
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_modify));
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_delete));
}
final int modifyInd = ind++;
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_modify));
final int deleteInd = ind++;
actionsList.add(this.view.getResources().getString(R.string.poi_context_menu_delete));
final EditingPOIActivity edit = activity.getPoiActions();
return new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == modifyInd) {
edit.showEditDialog(a);
} else if(which == deleteInd) {
edit.showDeleteDialog(a);
} else if (which == phoneIndex) {
if (which == phoneIndex) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:"+a.getPhone())); //$NON-NLS-1$
@ -350,6 +346,10 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
}
} else if (which == descriptionIndex) {
showDescriptionDialog(a);
} else if (which == modifyInd) {
editingPlugin.getPoiActions().showEditDialog(a);
} else if(which == deleteInd) {
editingPlugin.getPoiActions().showDeleteDialog(a);
} else {
}
}

View file

@ -75,7 +75,7 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer {
prologSystem.clearTheory();
voiceDir = null;
if (voiceProvider != null) {
File parent = OsmandApplication.getSettings().extendOsmandPath(ResourceManager.VOICE_PATH);
File parent = ((OsmandApplication)ctx.getApplicationContext()).getSettings().extendOsmandPath(ResourceManager.VOICE_PATH);
voiceDir = new File(parent, voiceProvider);
if (!voiceDir.exists()) {
voiceDir = null;