package net.rdrei.android.scdl2; import net.rdrei.android.scdl2.api.SecureSoundcloudApiQueryImpl; import net.rdrei.android.scdl2.api.SoundcloudApiQuery; import net.rdrei.android.scdl2.api.SoundcloudApiQuery.HttpMethod; import net.rdrei.android.scdl2.api.SoundcloudApiQueryImpl; import net.rdrei.android.scdl2.api.SoundcloudEntity; import net.rdrei.android.scdl2.api.URLWrapper; import com.google.gson.reflect.TypeToken; import com.google.inject.Inject; import com.google.inject.Injector; /** * Builds a new {@link SoundcloudApiQuery} based on the application settings. * * @author pascal */ public class ApplicationSoundcloudApiQueryFactory { @Inject private ApplicationPreferences mPreferences; @Inject private Injector mInjector; public <T extends SoundcloudEntity> SoundcloudApiQuery<T> create( final URLWrapper url, final HttpMethod method, final TypeToken<T> typeToken) { // Using very ugly, manual injection here, because I couldn't figure out // how to dynamically resolve the generic type using TypeLiterals. final SoundcloudApiQuery<T> instance; if (mPreferences.getSSLEnabled()) { instance = new SecureSoundcloudApiQueryImpl<T>(url, method, typeToken); } else { instance = new SoundcloudApiQueryImpl<T>(url, method, typeToken); } mInjector.injectMembers(instance); return instance; } }