mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Added ability to mark a socialfeed as read via context menu.
This commit is contained in:
parent
44cd19e3d7
commit
ad3b8962b2
8 changed files with 96 additions and 32 deletions
|
@ -24,8 +24,7 @@
|
|||
android:layout_centerVertical="true"
|
||||
android:layout_toRightOf="@id/row_folder_icon"
|
||||
android:textColor="@color/darkgray"
|
||||
android:textSize="16dp"
|
||||
android:textStyle="bold" />
|
||||
android:textSize="16dp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/indicator_icon"
|
||||
|
|
|
@ -6,29 +6,7 @@
|
|||
android:paddingBottom="10dp"
|
||||
android:paddingTop="10dp" >
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/row_socialfeed_icon"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:contentDescription="@string/description_row_folder_icon" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/row_socialfeed_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toRightOf="@id/row_socialfeed_icon"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="16dp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<LinearLayout
|
||||
<LinearLayout
|
||||
android:id="@+id/row_foldersums"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -72,5 +50,28 @@
|
|||
android:textSize="12dp"
|
||||
android:textStyle="bold" />
|
||||
</LinearLayout>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/row_socialfeed_icon"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:contentDescription="@string/description_row_folder_icon" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/row_socialfeed_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@id/row_foldersums"
|
||||
android:layout_toRightOf="@id/row_socialfeed_icon"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="16dp" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
|
@ -47,6 +47,7 @@ public class BlurDatabase extends SQLiteOpenHelper {
|
|||
DatabaseConstants.SOCIAL_FEED_NEGATIVE_COUNT + INTEGER + ", " +
|
||||
DatabaseConstants.SOCIAL_FEED_NEUTRAL_COUNT + INTEGER + ", " +
|
||||
DatabaseConstants.SOCIAL_FEED_ICON + TEXT + ", " +
|
||||
DatabaseConstants.SOCIAL_FEED_TITLE + TEXT + ", " +
|
||||
DatabaseConstants.SOCIAL_FEED_USERNAME + TEXT +
|
||||
")";
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ public class DatabaseConstants {
|
|||
|
||||
public static final String SOCIALFEED_TABLE = "social_feeds";
|
||||
public static final String SOCIAL_FEED_ID = BaseColumns._ID;
|
||||
public static final String SOCIAL_FEED_TITLE = "social_feed_title";
|
||||
public static final String SOCIAL_FEED_USERNAME = "social_feed_name";
|
||||
public static final String SOCIAL_FEED_ICON= "social_feed_icon";
|
||||
public static final String SOCIAL_FEED_POSITIVE_COUNT = "ps";
|
||||
|
@ -97,7 +98,7 @@ public class DatabaseConstants {
|
|||
};
|
||||
|
||||
public static final String[] SOCIAL_FEED_COLUMNS = {
|
||||
SOCIAL_FEED_ID, SOCIAL_FEED_USERNAME, SOCIAL_FEED_ICON, SOCIAL_FEED_POSITIVE_COUNT, SOCIAL_FEED_NEUTRAL_COUNT, SOCIAL_FEED_NEGATIVE_COUNT
|
||||
SOCIAL_FEED_ID, SOCIAL_FEED_USERNAME, SOCIAL_FEED_TITLE, SOCIAL_FEED_ICON, SOCIAL_FEED_POSITIVE_COUNT, SOCIAL_FEED_NEUTRAL_COUNT, SOCIAL_FEED_NEGATIVE_COUNT
|
||||
};
|
||||
|
||||
public static final String[] COMMENT_COLUMNS = {
|
||||
|
|
|
@ -305,6 +305,8 @@ public class FeedProvider extends ContentProvider {
|
|||
switch (uriMatcher.match(uri)) {
|
||||
case INDIVIDUAL_FEED:
|
||||
return db.update(DatabaseConstants.FEED_TABLE, values, DatabaseConstants.FEED_ID + " = ?", new String[] { uri.getLastPathSegment() });
|
||||
case INDIVIDUAL_SOCIAL_FEED:
|
||||
return db.update(DatabaseConstants.SOCIALFEED_TABLE, values, DatabaseConstants.SOCIAL_FEED_ID + " = ?", new String[] { uri.getLastPathSegment() });
|
||||
case SOCIALFEED_STORIES:
|
||||
return db.update(DatabaseConstants.SOCIALFEED_TABLE, values, DatabaseConstants.FEED_ID + " = ?", new String[] { uri.getLastPathSegment() });
|
||||
case INDIVIDUAL_STORY:
|
||||
|
|
|
@ -10,6 +10,9 @@ public class SocialFeed {
|
|||
|
||||
public String username;
|
||||
|
||||
@SerializedName("feed_title")
|
||||
public String feedTitle;
|
||||
|
||||
@SerializedName("user_id")
|
||||
public String userId;
|
||||
|
||||
|
@ -28,6 +31,7 @@ public class SocialFeed {
|
|||
public ContentValues getValues() {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_ID, userId);
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_TITLE, feedTitle);
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_USERNAME, username);
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_NEUTRAL_COUNT, neutralCount);
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_NEGATIVE_COUNT, negativeCount);
|
||||
|
@ -41,6 +45,7 @@ public class SocialFeed {
|
|||
SocialFeed socialFeed = new SocialFeed();
|
||||
socialFeed.userId = cursor.getString(cursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_ID));
|
||||
socialFeed.username = cursor.getString(cursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_USERNAME));
|
||||
socialFeed.feedTitle = cursor.getString(cursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_TITLE));
|
||||
socialFeed.photoUrl = cursor.getString(cursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_ICON));
|
||||
socialFeed.negativeCount = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_NEGATIVE_COUNT));
|
||||
socialFeed.positiveCount = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_POSITIVE_COUNT));
|
||||
|
|
|
@ -30,6 +30,7 @@ import com.newsblur.database.MixedExpandableListAdapter;
|
|||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.network.MarkFeedAsReadTask;
|
||||
import com.newsblur.network.MarkFolderAsReadTask;
|
||||
import com.newsblur.network.MarkSocialFeedAsReadTask;
|
||||
import com.newsblur.util.AppConstants;
|
||||
import com.newsblur.util.UIUtils;
|
||||
import com.newsblur.view.FolderTreeViewBinder;
|
||||
|
@ -66,7 +67,7 @@ public class FolderListFragment extends Fragment implements OnGroupClickListener
|
|||
final int[] groupTo = new int[] { R.id.row_foldername, R.id.row_foldersumpos, R.id.row_foldersumneg, R.id.row_foldersumneu };
|
||||
final String[] childFrom = new String[] { DatabaseConstants.FEED_TITLE, DatabaseConstants.FEED_FAVICON, DatabaseConstants.FEED_NEUTRAL_COUNT, DatabaseConstants.FEED_NEGATIVE_COUNT, DatabaseConstants.FEED_POSITIVE_COUNT };
|
||||
final int[] childTo = new int[] { R.id.row_feedname, R.id.row_feedfavicon, R.id.row_feedneutral, R.id.row_feednegative, R.id.row_feedpositive };
|
||||
final String[] blogFrom = new String[] { DatabaseConstants.SOCIAL_FEED_USERNAME, DatabaseConstants.SOCIAL_FEED_ICON, DatabaseConstants.SOCIAL_FEED_NEUTRAL_COUNT, DatabaseConstants.SOCIAL_FEED_NEGATIVE_COUNT, DatabaseConstants.SOCIAL_FEED_POSITIVE_COUNT };
|
||||
final String[] blogFrom = new String[] { DatabaseConstants.SOCIAL_FEED_TITLE, DatabaseConstants.SOCIAL_FEED_ICON, DatabaseConstants.SOCIAL_FEED_NEUTRAL_COUNT, DatabaseConstants.SOCIAL_FEED_NEGATIVE_COUNT, DatabaseConstants.SOCIAL_FEED_POSITIVE_COUNT };
|
||||
final int[] blogTo = new int[] { R.id.row_socialfeed_name, R.id.row_socialfeed_icon, R.id.row_socialsumneu, R.id.row_socialsumneg, R.id.row_socialsumpos };
|
||||
|
||||
folderAdapter = new MixedExpandableListAdapter(getActivity(), folderCursor, socialFeedCursor, R.layout.row_folder_collapsed, R.layout.row_folder_expanded, R.layout.row_socialfeed, groupFrom, groupTo, R.layout.row_feed, childFrom, childTo, blogFrom, blogTo);
|
||||
|
@ -126,11 +127,16 @@ public class FolderListFragment extends Fragment implements OnGroupClickListener
|
|||
|
||||
case R.id.menu_mark_folder_as_read:
|
||||
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
||||
final Cursor folderCursor = ((MixedExpandableListAdapter) list.getExpandableListAdapter()).getGroup(groupPosition);
|
||||
|
||||
String folderId = folderCursor.getString(folderCursor.getColumnIndex(DatabaseConstants.FOLDER_NAME));
|
||||
|
||||
new MarkFolderAsReadTask(getActivity(), apiManager, resolver, folderAdapter).execute(folderId);
|
||||
if (folderAdapter.isGroup(groupPosition)) {
|
||||
final Cursor folderCursor = ((MixedExpandableListAdapter) list.getExpandableListAdapter()).getGroup(groupPosition);
|
||||
String folderId = folderCursor.getString(folderCursor.getColumnIndex(DatabaseConstants.FOLDER_NAME));
|
||||
new MarkFolderAsReadTask(getActivity(), apiManager, resolver, folderAdapter).execute(folderId);
|
||||
} else {
|
||||
// TODO: Include the mark-social-feed-as-read functionality here
|
||||
final Cursor socialFeedCursor = ((MixedExpandableListAdapter) list.getExpandableListAdapter()).getGroup(groupPosition);
|
||||
String socialFeedId = socialFeedCursor.getString(socialFeedCursor.getColumnIndex(DatabaseConstants.SOCIAL_FEED_ID));
|
||||
new MarkSocialFeedAsReadTask(getActivity(), apiManager, resolver, folderAdapter).execute(socialFeedId);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return super.onContextItemSelected(item);
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
package com.newsblur.network;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.newsblur.R;
|
||||
import com.newsblur.database.DatabaseConstants;
|
||||
import com.newsblur.database.FeedProvider;
|
||||
import com.newsblur.database.MixedExpandableListAdapter;
|
||||
|
||||
public class MarkSocialFeedAsReadTask extends AsyncTask<String, Void, Boolean> {
|
||||
|
||||
private final APIManager apiManager;
|
||||
private final Context context;
|
||||
private final ContentResolver resolver;
|
||||
private final MixedExpandableListAdapter adapter;
|
||||
private String feedId;
|
||||
|
||||
public MarkSocialFeedAsReadTask(final Context context, final APIManager apiManager, final ContentResolver resolver, final MixedExpandableListAdapter adapter) {
|
||||
this.context = context;
|
||||
this.apiManager = apiManager;
|
||||
this.resolver = resolver;
|
||||
this.adapter = adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(String... id) {
|
||||
this.feedId = id[0];
|
||||
return apiManager.markFeedAsRead(new String[] { "social:" + id[0] });
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Boolean result) {
|
||||
if (result) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_NEGATIVE_COUNT, 0);
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_NEUTRAL_COUNT, 0);
|
||||
values.put(DatabaseConstants.SOCIAL_FEED_POSITIVE_COUNT, 0);
|
||||
resolver.update(FeedProvider.SOCIAL_FEEDS_URI.buildUpon().appendPath(feedId).build(), values, null, null);
|
||||
adapter.requery();
|
||||
Toast.makeText(context, R.string.toast_marked_feed_as_read, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
Toast.makeText(context, R.string.toast_error_marking_feed_as_read, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue