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