package net.rdrei.android.scdl2.ui; import android.content.Context; import com.google.inject.Inject; import net.rdrei.android.scdl2.api.APIException; import net.rdrei.android.scdl2.api.MediaState; import net.rdrei.android.scdl2.api.PendingDownload; import net.rdrei.android.scdl2.api.ServiceManager; import net.rdrei.android.scdl2.api.service.PlaylistService; import net.rdrei.android.scdl2.api.service.TrackService; import roboguice.inject.ContextScope; import roboguice.util.RoboAsyncTask; public class AbstractMediaStateLoaderTask extends RoboAsyncTask<MediaState> { protected final PendingDownload mPendingDownload; @Inject private ServiceManager mServiceManager; @Inject private ContextScope mContextScope; public AbstractMediaStateLoaderTask(Context context, final PendingDownload download) { super(context); mPendingDownload = download; } @Override public MediaState call() throws Exception { mContextScope.enter(context); try { return resolveDownloadToMedia(); } finally { mContextScope.exit(context); } } private MediaState resolveDownloadToMedia() throws APIException { switch (mPendingDownload.getType()) { case PLAYLIST: final PlaylistService playlistService = mServiceManager.playlistService(); return MediaState.fromEntity( playlistService.getPlaylist(mPendingDownload.getId())); case TRACK: final TrackService trackService = mServiceManager.trackService(); return MediaState.fromEntity(trackService.getTrack(mPendingDownload.getId())); default: throw new IllegalStateException("Unknown PendingDownload type. WTF?"); } } }