diff --git a/media/android/NewsBlur/AndroidManifest.xml b/media/android/NewsBlur/AndroidManifest.xml index bbac91741..b6c586c75 100644 --- a/media/android/NewsBlur/AndroidManifest.xml +++ b/media/android/NewsBlur/AndroidManifest.xml @@ -99,6 +99,9 @@ + + diff --git a/media/android/NewsBlur/res/layout/row_saved_stories.xml b/media/android/NewsBlur/res/layout/row_saved_stories.xml index 367485641..940b37c27 100644 --- a/media/android/NewsBlur/res/layout/row_saved_stories.xml +++ b/media/android/NewsBlur/res/layout/row_saved_stories.xml @@ -37,7 +37,7 @@ android:layout_marginRight="5dp" android:background="@drawable/saved_count_rect" android:gravity="center" - android:padding="5dp" + android:padding="3dp" android:shadowColor="@color/saved_drop_shadow" android:shadowDy="1" android:shadowRadius="1" diff --git a/media/android/NewsBlur/src/com/newsblur/activity/SavedStoriesReading.java b/media/android/NewsBlur/src/com/newsblur/activity/SavedStoriesReading.java new file mode 100644 index 000000000..579c4f1fb --- /dev/null +++ b/media/android/NewsBlur/src/com/newsblur/activity/SavedStoriesReading.java @@ -0,0 +1,84 @@ +package com.newsblur.activity; + +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; + +import com.newsblur.R; +import com.newsblur.database.DatabaseConstants; +import com.newsblur.database.FeedProvider; +import com.newsblur.database.MixedFeedsReadingAdapter; +import com.newsblur.service.SyncService; + +public class SavedStoriesReading extends Reading { + + private Cursor stories; + private int currentPage; + private boolean stopLoading = false; + private boolean requestedPage = false; + + @Override + protected void onCreate(Bundle savedInstanceBundle) { + super.onCreate(savedInstanceBundle); + + setResult(RESULT_OK); + + stories = contentResolver.query(FeedProvider.STARRED_STORIES_URI, null, null, null, null); + setTitle(getResources().getString(R.string.saved_stories_title)); + readingAdapter = new MixedFeedsReadingAdapter(getSupportFragmentManager(), getContentResolver(), stories); + + setupPager(); + } + + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + checkStoryCount(position); + } + + @Override + public void triggerRefresh() { + triggerRefresh(1); + } + + @Override + public void checkStoryCount(int position) { + if (position == stories.getCount() - 1 && !stopLoading && !requestedPage) { + requestedPage = true; + currentPage += 1; + triggerRefresh(currentPage); + } + } + + @Override + 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.SYNCSERVICE_TASK, SyncService.EXTRA_TASK_STARRED_STORIES_UPDATE); + if (page > 1) { + intent.putExtra(SyncService.EXTRA_TASK_PAGE_NUMBER, Integer.toString(page)); + } + startService(intent); + } + } + + @Override + public void updateAfterSync() { + setSupportProgressBarIndeterminateVisibility(false); + stories.requery(); + requestedPage = false; + readingAdapter.notifyDataSetChanged(); + checkStoryCount(pager.getCurrentItem()); + } + + @Override + public void setNothingMoreToUpdate() { + stopLoading = true; + } + + @Override + public void closeAfterUpdate() { } + +} diff --git a/media/android/NewsBlur/src/com/newsblur/database/FeedProvider.java b/media/android/NewsBlur/src/com/newsblur/database/FeedProvider.java index ed666ce7d..a76ec009f 100644 --- a/media/android/NewsBlur/src/com/newsblur/database/FeedProvider.java +++ b/media/android/NewsBlur/src/com/newsblur/database/FeedProvider.java @@ -305,7 +305,7 @@ public class FeedProvider extends ContentProvider { mdb = db; } public Cursor rawQuery(String sql, String[] selectionArgs) { - Log.d(LoggingDatabase.class.getName(), "rawQuery: " + sql); + //Log.d(LoggingDatabase.class.getName(), "rawQuery: " + sql); return mdb.rawQuery(sql, selectionArgs); } public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { diff --git a/media/android/NewsBlur/src/com/newsblur/database/MultipleFeedItemsAdapter.java b/media/android/NewsBlur/src/com/newsblur/database/MultipleFeedItemsAdapter.java index 6154038ac..646ab2b2d 100644 --- a/media/android/NewsBlur/src/com/newsblur/database/MultipleFeedItemsAdapter.java +++ b/media/android/NewsBlur/src/com/newsblur/database/MultipleFeedItemsAdapter.java @@ -21,8 +21,9 @@ public class MultipleFeedItemsAdapter extends SimpleCursorAdapter { private Cursor cursor; private ImageLoader imageLoader; private int storyTitleUnread, storyAuthorUnread, storyTitleRead, storyAuthorRead, storyDateUnread, storyDateRead, storyFeedUnread, storyFeedRead; + private boolean ignoreReadStatus; - public MultipleFeedItemsAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { + public MultipleFeedItemsAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags, boolean ignoreReadStatus) { super(context, layout, c, from, to, flags); imageLoader = ((NewsBlurApplication) context.getApplicationContext()).getImageLoader(); this.cursor = c; @@ -35,8 +36,14 @@ public class MultipleFeedItemsAdapter extends SimpleCursorAdapter { storyDateRead = context.getResources().getColor(R.color.story_date_read); storyFeedUnread = context.getResources().getColor(R.color.story_feed_unread); storyFeedRead = context.getResources().getColor(R.color.story_feed_read); + + this.ignoreReadStatus = ignoreReadStatus; } + public MultipleFeedItemsAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { + this(context, layout, c, from, to, flags, false); + } + @Override public int getCount() { return cursor.getCount(); @@ -69,7 +76,7 @@ public class MultipleFeedItemsAdapter extends SimpleCursorAdapter { borderTwo.setBackgroundColor(Color.LTGRAY); } - if (! Story.fromCursor(cursor).read) { + if (this.ignoreReadStatus || (! Story.fromCursor(cursor).read)) { ((TextView) v.findViewById(R.id.row_item_author)).setTextColor(storyAuthorUnread); ((TextView) v.findViewById(R.id.row_item_date)).setTextColor(storyDateUnread); ((TextView) v.findViewById(R.id.row_item_feedtitle)).setTextColor(storyFeedUnread); diff --git a/media/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java b/media/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java index abd6b3b89..742ae45ef 100644 --- a/media/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java +++ b/media/android/NewsBlur/src/com/newsblur/fragment/FolderListFragment.java @@ -138,14 +138,15 @@ public class FolderListFragment extends Fragment implements OnGroupClickListener ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo; int type = ExpandableListView.getPackedPositionType(info.packedPosition); - // Only create a context menu for child items switch(type) { - // Group (folder) item - case 0: - inflater.inflate(R.menu.context_folder, menu); + case ExpandableListView.PACKED_POSITION_TYPE_GROUP: + int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition); + if (! folderAdapter.isRowSavedStories(groupPosition) ) { + inflater.inflate(R.menu.context_folder, menu); + } break; - // Child (feed) item - case 1: + + case ExpandableListView.PACKED_POSITION_TYPE_CHILD: inflater.inflate(R.menu.context_feed, menu); break; } diff --git a/media/android/NewsBlur/src/com/newsblur/fragment/SavedStoriesItemListFragment.java b/media/android/NewsBlur/src/com/newsblur/fragment/SavedStoriesItemListFragment.java index e17c229f9..15f3f501d 100644 --- a/media/android/NewsBlur/src/com/newsblur/fragment/SavedStoriesItemListFragment.java +++ b/media/android/NewsBlur/src/com/newsblur/fragment/SavedStoriesItemListFragment.java @@ -19,7 +19,7 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import com.newsblur.R; -import com.newsblur.activity.AllStoriesReading; +import com.newsblur.activity.SavedStoriesReading; import com.newsblur.activity.FeedReading; import com.newsblur.activity.ItemsList; import com.newsblur.database.DatabaseConstants; @@ -63,7 +63,7 @@ public class SavedStoriesItemListFragment extends ItemListFragment implements Lo getLoaderManager().initLoader(ITEMLIST_LOADER , null, this); - adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_socialitem, cursor, groupFrom, groupTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); + adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_socialitem, cursor, groupFrom, groupTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER, true); itemList.setOnScrollListener(this); @@ -115,7 +115,7 @@ public class SavedStoriesItemListFragment extends ItemListFragment implements Lo @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent i = new Intent(getActivity(), AllStoriesReading.class); + Intent i = new Intent(getActivity(), SavedStoriesReading.class); i.putExtra(FeedReading.EXTRA_POSITION, position); startActivityForResult(i, READING_RETURNED ); }