/** * */ package com.gmail.charleszq.picorner.task; import java.util.List; import android.content.Context; import android.util.Log; import com.gmail.charleszq.picorner.BuildConfig; import com.gmail.charleszq.picorner.SPUtil; import com.gmail.charleszq.picorner.model.MediaObject; import com.gmail.charleszq.picorner.model.MediaObjectCollection; import com.gmail.charleszq.picorner.offline.IOfflineViewParameter; import com.gmail.charleszq.picorner.service.IPhotoService; import com.gmail.charleszq.picorner.ui.command.ICommand; import com.gmail.charleszq.picorner.utils.IConstants; /** * * @author Charles(charleszq@gmail.com) * */ public class LoadPhotosTask extends AbstractGeneralTask<Integer, Integer, MediaObjectCollection> { private ICommand<?> mCommand; /** * Constructor. * * @param command * @param lis */ public LoadPhotosTask(ICommand<MediaObjectCollection> command, IGeneralTaskDoneListener<MediaObjectCollection> lis) { mCommand = command; addTaskDoneListener(lis); } @Override protected MediaObjectCollection doInBackground(Integer... params) { int pageNo = 0; if (params.length == 1) { pageNo = params[0]; } IOfflineViewParameter offlineParam = (IOfflineViewParameter) mCommand .getAdapter(IOfflineViewParameter.class); Context ctx = (Context) mCommand.getAdapter(Context.class); boolean overallOfflineEnabled = SPUtil .isOfflineEnabled(ctx); // It's the command's responsibility to return correct offline // parameter; // if the photo set is not enabled offline, or the control file is not // ready // the command should just return null when asking him about the offline // parameter. if (overallOfflineEnabled && offlineParam != null) { if (pageNo == 0) { List<MediaObject> photos = offlineParam .getPhotoCollectionProcessor().getCachedPhotos(ctx, offlineParam); if (photos != null) { MediaObjectCollection mc = new MediaObjectCollection(); for (MediaObject photo : photos) { mc.addPhoto(photo); } return mc; } } else { return null; } } if (BuildConfig.DEBUG) Log.d(TAG, "Trying to get photos from server."); //$NON-NLS-1$ IPhotoService service = (IPhotoService) mCommand .getAdapter(IPhotoService.class); Integer total = (Integer) mCommand.getAdapter(Integer.class); total = total == null ? IConstants.DEF_SERVICE_PAGE_SIZE : total; if (service == null) return null; try { return service.getPhotos(total, pageNo); } catch (Exception e) { return null; } } @Override protected void onPostExecute(MediaObjectCollection result) { if (result == null) { super.onPostExecute(result); return; } Log.d(TAG, String.format("%s photos returned.", result.getPhotos().size())); //$NON-NLS-1$ super.onPostExecute(result); } }