001package com.gigya.android.sdk.interruption.link; 002 003import com.gigya.android.sdk.GigyaCallback; 004import com.gigya.android.sdk.GigyaLogger; 005import com.gigya.android.sdk.GigyaLoginCallback; 006import com.gigya.android.sdk.account.models.GigyaAccount; 007import com.gigya.android.sdk.api.GigyaApiResponse; 008import com.gigya.android.sdk.api.IBusinessApiService; 009import com.gigya.android.sdk.interruption.Resolver; 010import com.gigya.android.sdk.interruption.link.models.ConflictingAccounts; 011import com.gigya.android.sdk.network.GigyaError; 012 013import java.util.HashMap; 014import java.util.Map; 015 016public class LinkAccountsResolver<A extends GigyaAccount> extends Resolver<A> implements ILinkAccountsResolver { 017 018 private static final String LOG_TAG = "GigyaLinkAccountsResolver"; 019 020 private ConflictingAccounts _conflictingAccounts; 021 022 public LinkAccountsResolver(GigyaLoginCallback<A> loginCallback, 023 GigyaApiResponse interruption, 024 IBusinessApiService<A> businessApiService) { 025 super(loginCallback, interruption, businessApiService); 026 } 027 028 029 @Override 030 public ConflictingAccounts getConflictingAccounts() { 031 return _conflictingAccounts; 032 } 033 034 035 @Override 036 public void requestConflictingAccounts() { 037 GigyaLogger.debug(LOG_TAG, "init: sending fetching conflicting accounts"); 038 // Get conflicting accounts. 039 _businessApiService.getConflictingAccounts(getRegToken(), new GigyaCallback<GigyaApiResponse>() { 040 @Override 041 public void onSuccess(GigyaApiResponse response) { 042 if (response.getErrorCode() == 0) { 043 _conflictingAccounts = response.getField("conflictingAccount", ConflictingAccounts.class); 044 if (_conflictingAccounts == null) { 045 _loginCallback.onError(GigyaError.generalError()); 046 } else { 047 _loginCallback.onConflictingAccounts(_interruption, LinkAccountsResolver.this); 048 } 049 } else { 050 _loginCallback.onError(GigyaError.fromResponse(response)); 051 } 052 } 053 054 @Override 055 public void onError(GigyaError error) { 056 _loginCallback.onError(error); 057 } 058 }); 059 } 060 061 @Override 062 public void linkToSite(String loginID, String password) { 063 GigyaLogger.debug(LOG_TAG, "linkToSite: with loginID = " + loginID); 064 final Map<String, Object> params = new HashMap<>(); 065 params.put("loginID", loginID); 066 params.put("password", password); 067 params.put("loginMode", "link"); 068 params.put("regToken", getRegToken()); 069 _businessApiService.login(params, _loginCallback); 070 } 071 072 @Override 073 public void linkToSocial(String providerName) { 074 GigyaLogger.debug(LOG_TAG, "linkToSocial: with provider" + providerName); 075 final Map<String, Object> params = new HashMap<>(); 076 params.put("loginMode", "link"); 077 params.put("regToken", getRegToken()); 078 _businessApiService.login(providerName, params, _loginCallback); 079 080 } 081}