Switch folder reading and All Stories reading to new async model.

This commit is contained in:
ojiikun 2013-12-31 08:31:49 +00:00
parent aec64abae5
commit f382b14ea0
7 changed files with 25 additions and 59 deletions

View file

@ -25,6 +25,7 @@ import com.newsblur.fragment.MarkAllReadDialogFragment.MarkAllReadDialogListener
import com.newsblur.network.APIManager;
import com.newsblur.service.SyncService;
import com.newsblur.util.AppConstants;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefConstants;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
@ -43,7 +44,6 @@ public class AllStoriesItemsList extends ItemsList implements MarkAllReadDialogL
apiManager = new APIManager(this);
resolver = getContentResolver();
itemListFragment = (AllStoriesItemListFragment) fragmentManager.findFragmentByTag(AllStoriesItemListFragment.class.getName());
if (itemListFragment == null) {
@ -81,19 +81,10 @@ public class AllStoriesItemsList extends ItemsList implements MarkAllReadDialogL
cursor.close();
}
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.MULTIFEED_UPDATE);
intent.putExtra(SyncService.EXTRA_TASK_MULTIFEED_IDS, feedIds);
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
intent.putExtra(SyncService.EXTRA_TASK_ORDER, getStoryOrder());
intent.putExtra(SyncService.EXTRA_TASK_READ_FILTER, PrefsUtils.getReadFilterForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME));
startService(intent);
FeedUtils.updateFeeds(this, this, feedIds, page, getStoryOrder(), PrefsUtils.getReadFilterForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME));
}
}
@Override
public void markItemListAsRead() {
MarkAllReadDialogFragment dialog = MarkAllReadDialogFragment.newInstance(getResources().getString(R.string.all_stories));

View file

@ -40,16 +40,7 @@ public class AllStoriesReading extends Reading {
@Override
public void triggerRefresh(int page) {
updateSyncStatus(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.MULTIFEED_UPDATE);
intent.putExtra(SyncService.EXTRA_TASK_MULTIFEED_IDS, new String[0]); // ask for all stories via wildcarding the feed param
if (page > 1) {
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
}
intent.putExtra(SyncService.EXTRA_TASK_ORDER, PrefsUtils.getStoryOrderForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME));
intent.putExtra(SyncService.EXTRA_TASK_READ_FILTER, PrefsUtils.getReadFilterForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME));
startService(intent);
FeedUtils.updateFeeds(this, this, new String[0], page, PrefsUtils.getStoryOrderForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME), PrefsUtils.getReadFilterForFolder(this, PrefConstants.ALL_STORIES_FOLDER_NAME));
}
}

View file

@ -23,6 +23,7 @@ import com.newsblur.network.APIManager;
import com.newsblur.network.MarkFolderAsReadTask;
import com.newsblur.service.SyncService;
import com.newsblur.util.AppConstants;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.ReadFilter;
import com.newsblur.util.StoryOrder;
@ -80,16 +81,10 @@ public class FolderItemsList extends ItemsList implements MarkAllReadDialogListe
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.MULTIFEED_UPDATE);
String[] feeds = new String[feedIds.size()];
feedIds.toArray(feeds);
intent.putExtra(SyncService.EXTRA_TASK_MULTIFEED_IDS, feeds);
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
intent.putExtra(SyncService.EXTRA_TASK_ORDER, getStoryOrder());
intent.putExtra(SyncService.EXTRA_TASK_READ_FILTER, PrefsUtils.getReadFilterForFolder(this, folderName));
startService(intent);
FeedUtils.updateFeeds(this, this, feeds, page, getStoryOrder(), PrefsUtils.getReadFilterForFolder(this, folderName));
}
}

View file

@ -44,16 +44,7 @@ public class FolderReading extends Reading {
@Override
public void triggerRefresh(int page) {
updateSyncStatus(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.MULTIFEED_UPDATE);
intent.putExtra(SyncService.EXTRA_TASK_MULTIFEED_IDS, feedIds);
if (page > 1) {
intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page));
}
intent.putExtra(SyncService.EXTRA_TASK_ORDER, PrefsUtils.getStoryOrderForFolder(this, folderName));
intent.putExtra(SyncService.EXTRA_TASK_READ_FILTER, PrefsUtils.getReadFilterForFolder(this, folderName));
startService(intent);
FeedUtils.updateFeeds(this, this, feedIds, page, PrefsUtils.getStoryOrderForFolder(this, folderName), PrefsUtils.getReadFilterForFolder(this, folderName));
}
}

View file

@ -229,21 +229,19 @@ public class APIManager {
return storiesResponse;
}
public StoriesResponse getStoriesForFeeds(String[] feedIds, String pageNumber, StoryOrder order, ReadFilter filter) {
public StoriesResponse getStoriesForFeeds(String[] feedIds, int pageNumber, StoryOrder order, ReadFilter filter) {
final ValueMultimap values = new ValueMultimap();
for (String feedId : feedIds) {
values.put(APIConstants.PARAMETER_FEEDS, feedId);
}
if (!TextUtils.isEmpty(pageNumber)) {
values.put(APIConstants.PARAMETER_PAGE_NUMBER, "" + pageNumber);
}
values.put(APIConstants.PARAMETER_PAGE_NUMBER, Integer.toString(pageNumber));
values.put(APIConstants.PARAMETER_ORDER, order.getParameterValue());
values.put(APIConstants.PARAMETER_READ_FILTER, filter.getParameterValue());
final APIResponse response = get(APIConstants.URL_RIVER_STORIES, values);
StoriesResponse storiesResponse = (StoriesResponse) response.getResponse(gson, StoriesResponse.class);
if (!response.isError()) {
if (TextUtils.equals(pageNumber,"1")) {
if (pageNumber == 1) {
Uri storyUri = FeedProvider.ALL_STORIES_URI;
contentResolver.delete(storyUri, null, null);
}
@ -258,10 +256,8 @@ public class APIManager {
contentResolver.insert(FeedProvider.USERS_URI, user.getValues());
}
return storiesResponse;
} else {
return null;
}
return storiesResponse;
}
public StoriesResponse getStarredStories(int pageNumber) {

View file

@ -57,7 +57,6 @@ public class SyncService extends IntentService {
public enum TaskType {
FOLDER_UPDATE_TWO_STEP,
FOLDER_UPDATE_WITH_COUNT,
MULTIFEED_UPDATE,
MULTISOCIALFEED_UPDATE
};
@ -107,17 +106,6 @@ public class SyncService extends IntentService {
apiManager.getFolderFeedMapping(true);
break;
case MULTIFEED_UPDATE:
if (intent.getStringArrayExtra(EXTRA_TASK_MULTIFEED_IDS) != null) {
StoriesResponse storiesForFeeds = apiManager.getStoriesForFeeds(intent.getStringArrayExtra(EXTRA_TASK_MULTIFEED_IDS), intent.getStringExtra(EXTRA_TASK_PAGE_NUMBER), (StoryOrder) intent.getSerializableExtra(EXTRA_TASK_ORDER), (ReadFilter) intent.getSerializableExtra(EXTRA_TASK_READ_FILTER));
if (storiesForFeeds == null || storiesForFeeds.stories.length == 0) {
resultStatus = SyncStatus.STATUS_NO_MORE_UPDATES;
}
} else {
Log.e(this.getClass().getName(), "No feed ids to refresh included in SyncRequest");
}
break;
case MULTISOCIALFEED_UPDATE:
if (intent.getStringArrayExtra(EXTRA_TASK_MULTIFEED_IDS) != null) {
SocialFeedResponse sharedStoriesForFeeds = apiManager.getSharedStoriesForFeeds(intent.getStringArrayExtra(EXTRA_TASK_MULTIFEED_IDS), intent.getStringExtra(EXTRA_TASK_PAGE_NUMBER), (StoryOrder) intent.getSerializableExtra(EXTRA_TASK_ORDER), (ReadFilter) intent.getSerializableExtra(EXTRA_TASK_READ_FILTER));

View file

@ -51,6 +51,20 @@ public class FeedUtils {
}.execute();
}
public static void updateFeeds(final Context context, final ActionCompletionListener receiver, final String[] feedIds, final int pageNumber, final StoryOrder order, final ReadFilter filter) {
new AsyncTask<Void, Void, StoriesResponse>() {
@Override
protected StoriesResponse doInBackground(Void... arg) {
APIManager apiManager = new APIManager(context);
return apiManager.getStoriesForFeeds(feedIds, pageNumber, order, filter);
}
@Override
protected void onPostExecute(StoriesResponse result) {
handleStoryResponse(context, result, result.stories, receiver);
}
}.execute();
}
public static void updateFeed(final Context context, final ActionCompletionListener receiver, final String feedId, final String socialUsername, final int pageNumber, final StoryOrder order, final ReadFilter filter) {
new AsyncTask<Void, Void, SocialFeedResponse>() {
@Override