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"
|
<item android:id="@+id/menu_delete_feed"
|
||||||
android:title="@string/menu_delete_feed" />
|
android:title="@string/menu_delete_feed" />
|
||||||
|
|
||||||
|
<item android:id="@+id/menu_unfollow"
|
||||||
|
android:title="@string/menu_unfollow" />
|
||||||
|
|
||||||
</menu>
|
</menu>
|
|
@ -111,6 +111,7 @@
|
||||||
<string name="menu_send_story">Send to…</string>
|
<string name="menu_send_story">Send to…</string>
|
||||||
<string name="menu_mark_feed_as_read">Mark feed as read</string>
|
<string name="menu_mark_feed_as_read">Mark feed as read</string>
|
||||||
<string name="menu_delete_feed">Delete feed</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_mark_folder_as_read">Mark folder as read</string>
|
||||||
<string name="menu_sharenewsblur">Share this story</string>
|
<string name="menu_sharenewsblur">Share this story</string>
|
||||||
<string name="menu_textsize">Adjust text size</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_story_unread">Story marked as unread</string>
|
||||||
|
|
||||||
<string name="toast_feed_deleted">Feed deleted</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>
|
<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="friends_shares_count">%d SHARES</string>
|
||||||
<string name="unknown_user">Unknown User</string>
|
<string name="unknown_user">Unknown User</string>
|
||||||
<string name="delete_feed_message">Delete feed \"%s\"?</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>
|
<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);}
|
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) {
|
public Feed getFeed(String feedId) {
|
||||||
Cursor c = dbRO.query(DatabaseConstants.FEED_TABLE, null, DatabaseConstants.FEED_ID + " = ?", new String[] {feedId}, null, null, null);
|
Cursor c = dbRO.query(DatabaseConstants.FEED_TABLE, null, DatabaseConstants.FEED_ID + " = ?", new String[] {feedId}, null, null, null);
|
||||||
Feed result = null;
|
Feed result = null;
|
||||||
|
|
|
@ -22,13 +22,17 @@ import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class DeleteFeedFragment extends DialogFragment {
|
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_ID = "feed_id";
|
||||||
private static final String FEED_NAME = "feed_name";
|
private static final String FEED_NAME = "feed_name";
|
||||||
private static final String FOLDER_NAME = "folder_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) {
|
public static DeleteFeedFragment newInstance(Feed feed, String folderName) {
|
||||||
DeleteFeedFragment frag = new DeleteFeedFragment();
|
DeleteFeedFragment frag = new DeleteFeedFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
|
args.putString(FEED_TYPE, NORMAL_FEED);
|
||||||
args.putString(FEED_ID, feed.feedId);
|
args.putString(FEED_ID, feed.feedId);
|
||||||
args.putString(FEED_NAME, feed.title);
|
args.putString(FEED_NAME, feed.title);
|
||||||
args.putString(FOLDER_NAME, folderName);
|
args.putString(FOLDER_NAME, folderName);
|
||||||
|
@ -36,12 +40,12 @@ public class DeleteFeedFragment extends DialogFragment {
|
||||||
return frag;
|
return frag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DeleteFeedFragment newInstance(SocialFeed feed, String folderName) {
|
public static DeleteFeedFragment newInstance(SocialFeed feed) {
|
||||||
DeleteFeedFragment frag = new DeleteFeedFragment();
|
DeleteFeedFragment frag = new DeleteFeedFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
|
args.putString(FEED_TYPE, SOCIAL_FEED);
|
||||||
args.putString(FEED_ID, feed.userId);
|
args.putString(FEED_ID, feed.userId);
|
||||||
args.putString(FEED_NAME, feed.feedTitle);
|
args.putString(FEED_NAME, feed.username);
|
||||||
args.putString(FOLDER_NAME, folderName);
|
|
||||||
frag.setArguments(args);
|
frag.setArguments(args);
|
||||||
return frag;
|
return frag;
|
||||||
}
|
}
|
||||||
|
@ -49,11 +53,19 @@ public class DeleteFeedFragment extends DialogFragment {
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
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() {
|
builder.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialogInterface, int i) {
|
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
|
// if called from main view then refresh otherwise it was
|
||||||
// called from the feed view so finish
|
// called from the feed view so finish
|
||||||
Activity activity = DeleteFeedFragment.this.getActivity();
|
Activity activity = DeleteFeedFragment.this.getActivity();
|
||||||
|
|
|
@ -13,6 +13,7 @@ import android.view.ContextMenu;
|
||||||
import android.view.ContextMenu.ContextMenuInfo;
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -195,10 +196,10 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
||||||
MenuInflater inflater = getActivity().getMenuInflater();
|
MenuInflater inflater = getActivity().getMenuInflater();
|
||||||
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
|
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
|
||||||
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
|
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
|
||||||
|
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case ExpandableListView.PACKED_POSITION_TYPE_GROUP:
|
case ExpandableListView.PACKED_POSITION_TYPE_GROUP:
|
||||||
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
|
||||||
if (adapter.isRowSavedStories(groupPosition)) break;
|
if (adapter.isRowSavedStories(groupPosition)) break;
|
||||||
if (adapter.isRowReadStories(groupPosition)) break;
|
if (adapter.isRowReadStories(groupPosition)) break;
|
||||||
inflater.inflate(R.menu.context_folder, menu);
|
inflater.inflate(R.menu.context_folder, menu);
|
||||||
|
@ -206,22 +207,27 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
||||||
|
|
||||||
case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
|
case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
|
||||||
inflater.inflate(R.menu.context_feed, menu);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onContextItemSelected(MenuItem item) {
|
public boolean onContextItemSelected(MenuItem item) {
|
||||||
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) item.getMenuInfo();
|
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) item.getMenuInfo();
|
||||||
int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
|
int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
|
||||||
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
|
||||||
|
|
||||||
if (item.getItemId() == R.id.menu_delete_feed) {
|
if (item.getItemId() == R.id.menu_delete_feed || item.getItemId() == R.id.menu_unfollow) {
|
||||||
String folderName = adapter.getGroup(groupPosition);
|
|
||||||
DialogFragment deleteFeedFragment;
|
DialogFragment deleteFeedFragment;
|
||||||
if (groupPosition == FolderListAdapter.ALL_SHARED_STORIES_GROUP_POSITION) {
|
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 {
|
} else {
|
||||||
|
String folderName = adapter.getGroup(groupPosition);
|
||||||
deleteFeedFragment = DeleteFeedFragment.newInstance(adapter.getFeed(adapter.getChild(groupPosition, childPosition)), folderName);
|
deleteFeedFragment = DeleteFeedFragment.newInstance(adapter.getFeed(adapter.getChild(groupPosition, childPosition)), folderName);
|
||||||
}
|
}
|
||||||
deleteFeedFragment.show(getFragmentManager(), "dialog");
|
deleteFeedFragment.show(getFragmentManager(), "dialog");
|
||||||
|
|
|
@ -27,6 +27,7 @@ import com.newsblur.domain.SocialFeed;
|
||||||
import com.newsblur.domain.Story;
|
import com.newsblur.domain.Story;
|
||||||
import com.newsblur.network.APIManager;
|
import com.newsblur.network.APIManager;
|
||||||
import com.newsblur.network.domain.NewsBlurResponse;
|
import com.newsblur.network.domain.NewsBlurResponse;
|
||||||
|
import com.newsblur.serialization.BooleanTypeAdapter;
|
||||||
import com.newsblur.service.NBSyncService;
|
import com.newsblur.service.NBSyncService;
|
||||||
import com.newsblur.util.AppConstants;
|
import com.newsblur.util.AppConstants;
|
||||||
|
|
||||||
|
@ -79,6 +80,23 @@ public class FeedUtils {
|
||||||
}.execute();
|
}.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() {
|
public static void clearReadingSession() {
|
||||||
new AsyncTask<Void, Void, Void>() {
|
new AsyncTask<Void, Void, Void>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Reference in a new issue