@@ -1,6 +1,19 @@
package net .osmand .plus .osmedit ;
import java .util .List ;
import android .app .Activity ;
import android .app .AlertDialog ;
import android .app .AlertDialog .Builder ;
import android .content .Context ;
import android .content .DialogInterface ;
import android .content .DialogInterface .OnClickListener ;
import android .content .Intent ;
import android .support .v4 .app .Fragment ;
import android .view .LayoutInflater ;
import android .view .View ;
import android .widget .ArrayAdapter ;
import android .widget .EditText ;
import android .widget .Spinner ;
import android .widget .Toast ;
import net .osmand .access .AccessibleToast ;
import net .osmand .data .Amenity ;
@@ -19,64 +32,52 @@
import net .osmand .plus .myplaces .FavoritesActivity ;
import net .osmand .plus .views .OsmandMapTileView ;
import net .osmand .util .Algorithms ;
import android .app .Activity ;
import android .app .AlertDialog ;
import android .app .AlertDialog .Builder ;
import android .content .Context ;
import android .content .DialogInterface ;
import android .content .DialogInterface .OnClickListener ;
import android .content .Intent ;
import android .support .v4 .app .Fragment ;
import android .view .LayoutInflater ;
import android .view .View ;
import android .widget .ArrayAdapter ;
import android .widget .EditText ;
import android .widget .Spinner ;
import android .widget .Toast ;
import java .util .List ;
public class OsmEditingPlugin extends OsmandPlugin {
private static final String ID = "osm.editing" ;
private OsmandSettings settings ;
private OsmandApplication app ;
OpenstreetmapsDbHelper dbpoi ;
OsmBugsDbHelper dbbug ;
OpenstreetmapsDbHelper dbpoi ;
OsmBugsDbHelper dbbug ;
@ Override
public String getId () {
return ID ;
}
public OpenstreetmapsDbHelper getDBPOI () {
if (dbpoi == null ) {
if (dbpoi == null ) {
dbpoi = new OpenstreetmapsDbHelper (app );
}
return dbpoi ;
}
public OsmBugsDbHelper getDBBug () {
if (dbbug == null ) {
if (dbbug == null ) {
dbbug = new OsmBugsDbHelper (app );
}
return dbbug ;
}
public OsmEditingPlugin (OsmandApplication app ) {
this .app = app ;
settings = app .getSettings ();
}
private OsmBugsLayer osmBugsLayer ;
private OsmEditsLayer osmEditsLayer ;
private EditingPOIDialogProvider poiActions ;
@ Override
public void updateLayers (OsmandMapTileView mapView , MapActivity activity ) {
if (isActive ()) {
if (osmBugsLayer == null ) {
registerLayers (activity );
}
if (!mapView .getLayers ().contains (osmEditsLayer )) {
if (!mapView .getLayers ().contains (osmEditsLayer )) {
activity .getMapView ().addLayer (osmEditsLayer , 3.5f );
}
if (mapView .getLayers ().contains (osmBugsLayer ) != settings .SHOW_OSM_BUGS .get ()) {
@@ -87,30 +88,30 @@ public void updateLayers(OsmandMapTileView mapView, MapActivity activity) {
}
}
} else {
if (osmBugsLayer != null ) {
if (osmBugsLayer != null ) {
mapView .removeLayer (osmBugsLayer );
}
if (osmEditsLayer != null ) {
if (osmEditsLayer != null ) {
mapView .removeLayer (osmEditsLayer );
}
}
}
@ Override
public void registerLayers (MapActivity activity ){
public void registerLayers (MapActivity activity ) {
osmBugsLayer = new OsmBugsLayer (activity , this );
osmEditsLayer = new OsmEditsLayer (activity , this );
}
public OsmEditsLayer getOsmEditsLayer (MapActivity activity ){
if (osmEditsLayer == null ) {
public OsmEditsLayer getOsmEditsLayer (MapActivity activity ) {
if (osmEditsLayer == null ) {
registerLayers (activity );
}
return osmEditsLayer ;
}
public OsmBugsLayer getBugsLayer (MapActivity activity ) {
if (osmBugsLayer == null ) {
if (osmBugsLayer == null ) {
registerLayers (activity );
}
return osmBugsLayer ;
@@ -123,30 +124,34 @@ public void mapActivityCreate(MapActivity activity) {
activity .addDialogProvider (getPoiActions (activity ));
activity .addDialogProvider (getBugsLayer (activity ));
}
@ Override
public Class <? extends Activity > getSettingsActivity () {
return SettingsOsmEditingActivity .class ;
}
public EditingPOIDialogProvider getPoiActions (MapActivity activity ) {
if (poiActions == null ) {
poiActions = new EditingPOIDialogProvider (activity , this );
}
return poiActions ;
}
@ Override
public void registerMapContextMenuActions (final MapActivity mapActivity , final double latitude , final double longitude , ContextMenuAdapter adapter ,
final Object selectedObj ) {
final Object selectedObj ) {
OnContextMenuClick listener = new OnContextMenuClick () {
@ Override
public boolean onContextMenuClick (ArrayAdapter <?> adapter , int resId , int pos , boolean isChecked ) {
if (resId == R .string .context_menu_item_create_poi ) {
getPoiActions (mapActivity ).showCreateDialog (latitude , longitude );
//getPoiActions(mapActivity).showCreateDialog(latitude, longitude);
mapActivity .getSupportFragmentManager ().beginTransaction ()
.add (R .id .fragmentContainer , new EditPoiFragment (), EditPoiFragment .TAG )
.addToBackStack (null )
.commit ();
} else if (resId == R .string .context_menu_item_open_bug ) {
if (osmBugsLayer == null ) {
if (osmBugsLayer == null ) {
registerLayers (mapActivity );
}
osmBugsLayer .openBug (latitude , longitude );
@@ -158,7 +163,7 @@ public boolean onContextMenuClick(ArrayAdapter<?> adapter, int resId, int pos, b
return true ;
}
};
if (selectedObj instanceof Amenity ) {
if (selectedObj instanceof Amenity ) {
adapter .item (R .string .poi_context_menu_modify ).iconColor (R .drawable .ic_action_edit_dark ).listen (listener ).position (1 ).reg ();
adapter .item (R .string .poi_context_menu_delete ).iconColor (R .drawable .ic_action_delete_dark ).listen (listener ).position (2 ).reg ();
} else {
@@ -169,7 +174,7 @@ public boolean onContextMenuClick(ArrayAdapter<?> adapter, int resId, int pos, b
@ Override
public void addMyPlacesTab (FavoritesActivity favoritesActivity , List <TabActivity .TabItem > mTabs , Intent intent ) {
if (getDBPOI ().getOpenstreetmapPoints ().size () > 0 || getDBBug ().getOsmbugsPoints ().size () > 0 ){
if (getDBPOI ().getOpenstreetmapPoints ().size () > 0 || getDBBug ().getOsmbugsPoints ().size () > 0 ) {
mTabs .add (favoritesActivity .getTabIndicator (R .string .osm_edits , OsmEditsFragment .class ));
if (intent != null && "OSM" .equals (intent .getStringExtra ("TAB" ))) {
app .getSettings ().FAVORITES_TAB .set (R .string .osm_edits );
@@ -182,23 +187,23 @@ public void registerLayerContextMenuActions(OsmandMapTileView mapView, ContextMe
adapter .item (R .string .layer_osm_bugs ).selected (settings .SHOW_OSM_BUGS .get () ? 1 : 0 )
.iconColor (R .drawable .ic_action_bug_dark ).listen (new OnContextMenuClick () {
@ Override
public boolean onContextMenuClick (ArrayAdapter <?> adapter , int itemId , int pos , boolean isChecked ) {
if (itemId == R .string .layer_osm_bugs ) {
settings .SHOW_OSM_BUGS .set (isChecked );
updateLayers (mapActivity .getMapView (), mapActivity );
}
return true ;
}
}).position (16 ).reg ();
@ Override
public boolean onContextMenuClick (ArrayAdapter <?> adapter , int itemId , int pos , boolean isChecked ) {
if (itemId == R .string .layer_osm_bugs ) {
settings .SHOW_OSM_BUGS .set (isChecked );
updateLayers (mapActivity .getMapView (), mapActivity );
}
return true ;
}
}).position (16 ).reg ();
}
@ Override
public String getDescription () {
return app .getString (R .string .osm_editing_plugin_description );
}
@ Override
public void contextMenuFragment (final Activity la , final Fragment fragment , final Object info , ContextMenuAdapter adapter ) {
if (fragment instanceof AvailableGPXFragment ) {
@@ -214,7 +219,7 @@ public boolean onContextMenuClick(ArrayAdapter<?> adapter, int itemId, int pos,
}).reg ();
}
}
@ Override
public void optionsMenuFragment (final Activity activity , final Fragment fragment , ContextMenuAdapter optionsMenuAdapter ) {
if (fragment instanceof AvailableGPXFragment ) {
@@ -240,7 +245,6 @@ public void onClick(DialogInterface dialog, int which) {
}
}
public enum UploadVisibility implements IEnumWithResource {
Public (R .string .gpxup_public ),
@@ -252,53 +256,55 @@ public enum UploadVisibility implements IEnumWithResource {
private UploadVisibility (int resourceId ) {
this .resourceId = resourceId ;
}
public String asURLparam () {
return name ().toLowerCase ();
}
@ Override
public int stringResource () {
return resourceId ;
}
}
public boolean sendGPXFiles (final Activity la , AvailableGPXFragment f , final GpxInfo ... info ){
public boolean sendGPXFiles (final Activity la , AvailableGPXFragment f , final GpxInfo ... info ) {
String name = settings .USER_NAME .get ();
String pwd = settings .USER_PASSWORD .get ();
if (Algorithms .isEmpty (name ) || Algorithms .isEmpty (pwd )){
if (Algorithms .isEmpty (name ) || Algorithms .isEmpty (pwd )) {
AccessibleToast .makeText (la , R .string .validate_gpx_upload_name_pwd , Toast .LENGTH_LONG ).show ();
return false ;
}
Builder bldr = new AlertDialog .Builder (la );
LayoutInflater inflater = (LayoutInflater )la .getSystemService (Context .LAYOUT_INFLATER_SERVICE );
LayoutInflater inflater = (LayoutInflater ) la .getSystemService (Context .LAYOUT_INFLATER_SERVICE );
final View view = inflater .inflate (R .layout .send_gpx_osm , null );
final EditText descr = (EditText ) view .findViewById (R .id .memory_size );
if (info .length > 0 && info [0 ].getFileName () != null ) {
if (info .length > 0 && info [0 ].getFileName () != null ) {
int dt = info [0 ].getFileName ().indexOf ('.' );
descr .setText (info [0 ].getFileName ().substring (0 , dt ));
}
final EditText tags = (EditText ) view .findViewById (R .id .TagsText );
final Spinner visibility = ((Spinner )view .findViewById (R .id .Visibility ));
final EditText tags = (EditText ) view .findViewById (R .id .TagsText );
final Spinner visibility = ((Spinner ) view .findViewById (R .id .Visibility ));
EnumAdapter <UploadVisibility > adapter = new EnumAdapter <UploadVisibility >(la , android .R .layout .simple_spinner_item , UploadVisibility .values ());
adapter .setDropDownViewResource (android .R .layout .simple_spinner_dropdown_item );
visibility .setAdapter (adapter );
visibility .setSelection (0 );
bldr .setView (view );
bldr .setNegativeButton (R .string .shared_string_no , null );
bldr .setPositiveButton (R .string .shared_string_yes , new DialogInterface .OnClickListener () {
@ Override
public void onClick (DialogInterface dialog , int which ) {
new UploadGPXFilesTask (la , descr .getText ().toString (), tags .getText ().toString (),
(UploadVisibility ) visibility .getItemAtPosition (visibility .getSelectedItemPosition ())
).execute (info );
new UploadGPXFilesTask (la , descr .getText ().toString (), tags .getText ().toString (),
(UploadVisibility ) visibility .getItemAtPosition (visibility .getSelectedItemPosition ())
).execute (info );
}
});
bldr .show ();
return true ;
}
@ Override
public String getName () {
return app .getString (R .string .osm_settings );
@@ -308,13 +314,13 @@ public String getName() {
public int getLogoResourceId () {
return R .drawable .ic_action_bug_dark ;
}
@ Override
public int getAssetResourceName () {
return R .drawable .osm_editing ;
}
public static String getEditName (OsmPoint point ){
public static String getEditName (OsmPoint point ) {
String prefix = getPrefix (point );
if (point .getGroup () == OsmPoint .Group .POI ) {
return prefix + " (" + ((OpenstreetmapPoint ) point ).getSubtype () + ") " + ((OpenstreetmapPoint ) point ).getName ();
@@ -329,5 +335,5 @@ private static String getPrefix(OsmPoint osmPoint) {
return (osmPoint .getGroup () == OsmPoint .Group .POI ? "POI " : "Bug " ) + " id: " + osmPoint .getId ();
}
}