package com.vaguehope.onosendai.provider;
import android.os.AsyncTask;
import com.vaguehope.onosendai.provider.bufferapp.BufferAppProvider;
import com.vaguehope.onosendai.provider.hosaka.HosakaProvider;
import com.vaguehope.onosendai.provider.instapaper.InstapaperProvider;
import com.vaguehope.onosendai.provider.successwhale.SuccessWhaleProvider;
import com.vaguehope.onosendai.provider.twitter.TwitterProvider;
import com.vaguehope.onosendai.storage.KvStore;
public class ProviderMgr {
public interface ProviderMgrProvider {
ProviderMgr getProviderMgr();
}
private final TwitterProvider twitterProvider;
private final SuccessWhaleProvider successWhaleProvider;
private final InstapaperProvider instapaperProvider;
private final BufferAppProvider bufferAppProvider;
private final HosakaProvider hosakaProvider;
public ProviderMgr (final KvStore kvStore) {
this.twitterProvider = new TwitterProvider();
this.successWhaleProvider = new SuccessWhaleProvider(kvStore);
this.instapaperProvider = new InstapaperProvider();
this.bufferAppProvider = new BufferAppProvider();
this.hosakaProvider = new HosakaProvider();
}
public TwitterProvider getTwitterProvider () {
return this.twitterProvider;
}
public SuccessWhaleProvider getSuccessWhaleProvider () {
return this.successWhaleProvider;
}
public InstapaperProvider getInstapaperProvider () {
return this.instapaperProvider;
}
public BufferAppProvider getBufferAppProvider () {
return this.bufferAppProvider;
}
public HosakaProvider getHosakaProvider () {
return this.hosakaProvider;
}
/**
* TODO: tidy this up.
*/
public void shutdown () {
try {
this.twitterProvider.shutdown();
}
finally {
try {
new SwShutdowner().execute(this.successWhaleProvider);
}
finally {
try {
this.instapaperProvider.shutdown();
}
finally {
try {
this.bufferAppProvider.shutdown();
}
finally {
this.hosakaProvider.shutdown();
}
}
}
}
}
/**
* Calling shutdown on UI thread triggers android.os.NetworkOnMainThreadException. lolz.
*/
private static class SwShutdowner extends AsyncTask<SuccessWhaleProvider, Void, Void> {
public SwShutdowner () {}
@Override
protected Void doInBackground (final SuccessWhaleProvider... sws) {
if (sws == null) return null;
for (SuccessWhaleProvider sw : sws) {
sw.shutdown();
}
return null;
}
}
}