diff --git a/OsmAnd/res/drawable/layout_bg.xml b/OsmAnd/res/drawable/layout_bg.xml
new file mode 100644
index 0000000000..a784ae5701
--- /dev/null
+++ b/OsmAnd/res/drawable/layout_bg.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/OsmAnd/res/layout/send_osm_note_fragment.xml b/OsmAnd/res/layout/send_osm_note_fragment.xml
new file mode 100644
index 0000000000..b6f4338751
--- /dev/null
+++ b/OsmAnd/res/layout/send_osm_note_fragment.xml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OsmAnd/res/layout/send_poi_fragment.xml b/OsmAnd/res/layout/send_poi_fragment.xml
new file mode 100644
index 0000000000..692bd5dd5d
--- /dev/null
+++ b/OsmAnd/res/layout/send_poi_fragment.xml
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index fc7a48c5bc..1df373bb3f 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -11,6 +11,7 @@
Thx - Hardy
-->
+ Closed changset
Login
Password
Account
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPOIMenuController.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPOIMenuController.java
index 1d8a4e4aa6..237a503e1a 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/EditPOIMenuController.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPOIMenuController.java
@@ -15,6 +15,9 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MenuController;
import net.osmand.plus.measurementtool.LoginBottomSheetFragment;
import net.osmand.plus.osmedit.OsmPoint.Action;
+import net.osmand.plus.osmedit.dialogs.SendOsmNoteBottomSheetFragment;
+import net.osmand.plus.osmedit.dialogs.SendPoiBottomSheetFragment;
+import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment;
import net.osmand.plus.osmedit.dialogs.SendPoiDialogFragment.SimpleProgressDialogPoiUploader;
import net.osmand.plus.osmedit.oauth.OsmOAuthAuthorizationAdapter;
import net.osmand.plus.render.RenderingIcons;
@@ -48,11 +51,18 @@ public class EditPOIMenuController extends MenuController {
OsmandApplication app = activity.getMyApplication();
OsmandSettings settings = app.getSettings();
OsmOAuthAuthorizationAdapter client = new OsmOAuthAuthorizationAdapter(app);
+ OsmPoint point = getOsmPoint();
if (client.isValidToken()
|| !Algorithms.isEmpty(settings.USER_NAME.get())
&& !Algorithms.isEmpty(settings.USER_PASSWORD.get())) {
- SimpleProgressDialogPoiUploader poiDialogUploader = new SimpleProgressDialogPoiUploader(activity);
- poiDialogUploader.showProgressDialog(new OsmPoint[] {getOsmPoint()}, false, false);
+ if (point instanceof OpenstreetmapPoint) {
+ SendPoiBottomSheetFragment sendPoiBottomSheetFragment =
+ SendPoiBottomSheetFragment.showInstance(new OsmPoint[]{getOsmPoint()}, SendPoiBottomSheetFragment.PoiUploaderType.SIMPLE);
+ sendPoiBottomSheetFragment.show(activity.getSupportFragmentManager(), SendPoiDialogFragment.TAG);
+ } else if ( point instanceof OsmNotesPoint) {
+ SendOsmNoteBottomSheetFragment sendOsmNoteBottomSheetFragment =
+ SendOsmNoteBottomSheetFragment.showInstance(new OsmPoint[]{getOsmPoint()}, SendOsmNoteBottomSheetFragment.PoiUploaderType.SIMPLE);
+ sendOsmNoteBottomSheetFragment.show(activity.getSupportFragmentManager(), SendPoiDialogFragment.TAG);}
} else {
LoginBottomSheetFragment.showInstance(activity.getSupportFragmentManager(), null);
}
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java
new file mode 100644
index 0000000000..be0fe84ca4
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendOsmNoteBottomSheetFragment.java
@@ -0,0 +1,121 @@
+package net.osmand.plus.osmedit.dialogs;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.SwitchCompat;
+
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.R;
+import net.osmand.plus.UiUtilities;
+import net.osmand.plus.activities.MapActivity;
+import net.osmand.plus.base.MenuBottomSheetDialogFragment;
+import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
+import net.osmand.plus.osmedit.OpenstreetmapPoint;
+import net.osmand.plus.osmedit.OsmPoint;
+import net.osmand.plus.settings.backend.OsmandSettings;
+
+public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragment {
+
+ public static final String TAG = "SendPoiBottomSheetFragment";
+ public static final String OPENSTREETMAP_POINT = "openstreetmap_point";
+ public static final String POI_UPLOADER_TYPE = "poi_uploader_type";
+ private OsmPoint[] poi;
+
+ protected OsmandSettings settings;
+
+ public enum PoiUploaderType {
+ SIMPLE,
+ FRAGMENT
+ }
+
+ protected OsmandApplication getMyApplication() {
+ return (OsmandApplication) getActivity().getApplication();
+ }
+
+ @Override
+ public void createMenuItems(Bundle savedInstanceState) {
+ String userName = getMyApplication().getSettings().USER_DISPLAY_NAME.get();
+ final View sendOsmNoteView = View.inflate(getContext(), R.layout.send_osm_note_fragment, null);
+ final LinearLayout accountBlockView = (LinearLayout) sendOsmNoteView.findViewById(R.id.account_block);
+ final SwitchCompat uploadAnonymously = (SwitchCompat) sendOsmNoteView.findViewById(R.id.upload_anonymously_switch);
+ final TextView accountName = (TextView) sendOsmNoteView.findViewById(R.id.user_name);
+ accountName.setText(userName);
+ accountBlockView.setVisibility(View.VISIBLE);
+ uploadAnonymously.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ accountBlockView.setVisibility(isChecked ? View.GONE : View.VISIBLE);
+ }
+ });
+ final SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
+ .setCustomView(sendOsmNoteView)
+ .create();
+ items.add(titleItem);
+ }
+
+ public static SendOsmNoteBottomSheetFragment showInstance(@NonNull OsmPoint[] points, @NonNull PoiUploaderType uploaderType) {
+ SendOsmNoteBottomSheetFragment fragment = new SendOsmNoteBottomSheetFragment();
+ Bundle bundle = new Bundle();
+ bundle.putSerializable(OPENSTREETMAP_POINT, points);
+ bundle.putString(POI_UPLOADER_TYPE, uploaderType.name());
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @Override
+ protected UiUtilities.DialogButtonType getRightBottomButtonType() {
+ return (UiUtilities.DialogButtonType.PRIMARY);
+ }
+
+ @Override
+ protected void onRightBottomButtonClick() {
+ View view = getView();
+ poi = (OsmPoint[]) getArguments().getSerializable(OPENSTREETMAP_POINT);
+ boolean hasPoiGroup = false;
+ assert poi != null;
+ for (OsmPoint p : poi) {
+ if (p.getGroup() == OsmPoint.Group.POI) {
+ hasPoiGroup = true;
+ break;
+ }
+ }
+ final boolean hasPOI = hasPoiGroup;
+ final SwitchCompat uploadAnonymously = (SwitchCompat) view.findViewById(R.id.upload_anonymously_switch);
+ final EditText messageEditText = (EditText) view.findViewById(R.id.message_field);
+ final SendPoiDialogFragment.PoiUploaderType poiUploaderType = SendPoiDialogFragment.PoiUploaderType.valueOf(getArguments().getString(POI_UPLOADER_TYPE, SendPoiDialogFragment.PoiUploaderType.SIMPLE.name()));
+ final SendPoiDialogFragment.ProgressDialogPoiUploader progressDialogPoiUploader;
+ if (poiUploaderType == SendPoiDialogFragment.PoiUploaderType.SIMPLE && getActivity() instanceof MapActivity) {
+ progressDialogPoiUploader =
+ new SendPoiDialogFragment.SimpleProgressDialogPoiUploader((MapActivity) getActivity());
+ } else {
+ progressDialogPoiUploader = (SendPoiDialogFragment.ProgressDialogPoiUploader) getParentFragment();
+ }
+ if (progressDialogPoiUploader != null) {
+ String comment = messageEditText.getText().toString();
+ if (comment.length() > 0) {
+ for (OsmPoint osmPoint : poi) {
+ if (osmPoint.getGroup() == OsmPoint.Group.POI) {
+ ((OpenstreetmapPoint) osmPoint).setComment(comment);
+ break;
+ }
+ }
+ }
+ progressDialogPoiUploader.showProgressDialog(poi,
+ false,
+ !hasPOI && uploadAnonymously.isChecked());
+ }
+ dismiss();
+ }
+
+ @Override
+ protected int getRightBottomButtonTextId() {
+ return R.string.shared_string_upload;
+ }
+
+}
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java
new file mode 100644
index 0000000000..17c29f5875
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/SendPoiBottomSheetFragment.java
@@ -0,0 +1,100 @@
+package net.osmand.plus.osmedit.dialogs;
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.SwitchCompat;
+
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.R;
+import net.osmand.plus.UiUtilities;
+import net.osmand.plus.activities.MapActivity;
+import net.osmand.plus.base.MenuBottomSheetDialogFragment;
+import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
+import net.osmand.plus.osmedit.OpenstreetmapPoint;
+import net.osmand.plus.osmedit.OsmPoint;
+
+public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment {
+
+ public static final String TAG = "SendPoiBottomSheetFragment";
+ public static final String OPENSTREETMAP_POINT = "openstreetmap_point";
+ public static final String POI_UPLOADER_TYPE = "poi_uploader_type";
+ private OsmPoint[] poi;
+
+ public enum PoiUploaderType {
+ SIMPLE,
+ FRAGMENT
+ }
+
+ protected OsmandApplication getMyApplication() {
+ return (OsmandApplication) getActivity().getApplication();
+ }
+
+ @Override
+ public void createMenuItems(Bundle savedInstanceState) {
+ String userName = getMyApplication().getSettings().USER_DISPLAY_NAME.get();
+ final View sendOsmNoteView = View.inflate(getContext(), R.layout.send_poi_fragment, null);
+ final TextView accountName = (TextView) sendOsmNoteView.findViewById(R.id.user_name);
+ accountName.setText(userName);
+ final SimpleBottomSheetItem titleItem = (SimpleBottomSheetItem) new SimpleBottomSheetItem.Builder()
+ .setCustomView(sendOsmNoteView)
+ .create();
+ items.add(titleItem);
+ }
+
+ public static SendPoiBottomSheetFragment showInstance(@NonNull OsmPoint[] points, @NonNull SendPoiBottomSheetFragment.PoiUploaderType uploaderType) {
+ SendPoiBottomSheetFragment fragment = new SendPoiBottomSheetFragment();
+ Bundle bundle = new Bundle();
+ bundle.putSerializable(OPENSTREETMAP_POINT, points);
+ bundle.putString(POI_UPLOADER_TYPE, uploaderType.name());
+ fragment.setArguments(bundle);
+ return fragment;
+ }
+
+ @Override
+ protected UiUtilities.DialogButtonType getRightBottomButtonType() {
+ return (UiUtilities.DialogButtonType.PRIMARY);
+ }
+
+ @Override
+ protected void onRightBottomButtonClick() {
+ View view = getView();
+ poi = (OsmPoint[]) getArguments().getSerializable(OPENSTREETMAP_POINT);
+ final SwitchCompat closeChangeSetCheckBox =
+ (SwitchCompat) view.findViewById(R.id.close_change_set_checkbox);
+ final EditText messageEditText = (EditText) view.findViewById(R.id.message_field);
+ final SendPoiDialogFragment.PoiUploaderType poiUploaderType = SendPoiDialogFragment.PoiUploaderType.valueOf(getArguments().getString(POI_UPLOADER_TYPE, SendPoiDialogFragment.PoiUploaderType.SIMPLE.name()));
+ final SendPoiDialogFragment.ProgressDialogPoiUploader progressDialogPoiUploader;
+ if (poiUploaderType == SendPoiDialogFragment.PoiUploaderType.SIMPLE && getActivity() instanceof MapActivity) {
+ progressDialogPoiUploader =
+ new SendPoiDialogFragment.SimpleProgressDialogPoiUploader((MapActivity) getActivity());
+ } else {
+ progressDialogPoiUploader = (SendPoiDialogFragment.ProgressDialogPoiUploader) getParentFragment();
+ }
+ if (progressDialogPoiUploader != null) {
+ String comment = messageEditText.getText().toString();
+ if (comment.length() > 0) {
+ for (OsmPoint osmPoint : poi) {
+ if (osmPoint.getGroup() == OsmPoint.Group.POI) {
+ ((OpenstreetmapPoint) osmPoint).setComment(comment);
+ break;
+ }
+ }
+ }
+ progressDialogPoiUploader.showProgressDialog(poi,
+ closeChangeSetCheckBox.isChecked(),
+ false);
+ }
+ dismiss();
+}
+
+ @Override
+ protected int getRightBottomButtonTextId() {
+ return R.string.shared_string_upload;
+ }
+
+}
+