diff --git a/android/res/layout/indeterminated_progress_dialog.xml b/android/res/layout/indeterminated_progress_dialog.xml
new file mode 100644
index 0000000000..f07ab518a6
--- /dev/null
+++ b/android/res/layout/indeterminated_progress_dialog.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/android/res/layout/ugc_route_sharing_options_activity.xml b/android/res/layout/ugc_route_sharing_options_activity.xml
new file mode 100644
index 0000000000..512f0b204c
--- /dev/null
+++ b/android/res/layout/ugc_route_sharing_options_activity.xml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java
index ce5ac5f065..fea65be48e 100644
--- a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java
+++ b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java
@@ -567,6 +567,11 @@ public enum BookmarkManager
nativeImportFromCatalog(serverId, filePath);
}
+ public void uploadRoutes(int accessRules, @NonNull BookmarkCategory bookmarkCategory)
+ {
+ nativeUploadToCatalog(accessRules, bookmarkCategory.getId());
+ }
+
@NonNull
public String getCatalogDeeplink(long catId)
{
diff --git a/android/src/com/mapswithme/maps/dialog/ProgressDialogFragment.java b/android/src/com/mapswithme/maps/dialog/ProgressDialogFragment.java
new file mode 100644
index 0000000000..b69e6fd6b9
--- /dev/null
+++ b/android/src/com/mapswithme/maps/dialog/ProgressDialogFragment.java
@@ -0,0 +1,120 @@
+package com.mapswithme.maps.dialog;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v7.app.AlertDialog;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.mapswithme.maps.R;
+
+import java.util.Objects;
+
+public class ProgressDialogFragment extends DialogFragment
+{
+ private static final String EXTRA_TITLE = "title";
+ private static final String EXTRA_CANCELABLE = "cancelable";
+ private static final String EXTRA_RETAIN_INSTANCE = "retain_instance";
+
+ @SuppressWarnings("NullableProblems")
+ @NonNull
+ private TextView mMessageView;
+
+ public ProgressDialogFragment()
+ {
+ }
+
+ @NonNull
+ public static ProgressDialogFragment newInstance(@NonNull String title)
+ {
+ return newInstance(title, false, true);
+ }
+
+ @NonNull
+ public static ProgressDialogFragment newInstance(@NonNull String title, boolean cancelable,
+ boolean retainInstance)
+ {
+ ProgressDialogFragment fr = new ProgressDialogFragment();
+ fr.setArguments(getArgs(title, cancelable, retainInstance));
+ return fr;
+ }
+
+ public static Bundle getArgs(@NonNull String title, boolean cancelable, boolean retainInstance)
+ {
+ Bundle args = new Bundle();
+ args.putString(EXTRA_TITLE, title);
+ args.putBoolean(EXTRA_CANCELABLE, cancelable);
+ args.putBoolean(EXTRA_RETAIN_INSTANCE, retainInstance);
+ return args;
+ }
+
+ protected void setCancelResult()
+ {
+ Fragment targetFragment = getTargetFragment();
+ if (targetFragment != null)
+ targetFragment.onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, null);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ Bundle args = Objects.requireNonNull(getArguments());
+ boolean retainInstance = args.getBoolean(EXTRA_RETAIN_INSTANCE, true);
+ setRetainInstance(retainInstance);
+ }
+
+ @NonNull
+ @Override
+ public final Dialog onCreateDialog(Bundle savedInstanceState)
+ {
+ return onCreateProgressDialog();
+ }
+
+ @NonNull
+ protected AlertDialog onCreateProgressDialog()
+ {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ LayoutInflater inflater = LayoutInflater.from(getActivity());
+ View view = inflater.inflate(R.layout.indeterminated_progress_dialog, null, false);
+ Bundle args = Objects.requireNonNull(getArguments());
+ String title = args.getString(EXTRA_TITLE);
+ mMessageView.setText(title);
+ mMessageView = view.findViewById(R.id.message);
+ builder.setView(view);
+ AlertDialog dialog = builder.create();
+ dialog.setCanceledOnTouchOutside(args.getBoolean(EXTRA_CANCELABLE, false));
+ return dialog;
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog)
+ {
+ setCancelResult();
+ }
+
+ public boolean isShowing()
+ {
+ Dialog dialog = getDialog();
+ return dialog != null && dialog.isShowing();
+ }
+
+ public void setMessage(@NonNull CharSequence message)
+ {
+ mMessageView.setText(message);
+ }
+
+ @Override
+ public void onDestroyView()
+ {
+ if (getDialog() != null && getRetainInstance())
+ getDialog().setDismissMessage(null);
+ super.onDestroyView();
+ }
+}
diff --git a/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java b/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java
index 317d0fd28c..c54e240ec4 100644
--- a/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java
+++ b/android/src/com/mapswithme/maps/ugc/routes/UgcRouteSharingOptionsActivity.java
@@ -1,14 +1,34 @@
package com.mapswithme.maps.ugc.routes;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmFragmentActivity;
public class UgcRouteSharingOptionsActivity extends BaseMwmFragmentActivity
{
+
+ private static final String SHARING_OPTIONS_FRAGMENT_TAG = "sharing_options_fragment";
+
+ @Override
+ protected void safeOnCreate(@Nullable Bundle savedInstanceState)
+ {
+ super.safeOnCreate(savedInstanceState);
+ setContentView(R.layout.ugc_route_sharing_options_activity);
+ FragmentManager fm = getSupportFragmentManager();
+ Fragment fragment = fm.findFragmentByTag(SHARING_OPTIONS_FRAGMENT_TAG);
+ if (fragment == null)
+ fm.beginTransaction()
+ .add(R.id.fragment_container, new UgcSharingOptionsFragment(), SHARING_OPTIONS_FRAGMENT_TAG)
+ .commit();
+ }
+
@Override
protected Class extends Fragment> getFragmentClass()
{
- return UgcSharingOptionsFragment.class;
+ return null;
}
}
diff --git a/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java b/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java
index 88f49d5241..548c21d692 100644
--- a/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java
+++ b/android/src/com/mapswithme/maps/ugc/routes/UgcSharingOptionsFragment.java
@@ -5,7 +5,9 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
import android.text.Html;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
@@ -17,13 +19,22 @@ import android.widget.TextView;
import com.mapswithme.maps.Framework;
import com.mapswithme.maps.R;
import com.mapswithme.maps.auth.BaseMwmAuthorizationFragment;
+import com.mapswithme.maps.bookmarks.data.BookmarkManager;
+import com.mapswithme.maps.bookmarks.data.CatalogTagsGroup;
import com.mapswithme.maps.dialog.AlertDialog;
+import com.mapswithme.maps.dialog.ProgressDialogFragment;
import com.mapswithme.maps.widget.ToolbarController;
import com.mapswithme.util.ConnectionState;
+import com.mapswithme.util.UiUtils;
-public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment
+public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment implements BookmarkManager.BookmarksCatalogListener
{
private static final String NO_NETWORK_CONNECTION_DIALOG_TAG = "no_network_connection_dialog";
+ private static final String UPLOADING_PROGRESS_DIALOG_TAG = "uploading_progress_dialog";
+
+ @SuppressWarnings("NullableProblems")
+ @NonNull
+ private View mGetDirectLinkContainer;
@NonNull
@Override
@@ -45,6 +56,7 @@ public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment
@Nullable Bundle savedInstanceState)
{
View root = inflater.inflate(R.layout.fragment_ugc_routes_sharing_options, container, false);
+ mGetDirectLinkContainer = root.findViewById(R.id.get_direct_link_container);
initClickListeners(root);
TextView licenceAgreementText = root.findViewById(R.id.license_agreement_message);
@@ -111,7 +123,59 @@ public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment
private void onGetDirectLinkClicked()
{
+ onUploadBtnClicked();
+ }
+ private void onUploadBtnClicked()
+ {
+ if (isNetworkConnectionAbsent())
+ {
+ showNoNetworkConnectionDialog();
+ return;
+ }
+
+ if (isAuthorized())
+ onPostAuthCompleted();
+ else
+ authorize();
+ }
+
+ private void onPostAuthCompleted()
+ {
+ if (isDirectLinkUploadMode())
+ requestDirectLink();
+ else
+ openTagsScreen();
+ }
+
+ private boolean isDirectLinkUploadMode()
+ {
+ return true;
+ }
+
+ private void requestDirectLink()
+ {
+ showProgress();
+ BookmarkManager.INSTANCE.uploadRoutes(1, null);
+ }
+
+ private void showProgress()
+ {
+ String title = getString(R.string.upload_and_publish_progress_text);
+ ProgressDialogFragment dialog = ProgressDialogFragment.newInstance(title);
+ getFragmentManager()
+ .beginTransaction()
+ .add(dialog, UPLOADING_PROGRESS_DIALOG_TAG)
+ .commitAllowingStateLoss();
+ }
+
+
+ private void hideProgress()
+ {
+ FragmentManager fm = getFragmentManager();
+ DialogFragment frag = (DialogFragment) fm.findFragmentByTag(UPLOADING_PROGRESS_DIALOG_TAG);
+ if (frag != null)
+ frag.dismissAllowingStateLoss();
}
@Override
@@ -124,13 +188,28 @@ public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment
private void requestPublishing(@NonNull Intent data)
{
+ showProgress();
+ }
+ @Override
+ public void onStart()
+ {
+ super.onStart();
+ BookmarkManager.INSTANCE.addCatalogListener(this);
+ }
+
+ @Override
+ public void onStop()
+ {
+ super.onStop();
+ BookmarkManager.INSTANCE.removeCatalogListener(this);
}
@Override
public void onAuthorizationFinish(boolean success)
{
-
+ if (success)
+ onPostAuthCompleted();
}
@Override
@@ -150,4 +229,52 @@ public class UgcSharingOptionsFragment extends BaseMwmAuthorizationFragment
{
}
+
+ @Override
+ public void onImportStarted(@NonNull String serverId)
+ {
+
+ }
+
+ @Override
+ public void onImportFinished(@NonNull String serverId, long catId, boolean successful)
+ {
+
+ }
+
+ @Override
+ public void onTagsReceived(boolean successful, @NonNull CatalogTagsGroup[] tagsGroups)
+ {
+
+ }
+
+ @Override
+ public void onUploadStarted(long originCategoryId)
+ {
+
+ }
+
+ @Override
+ public void onUploadFinished(int uploadResult, @NonNull String description,
+ long originCategoryId, long resultCategoryId)
+ {
+
+ if (isOkResult(uploadResult))
+ {
+ hideProgress();
+ if (isDirectLinkUploadMode())
+ {
+ /* not implemented yet */
+ }
+ else
+ {
+ UiUtils.hide(mGetDirectLinkContainer);
+ }
+ }
+ }
+
+ private boolean isOkResult(int uploadResult)
+ {
+ return true;
+ }
}