forked from organicmaps/organicmaps
[android] Removed auto hidding of social auth fragment when token is already obtained
[android] Refactored SoicalAuthFragment to retreive obtained token from onActivityResult
This commit is contained in:
parent
63433c9f37
commit
a7a02ec9d8
7 changed files with 90 additions and 49 deletions
|
@ -7,6 +7,7 @@ class Constants
|
|||
{
|
||||
static final int REQ_CODE_GET_SOCIAL_TOKEN = 101;
|
||||
static final int REQ_CODE_PHONE_AUTH_RESULT = 102;
|
||||
static final int REQ_CODE_GOOGLE_SIGN_IN = 103;
|
||||
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";
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.mapswithme.maps.auth;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
|
@ -9,7 +11,7 @@ import com.mapswithme.maps.Framework;
|
|||
class FacebookTokenHandler implements TokenHandler
|
||||
{
|
||||
@Override
|
||||
public boolean checkToken()
|
||||
public boolean checkToken(int requestCode, @NonNull Intent data)
|
||||
{
|
||||
AccessToken facebookToken = AccessToken.getCurrentAccessToken();
|
||||
return facebookToken != null && !TextUtils.isEmpty(facebookToken.getToken());
|
||||
|
|
|
@ -1,28 +1,53 @@
|
|||
package com.mapswithme.maps.auth;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignIn;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
|
||||
import com.google.android.gms.common.api.ApiException;
|
||||
import com.google.android.gms.tasks.Task;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.util.log.Logger;
|
||||
import com.mapswithme.util.log.LoggerFactory;
|
||||
|
||||
class GoogleTokenHandler implements TokenHandler
|
||||
{
|
||||
@Nullable
|
||||
private String mToken;
|
||||
|
||||
@Override
|
||||
public boolean checkToken()
|
||||
public boolean checkToken(int requestCode, @NonNull Intent data)
|
||||
{
|
||||
GoogleSignInAccount googleAccount = GoogleSignIn.getLastSignedInAccount(MwmApplication.get());
|
||||
return googleAccount != null && !TextUtils.isEmpty(googleAccount.getIdToken());
|
||||
if (requestCode != Constants.REQ_CODE_GOOGLE_SIGN_IN)
|
||||
return false;
|
||||
|
||||
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
|
||||
try
|
||||
{
|
||||
GoogleSignInAccount account = task.getResult(ApiException.class);
|
||||
if (account != null)
|
||||
mToken = account.getIdToken();
|
||||
return !TextUtils.isEmpty(mToken);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
// The ApiException status code indicates the detailed failure reason.
|
||||
// Please refer to the GoogleSignInStatusCodes class reference for more information.
|
||||
Logger logger = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC);
|
||||
logger.w(GoogleTokenHandler.class.getSimpleName(),
|
||||
"signInResult:failed code=" + e.getStatusCode());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getToken()
|
||||
{
|
||||
GoogleSignInAccount googleAccount = GoogleSignIn.getLastSignedInAccount(MwmApplication.get());
|
||||
return googleAccount != null ? googleAccount.getIdToken() : null;
|
||||
return mToken;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
37
android/src/com/mapswithme/maps/auth/PhoneTokenHandler.java
Normal file
37
android/src/com/mapswithme/maps/auth/PhoneTokenHandler.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package com.mapswithme.maps.auth;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
|
||||
public class PhoneTokenHandler implements TokenHandler
|
||||
{
|
||||
@Nullable
|
||||
private String mToken;
|
||||
|
||||
@Override
|
||||
public boolean checkToken(int requestCode, @NonNull Intent data)
|
||||
{
|
||||
if (requestCode != Constants.REQ_CODE_PHONE_AUTH_RESULT)
|
||||
return false;
|
||||
|
||||
mToken = data.getStringExtra(Constants.EXTRA_PHONE_AUTH_TOKEN);
|
||||
return !TextUtils.isEmpty(mToken);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getToken()
|
||||
{
|
||||
return mToken;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getType()
|
||||
{
|
||||
return Framework.SOCIAL_TOKEN_PHONE;
|
||||
}
|
||||
}
|
|
@ -48,32 +48,9 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
|
|||
private GoogleSignInClient mGoogleSignInClient;
|
||||
@NonNull
|
||||
private final CallbackManager mFacebookCallbackManager = CallbackManager.Factory.create();
|
||||
@Nullable
|
||||
private String mPhoneAuthToken;
|
||||
@NonNull
|
||||
private final List<TokenHandler> mTokenHandlers = Arrays.asList(
|
||||
new FacebookTokenHandler(), new GoogleTokenHandler(),
|
||||
new TokenHandler()
|
||||
{
|
||||
@Override
|
||||
public boolean checkToken()
|
||||
{
|
||||
return !TextUtils.isEmpty(mPhoneAuthToken);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getToken()
|
||||
{
|
||||
return mPhoneAuthToken;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getType()
|
||||
{
|
||||
return Framework.SOCIAL_TOKEN_PHONE;
|
||||
}
|
||||
});
|
||||
new FacebookTokenHandler(), new GoogleTokenHandler(), new PhoneTokenHandler());
|
||||
@Nullable
|
||||
private TokenHandler mCurrentTokenHandler;
|
||||
@NonNull
|
||||
|
@ -88,7 +65,7 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
|
|||
public void onClick(View v)
|
||||
{
|
||||
Intent intent = mGoogleSignInClient.getSignInIntent();
|
||||
startActivity(intent);
|
||||
startActivityForResult(intent, Constants.REQ_CODE_GOOGLE_SIGN_IN);
|
||||
}
|
||||
};
|
||||
@SuppressWarnings("NullableProblems")
|
||||
|
@ -176,18 +153,6 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
|
|||
public void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
|
||||
for (TokenHandler handler : mTokenHandlers)
|
||||
{
|
||||
if (handler.checkToken())
|
||||
{
|
||||
mCurrentTokenHandler = handler;
|
||||
LOGGER.i(TAG, "Social token is already obtained");
|
||||
dismiss();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Statistics.INSTANCE.trackEvent(Statistics.EventName.UGC_AUTH_SHOWN);
|
||||
}
|
||||
|
||||
|
@ -211,14 +176,21 @@ public class SocialAuthDialogFragment extends BaseMwmDialogFragment
|
|||
public void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||
{
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
mFacebookCallbackManager.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (data != null && requestCode == Constants.REQ_CODE_PHONE_AUTH_RESULT)
|
||||
{
|
||||
mPhoneAuthToken = data.getStringExtra(Constants.EXTRA_PHONE_AUTH_TOKEN);
|
||||
if (resultCode != Activity.RESULT_OK || data == null)
|
||||
return;
|
||||
|
||||
for (TokenHandler handler : mTokenHandlers)
|
||||
{
|
||||
if (handler.checkToken(requestCode, data))
|
||||
mCurrentTokenHandler = handler;
|
||||
}
|
||||
|
||||
mFacebookCallbackManager.onActivityResult(requestCode, resultCode, data);
|
||||
if (mCurrentTokenHandler == null)
|
||||
return;
|
||||
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
package com.mapswithme.maps.auth;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
|
||||
interface TokenHandler
|
||||
{
|
||||
boolean checkToken();
|
||||
boolean checkToken(int requestCode, @NonNull Intent data);
|
||||
|
||||
@Nullable
|
||||
String getToken();
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.support.annotation.Nullable;
|
|||
import android.support.v4.app.FragmentActivity;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.R;
|
||||
|
@ -230,6 +231,7 @@ public class BookmarkBackupController implements Authorizer.Callback,
|
|||
}
|
||||
else
|
||||
{
|
||||
Toast.makeText(mContext, R.string.profile_authorization_error, Toast.LENGTH_LONG).show();
|
||||
Statistics.INSTANCE.trackBmSyncProposalError(Framework.TOKEN_MAPSME, "Unknown error");
|
||||
}
|
||||
updateWidget();
|
||||
|
|
Loading…
Add table
Reference in a new issue