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; + } + +} +