Move saved stories fetch to new async model.

This commit is contained in:
ojiikun 2013-12-31 06:11:07 +00:00
parent 38a891b4c9
commit aec64abae5
6 changed files with 30 additions and 34 deletions

View file

@ -20,6 +20,7 @@ import com.newsblur.fragment.SavedStoriesItemListFragment;
import com.newsblur.fragment.FeedItemListFragment;
import com.newsblur.fragment.SyncUpdateFragment;
import com.newsblur.service.SyncService;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
@ -58,11 +59,7 @@ public class SavedStoriesItemsList extends ItemsList {
public void triggerRefresh(int page) {
if (!stopLoading) {
setSupportProgressBarIndeterminateVisibility(true);
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, SyncService.class);
intent.putExtra(SyncService.EXTRA_STATUS_RECEIVER, syncFragment.receiver);
intent.putExtra(SyncService.EXTRA_TASK_TYPE, SyncService.TaskType.STARRED_STORIES_UPDATE);
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
startService(intent);
FeedUtils.updateSavedStories(this, this, page);
}
}

View file

@ -8,6 +8,7 @@ import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.FeedProvider;
import com.newsblur.database.MixedFeedsReadingAdapter;
import com.newsblur.service.SyncService;
import com.newsblur.util.FeedUtils;
public class SavedStoriesReading extends Reading {
@ -24,14 +25,8 @@ public class SavedStoriesReading extends Reading {
@Override
public void triggerRefresh(int page) {
setSupportProgressBarIndeterminateVisibility(true);
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, SyncService.class);
intent.putExtra(SyncService.EXTRA_STATUS_RECEIVER, syncFragment.receiver);
intent.putExtra(SyncService.EXTRA_TASK_TYPE, SyncService.TaskType.STARRED_STORIES_UPDATE);
if (page > 1) {
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
}
startService(intent);
updateSyncStatus(true);
FeedUtils.updateSavedStories(this, this, page);
}
}

View file

@ -82,7 +82,9 @@ public class SavedStoriesItemListFragment extends ItemListFragment implements Lo
}
public void hasUpdated() {
getLoaderManager().restartLoader(ITEMLIST_LOADER , null, this);
if (isAdded()) {
getLoaderManager().restartLoader(ITEMLIST_LOADER , null, this);
}
requestedPage = false;
}

View file

@ -264,16 +264,14 @@ public class APIManager {
}
}
public StoriesResponse getStarredStories(String pageNumber) {
final ValueMultimap values = new ValueMultimap();
if (!TextUtils.isEmpty(pageNumber)) {
values.put(APIConstants.PARAMETER_PAGE_NUMBER, "" + pageNumber);
}
final APIResponse response = get(APIConstants.URL_STARRED_STORIES, values);
public StoriesResponse getStarredStories(int pageNumber) {
ValueMultimap values = new ValueMultimap();
values.put(APIConstants.PARAMETER_PAGE_NUMBER, Integer.toString(pageNumber));
APIResponse response = get(APIConstants.URL_STARRED_STORIES, values);
StoriesResponse storiesResponse = (StoriesResponse) response.getResponse(gson, StoriesResponse.class);
if (!response.isError()) {
if (TextUtils.equals(pageNumber,"1")) {
if (pageNumber == 1) {
contentResolver.delete(FeedProvider.STARRED_STORIES_URI, null, null);
}
for (Story story : storiesResponse.stories) {
@ -283,10 +281,8 @@ public class APIManager {
for (UserProfile user : storiesResponse.users) {
contentResolver.insert(FeedProvider.USERS_URI, user.getValues());
}
return storiesResponse;
} else {
return null;
}
}
return storiesResponse;
}
public SocialFeedResponse getSharedStoriesForFeeds(String[] feedIds, String pageNumber, StoryOrder order, ReadFilter filter) {

View file

@ -58,8 +58,7 @@ public class SyncService extends IntentService {
FOLDER_UPDATE_TWO_STEP,
FOLDER_UPDATE_WITH_COUNT,
MULTIFEED_UPDATE,
MULTISOCIALFEED_UPDATE,
STARRED_STORIES_UPDATE
MULTISOCIALFEED_UPDATE
};
private APIManager apiManager;
@ -130,13 +129,6 @@ public class SyncService extends IntentService {
}
break;
case STARRED_STORIES_UPDATE:
StoriesResponse starredStories = apiManager.getStarredStories(intent.getStringExtra(EXTRA_TASK_PAGE_NUMBER));
if (starredStories == null || starredStories.stories.length == 0) {
resultStatus = SyncStatus.STATUS_NO_MORE_UPDATES;
}
break;
default:
Log.e(this.getClass().getName(), "SyncService called without relevant task assignment");
break;

View file

@ -65,6 +65,20 @@ public class FeedUtils {
}.execute();
}
public static void updateSavedStories(final Context context, final ActionCompletionListener receiver, final int pageNumber) {
new AsyncTask<Void, Void, StoriesResponse>() {
@Override
protected StoriesResponse doInBackground(Void... arg) {
APIManager apiManager = new APIManager(context);
return apiManager.getStarredStories(pageNumber);
}
@Override
protected void onPostExecute(StoriesResponse result) {
handleStoryResponse(context, result, result.stories, receiver);
}
}.execute();
}
private static void handleStoryResponse(Context context, NewsBlurResponse response, Story[] stories, ActionCompletionListener receiver) {
if (response.isError()) {
Log.e(FeedUtils.class.getName(), "Error response received loading stories.");