diff options
author | Arsentiy Milchakov <milcars@mapswithme.com> | 2018-04-11 19:41:40 +0300 |
---|---|---|
committer | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2018-04-12 18:51:33 +0300 |
commit | cd8c347fd58ddd4724c26054ab3c38a545811332 (patch) | |
tree | 68db3573eb212682a4a7f7101381dd895503c9a0 /android/src | |
parent | dcb9a778f9ea1fa812741c2157517a068757063d (diff) |
[android] Phone auth
Diffstat (limited to 'android/src')
6 files changed, 178 insertions, 16 deletions
diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index 612a796580..5d8769a008 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -410,6 +410,7 @@ public class Framework @AuthTokenType int socialTokenType, @NonNull AuthorizationListener listener); public static native boolean nativeIsUserAuthenticated(); + public static native String nativeGetPhoneAuthUrl(@NonNull String redirectUrl); public static native void nativeShowFeatureByLatLon(double lat, double lon); diff --git a/android/src/com/mapswithme/maps/auth/Constants.java b/android/src/com/mapswithme/maps/auth/Constants.java index 6b48ae075c..583637b4c7 100644 --- a/android/src/com/mapswithme/maps/auth/Constants.java +++ b/android/src/com/mapswithme/maps/auth/Constants.java @@ -6,7 +6,9 @@ import java.util.List; class Constants { static final int REQ_CODE_GET_SOCIAL_TOKEN = 101; + static final int REQ_CODE_PHONE_AUTH_RESULT = 102; static final String EXTRA_SOCIAL_TOKEN = "extra_social_token"; + static final String EXTRA_PHONE_AUTH_TOKEN = "extra_phone_auth_token"; static final String EXTRA_TOKEN_TYPE = "extra_token_type"; static final String EXTRA_AUTH_ERROR = "extra_auth_error"; static final String EXTRA_IS_CANCEL = "extra_is_cancel"; diff --git a/android/src/com/mapswithme/maps/auth/PhoneAuthActivity.java b/android/src/com/mapswithme/maps/auth/PhoneAuthActivity.java new file mode 100644 index 0000000000..0aa7491cae --- /dev/null +++ b/android/src/com/mapswithme/maps/auth/PhoneAuthActivity.java @@ -0,0 +1,39 @@ +package com.mapswithme.maps.auth; + +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; + +import com.mapswithme.maps.R; +import com.mapswithme.maps.base.BaseMwmExtraTitleActivity; +import com.mapswithme.maps.base.OnBackPressListener; + +public class PhoneAuthActivity extends BaseMwmExtraTitleActivity +{ + public static void start(@NonNull Fragment fragment) + { + final Intent i = new Intent(fragment.getContext(), PhoneAuthActivity.class); + i.putExtra(EXTRA_TITLE, fragment.getString(R.string.authorization_button_sign_in)); + fragment.startActivityForResult(i, Constants.REQ_CODE_PHONE_AUTH_RESULT); + } + + @Override + public void onBackPressed() + { + FragmentManager manager = getSupportFragmentManager(); + Fragment fragment = manager.findFragmentByTag(PhoneAuthFragment.class.getName()); + + if (fragment == null) + return; + + if (!((OnBackPressListener) fragment).onBackPressed()) + super.onBackPressed(); + } + + @Override + protected Class<? extends Fragment> getFragmentClass() + { + return PhoneAuthFragment.class; + } +} diff --git a/android/src/com/mapswithme/maps/auth/PhoneAuthFragment.java b/android/src/com/mapswithme/maps/auth/PhoneAuthFragment.java new file mode 100644 index 0000000000..a31eeacb2f --- /dev/null +++ b/android/src/com/mapswithme/maps/auth/PhoneAuthFragment.java @@ -0,0 +1,92 @@ +package com.mapswithme.maps.auth; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.mapswithme.maps.Framework; +import com.mapswithme.maps.R; +import com.mapswithme.maps.base.BaseMwmFragment; +import com.mapswithme.maps.base.OnBackPressListener; +import com.mapswithme.util.UiUtils; + +public class PhoneAuthFragment extends BaseMwmFragment implements OnBackPressListener +{ + private static final String REDIRECT_URL = "https://localhost/"; + + @SuppressWarnings("NullableProblems") + @NonNull + private WebView mWebView; + @SuppressWarnings("NullableProblems") + @NonNull + private View mProgress; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) + { + return inflater.inflate(R.layout.fragment_web_view_with_progress, container, false); + } + + @SuppressLint("SetJavaScriptEnabled") + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) + { + super.onViewCreated(view, savedInstanceState); + + if (savedInstanceState != null) + return; + + mWebView = view.findViewById(R.id.webview); + mProgress = view.findViewById(R.id.progress); + mWebView.setWebViewClient(new WebViewClient() + { + @Override + public void onPageFinished(WebView view, String url) + { + UiUtils.show(mWebView); + UiUtils.hide(mProgress); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) + { + if (url.contains(REDIRECT_URL + "?code=")) + { + Intent returnIntent = new Intent(); + returnIntent.putExtra(Constants.EXTRA_PHONE_AUTH_TOKEN, + url.substring((REDIRECT_URL + "?code=").length())); + + getActivity().setResult(Activity.RESULT_OK, returnIntent); + getActivity().finish(); + + return true; + } + + return super.shouldOverrideUrlLoading(view, url); + } + }); + + mWebView.getSettings().setJavaScriptEnabled(true); + mWebView.loadUrl(Framework.nativeGetPhoneAuthUrl(REDIRECT_URL)); + } + + @Override + public boolean onBackPressed() + { + if (!mWebView.canGoBack()) + return false; + + mWebView.goBack(); + return true; + } +} diff --git a/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java b/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java index 9ddcee6cc9..97c0aaeb1a 100644 --- a/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java +++ b/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java @@ -35,7 +35,16 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC); private static final String TAG = SocialAuthDialogFragment.class.getSimpleName(); @NonNull - private final CallbackManager mCallbackManager = CallbackManager.Factory.create(); + private final CallbackManager mFacebookCallbackManager = CallbackManager.Factory.create(); + + @Nullable + private String mPhoneAuthToken; + + @NonNull + private final View.OnClickListener mPhoneClickListener = (View v) -> + { + PhoneAuthActivity.start(this); + }; @NonNull @Override @@ -48,13 +57,17 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment @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 view = inflater.inflate(R.layout.fragment_auth_passport_dialog, container, false); - LoginButton button = view.findViewById(R.id.loging_button); - button.setReadPermissions(Constants.FACEBOOK_PERMISSIONS); - button.setFragment(this); - button.registerCallback(mCallbackManager, new FBCallback(this)); + LoginButton facebookButton = view.findViewById(R.id.facebook_button); + facebookButton.setReadPermissions(Constants.FACEBOOK_PERMISSIONS); + facebookButton.setFragment(this); + facebookButton.registerCallback(mFacebookCallbackManager, new FBCallback(this)); + + View phoneButton = view.findViewById(R.id.phone_button); + phoneButton.setOnClickListener(mPhoneClickListener); return view; } @@ -62,10 +75,10 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment public void onResume() { super.onResume(); - AccessToken token = AccessToken.getCurrentAccessToken(); + AccessToken facebookToken = AccessToken.getCurrentAccessToken(); String tokenValue = null; - if (token != null) - tokenValue = token.getToken(); + if (facebookToken != null) + tokenValue = facebookToken.getToken(); if (TextUtils.isEmpty(tokenValue)) { @@ -97,17 +110,32 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - mCallbackManager.onActivityResult(requestCode, resultCode, data); + + if (data != null && requestCode == Constants.REQ_CODE_PHONE_AUTH_RESULT) + { + mPhoneAuthToken = data.getStringExtra(Constants.EXTRA_PHONE_AUTH_TOKEN); + dismiss(); + } + + mFacebookCallbackManager.onActivityResult(requestCode, resultCode, data); } @Override public void onDismiss(DialogInterface dialog) { - AccessToken token = AccessToken.getCurrentAccessToken(); - int resultCode = token == null || TextUtils.isEmpty(token.getToken()) ? Activity.RESULT_CANCELED - : Activity.RESULT_OK; - sendResult(resultCode, token != null ? token.getToken() : null, - Framework.SOCIAL_TOKEN_FACEBOOK, null, true); + String token = mPhoneAuthToken; + + @Framework.AuthTokenType + int tokenType = token != null ? Framework.SOCIAL_TOKEN_PHONE : Framework.SOCIAL_TOKEN_FACEBOOK; + + if (token == null) + { + AccessToken facebookToken = AccessToken.getCurrentAccessToken(); + token = facebookToken != null ? facebookToken.getToken() : null; + } + + int resultCode = TextUtils.isEmpty(token) ? Activity.RESULT_CANCELED : Activity.RESULT_OK; + sendResult(resultCode, token, tokenType, null, true); super.onDismiss(dialog); } diff --git a/android/src/com/mapswithme/maps/settings/CopyrightFragment.java b/android/src/com/mapswithme/maps/settings/CopyrightFragment.java index 3a9bfe732d..93e9adace3 100644 --- a/android/src/com/mapswithme/maps/settings/CopyrightFragment.java +++ b/android/src/com/mapswithme/maps/settings/CopyrightFragment.java @@ -19,7 +19,7 @@ public class CopyrightFragment extends BaseSettingsFragment @Override protected int getLayoutRes() { - return R.layout.fragment_prefs_copyright; + return R.layout.fragment_web_view_with_progress; } @Override |