diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 4470a4ad8b..ff5be1f9fc 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -441,7 +441,7 @@
android:label="@string/subtittle_opt_out"
android:configChanges="keyboardHidden|orientation|screenSize">
-
+
+
+
+
+
+
diff --git a/android/res/layout/ugc_routes_sharing_options_frag.xml b/android/res/layout/ugc_routes_sharing_options_frag.xml
new file mode 100644
index 0000000000..6955dd96d8
--- /dev/null
+++ b/android/res/layout/ugc_routes_sharing_options_frag.xml
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/res/layout/ugc_routes_sharing_options_internal.xml b/android/res/layout/ugc_routes_sharing_options_internal.xml
new file mode 100644
index 0000000000..b691b88ce0
--- /dev/null
+++ b/android/res/layout/ugc_routes_sharing_options_internal.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/android/res/values/dimens.xml b/android/res/values/dimens.xml
index dd0eaaddc7..078a9b4e28 100644
--- a/android/res/values/dimens.xml
+++ b/android/res/values/dimens.xml
@@ -256,4 +256,5 @@
508dp
240dp
6dp
+ 18dp
diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index d82d221e5a..772a4ea44f 100644
--- a/android/res/values/strings.xml
+++ b/android/res/values/strings.xml
@@ -2370,4 +2370,13 @@
wheelchair-limited
wheelchair-no
wheelchair-yes
+ Public access
+ Limited access
+ This list will be uploaded in the public
catalog at MAPS.ME as guide and will be easily shared with others
+ Upload and publish
+ Upload and get a direct link
+ Anyone this the link will see your list
+ Publishing your guide…
+ <b>PLEASE NOTE:</b> by proceeding, you accept the <font color="#249cf2"><a href="%1$s">license agreement</font></a>
+ Sharing options
diff --git a/android/src/com/mapswithme/maps/DisabledBrowserMovementMethod.java b/android/src/com/mapswithme/maps/DisabledBrowserMovementMethod.java
new file mode 100644
index 0000000000..eecc2f7407
--- /dev/null
+++ b/android/src/com/mapswithme/maps/DisabledBrowserMovementMethod.java
@@ -0,0 +1,36 @@
+package com.mapswithme.maps;
+
+import android.content.ActivityNotFoundException;
+import android.text.Spannable;
+import android.text.method.LinkMovementMethod;
+import android.view.MotionEvent;
+import android.widget.TextView;
+import android.widget.Toast;
+
+public class DisabledBrowserMovementMethod extends LinkMovementMethod
+{
+ private DisabledBrowserMovementMethod()
+ {
+ }
+
+ public static DisabledBrowserMovementMethod getInstance()
+ {
+ return new DisabledBrowserMovementMethod();
+ }
+
+ @Override
+ public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event)
+ {
+ boolean result = true;
+ try
+ {
+ result = super.onTouchEvent(widget, buffer, event);
+ }
+ catch (ActivityNotFoundException e)
+ {
+ /* FIXME */
+ Toast.makeText(widget.getContext(), R.string.error_system_message, Toast.LENGTH_SHORT).show();
+ }
+ return result;
+ }
+}
diff --git a/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java b/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java
index 72f27853b1..1b1131316f 100644
--- a/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java
+++ b/android/src/com/mapswithme/maps/base/BaseMwmToolbarFragment.java
@@ -21,4 +21,10 @@ public class BaseMwmToolbarFragment extends BaseMwmFragment
{
return new ToolbarController(root, getActivity());
}
+
+ @NonNull
+ protected ToolbarController getToolbarController()
+ {
+ return mToolbarController;
+ }
}
diff --git a/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java b/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java
new file mode 100644
index 0000000000..317d0fd28c
--- /dev/null
+++ b/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java
@@ -0,0 +1,14 @@
+package com.mapswithme.maps.ugc.routes;
+
+import android.support.v4.app.Fragment;
+
+import com.mapswithme.maps.base.BaseMwmFragmentActivity;
+
+public class UgcRouteSharingOptionsActivity extends BaseMwmFragmentActivity
+{
+ @Override
+ protected Class extends Fragment> getFragmentClass()
+ {
+ return UgcSharingOptionsFragment.class;
+ }
+}
diff --git a/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java b/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java
new file mode 100644
index 0000000000..8cd64c2847
--- /dev/null
+++ b/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java
@@ -0,0 +1,196 @@
+package com.mapswithme.maps.ugc.routes;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.text.Html;
+import android.text.Spanned;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.mapswithme.maps.DisabledBrowserMovementMethod;
+import com.mapswithme.maps.Framework;
+import com.mapswithme.maps.R;
+import com.mapswithme.maps.auth.Authorizer;
+import com.mapswithme.maps.auth.BaseMwmAuthorizationFragment;
+import com.mapswithme.maps.dialog.AlertDialog;
+import com.mapswithme.util.ConnectionState;
+
+public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment
+{
+ private static final String NO_NETWORK_CONNECTION_DIALOG_TAG = "no_network_connection_dialog";
+
+ @SuppressWarnings("NullableProblems")
+ @NonNull
+ private Authorizer mAuthorizer;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ mAuthorizer = new Authorizer(this);
+ }
+
+ @Override
+ protected ToolbarController onCreateToolbarController(@NonNull View root)
+ {
+ return new ToolbarController(root);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState)
+ {
+ View root = inflater.inflate(R.layout.ugc_routes_sharing_options_frag, container, false);
+ initClickListeners(root);
+ TextView licenceAgreementText = root.findViewById(R.id.license_agreement_message);
+
+ String src = getResources().getString(R.string.ugc_routes_user_agreement,
+ /* FIXME */
+ Framework.nativeGetPrivacyPolicyLink());
+ Spanned spanned = Html.fromHtml(src);
+ licenceAgreementText.setMovementMethod(DisabledBrowserMovementMethod.getInstance());
+ licenceAgreementText.setText(spanned);
+ return root;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ {
+ super.onViewCreated(view, savedInstanceState);
+ getToolbarController().setTitle(R.string.sharing_options);
+ }
+
+ private void initClickListeners(View root)
+ {
+ View getDirectLinkView = root.findViewById(R.id.get_direct_link_text);
+ getDirectLinkView.setOnClickListener(directLinkListener -> onGetDirectLinkClicked());
+ View uploadAndPublishView = root.findViewById(R.id.upload_and_publish_text);
+ uploadAndPublishView.setOnClickListener(uploadListener -> onUploadAndPublishBtnClicked());
+ }
+
+ @Override
+ public void onStart()
+ {
+ super.onStart();
+ mAuthorizer.attach(this);
+ }
+
+ @Override
+ public void onStop()
+ {
+ super.onStop();
+ mAuthorizer.detach();
+ }
+
+ private void onUploadAndPublishBtnClicked()
+ {
+ if (isNetworkConnectionAbsent())
+ {
+ showNoNetworkConnectionDialog();
+ return;
+ }
+
+ if (hasAuthToken())
+ openTagsScreen();
+ else
+ requestAuth();
+ }
+
+ private void showNoNetworkConnectionDialog()
+ {
+ Fragment fragment = getFragmentManager().findFragmentByTag(NO_NETWORK_CONNECTION_DIALOG_TAG);
+ if (fragment != null)
+ return;
+
+ AlertDialog dialog = new AlertDialog.Builder()
+ .setTitleId(R.string.common_check_internet_connection_dialog_title)
+ .setMessageId(R.string.common_check_internet_connection_dialog)
+ .setPositiveBtnId(R.string.ok)
+ .build();
+ dialog.show(dialog, NO_NETWORK_CONNECTION_DIALOG_TAG);
+ }
+
+ private boolean isNetworkConnectionAbsent()
+ {
+ return !ConnectionState.isConnected();
+ }
+
+ private void requestAuth()
+ {
+ mAuthorizer.authorize();
+ }
+
+ private void openTagsScreen()
+ {
+
+ }
+
+ private boolean hasAuthToken()
+ {
+ return mAuthorizer.isAuthorized();
+ }
+
+ private void onGetDirectLinkClicked()
+ {
+
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data)
+ {
+ super.onActivityResult(requestCode, resultCode, data);
+ /*FIXME*/
+ if (requestCode == 1 && resultCode == Activity.RESULT_OK)
+ requestPublishing(data);
+ }
+
+ private void requestPublishing(@NonNull Intent data)
+ {
+
+ }
+
+ @Override
+ public void onAuthorizationFinish(boolean success)
+ {
+
+ }
+
+ @Override
+ public void onAuthorizationStart()
+ {
+
+ }
+
+ @Override
+ public void onSocialAuthenticationCancel(int type)
+ {
+
+ }
+
+ @Override
+ public void onSocialAuthenticationError(int type, @Nullable String error)
+ {
+
+ }
+
+ private class ToolbarController extends com.mapswithme.maps.widget.ToolbarController
+ {
+ public ToolbarController(View root)
+ {
+ super(root, UgcSharingOptionsFragment.this.getActivity());
+ }
+
+ @Override
+ public void onUpClick()
+ {
+ getActivity().finish();
+ }
+ }
+}