package ezy.sdk3rd.social.sdk;
import android.app.Activity;
import android.content.Intent;
import java.util.HashMap;
import java.util.Map;
import java.util.WeakHashMap;
/**
*
* Created by ezy on 17/3/18.
*/
public class Sdk<T extends IResult> {
private Map<Activity, Map<String, T>> mMap = new WeakHashMap<>();
private Map<String, IFactory<T>> mFactories = new HashMap<>();
private OnCallback mDefaultCallback;
public OnCallback getDefaultCallback() {
return mDefaultCallback;
}
public void setDefaultCallback(OnCallback callback) {
mDefaultCallback = callback;
}
public void register(String name, String appId, Class clazz) {
mFactories.put(name, new DefaultFactory(name, appId, clazz));
}
public void register(IFactory factory) {
mFactories.put(factory.getPlatform().getName(), factory);
}
public boolean isSupport(String platform) {
return mFactories.get(platform) != null;
}
public T get(Activity activity, String platform) {
Map<String, T> sub = mMap.get(activity);
if (sub == null) {
sub = new HashMap<>();
mMap.put(activity, sub);
}
T api = sub.get(platform);
if (api == null) {
IFactory<T> factory = mFactories.get(platform);
if (factory != null) {
api = factory.create(activity);
if (api != null) {
sub.put(platform, api);
}
}
}
return api;
}
public void onHandleResult(Activity activity, int requestCode, int resultCode, Intent data) {
if (mMap.containsKey(activity)) {
for (T api: mMap.get(activity).values()) {
if (api != null) {
api.onResult(requestCode, resultCode, data);
}
}
}
}
}