From a1e0951cbfa92b40cc042fcb09adf1e3af0f2399 Mon Sep 17 00:00:00 2001 From: tom79 Date: Thu, 14 Nov 2019 18:58:58 +0100 Subject: [PATCH] Bookmark API support --- .../fedilab/android/asynctasks/PostActionAsyncTask.java | 4 +++- app/src/main/java/app/fedilab/android/client/API.java | 8 ++++++++ .../app/fedilab/android/drawers/StatusListAdapter.java | 6 ++++++ .../java/app/fedilab/android/helper/CrossActions.java | 9 ++++++++- app/src/main/res/drawable-anydpi/ic_user_minus.xml | 2 +- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/asynctasks/PostActionAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/PostActionAsyncTask.java index 1f219fd8d..bbed8bba0 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/PostActionAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/PostActionAsyncTask.java @@ -224,7 +224,9 @@ public class PostActionAsyncTask extends AsyncTask { @Override protected void onPostExecute(Void result) { - listener.onPostAction(statusCode, apiAction, targetedId, error); + if( listener != null) { + listener.onPostAction(statusCode, apiAction, targetedId, error); + } } } diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index f3ca9fd53..360e635ac 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -141,6 +141,8 @@ public class API { public enum StatusAction { FAVOURITE, UNFAVOURITE, + BOOKMARK, + UNBOOKMARK, REBLOG, UNREBLOG, MUTE, @@ -2686,6 +2688,12 @@ public class API { case UNFAVOURITE: action = String.format("/statuses/%s/unfavourite", targetedId); break; + case BOOKMARK: + action = String.format("/statuses/%s/bookmark", targetedId); + break; + case UNBOOKMARK: + action = String.format("/statuses/%s/unbookmark", targetedId); + break; case REBLOG: action = String.format("/statuses/%s/reblog", targetedId); break; diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 356351709..d5d8d7aef 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -4189,17 +4189,22 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct private void bookmark(Status status) { + if (type != RetrieveFeedsAsyncTask.Type.CACHE_BOOKMARKS) { status.setBookmarked(!status.isBookmarked()); try { final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + API.StatusAction doAction; if (status.isBookmarked()) { new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status); + doAction = API.StatusAction.BOOKMARK; Toasty.success(context, context.getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show(); } else { new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status); + doAction = API.StatusAction.UNBOOKMARK; Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); } + new PostActionAsyncTask(context, doAction, status.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); notifyStatusChanged(status); } catch (Exception e) { e.printStackTrace(); @@ -4213,6 +4218,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct statusListAdapter.notifyItemRemoved(position); final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, statustmp); + new PostActionAsyncTask(context, API.StatusAction.UNBOOKMARK, statustmp.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); break; } diff --git a/app/src/main/java/app/fedilab/android/helper/CrossActions.java b/app/src/main/java/app/fedilab/android/helper/CrossActions.java index adf006654..ca085b537 100644 --- a/app/src/main/java/app/fedilab/android/helper/CrossActions.java +++ b/app/src/main/java/app/fedilab/android/helper/CrossActions.java @@ -482,18 +482,21 @@ public class CrossActions { public static void doCrossBookmark(final Context context, final Status status, StatusListAdapter statusListAdapter) { List accounts = connectedAccounts(context, status, false); - + API.StatusAction doAction; if (accounts.size() == 1) { status.setBookmarked(!status.isBookmarked()); try { SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); if (status.isBookmarked()) { + doAction = API.StatusAction.BOOKMARK; new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status); Toasty.success(context, context.getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show(); } else { + doAction = API.StatusAction.UNBOOKMARK; new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status); Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); } + new PostActionAsyncTask(context, accounts.get(0), status, doAction, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); statusListAdapter.notifyStatusChanged(status); } catch (Exception e) { e.printStackTrace(); @@ -546,13 +549,17 @@ public class CrossActions { if (statuses != null && statuses.size() > 0) { final SQLiteDatabase db = Sqlite.getInstance(contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); app.fedilab.android.client.Entities.Status statusBookmarked = new StatusCacheDAO(contextReference.get(), db).getStatus(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0).getId(), account.getId(), account.getInstance()); + API.StatusAction doAction; if (statusBookmarked == null) { + doAction = API.StatusAction.BOOKMARK; new StatusCacheDAO(contextReference.get(), db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0), account.getId(), account.getInstance()); Toasty.success(contextReference.get(), contextReference.get().getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show(); } else { + doAction = API.StatusAction.UNBOOKMARK; new StatusCacheDAO(contextReference.get(), db).remove(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0), account.getId(), account.getInstance()); Toasty.success(contextReference.get(), contextReference.get().getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); } + new PostActionAsyncTask(context, account, status, doAction, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); statusListAdapter.notifyStatusChanged(statuses.get(0)); } } diff --git a/app/src/main/res/drawable-anydpi/ic_user_minus.xml b/app/src/main/res/drawable-anydpi/ic_user_minus.xml index 3dc243913..87b3df71f 100644 --- a/app/src/main/res/drawable-anydpi/ic_user_minus.xml +++ b/app/src/main/res/drawable-anydpi/ic_user_minus.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24">