package org.edx.mobile.social; import android.app.Activity; import android.content.Context; import com.google.inject.Inject; import org.edx.mobile.social.facebook.FacebookAuth; import org.edx.mobile.social.google.GoogleOauth2; import org.edx.mobile.util.Config; import org.edx.mobile.util.NetworkUtil; public class SocialFactory { @Inject static Config config; //TODO - we should create a central place for application wide constants. public static enum SOCIAL_SOURCE_TYPE { TYPE_UNKNOWN(-1, "unknown"), TYPE_GOOGLE(100, "google-oauth2"), TYPE_FACEBOOK(101,"facebook"); private int code; private String value; private SOCIAL_SOURCE_TYPE(int code, String value) { this.value = value; this.code = code; } public static SOCIAL_SOURCE_TYPE fromString(String source){ if ( "facebook".equalsIgnoreCase( source ) ) return TYPE_FACEBOOK; if ( "google-oauth2".equalsIgnoreCase( source ) || "google".equalsIgnoreCase( source ) ) return TYPE_GOOGLE; return TYPE_UNKNOWN; } } public static ISocial getInstance(Activity activity, SOCIAL_SOURCE_TYPE type, Config config) { if (type == SOCIAL_SOURCE_TYPE.TYPE_GOOGLE) { if ( isSocialFeatureEnabled(activity.getApplicationContext(), type, config) ) { return new GoogleOauth2(activity); } else { return new ISocialEmptyImpl(); } } else if (type == SOCIAL_SOURCE_TYPE.TYPE_FACEBOOK) { if ( isSocialFeatureEnabled(activity.getApplicationContext(),type, config)) { return new FacebookAuth(activity); } else { return new ISocialEmptyImpl(); } } return null; } public static boolean isSocialFeatureEnabled(Context context, SOCIAL_SOURCE_TYPE type, Config config) { boolean isOnZeroRatedNetwork = NetworkUtil.isOnZeroRatedNetwork(context, config); if ( isOnZeroRatedNetwork ) return false; if (type == SOCIAL_SOURCE_TYPE.TYPE_GOOGLE) { return config.getGoogleConfig().isEnabled(); } else if (type == SOCIAL_SOURCE_TYPE.TYPE_FACEBOOK) { return config.getFacebookConfig().isEnabled(); } return true; } }