diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java index 5e07d6e7..4c2667ba 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/ThreadManager.java @@ -69,6 +69,7 @@ public class ThreadManager implements Loader.LoaderListener { private PostRepliesFragment currentPopupFragment; private int highlightedPost = -1; private int lastPost = -1; + private String highlightedId = null; private Loader loader; @@ -118,6 +119,7 @@ public class ThreadManager implements Loader.LoaderListener { highlightedPost = -1; lastPost = -1; + highlightedId = null; } public void bottomPostViewed() { @@ -216,20 +218,23 @@ public class ThreadManager implements Loader.LoaderListener { AlertDialog.Builder builder = new AlertDialog.Builder(activity); List options = new ArrayList<>(Arrays.asList(activity.getResources().getStringArray(R.array.post_options))); + + final boolean id = !TextUtils.isEmpty(post.id); + if (id) { + options.add(activity.getString(R.string.post_highlight_id)); + } + // Only add the delete option when the post is a saved reply - boolean delete = false, saved = false; - if (ChanApplication.getDatabaseManager().isSavedReply(post.board, post.no)) { + final boolean delete = ChanApplication.getDatabaseManager().isSavedReply(post.board, post.no); + if (delete) { options.add(activity.getString(R.string.delete)); - delete = true; } - if (ChanPreferences.getDeveloper()) { + final boolean saved = ChanPreferences.getDeveloper(); + if (saved) { options.add("Make this a saved reply"); - saved = true; } - final boolean finalDelete = delete; - final boolean finalSaved = saved; builder.setItems(options.toArray(new String[options.size()]), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -249,17 +254,33 @@ public class ThreadManager implements Loader.LoaderListener { case 4: // Copy text copyToClipboard(post.comment.toString()); break; - case 5: // Delete - if (finalDelete && !finalSaved) { + default: + // all optional, but with this order, starting at 5: + // id + // delete + // saved + + int idIndex = 5; + int deleteIndex = 5; + int savedIndex = 5; + + if (id) { + deleteIndex++; + savedIndex++; + } + + if (delete) { + savedIndex++; + } + + if (id && which == idIndex) { + highlightedId = post.id; + threadManagerListener.onRefreshView(); + } else if (delete && which == deleteIndex) { deletePost(post); - } else if (finalSaved && !finalDelete) { + } else if (saved && which == savedIndex) { ChanApplication.getDatabaseManager().saveReply(new SavedReply(post.board, post.no, "foo")); } - break; - case 6: - ChanApplication.getDatabaseManager().saveReply(new SavedReply(post.board, post.no, "foo")); - - break; } } }); @@ -294,7 +315,7 @@ public class ThreadManager implements Loader.LoaderListener { } public boolean isPostHightlighted(Post post) { - return highlightedPost >= 0 && post.no == highlightedPost; + return (highlightedPost >= 0 && post.no == highlightedPost) || (highlightedId != null && post.id.equals(highlightedId)); } public boolean isPostLastSeen(Post post) { @@ -568,14 +589,11 @@ public class ThreadManager implements Loader.LoaderListener { public interface ThreadManagerListener { public void onThreadLoaded(List result, boolean append); - public void onThreadLoadError(VolleyError error); - public void onOPClicked(Post post); - public void onThumbnailClicked(Post post); - public void onScrollTo(Post post); + public void onRefreshView(); } public static class RepliesPopup { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java index bf206e55..4cade546 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java @@ -284,6 +284,13 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana } } + @Override + public void onRefreshView() { + if (postAdapter != null) { + postAdapter.notifyDataSetChanged(); + } + } + private static class SkipLogic { private final ImageView skip; private int lastFirstVisibleItem; diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 93ff5232..6f08dd7b 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -84,6 +84,7 @@ along with this program. If not, see . Show clickables Copy text + Highlight ID Reply to Make thread in