[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:
Alexander Zatsepin 2018-05-15 19:12:45 +03:00 committed by Aleksey Belousov
parent 63433c9f37
commit a7a02ec9d8
7 changed files with 90 additions and 49 deletions

View file

@ -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";

View file

@ -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());

View file

@ -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

View 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;
}
}

View file

@ -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

View file

@ -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();

View file

@ -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();