mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00
Fix unfollowing a user from the long press menu (#710)
This commit is contained in:
parent
e6b3e4a419
commit
219d321ff9
6 changed files with 60 additions and 11 deletions
|
@ -6,5 +6,8 @@
|
|||
|
||||
<item android:id="@+id/menu_delete_feed"
|
||||
android:title="@string/menu_delete_feed" />
|
||||
|
||||
<item android:id="@+id/menu_unfollow"
|
||||
android:title="@string/menu_unfollow" />
|
||||
|
||||
</menu>
|
|
@ -111,6 +111,7 @@
|
|||
<string name="menu_send_story">Send to…</string>
|
||||
<string name="menu_mark_feed_as_read">Mark feed as read</string>
|
||||
<string name="menu_delete_feed">Delete feed</string>
|
||||
<string name="menu_unfollow">Unfollow user</string>
|
||||
<string name="menu_mark_folder_as_read">Mark folder as read</string>
|
||||
<string name="menu_sharenewsblur">Share this story</string>
|
||||
<string name="menu_textsize">Adjust text size</string>
|
||||
|
@ -129,6 +130,7 @@
|
|||
<string name="toast_story_unread">Story marked as unread</string>
|
||||
|
||||
<string name="toast_feed_deleted">Feed deleted</string>
|
||||
<string name="toast_unfollowed">Unfollowed</string>
|
||||
|
||||
<string name="logout_warning">Are you sure you want to log out?</string>
|
||||
|
||||
|
@ -162,6 +164,7 @@
|
|||
<string name="friends_shares_count">%d SHARES</string>
|
||||
<string name="unknown_user">Unknown User</string>
|
||||
<string name="delete_feed_message">Delete feed \"%s\"?</string>
|
||||
<string name="unfollow_message">Unfollow \"%s\"?</string>
|
||||
|
||||
<string name="menu_default_view">Default View</string>
|
||||
|
||||
|
|
|
@ -159,6 +159,13 @@ public class BlurDatabaseHelper {
|
|||
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.STORY_TABLE, DatabaseConstants.STORY_FEED_ID + " = ?", selArgs);}
|
||||
}
|
||||
|
||||
public void deleteSocialFeed(String userId) {
|
||||
String[] selArgs = new String[] {userId};
|
||||
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.SOCIALFEED_TABLE, DatabaseConstants.SOCIAL_FEED_ID + " = ?", selArgs);}
|
||||
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.STORY_TABLE, DatabaseConstants.STORY_FEED_ID + " = ?", selArgs);}
|
||||
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.SOCIALFEED_STORY_MAP_TABLE, DatabaseConstants.SOCIALFEED_STORY_USER_ID + " = ?", selArgs);}
|
||||
}
|
||||
|
||||
public Feed getFeed(String feedId) {
|
||||
Cursor c = dbRO.query(DatabaseConstants.FEED_TABLE, null, DatabaseConstants.FEED_ID + " = ?", new String[] {feedId}, null, null, null);
|
||||
Feed result = null;
|
||||
|
|
|
@ -22,13 +22,17 @@ import android.widget.TextView;
|
|||
import android.widget.Toast;
|
||||
|
||||
public class DeleteFeedFragment extends DialogFragment {
|
||||
private static final String FEED_TYPE = "feed_type";
|
||||
private static final String FEED_ID = "feed_id";
|
||||
private static final String FEED_NAME = "feed_name";
|
||||
private static final String FOLDER_NAME = "folder_name";
|
||||
private static final String NORMAL_FEED = "normal";
|
||||
private static final String SOCIAL_FEED = "social";
|
||||
|
||||
public static DeleteFeedFragment newInstance(Feed feed, String folderName) {
|
||||
DeleteFeedFragment frag = new DeleteFeedFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(FEED_TYPE, NORMAL_FEED);
|
||||
args.putString(FEED_ID, feed.feedId);
|
||||
args.putString(FEED_NAME, feed.title);
|
||||
args.putString(FOLDER_NAME, folderName);
|
||||
|
@ -36,12 +40,12 @@ public class DeleteFeedFragment extends DialogFragment {
|
|||
return frag;
|
||||
}
|
||||
|
||||
public static DeleteFeedFragment newInstance(SocialFeed feed, String folderName) {
|
||||
public static DeleteFeedFragment newInstance(SocialFeed feed) {
|
||||
DeleteFeedFragment frag = new DeleteFeedFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(FEED_TYPE, SOCIAL_FEED);
|
||||
args.putString(FEED_ID, feed.userId);
|
||||
args.putString(FEED_NAME, feed.feedTitle);
|
||||
args.putString(FOLDER_NAME, folderName);
|
||||
args.putString(FEED_NAME, feed.username);
|
||||
frag.setArguments(args);
|
||||
return frag;
|
||||
}
|
||||
|
@ -49,11 +53,19 @@ public class DeleteFeedFragment extends DialogFragment {
|
|||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setMessage(String.format(getResources().getString(R.string.delete_feed_message), getArguments().getString(FEED_NAME)));
|
||||
if (getArguments().getString(FEED_TYPE).equals(NORMAL_FEED)) {
|
||||
builder.setMessage(String.format(getResources().getString(R.string.delete_feed_message), getArguments().getString(FEED_NAME)));
|
||||
} else {
|
||||
builder.setMessage(String.format(getResources().getString(R.string.unfollow_message), getArguments().getString(FEED_NAME)));
|
||||
}
|
||||
builder.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
FeedUtils.deleteFeed(getArguments().getString(FEED_ID), getArguments().getString(FOLDER_NAME), getActivity(), new APIManager(getActivity()));
|
||||
if (getArguments().getString(FEED_TYPE).equals(NORMAL_FEED)) {
|
||||
FeedUtils.deleteFeed(getArguments().getString(FEED_ID), getArguments().getString(FOLDER_NAME), getActivity(), new APIManager(getActivity()));
|
||||
} else {
|
||||
FeedUtils.deleteSocialFeed(getArguments().getString(FEED_ID), getActivity(), new APIManager(getActivity()));
|
||||
}
|
||||
// if called from main view then refresh otherwise it was
|
||||
// called from the feed view so finish
|
||||
Activity activity = DeleteFeedFragment.this.getActivity();
|
||||
|
|
|
@ -13,6 +13,7 @@ import android.view.ContextMenu;
|
|||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.Display;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
@ -195,10 +196,10 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
|||
MenuInflater inflater = getActivity().getMenuInflater();
|
||||
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
|
||||
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
|
||||
|
||||
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
||||
|
||||
switch(type) {
|
||||
case ExpandableListView.PACKED_POSITION_TYPE_GROUP:
|
||||
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
||||
if (adapter.isRowSavedStories(groupPosition)) break;
|
||||
if (adapter.isRowReadStories(groupPosition)) break;
|
||||
inflater.inflate(R.menu.context_folder, menu);
|
||||
|
@ -206,22 +207,27 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
|||
|
||||
case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
|
||||
inflater.inflate(R.menu.context_feed, menu);
|
||||
if (groupPosition == FolderListAdapter.ALL_SHARED_STORIES_GROUP_POSITION) {
|
||||
menu.removeItem(R.id.menu_delete_feed);
|
||||
} else {
|
||||
menu.removeItem(R.id.menu_unfollow);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item) {
|
||||
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) item.getMenuInfo();
|
||||
int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
|
||||
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
||||
|
||||
if (item.getItemId() == R.id.menu_delete_feed) {
|
||||
String folderName = adapter.getGroup(groupPosition);
|
||||
if (item.getItemId() == R.id.menu_delete_feed || item.getItemId() == R.id.menu_unfollow) {
|
||||
DialogFragment deleteFeedFragment;
|
||||
if (groupPosition == FolderListAdapter.ALL_SHARED_STORIES_GROUP_POSITION) {
|
||||
deleteFeedFragment = DeleteFeedFragment.newInstance(adapter.getSocialFeed(adapter.getChild(groupPosition, childPosition)), folderName);
|
||||
deleteFeedFragment = DeleteFeedFragment.newInstance(adapter.getSocialFeed(adapter.getChild(groupPosition, childPosition)));
|
||||
} else {
|
||||
String folderName = adapter.getGroup(groupPosition);
|
||||
deleteFeedFragment = DeleteFeedFragment.newInstance(adapter.getFeed(adapter.getChild(groupPosition, childPosition)), folderName);
|
||||
}
|
||||
deleteFeedFragment.show(getFragmentManager(), "dialog");
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.newsblur.domain.SocialFeed;
|
|||
import com.newsblur.domain.Story;
|
||||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.network.domain.NewsBlurResponse;
|
||||
import com.newsblur.serialization.BooleanTypeAdapter;
|
||||
import com.newsblur.service.NBSyncService;
|
||||
import com.newsblur.util.AppConstants;
|
||||
|
||||
|
@ -79,6 +80,23 @@ public class FeedUtils {
|
|||
}.execute();
|
||||
}
|
||||
|
||||
public static void deleteSocialFeed(final String userId, final Context context, final APIManager apiManager) {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Void... arg) {
|
||||
apiManager.unfollowUser(userId);
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
// TODO: we can't check result.isError() because the delete call sets the .message property on all calls. find a better error check
|
||||
dbHelper.deleteSocialFeed(userId);
|
||||
NbActivity.updateAllActivities();
|
||||
Toast.makeText(context, R.string.toast_unfollowed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
public static void clearReadingSession() {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
|
|
Loading…
Add table
Reference in a new issue