diff options
author | Александр Зацепин <az@mapswithme.com> | 2018-04-13 13:54:41 +0300 |
---|---|---|
committer | Arsentiy Milchakov <milcars@mapswithme.com> | 2018-04-16 11:55:04 +0300 |
commit | adaeb6e5f7cc936d072ceac770dae4f4696d9b0b (patch) | |
tree | af8a1c4756c9b8050d42794f4c2eb70c808f6d33 /android/src | |
parent | 7a5df99da973ad3adedf448a44b94a9a0aa061a9 (diff) |
[android] Google auth
Diffstat (limited to 'android/src')
-rw-r--r-- | android/src/com/mapswithme/maps/PrivateVariables.java | 1 | ||||
-rw-r--r-- | android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java | 86 |
2 files changed, 71 insertions, 16 deletions
diff --git a/android/src/com/mapswithme/maps/PrivateVariables.java b/android/src/com/mapswithme/maps/PrivateVariables.java index 0cabc4e202..c668fe8b78 100644 --- a/android/src/com/mapswithme/maps/PrivateVariables.java +++ b/android/src/com/mapswithme/maps/PrivateVariables.java @@ -12,6 +12,7 @@ public class PrivateVariables public static native int myTargetSlot(); public static native int myTargetRbSlot(); public static native String myTargetCheckUrl(); + public static native String googleWebClientId(); /** * @return interval in seconds */ diff --git a/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java b/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java index 409ad458a5..17a0627353 100644 --- a/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java +++ b/android/src/com/mapswithme/maps/auth/SocialAuthDialogFragment.java @@ -20,7 +20,14 @@ import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.login.LoginResult; import com.facebook.login.widget.LoginButton; +import com.google.android.gms.auth.api.signin.GoogleSignIn; +import com.google.android.gms.auth.api.signin.GoogleSignInAccount; +import com.google.android.gms.auth.api.signin.GoogleSignInClient; +import com.google.android.gms.auth.api.signin.GoogleSignInOptions; +import com.google.android.gms.common.SignInButton; import com.mapswithme.maps.Framework; +import com.mapswithme.maps.MwmApplication; +import com.mapswithme.maps.PrivateVariables; import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmDialogFragment; import com.mapswithme.util.log.Logger; @@ -34,9 +41,11 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC); private static final String TAG = SocialAuthDialogFragment.class.getSimpleName(); + @SuppressWarnings("NullableProblems") + @NonNull + private GoogleSignInClient mGoogleSignInClient; @NonNull private final CallbackManager mFacebookCallbackManager = CallbackManager.Factory.create(); - @Nullable private String mPhoneAuthToken; @@ -47,6 +56,17 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment }; @NonNull + private final View.OnClickListener mGoogleClickListener = new View.OnClickListener() + { + @Override + public void onClick(View v) + { + Intent intent = mGoogleSignInClient.getSignInIntent(); + startActivity(intent); + } + }; + + @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -55,12 +75,27 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment return res; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestIdToken(PrivateVariables.googleWebClientId()) + .requestEmail() + .build(); + mGoogleSignInClient = GoogleSignIn.getClient(getActivity(), gso); + } + @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_auth_passport_dialog, container, false); + + SignInButton googleButton = view.findViewById(R.id.google_button); + googleButton.setOnClickListener(mGoogleClickListener); + LoginButton facebookButton = view.findViewById(R.id.facebook_button); facebookButton.setReadPermissions(Constants.FACEBOOK_PERMISSIONS); facebookButton.setFragment(this); @@ -75,12 +110,18 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment public void onResume() { super.onResume(); + AccessToken facebookToken = AccessToken.getCurrentAccessToken(); - String tokenValue = null; + String fbTokenValue = null; if (facebookToken != null) - tokenValue = facebookToken.getToken(); + fbTokenValue = facebookToken.getToken(); - if (TextUtils.isEmpty(tokenValue)) + GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(MwmApplication.get()); + String googleTokenValue = null; + if (account != null) + googleTokenValue = account.getIdToken(); + + if (TextUtils.isEmpty(fbTokenValue) && TextUtils.isEmpty(googleTokenValue)) { Statistics.INSTANCE.trackEvent(Statistics.EventName.UGC_AUTH_SHOWN); return; @@ -125,10 +166,11 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment { String token = mPhoneAuthToken; - @Framework.AuthTokenType - int tokenType = !TextUtils.isEmpty(token) ? - Framework.SOCIAL_TOKEN_PHONE : - Framework.SOCIAL_TOKEN_FACEBOOK; + if (TextUtils.isEmpty(token)) + { + GoogleSignInAccount googleAccount = GoogleSignIn.getLastSignedInAccount(MwmApplication.get()); + token = googleAccount != null ? googleAccount.getIdToken() : null; + } if (TextUtils.isEmpty(token)) { @@ -137,10 +179,23 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment } int resultCode = TextUtils.isEmpty(token) ? Activity.RESULT_CANCELED : Activity.RESULT_OK; - sendResult(resultCode, token, tokenType, null, true); + sendResult(resultCode, token, getAuthTokenType(), null, true); super.onDismiss(dialog); } + @Framework.AuthTokenType + private int getAuthTokenType() + { + if (!TextUtils.isEmpty(mPhoneAuthToken)) + return Framework.SOCIAL_TOKEN_PHONE; + + GoogleSignInAccount googleAccount = GoogleSignIn.getLastSignedInAccount(MwmApplication.get()); + if (googleAccount != null && !TextUtils.isEmpty(googleAccount.getIdToken())) + return Framework.SOCIAL_TOKEN_GOOGLE; + + return Framework.SOCIAL_TOKEN_FACEBOOK; + } + private static class FBCallback implements FacebookCallback<LoginResult> { @NonNull @@ -162,27 +217,26 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment public void onCancel() { LOGGER.w(TAG, "onCancel"); - sendResult(Activity.RESULT_CANCELED, null, Framework.SOCIAL_TOKEN_FACEBOOK, - null, true); + sendErrorResult(Activity.RESULT_CANCELED, Framework.SOCIAL_TOKEN_FACEBOOK, + null, true); } @Override public void onError(FacebookException error) { LOGGER.e(TAG, "onError", error); - sendResult(Activity.RESULT_CANCELED, null, Framework.SOCIAL_TOKEN_FACEBOOK, + sendErrorResult(Activity.RESULT_CANCELED, Framework.SOCIAL_TOKEN_FACEBOOK, error != null ? error.getMessage() : null, false); } - private void sendResult(int resultCode, @Nullable String socialToken, - @Framework.AuthTokenType int type, @Nullable String error, - boolean isCancel) + private void sendErrorResult(int resultCode, @Framework.AuthTokenType int type, + @Nullable String error, boolean isCancel) { SocialAuthDialogFragment fragment = mFragmentRef.get(); if (fragment == null) return; - fragment.sendResult(resultCode, socialToken, type, error, isCancel); + fragment.sendResult(resultCode, null, type, error, isCancel); } } } |