From 37fabd489def6a698ee0a753e36a373824988d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B0=D1=86=D0=B5=D0=BF=D0=B8=D0=BD?= Date: Wed, 7 Feb 2018 19:12:13 +0300 Subject: [PATCH] [android] Refactored passport authorization logic to make it reusable for bookmarks fragment --- .../com/mapswithme/maps/auth/Authorizer.java | 66 ++++++++++++++++ .../auth/BaseMwmAuthorizationFragment.java | 76 +++---------------- .../bookmarks/BookmarkCategoriesFragment.java | 21 +++-- .../maps/ugc/UGCEditorFragment.java | 18 ++++- 4 files changed, 109 insertions(+), 72 deletions(-) create mode 100644 android/src/com/mapswithme/maps/auth/Authorizer.java diff --git a/android/src/com/mapswithme/maps/auth/Authorizer.java b/android/src/com/mapswithme/maps/auth/Authorizer.java new file mode 100644 index 0000000000..3ca28e3e52 --- /dev/null +++ b/android/src/com/mapswithme/maps/auth/Authorizer.java @@ -0,0 +1,66 @@ +package com.mapswithme.maps.auth; + +import android.app.Activity; +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.text.TextUtils; + +import com.mapswithme.maps.Framework; +import com.mapswithme.util.ConnectionState; + +public class Authorizer +{ + @NonNull + private final Fragment mFragment; + @Nullable + private final Callback mCallback; + + public Authorizer(@NonNull Fragment fragment, @NonNull Callback callback) + { + mFragment = fragment; + mCallback = callback; + } + + public final void authorize() + { + if (Framework.nativeIsUserAuthenticated() || !ConnectionState.isConnected()) + { + if (mCallback != null) + mCallback.onAuthorizationFinish(); + return; + } + + String name = SocialAuthDialogFragment.class.getName(); + DialogFragment fragment = (DialogFragment) Fragment.instantiate(mFragment.getContext(), name); + fragment.setTargetFragment(mFragment, Constants.REQ_CODE_GET_SOCIAL_TOKEN); + fragment.show(mFragment.getActivity().getSupportFragmentManager(), name); + } + + public final void onActivityResult(int requestCode, int resultCode, Intent data) + { + if (requestCode != Constants.REQ_CODE_GET_SOCIAL_TOKEN + || resultCode != Activity.RESULT_OK || data == null) + { + return; + } + + String socialToken = data.getStringExtra(Constants.EXTRA_SOCIAL_TOKEN); + if (!TextUtils.isEmpty(socialToken)) + { + @Framework.SocialTokenType + int type = data.getIntExtra(Constants.EXTRA_TOKEN_TYPE, -1); + Framework.nativeAuthenticateUser(socialToken, type); + } + + if (mCallback != null) + mCallback.onAuthorizationFinish(); + } + + public interface Callback + { + void onAuthorizationFinish(); + } +} diff --git a/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java b/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java index 52a2a8e59f..63bd7ca73b 100644 --- a/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java +++ b/android/src/com/mapswithme/maps/auth/BaseMwmAuthorizationFragment.java @@ -1,20 +1,9 @@ package com.mapswithme.maps.auth; -import android.app.Activity; import android.content.Intent; -import android.os.Bundle; -import android.support.annotation.MainThread; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.text.TextUtils; -import android.view.View; -import com.mapswithme.maps.Framework; -import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmToolbarFragment; -import com.mapswithme.util.ConnectionState; /** * A base toolbar fragment which is responsible for the authorization flow, @@ -22,69 +11,28 @@ import com.mapswithme.util.ConnectionState; * to get user authorized for the MapsMe server (Passport). */ public abstract class BaseMwmAuthorizationFragment extends BaseMwmToolbarFragment + implements Authorizer.Callback { - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) + @NonNull + private final Authorizer mAuthorizer = new Authorizer(this, this); + + protected void authorize() { - super.onViewCreated(view, savedInstanceState); - View submitButton = mToolbarController.findViewById(R.id.submit); - if (submitButton == null) - throw new AssertionError("Descendant of BaseMwmAuthorizationFragment must have authorize " + - "button in toolbar!"); - - submitButton.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - onSubmitButtonClick(); - authorize(); - } - }); - } - - private void authorize() - { - if (Framework.nativeIsUserAuthenticated() || !ConnectionState.isConnected()) - { - finishActivity(); - return; - } - - String name = SocialAuthDialogFragment.class.getName(); - DialogFragment fragment = (DialogFragment) Fragment.instantiate(getContext(), name); - fragment.setTargetFragment(this, Constants.REQ_CODE_GET_SOCIAL_TOKEN); - fragment.show(getActivity().getSupportFragmentManager(), name); + mAuthorizer.authorize(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - - if (requestCode != Constants.REQ_CODE_GET_SOCIAL_TOKEN - || resultCode != Activity.RESULT_OK || data == null) - { - return; - } - - String socialToken = data.getStringExtra(Constants.EXTRA_SOCIAL_TOKEN); - if (!TextUtils.isEmpty(socialToken)) - { - @Framework.SocialTokenType - int type = data.getIntExtra(Constants.EXTRA_TOKEN_TYPE, -1); - Framework.nativeAuthenticateUser(socialToken, type); - } - - finishActivity(); + mAuthorizer.onActivityResult(requestCode, resultCode, data); } - private void finishActivity() + protected abstract void onAuthorized(); + + @Override + public void onAuthorizationFinish() { - if (isAdded()) - getActivity().finish(); + onAuthorized(); } - - @MainThread - protected abstract void onSubmitButtonClick(); } diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java index 26358dfd4c..40089de21c 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesFragment.java @@ -11,6 +11,7 @@ import android.view.MenuItem; import android.view.View; import com.mapswithme.maps.R; +import com.mapswithme.maps.auth.Authorizer; import com.mapswithme.maps.base.BaseMwmRecyclerFragment; import com.mapswithme.maps.bookmarks.data.BookmarkCategory; import com.mapswithme.maps.bookmarks.data.BookmarkManager; @@ -23,16 +24,20 @@ import com.mapswithme.util.UiUtils; import com.mapswithme.util.sharing.SharingHelper; public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment - implements EditTextDialogFragment.OnTextSaveListener, - MenuItem.OnMenuItemClickListener, - RecyclerClickListener, - RecyclerLongClickListener, - BookmarkManager.BookmarksLoadingListener + implements EditTextDialogFragment.OnTextSaveListener, + MenuItem.OnMenuItemClickListener, + RecyclerClickListener, + RecyclerLongClickListener, + BookmarkManager.BookmarksLoadingListener, + Authorizer.Callback { private int mSelectedPosition; @Nullable private View mLoadingPlaceholder; + @NonNull + private final Authorizer mAuthorizer = new Authorizer(this, this); + @Override protected @LayoutRes int getLayoutRes() { @@ -223,4 +228,10 @@ public class BookmarkCategoriesFragment extends BaseMwmRecyclerFragment { // Do nothing here. } + + @Override + public void onAuthorizationFinish() + { + // TODO: coming soon. + } } diff --git a/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java b/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java index 5c1c5d61c0..47f623d667 100644 --- a/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java +++ b/android/src/com/mapswithme/maps/ugc/UGCEditorFragment.java @@ -14,7 +14,6 @@ import com.mapswithme.maps.R; import com.mapswithme.maps.auth.BaseMwmAuthorizationFragment; import com.mapswithme.maps.bookmarks.data.FeatureId; import com.mapswithme.maps.widget.ToolbarController; -import com.mapswithme.util.CrashlyticsUtils; import com.mapswithme.util.Language; import com.mapswithme.util.UiUtils; import com.mapswithme.util.statistics.Statistics; @@ -39,7 +38,8 @@ public class UGCEditorFragment extends BaseMwmAuthorizationFragment @Nullable @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_ugc_editor, container, false); mReviewEditText = (EditText) root.findViewById(R.id.review); @@ -74,6 +74,12 @@ public class UGCEditorFragment extends BaseMwmAuthorizationFragment { super.onViewCreated(view, savedInstanceState); mToolbarController.setTitle(getArguments().getString(ARG_TITLE)); + View submitButton = mToolbarController.findViewById(R.id.submit); + submitButton.setOnClickListener(v -> + { + onSubmitButtonClick(); + authorize(); + }); } @Override @@ -91,7 +97,13 @@ public class UGCEditorFragment extends BaseMwmAuthorizationFragment } @Override - protected void onSubmitButtonClick() + protected void onAuthorized() + { + if (isAdded()) + getActivity().finish(); + } + + private void onSubmitButtonClick() { List modifiedRatings = mUGCRatingAdapter.getItems(); UGC.Rating[] ratings = new UGC.Rating[modifiedRatings.size()];