Added ability to mark a socialfeed as read via context menu.

This commit is contained in:
RyanBateman 2012-08-12 18:28:43 -04:00
parent 44cd19e3d7
commit ad3b8962b2
8 changed files with 96 additions and 32 deletions

View file

@ -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"

View file

@ -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>

View file

@ -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 +
")";

View file

@ -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 = {

View file

@ -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:

View file

@ -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));

View file

@ -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);

View file

@ -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();
}
}
}