mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
#1299 Android saved searches delete option
This commit is contained in:
parent
71b36b9706
commit
613f0d0313
10 changed files with 89 additions and 5 deletions
|
@ -44,4 +44,7 @@
|
|||
|
||||
<item android:id="@+id/menu_intel"
|
||||
android:title="@string/menu_intel" />
|
||||
|
||||
<item android:id="@+id/menu_delete_saved_search"
|
||||
android:title="@string/menu_delete_saved_search" />
|
||||
</menu>
|
||||
|
|
|
@ -133,6 +133,7 @@
|
|||
<string name="menu_send_story_full">Send story 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_delete_saved_search">Delete saved search</string>
|
||||
<string name="menu_unfollow">Unfollow user</string>
|
||||
<string name="menu_choose_folders">Choose folders</string>
|
||||
<string name="menu_notifications_choose">Notifications…</string>
|
||||
|
@ -235,6 +236,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="delete_saved_search_message">Delete saved search %s?</string>
|
||||
<string name="unfollow_message">Unfollow \"%s\"?</string>
|
||||
<string name="feed_subscribers">%s subscribers</string>
|
||||
<string name="feed_opens">%d opens</string>
|
||||
|
|
|
@ -195,6 +195,13 @@ public class BlurDatabaseHelper {
|
|||
synchronized (RW_MUTEX) {dbRW.delete(DatabaseConstants.SOCIALFEED_STORY_MAP_TABLE, DatabaseConstants.SOCIALFEED_STORY_USER_ID + " = ?", selArgs);}
|
||||
}
|
||||
|
||||
public void deleteSavedSearch(String feedId, String query) {
|
||||
String q = "DELETE FROM " + DatabaseConstants.SAVED_SEARCH_TABLE +
|
||||
" WHERE " + DatabaseConstants.SAVED_SEARCH_FEED_ID + " = '" + feedId + "'" +
|
||||
" AND " + DatabaseConstants.SAVED_SEARCH_QUERY + " = '" + query + "'";
|
||||
synchronized (RW_MUTEX) {dbRW.execSQL(q);}
|
||||
}
|
||||
|
||||
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;
|
||||
|
|
|
@ -596,6 +596,7 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
|
|||
SavedSearch savedSearch = SavedSearch.fromCursor(cursor);
|
||||
savedSearches.add(savedSearch);
|
||||
}
|
||||
Collections.sort(savedSearches, SavedSearch.SavedSearchComparatorByTitle);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@ import com.newsblur.database.DatabaseConstants;
|
|||
import com.newsblur.util.FeedSet;
|
||||
import com.newsblur.util.FeedUtils;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public class SavedSearch {
|
||||
|
||||
@SerializedName("query")
|
||||
|
@ -110,4 +112,11 @@ public class SavedSearch {
|
|||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
public final static Comparator<SavedSearch> SavedSearchComparatorByTitle = new Comparator<SavedSearch>() {
|
||||
@Override
|
||||
public int compare(SavedSearch ss1, SavedSearch ss2) {
|
||||
return String.CASE_INSENSITIVE_ORDER.compare(ss1.feedTitle, ss2.feedTitle);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,9 +4,11 @@ import com.newsblur.R;
|
|||
import com.newsblur.activity.ItemsList;
|
||||
import com.newsblur.activity.NbActivity;
|
||||
import com.newsblur.domain.Feed;
|
||||
import com.newsblur.domain.SavedSearch;
|
||||
import com.newsblur.domain.SocialFeed;
|
||||
import com.newsblur.network.APIManager;
|
||||
import com.newsblur.util.FeedUtils;
|
||||
import com.newsblur.util.UIUtils;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
|
@ -22,7 +24,9 @@ public class DeleteFeedFragment extends DialogFragment {
|
|||
private static final String FOLDER_NAME = "folder_name";
|
||||
private static final String NORMAL_FEED = "normal";
|
||||
private static final String SOCIAL_FEED = "social";
|
||||
|
||||
private static final String SAVED_SEARCH_FEED = "saved_search";
|
||||
private static final String QUERY = "query";
|
||||
|
||||
public static DeleteFeedFragment newInstance(Feed feed, String folderName) {
|
||||
DeleteFeedFragment frag = new DeleteFeedFragment();
|
||||
Bundle args = new Bundle();
|
||||
|
@ -44,11 +48,25 @@ public class DeleteFeedFragment extends DialogFragment {
|
|||
return frag;
|
||||
}
|
||||
|
||||
public static DeleteFeedFragment newInstance(SavedSearch savedSearch) {
|
||||
DeleteFeedFragment frag = new DeleteFeedFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(FEED_TYPE, SAVED_SEARCH_FEED);
|
||||
args.putString(FEED_ID, savedSearch.feedId);
|
||||
args.putString(FEED_NAME, savedSearch.feedTitle);
|
||||
args.putString(QUERY, savedSearch.query);
|
||||
frag.setArguments(args);
|
||||
return frag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
if (getArguments().getString(FEED_TYPE).equals(NORMAL_FEED)) {
|
||||
builder.setMessage(String.format(getResources().getString(R.string.delete_feed_message), getArguments().getString(FEED_NAME)));
|
||||
} else if (getArguments().getString(FEED_TYPE).equals(SAVED_SEARCH_FEED)) {
|
||||
String message = String.format(getResources().getString(R.string.delete_saved_search_message), getArguments().getString(FEED_NAME));
|
||||
builder.setMessage(UIUtils.fromHtml(message));
|
||||
} else {
|
||||
builder.setMessage(String.format(getResources().getString(R.string.unfollow_message), getArguments().getString(FEED_NAME)));
|
||||
}
|
||||
|
@ -57,6 +75,8 @@ public class DeleteFeedFragment extends DialogFragment {
|
|||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
if (getArguments().getString(FEED_TYPE).equals(NORMAL_FEED)) {
|
||||
FeedUtils.deleteFeed(getArguments().getString(FEED_ID), getArguments().getString(FOLDER_NAME), getActivity(), new APIManager(getActivity()));
|
||||
} else if (getArguments().getString(FEED_TYPE).equals(SAVED_SEARCH_FEED)) {
|
||||
FeedUtils.deleteSavedSearch(getArguments().getString(FEED_ID), getArguments().getString(QUERY), getActivity(), new APIManager(getActivity()));
|
||||
} else {
|
||||
FeedUtils.deleteSocialFeed(getArguments().getString(FEED_ID), getActivity(), new APIManager(getActivity()));
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.lang.ref.WeakReference;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
|
@ -41,7 +40,6 @@ import com.newsblur.activity.ItemsList;
|
|||
import com.newsblur.activity.Main;
|
||||
import com.newsblur.activity.NbActivity;
|
||||
import com.newsblur.activity.ReadStoriesItemsList;
|
||||
import com.newsblur.activity.SavedSearchesItemList;
|
||||
import com.newsblur.activity.SavedStoriesItemsList;
|
||||
import com.newsblur.activity.SocialFeedItemsList;
|
||||
import com.newsblur.database.FolderListAdapter;
|
||||
|
@ -272,7 +270,6 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
|||
|
||||
case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
|
||||
if (adapter.isRowSavedStories(groupPosition)) break;
|
||||
if (adapter.isRowSavedSearches(groupPosition)) break;
|
||||
if (currentState == StateFilter.SAVED) break;
|
||||
inflater.inflate(R.menu.context_feed, menu);
|
||||
if (adapter.isRowAllSharedStories(groupPosition)) {
|
||||
|
@ -285,9 +282,22 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
|||
menu.removeItem(R.id.menu_instafetch_feed);
|
||||
menu.removeItem(R.id.menu_intel);
|
||||
menu.removeItem(R.id.menu_rename_feed);
|
||||
menu.removeItem(R.id.menu_delete_saved_search);
|
||||
} else if (adapter.isRowSavedSearches(groupPosition)) {
|
||||
menu.removeItem(R.id.menu_mark_feed_as_read);
|
||||
menu.removeItem(R.id.menu_delete_feed);
|
||||
menu.removeItem(R.id.menu_unfollow);
|
||||
menu.removeItem(R.id.menu_choose_folders);
|
||||
menu.removeItem(R.id.menu_rename_feed);
|
||||
menu.removeItem(R.id.menu_notifications);
|
||||
menu.removeItem(R.id.menu_mute_feed);
|
||||
menu.removeItem(R.id.menu_unmute_feed);
|
||||
menu.removeItem(R.id.menu_instafetch_feed);
|
||||
menu.removeItem(R.id.menu_intel);
|
||||
} else {
|
||||
// normal feeds
|
||||
menu.removeItem(R.id.menu_unfollow);
|
||||
menu.removeItem(R.id.menu_delete_saved_search);
|
||||
|
||||
Feed feed = adapter.getFeed(groupPosition, childPosition);
|
||||
if (feed.active) {
|
||||
|
@ -392,7 +402,13 @@ public class FolderListFragment extends NbFragment implements OnCreateContextMen
|
|||
} else if (item.getItemId() == R.id.menu_intel) {
|
||||
FeedIntelTrainerFragment intelFrag = FeedIntelTrainerFragment.newInstance(adapter.getFeed(groupPosition, childPosition), adapter.getChild(groupPosition, childPosition));
|
||||
intelFrag.show(getFragmentManager(), FeedIntelTrainerFragment.class.getName());
|
||||
}
|
||||
} else if (item.getItemId() == R.id.menu_delete_saved_search) {
|
||||
SavedSearch savedSearch = adapter.getSavedSearch(childPosition);
|
||||
if (savedSearch != null) {
|
||||
DialogFragment deleteFeedFragment = DeleteFeedFragment.newInstance(savedSearch);
|
||||
deleteFeedFragment.show(getFragmentManager(), "dialog");
|
||||
}
|
||||
}
|
||||
|
||||
return super.onContextItemSelected(item);
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ public class APIConstants {
|
|||
public static final String PATH_SET_NOTIFICATIONS = "/notifications/feed/";
|
||||
public static final String PATH_INSTA_FETCH = "/rss_feeds/exception_retry";
|
||||
public static final String PATH_RENAME_FEED = "/reader/rename_feed";
|
||||
public static final String PATH_DELETE_SEARCH = "/reader/delete_search";
|
||||
|
||||
public static String buildUrl(String path) {
|
||||
return CurrentUrlBase + path;
|
||||
|
|
|
@ -579,6 +579,14 @@ public class APIManager {
|
|||
return response.getResponse(gson, NewsBlurResponse.class);
|
||||
}
|
||||
|
||||
public NewsBlurResponse deleteSavedSearch(String feedId, String query) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(APIConstants.PARAMETER_FEEDID, feedId);
|
||||
values.put(APIConstants.PARAMETER_QUERY, query);
|
||||
APIResponse response = post(buildUrl(APIConstants.PATH_DELETE_SEARCH), values);
|
||||
return response.getResponse(gson, NewsBlurResponse.class);
|
||||
}
|
||||
|
||||
public NewsBlurResponse saveFeedChooser(Set<String> feeds) {
|
||||
ValueMultimap values = new ValueMultimap();
|
||||
for (String feed : feeds) {
|
||||
|
|
|
@ -111,6 +111,23 @@ public class FeedUtils {
|
|||
}.execute();
|
||||
}
|
||||
|
||||
public static void deleteSavedSearch(final String feedId, final String query, final Context context, final APIManager apiManager) {
|
||||
new AsyncTask<Void, Void, NewsBlurResponse>() {
|
||||
@Override
|
||||
protected NewsBlurResponse doInBackground(Void... voids) {
|
||||
return apiManager.deleteSavedSearch(feedId, query);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(NewsBlurResponse newsBlurResponse) {
|
||||
if (!newsBlurResponse.isError()) {
|
||||
dbHelper.deleteSavedSearch(feedId, query);
|
||||
NbActivity.updateAllActivities(NbActivity.UPDATE_METADATA);
|
||||
}
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
public static void deleteFeed(final String feedId, final String folderName, final Context context, final APIManager apiManager) {
|
||||
new AsyncTask<Void, Void, NewsBlurResponse>() {
|
||||
@Override
|
||||
|
|
Loading…
Add table
Reference in a new issue