Fix small issues

This commit is contained in:
Victor Shcherb 2015-11-15 20:36:06 +01:00
parent bc26e6adb2
commit e4b8bb59ef
6 changed files with 125 additions and 148 deletions

View file

@ -1,8 +1,7 @@
package net.osmand.plus.mapcontextmenu.controllers;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import java.util.Map;
import net.osmand.access.AccessibleAlertBuilder;
import net.osmand.data.PointDescription;
import net.osmand.plus.OsmandApplication;
@ -14,6 +13,7 @@ import net.osmand.plus.mapcontextmenu.MenuController;
import net.osmand.plus.mapcontextmenu.builders.EditPOIMenuBuilder;
import net.osmand.plus.osmedit.OpenstreetmapPoint;
import net.osmand.plus.osmedit.OpenstreetmapRemoteUtil;
import net.osmand.plus.osmedit.OsmBugsLayer;
import net.osmand.plus.osmedit.OsmBugsRemoteUtil;
import net.osmand.plus.osmedit.OsmEditingPlugin;
import net.osmand.plus.osmedit.OsmEditsUploadListener;
@ -25,8 +25,9 @@ import net.osmand.plus.osmedit.UploadOpenstreetmapPointAsyncTask;
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment;
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.ProgressDialogPoiUploader;
import net.osmand.util.Algorithms;
import java.util.Map;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
public class EditPOIMenuController extends MenuController {
@ -54,6 +55,11 @@ public class EditPOIMenuController extends MenuController {
public void uploadEnded(Map<OsmPoint, String> loadErrorsMap) {
super.uploadEnded(loadErrorsMap);
getMapActivity().getContextMenu().close();
OsmBugsLayer l = getMapActivity().getMapView().getLayerByClass(OsmBugsLayer.class);
if(l != null) {
l.clearCache();
getMapActivity().refreshMap();
}
}
};
OpenstreetmapRemoteUtil remotepoi = new OpenstreetmapRemoteUtil(getMapActivity());

View file

@ -24,6 +24,7 @@ import net.osmand.plus.R;
import net.osmand.plus.activities.DialogProvider;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.osmedit.OsmBugsUtil.Action;
import net.osmand.plus.osmedit.OsmBugsUtil.OsmBugResult;
import net.osmand.plus.views.ContextMenuLayer.IContextMenuProvider;
import net.osmand.plus.views.OsmandMapLayer;
import net.osmand.plus.views.OsmandMapTileView;
@ -44,6 +45,7 @@ import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Xml;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
@ -313,82 +315,55 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
private void createNewBugAsync(final double latitude, final double longitude, final String text) {
AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
private void asyncActionTask(final OpenStreetNote bug, final String text, final Action action) {
AsyncTask<Void, Void, OsmBugResult> task = new AsyncTask<Void, Void, OsmBugResult>() {
private OsmBugsUtil osmbugsUtil;
@Override
protected String doInBackground(Void... params) {
osmbugsUtil = getOsmbugsUtil(null);
return osmbugsUtil.createNewBug(latitude, longitude, text);
protected OsmBugResult doInBackground(Void... params) {
osmbugsUtil = getOsmbugsUtil(bug);
if(action == Action.REOPEN) {
return osmbugsUtil.reopenBug(bug.getLatitude(), bug.getLongitude(), bug.getId(), text);
} else if(action == Action.MODIFY) {
return osmbugsUtil.addingComment(bug.getLatitude(), bug.getLongitude(), bug.getId(), text);
} else if(action == Action.CLOSE) {
return osmbugsUtil.closingBug(bug.getLatitude(), bug.getLongitude(), bug.getId(), text);
} else if(action == Action.CREATE) {
return osmbugsUtil.createNewBug(bug.getLatitude(), bug.getLongitude(), text);
}
return null;
}
protected void onPostExecute(String result) {
if (result == null) {
protected void onPostExecute(OsmBugResult obj) {
if (obj != null && obj.warning == null) {
if(local == osmbugsUtil) {
AccessibleToast.makeText(activity, R.string.osm_changes_added_to_local_edits, Toast.LENGTH_LONG).show();
List<OsmNotesPoint> points = plugin.getDBBug().getOsmbugsPoints();
if(points.size() > 0) {
OsmPoint point = points.get(points.size() - 1);
activity.getContextMenu().showOrUpdate(new LatLon(latitude, longitude), plugin.getOsmEditsLayer(activity).getObjectName(point), point);
if(obj.local != null) {
PointDescription pd = new PointDescription(PointDescription.POINT_TYPE_OSM_BUG, obj.local.getText());
activity.getContextMenu().show(new LatLon(obj.local.getLatitude(), obj.local.getLongitude()), pd, obj.local);
}
} else {
AccessibleToast.makeText(activity, R.string.osn_add_dialog_success, Toast.LENGTH_LONG).show();
activity.getContextMenu().close();
}
refreshMap();
} else {
AccessibleToast.makeText(activity, activity.getResources().getString(R.string.osn_add_dialog_error) + "\n" + result,
Toast.LENGTH_LONG).show();
openBug(latitude, longitude, text);
}
}
};
executeTaskInBackground(task);
}
private void addingCommentAsync(final OpenStreetNote bug, final String text) {
AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() {
private OsmBugsUtil osmbugsUtil;
@Override
protected String doInBackground(Void... params) {
osmbugsUtil = getOsmbugsUtil(bug);
return osmbugsUtil.addingComment(bug.getLatitude(), bug.getLongitude(), bug.getId(), text);
}
protected void onPostExecute(String warn) {
if (warn == null) {
if(local == osmbugsUtil) {
AccessibleToast.makeText(activity, R.string.osm_changes_added_to_local_edits, Toast.LENGTH_LONG).show();
} else {
AccessibleToast.makeText(activity, R.string.osb_comment_dialog_success, Toast.LENGTH_LONG).show();
if(action == Action.REOPEN) {
AccessibleToast.makeText(activity, R.string.osn_add_dialog_success, Toast.LENGTH_LONG).show();
} else if(action == Action.MODIFY) {
AccessibleToast.makeText(activity, R.string.osb_comment_dialog_success, Toast.LENGTH_LONG).show();
} else if(action == Action.CLOSE) {
AccessibleToast.makeText(activity, R.string.osn_close_dialog_success, Toast.LENGTH_LONG).show();
} else if(action == Action.CREATE) {
AccessibleToast.makeText(activity, R.string.osn_add_dialog_success, Toast.LENGTH_LONG).show();
}
}
clearCache();
} else {
AccessibleToast.makeText(activity, activity.getResources().getString(R.string.osb_comment_dialog_error) + "\n" + warn, Toast.LENGTH_LONG).show();
}
}
};
executeTaskInBackground(task);
}
private void reopeningtAsync(final OpenStreetNote bug, final String text) {
AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() {
private OsmBugsUtil osmbugsUtil;
@Override
protected String doInBackground(Void... params) {
osmbugsUtil = getOsmbugsUtil(bug);
return osmbugsUtil.reopenBug(bug.getLatitude(), bug.getLongitude(), bug.getId(), text);
}
protected void onPostExecute(String warn) {
if (warn == null) {
if(local == osmbugsUtil) {
AccessibleToast.makeText(activity, R.string.osm_changes_added_to_local_edits, Toast.LENGTH_LONG).show();
} else {
AccessibleToast.makeText(activity, R.string.osb_comment_dialog_success, Toast.LENGTH_LONG).show();
int r = R.string.osb_comment_dialog_error;
if(action == Action.REOPEN) {
r = R.string.osn_add_dialog_error;
} else if(action == Action.CLOSE) {
r = R.string.osn_close_dialog_error;
} else if(action == Action.CREATE) {
r = R.string.osn_add_dialog_error;
}
clearCache();
} else {
AccessibleToast.makeText(activity, activity.getResources().getString(R.string.osb_comment_dialog_error) + "\n" + warn, Toast.LENGTH_LONG).show();
AccessibleToast.makeText(activity, activity.getResources().getString(r) + "\n" + obj, Toast.LENGTH_LONG).show();
}
}
};
@ -428,10 +403,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
activity.showDialog(DIALOG_BUG);
}
private Dialog createBugDialog(final Bundle args) {
private void prepareBugDialog(Bundle args, Dialog dialog) {
final OpenStreetNote bug = (OpenStreetNote) args.getSerializable(KEY_BUG);
final Action action = OsmBugsUtil.Action.valueOf((String) args.getSerializable(KEY_ACTION));
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
int title ;
if(action == Action.CLOSE) {
title = R.string.osn_close_dialog_title;
@ -441,14 +415,13 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
title = R.string.osn_reopen_dialog_title;
} else {
title = R.string.osn_add_dialog_title;
}
builder.setTitle(title);
final View view = activity.getLayoutInflater().inflate(R.layout.open_bug, null);
builder.setView(view);
if(action == Action.CREATE && bug.comments.size() > 0) {
((EditText)view.findViewById(R.id.messageEditText)).setText(bug.comments.get(0));
}
}
AlertDialog dlg = (AlertDialog) dialog;
dlg.setTitle(title);
final View view = dlg.findViewById(R.id.layout);
Button btn = dlg.getButton(DialogInterface.BUTTON_POSITIVE);
btn.setText(title);
OsmBugsUtil util = getOsmbugsUtil(bug);
final boolean offline = util instanceof OsmBugsLocalUtil;
if(offline) {
@ -460,11 +433,13 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
((EditText)view.findViewById(R.id.userNameEditText)).setText(getUserName());
((EditText)view.findViewById(R.id.passwordEditText)).setText(((OsmandApplication) activity.getApplication()).getSettings().USER_PASSWORD.get());
}
if(action == Action.CREATE && bug.comments.size() > 0) {
((EditText)view.findViewById(R.id.messageEditText)).setText(bug.comments.get(0));
}
AndroidUtils.softKeyboardDelayed((EditText) view.findViewById(R.id.messageEditText));
builder.setNegativeButton(R.string.shared_string_cancel, null);
builder.setPositiveButton(title, new DialogInterface.OnClickListener() {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
public void onClick(View dialog) {
if (bug != null) {
String text = offline ? getMessageText(view) : getTextAndUpdateUserPwd(view);
// server validation will handle it
@ -472,20 +447,24 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
// AccessibleToast.makeText(activity, activity.getString(R.string.osb_author_or_password_not_specified),
// Toast.LENGTH_SHORT).show();
// }
if(action == Action.CLOSE) {
closingAsync(bug, text);
} else if(action == Action.MODIFY) {
addingCommentAsync(bug, text);
} else if(action == Action.REOPEN) {
reopeningtAsync(bug, text);
} else {
createNewBugAsync(bug.getLatitude(), bug.getLongitude(), text);
}
asyncActionTask(bug, text, action);
activity.getContextMenu().close();
}
}
});
}
private Dialog createBugDialog(final Bundle args) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("");
final View view = activity.getLayoutInflater().inflate(R.layout.open_bug, null);
view.setId(R.id.layout);
builder.setView(view);
builder.setNegativeButton(R.string.shared_string_cancel, null);
builder.setPositiveButton(R.string.shared_string_commit, null);
return builder.create();
}
@ -513,33 +492,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
}
private void closingAsync(final OpenStreetNote bug, final String text) {
AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
private OsmBugsUtil osmbugsUtil;
@Override
protected String doInBackground(Void... params) {
osmbugsUtil = getOsmbugsUtil(bug);
return osmbugsUtil.closingBug(bug.getLatitude(), bug.getLongitude(), bug.getId(), text);
}
protected void onPostExecute(String closed) {
if (closed == null) {
if(local == osmbugsUtil) {
AccessibleToast.makeText(activity, R.string.osm_changes_added_to_local_edits, Toast.LENGTH_LONG).show();
} else {
AccessibleToast.makeText(activity, R.string.osn_close_dialog_success, Toast.LENGTH_LONG).show();
}
clearCache();
refreshMap();
} else {
AccessibleToast.makeText(activity, activity.getString(R.string.osn_close_dialog_error) + "\n" + closed,
Toast.LENGTH_LONG).show();
}
}
};
executeTaskInBackground(task);
}
@Override
public String getObjectDescription(Object o) {
@ -597,11 +550,14 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
public void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case DIALOG_BUG:
// ((EditText)dialog.findViewById(R.id.messageEditText)).setText("");
prepareBugDialog(dialogBundle, dialog);
((EditText)dialog.findViewById(R.id.messageEditText)).setText("");
break;
}
}
public static class OpenStreetNote implements Serializable {
private boolean local;
private static final long serialVersionUID = -7848941747811172615L;

View file

@ -18,25 +18,32 @@ public class OsmBugsLocalUtil implements OsmBugsUtil {
}
@Override
public String createNewBug(double latitude, double longitude, String text){
public OsmBugResult createNewBug(double latitude, double longitude, String text){
OsmNotesPoint p = new OsmNotesPoint();
p.setId(Math.min(-2, db.getMinID() -1));
p.setText(text);
p.setLatitude(latitude);
p.setLongitude(longitude);
p.setAction(OsmPoint.Action.CREATE);
return db.addOsmbugs(p) ? null : "";
return wrap(p, db.addOsmbugs(p));
}
private OsmBugResult wrap(OsmNotesPoint p, boolean success) {
OsmBugResult s = new OsmBugResult();
s.local = p;
s.warning = success ? null : "";
return null;
}
@Override
public String reopenBug(double latitude, double longitude, long id, String text){
public OsmBugResult reopenBug(double latitude, double longitude, long id, String text){
OsmNotesPoint p = new OsmNotesPoint();
p.setId(Math.min(-2, db.getMinID() -1));
p.setText(text);
p.setLatitude(latitude);
p.setLongitude(longitude);
p.setAction(OsmPoint.Action.REOPEN);
return db.addOsmbugs(p) ? null : "";
return wrap(p, db.addOsmbugs(p));
}
public List<OsmNotesPoint> getOsmbugsPoints() {
@ -44,25 +51,25 @@ public class OsmBugsLocalUtil implements OsmBugsUtil {
}
@Override
public String addingComment(double latitude, double longitude, long id, String text){
public OsmBugResult addingComment(double latitude, double longitude, long id, String text){
OsmNotesPoint p = new OsmNotesPoint();
p.setId(id);
p.setText(text);
p.setLatitude(latitude);
p.setLongitude(longitude);
p.setAction(OsmPoint.Action.MODIFY);
return db.addOsmbugs(p) ? null : "";
return wrap(p, db.addOsmbugs(p));
}
@Override
public String closingBug(double latitude, double longitude, long id, String text){
public OsmBugResult closingBug(double latitude, double longitude, long id, String text){
OsmNotesPoint p = new OsmNotesPoint();
p.setId(id);
p.setText(text);
p.setLatitude(latitude);
p.setLongitude(longitude);
p.setAction(OsmPoint.Action.DELETE);
return db.addOsmbugs(p) ? null : "";
return wrap(p, db.addOsmbugs(p));
}
}

View file

@ -40,7 +40,7 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
}
@Override
public String createNewBug(double latitude, double longitude, String text) {
public OsmBugResult createNewBug(double latitude, double longitude, String text) {
StringBuilder b = new StringBuilder();
b.append(getNotesApi()).append("?"); //$NON-NLS-1$
b.append("lat=").append(latitude); //$NON-NLS-1$
@ -50,7 +50,7 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
}
@Override
public String addingComment(double latitude, double longitude, long id, String text) {
public OsmBugResult addingComment(double latitude, double longitude, long id, String text) {
StringBuilder b = new StringBuilder();
b.append(getNotesApi()).append("/");
b.append(id); //$NON-NLS-1$
@ -59,7 +59,7 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
}
@Override
public String reopenBug(double latitude, double longitude, long id, String text){
public OsmBugResult reopenBug(double latitude, double longitude, long id, String text){
StringBuilder b = new StringBuilder();
b.append(getNotesApi()).append("?"); //$NON-NLS-1$
b.append(id); //$NON-NLS-1$
@ -69,7 +69,7 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
@Override
public String closingBug(double latitude, double longitude, long id, String text) {
public OsmBugResult closingBug(double latitude, double longitude, long id, String text) {
StringBuilder b = new StringBuilder();
b.append(getNotesApi()).append("/");
b.append(id); //$NON-NLS-1$
@ -77,7 +77,8 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
return editingPOI(b.toString(), "POST", "close bug"); //$NON-NLS-1$
}
private String editingPOI(String url, String requestMethod, String userOperation) {
private OsmBugResult editingPOI(String url, String requestMethod, String userOperation) {
OsmBugResult r = new OsmBugResult();
try {
HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url);
log.info("Editing poi " + url);
@ -111,21 +112,21 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
log.info("Response : " + responseBody); //$NON-NLS-1$
connection.disconnect();
if (!ok) {
return msg + "\n" + responseBody;
r.warning = msg + "\n" + responseBody;
}
} catch (NullPointerException e) {
// that's tricky case why NPE is thrown to fix that problem httpClient could be used
String msg = app.getString(R.string.auth_failed);
log.error(msg, e);
return app.getString(R.string.auth_failed) + "";
r.warning = app.getString(R.string.auth_failed) + "";
} catch (MalformedURLException e) {
log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$
return e.getMessage() + "";
r.warning = e.getMessage() + "";
} catch (IOException e) {
log.error(userOperation + " " + app.getString(R.string.failed_op), e); //$NON-NLS-1$
return e.getMessage() + " link unavailable";
r.warning = e.getMessage() + " link unavailable";
}
return null;
return r;
}
}

View file

@ -3,12 +3,17 @@ package net.osmand.plus.osmedit;
public interface OsmBugsUtil {
public static enum Action {CREATE, MODIFY, CLOSE, REOPEN};
public String createNewBug(double latitude, double longitude, String text);
public String addingComment(double latitude, double longitude, long id, String text);
public String reopenBug(double latitude, double longitude, long id, String text);
public static class OsmBugResult {
OsmNotesPoint local;
String warning;
}
public String closingBug(double latitude, double longitude, long id, String text);
public OsmBugResult createNewBug(double latitude, double longitude, String text);
public OsmBugResult addingComment(double latitude, double longitude, long id, String text);
public OsmBugResult reopenBug(double latitude, double longitude, long id, String text);
public OsmBugResult closingBug(double latitude, double longitude, long id, String text);
}

View file

@ -66,11 +66,13 @@ public class UploadOpenstreetmapPointAsyncTask
OsmNotesPoint p = (OsmNotesPoint) point;
String errorMessage = null;
if (p.getAction() == OsmPoint.Action.CREATE) {
errorMessage = remotebug.createNewBug(p.getLatitude(), p.getLongitude(), p.getText());
errorMessage = remotebug.createNewBug(p.getLatitude(), p.getLongitude(), p.getText()).warning;
} else if (p.getAction() == OsmPoint.Action.MODIFY) {
errorMessage = remotebug.addingComment(p.getLatitude(), p.getLongitude(), p.getId(), p.getText());
errorMessage = remotebug.addingComment(p.getLatitude(), p.getLongitude(), p.getId(), p.getText()).warning;
} else if (p.getAction() == OsmPoint.Action.REOPEN) {
errorMessage = remotebug.reopenBug(p.getLatitude(), p.getLongitude(), p.getId(), p.getText()).warning;
} else if (p.getAction() == OsmPoint.Action.DELETE) {
errorMessage = remotebug.closingBug(p.getLatitude(), p.getLongitude(), p.getId(), p.getText());
errorMessage = remotebug.closingBug(p.getLatitude(), p.getLongitude(), p.getId(), p.getText()).warning;
}
if (errorMessage == null) {
plugin.getDBBug().deleteAllBugModifications(p);