From af79b1b1cdd741f4f802c39f2b7341e1b87a94e5 Mon Sep 17 00:00:00 2001 From: tom79 Date: Fri, 15 Nov 2019 13:58:06 +0100 Subject: [PATCH] bookmarks --- .../java/app/fedilab/android/client/API.java | 5 +++ .../android/client/Entities/Status.java | 3 ++ .../android/drawers/StatusListAdapter.java | 45 ++----------------- .../fedilab/android/helper/CrossActions.java | 15 ++++--- 4 files changed, 21 insertions(+), 47 deletions(-) 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 360e635ac..40731af84 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -5017,6 +5017,11 @@ public class API { } catch (Exception e) { status.setFavourited(false); } + if( resobj.has("bookmarked") && !resobj.isNull("bookmarked")){ + status.setBookmarked(true); + }else{ + status.setBookmarked(false); + } try { if (resobj.getJSONObject("renoteId") != null && !resobj.getJSONObject("renoteId").toString().equals("null")) status.setReblog(parseStatuses(context, resobj.getJSONObject("renote"))); diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index aeb7e5536..8e852eb2d 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -1668,6 +1668,9 @@ public class Status implements Parcelable { } public boolean isBookmarked() { + if( this.getReblog() != null && this.getReblog().isBookmarked()){ + bookmarked = true; + } return bookmarked; } 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 d5d8d7aef..da2cff862 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -1459,12 +1459,12 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct }); holder.custom_feature_bookmark.setOnClickListener(view -> { - bookmark(status); + CrossActions.doCrossBookmark(context, status, statusListAdapter, true); status.setCustomFeaturesDisplayed(false); notifyStatusChanged(status); }); holder.custom_feature_bookmark.setOnLongClickListener(view -> { - CrossActions.doCrossBookmark(context, status, statusListAdapter); + CrossActions.doCrossBookmark(context, status, statusListAdapter, false); status.setCustomFeaturesDisplayed(false); notifyStatusChanged(status); return false; @@ -3095,7 +3095,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct itemBookmark.getActionView().setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - CrossActions.doCrossBookmark(context, status, statusListAdapter); + CrossActions.doCrossBookmark(context, status, statusListAdapter, true); return true; } }); @@ -4188,45 +4188,6 @@ 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(); - Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); - } - } else { - int position = 0; - for (Status statustmp : statuses) { - if (statustmp.getId().equals(status.getId())) { - statuses.remove(status); - 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; - } - position++; - } - } - } - @Override public void onRetrieveFeeds(APIResponse apiResponse) { 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 ca085b537..07422e589 100644 --- a/app/src/main/java/app/fedilab/android/helper/CrossActions.java +++ b/app/src/main/java/app/fedilab/android/helper/CrossActions.java @@ -480,10 +480,14 @@ public class CrossActions { }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } - public static void doCrossBookmark(final Context context, final Status status, StatusListAdapter statusListAdapter) { + public static void doCrossBookmark(final Context context, Status status, StatusListAdapter statusListAdapter, boolean limitedToOwner) { List accounts = connectedAccounts(context, status, false); API.StatusAction doAction; - if (accounts.size() == 1) { + //Only bookmark the initial status + if( status.getReblog() != null){ + status = status.getReblog(); + } + if (accounts.size() == 1 || limitedToOwner) { status.setBookmarked(!status.isBookmarked()); try { SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); @@ -496,7 +500,7 @@ public class CrossActions { 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); + new PostActionAsyncTask(context, doAction, status.getId(), null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); statusListAdapter.notifyStatusChanged(status); } catch (Exception e) { e.printStackTrace(); @@ -518,6 +522,7 @@ public class CrossActions { dialog.dismiss(); } }); + Status finalStatus = status; builderSingle.setAdapter(accountsSearchAdapter, new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, int which) { @@ -534,7 +539,7 @@ public class CrossActions { @Override protected Void doInBackground(Void... voids) { API api = new API(contextReference.get(), account.getInstance(), account.getToken()); - APIResponse apiResponse = api.search(status.getUrl()); + APIResponse apiResponse = api.search(finalStatus.getUrl()); response = apiResponse.getResults(); return null; } @@ -559,7 +564,7 @@ public class CrossActions { 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); + new PostActionAsyncTask(context, account, finalStatus, doAction, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); statusListAdapter.notifyStatusChanged(statuses.get(0)); } }