Description
Describe the bug
Minor bug, if a bug at all.
Make one call to AWSMobileClient.getInstance().initialize then for each call to AWSMobileClient.getInstance().showSignIn, each call to identityManager.addSignInProvider results to adding the sign in provider multiple times. So, when an app calls AWSMobileClient.getInstance().SignOut() then repeats the call to SignIn() the class is added to the list again.
If using awsconfiguration.json, the sign in provider will also already be added so there are two right from the start.
To Reproduce
call AWSMobileClient.getInstance().SignIn(... followed by calls to SignOut then in again or for any reason call SignIn again.
Observe log output of an increasing number of Facebook calls for each iteration of sign out and sign in.
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook provider sign-in succeeded.
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode =
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode =
/FacebookSignInProvider: Facebook provider signing out...
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook provider sign-in succeeded.
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode = -
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode = -
/FacebookSignInProvider: Facebook provider signing out...
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook provider sign-in succeeded.
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode =
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode =
/FacebookSignInProvider: Facebook provider signing out...
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook SDK initialization completed
/FacebookSignInProvider: Facebook provider sign-in succeeded.
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode =
/FacebookSignInProvider: Facebook Access Token is OK. Token hashcode =
From AWSMobileClient.java in context.
if (isConfigurationKeyPresent(USER_POOLS)) {
authUIConfigBuilder.userPools(true);
identityManager.addSignInProvider(CognitoUserPoolsSignInProvider.class); **HERE**
}
if (isConfigurationKeyPresent(FACEBOOK)) {
authUIConfigBuilder.signInButton(FacebookButton.class);
identityManager.addSignInProvider(FacebookSignInProvider.class); **HERE**!
}
if (isConfigurationKeyPresent(GOOGLE)) {
authUIConfigBuilder.signInButton(GoogleButton.class);
identityManager.addSignInProvider(GoogleSignInProvider.class); **HERE** !
}
private Runnable _showSignIn(final Activity callingActivity,
final SignInUIOptions signInUIOptions,
final Callback<UserStateDetails> callback) {
return new Runnable() {
@Override
public void run() {
synchronized (showSignInLockObject) {
UserState userState = getUserStateDetails(false).getUserState();
if (UserState.SIGNED_IN.equals(userState)) {
callback.onError(new RuntimeException("Called showSignIn while user is already signed-in"));
return;
}
final AuthUIConfiguration.Builder authUIConfigBuilder = new AuthUIConfiguration.Builder()
.canCancel(signInUIOptions.canCancel())
.isBackgroundColorFullScreen(false);
if (signInUIOptions.getLogo() != null) {
authUIConfigBuilder.logoResId(signInUIOptions.getLogo());
}
if (signInUIOptions.getBackgroundColor() != null) {
authUIConfigBuilder.backgroundColor(signInUIOptions.getBackgroundColor());
}
final IdentityManager identityManager = IdentityManager.getDefaultIdentityManager();
if (isConfigurationKeyPresent(USER_POOLS)) {
authUIConfigBuilder.userPools(true);
identityManager.addSignInProvider(CognitoUserPoolsSignInProvider.class);
}
if (isConfigurationKeyPresent(FACEBOOK)) {
authUIConfigBuilder.signInButton(FacebookButton.class);
identityManager.addSignInProvider(FacebookSignInProvider.class);
}
if (isConfigurationKeyPresent(GOOGLE)) {
authUIConfigBuilder.signInButton(GoogleButton.class);
identityManager.addSignInProvider(GoogleSignInProvider.class);
}
Class<? extends Activity> nextActivityClass =
signInUIOptions.nextActivity() == null ?
callingActivity.getClass() : signInUIOptions.nextActivity();
SignInUI signin = (SignInUI) getClient(mContext, SignInUI.class);
signin.login(callingActivity, nextActivityClass)
.authUIConfiguration(authUIConfigBuilder.build())
.enableFederation(false)
.execute();
showSignInWaitLatch = new CountDownLatch(1);
try {
showSignInWaitLatch.await();
Log.d(TAG, "run: showSignIn completed");
} catch (InterruptedException e) {
callback.onError(e);
}
}
}
};
}
Which AWS service(s) are affected?
AWSMobileClient
Expected behavior
Clear the list prior to adding them or just only add them the first time.
Screenshots
N/A
Environment Information (please complete the following information):
- AWS Android SDK Version: Any
- Device: [e.g. Pixel XL, Simulator] Any
- Android Version: Any
- Specific to simulators: No