001package com.gigya.android.sdk.providers.provider; 002 003import android.content.Context; 004 005import com.gigya.android.sdk.GigyaLogger; 006import com.gigya.android.sdk.api.GigyaApiResponse; 007import com.gigya.android.sdk.api.IBusinessApiService; 008import com.gigya.android.sdk.network.GigyaError; 009import com.gigya.android.sdk.persistence.IPersistenceService; 010import com.gigya.android.sdk.providers.IProviderPermissionsCallback; 011import com.gigya.android.sdk.providers.IProviderTokenTrackerListener; 012import com.gigya.android.sdk.session.SessionInfo; 013 014import java.util.HashMap; 015import java.util.Map; 016 017public abstract class Provider implements IProvider { 018 019 private static final String LOG_TAG = "Provider"; 020 021 final protected Context _context; 022 private final IPersistenceService _psService; 023 final protected IBusinessApiService _businessApiService; 024 025 boolean _connecting = false; 026 027 // Dynamic 028 String _loginMode; 029 030 private String _regToken; 031 032 IProviderTokenTrackerListener _tokenTrackingListener; 033 034 ProviderCallback _providerCallback; 035 036 public Provider(Context context, IPersistenceService persistenceService, 037 IBusinessApiService businessApiService, ProviderCallback providerCallback) { 038 _context = context; 039 _psService = persistenceService; 040 _businessApiService = businessApiService; 041 _providerCallback = providerCallback; 042 043 if (supportsTokenTracking()) { 044 _tokenTrackingListener = new IProviderTokenTrackerListener() { 045 @Override 046 public void onTokenChange(String provider, String providerSession, final IProviderPermissionsCallback permissionsCallback) { 047 GigyaLogger.debug(LOG_TAG, getName() + ": onProviderTrackingTokenChanges: provider = " 048 + provider + ", providerSession =" + providerSession); 049 // Setup refresh session request. 050 final Map<String, Object> params = new HashMap<>(); 051 params.put("providerSession", providerSession); 052 // Notify. 053 _businessApiService.refreshNativeProviderSession(params, permissionsCallback); 054 } 055 }; 056 } 057 } 058 059 @Override 060 public void logout() { 061 _connecting = false; 062 } 063 064 @Override 065 public void onCanceled() { 066 _connecting = false; 067 068 // Trigger cancellation callback. 069 _providerCallback.onCanceled(); 070 } 071 072 @Override 073 public void onLoginSuccess(final Map<String, Object> loginParams, String providerSessions, String loginMode) { 074 _connecting = false; 075 GigyaLogger.debug(LOG_TAG, "onLoginSuccess: provider = " 076 + getName() + ", providerSessions = " + providerSessions); 077 078 // Setup request. 079 loginParams.put("providerSessions", providerSessions); 080 loginParams.put("loginMode", loginMode); 081 082 if (loginMode.equals("link") && _regToken != null) { 083 loginParams.put("regToken", _regToken); 084 } 085 086 Runnable completionHandler = new Runnable() { 087 @Override 088 public void run() { 089 _psService.addSocialProvider(getName()); 090 if (supportsTokenTracking()) { 091 trackTokenChange(); 092 } 093 } 094 }; 095 096 // Notify. 097 _providerCallback.onProviderSessions(loginParams, completionHandler); 098 } 099 100 @Override 101 public void onLoginSuccess(String providerName, SessionInfo sessionInfo) { 102 _connecting = false; 103 104 GigyaLogger.debug(LOG_TAG, "onLoginSuccess: provider = " 105 + getName() + ", sessionToken = " + sessionInfo.getSessionToken()); 106 107 Runnable completionHandler = new Runnable() { 108 @Override 109 public void run() { 110 _psService.addSocialProvider(getName()); 111 if (supportsTokenTracking()) { 112 trackTokenChange(); 113 } 114 } 115 }; 116 117 //Notify. 118 _providerCallback.onProviderSession(providerName, sessionInfo, completionHandler); 119 } 120 121 @Override 122 public void onLoginFailed(String error) { 123 _connecting = false; 124 GigyaLogger.debug(LOG_TAG, "onProviderLoginFailed: provider = " 125 + getName() + ", error =" + error); 126 127 // Notify. 128 final String json = GigyaError.errorFrom(error).getData(); 129 _providerCallback.onError(new GigyaApiResponse(json)); 130 } 131 132 @Override 133 public void onLoginFailed(GigyaApiResponse response) { 134 _connecting = false; 135 GigyaLogger.debug(LOG_TAG, "onProviderLoginFailed: provider = " 136 + getName() + ", error =" + response.toString()); 137 138 // Notify. 139 _providerCallback.onError(response); 140 } 141 142 @Override 143 public void setRegToken(String regToken) { 144 _regToken = regToken; 145 } 146}