Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArsentiy Milchakov <milcars@mapswithme.com>2018-04-11 19:41:40 +0300
committerRoman Kuznetsov <r.kuznetsow@gmail.com>2018-04-12 18:51:33 +0300
commitcd8c347fd58ddd4724c26054ab3c38a545811332 (patch)
tree68db3573eb212682a4a7f7101381dd895503c9a0 /android/src
parentdcb9a778f9ea1fa812741c2157517a068757063d (diff)
[android] Phone auth
Diffstat (limited to 'android/src')
-rw-r--r--android/src/com/mapswithme/maps/Framework.java1
-rw-r--r--android/src/com/mapswithme/maps/auth/Constants.java2
-rw-r--r--android/src/com/mapswithme/maps/auth/PhoneAuthActivity.java39
-rw-r--r--android/src/com/mapswithme/maps/auth/PhoneAuthFragment.java92
-rw-r--r--android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java58
-rw-r--r--android/src/com/mapswithme/maps/settings/CopyrightFragment.java2
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