diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java index ecf95012..636ab357 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostAdapter.java @@ -24,8 +24,8 @@ import android.view.ViewGroup; import org.floens.chan.R; import org.floens.chan.core.model.ChanThread; -import org.floens.chan.core.model.orm.Loadable; import org.floens.chan.core.model.Post; +import org.floens.chan.core.model.orm.Loadable; import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.ui.cell.PostCellInterface; import org.floens.chan.ui.cell.ThreadStatusCell; @@ -56,6 +56,7 @@ public class PostAdapter extends RecyclerView.Adapter { private boolean bound; private ChanSettings.PostViewMode postViewMode; + private boolean compact = false; public PostAdapter(RecyclerView recyclerView, PostAdapterCallback postAdapterCallback, PostCellInterface.PostCellCallback postCellCallback, ThreadStatusCell.Callback statusCellCallback) { this.recyclerView = recyclerView; @@ -106,7 +107,17 @@ public class PostAdapter extends RecyclerView.Adapter { Post post = displayList.get(getPostPosition(position)); boolean highlight = post == highlightedPost || post.id.equals(highlightedPostId) || post.no == highlightedPostNo || post.tripcode.equals(highlightedPostTripcode); - postViewHolder.postView.setPost(null, post, postCellCallback, true, highlight, post.no == selectedPost, -1, true, postViewMode); + postViewHolder.postView.setPost(null, + post, + postCellCallback, + true, + highlight, + post.no == selectedPost, + -1, + true, + postViewMode, + compact); + break; case TYPE_STATUS: ((StatusViewHolder) holder).threadStatusCell.update(); @@ -160,7 +171,7 @@ public class PostAdapter extends RecyclerView.Adapter { synchronized (post.repliesFrom) { repliesFromSize = post.repliesFrom.size(); } - return ((long) repliesFromSize << 32L) + (long) post.no; + return ((long) repliesFromSize << 32L) + (long) post.no + (compact ? 1L : 0L); } } @@ -261,6 +272,13 @@ public class PostAdapter extends RecyclerView.Adapter { this.postViewMode = postViewMode; } + public void setCompact(boolean compact) { + if (this.compact != compact) { + this.compact = compact; + notifyDataSetChanged(); + } + } + public int getPostPosition(int position) { int postPosition = position; if (lastSeenIndicatorPosition >= 0 && position > lastSeenIndicatorPosition) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java index d2f6ae46..93a03f7d 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/CardPostCell.java @@ -43,6 +43,7 @@ import org.floens.chan.ui.view.ThumbnailView; import java.util.ArrayList; import java.util.List; +import static org.floens.chan.utils.AndroidUtils.dp; import static org.floens.chan.utils.AndroidUtils.setRoundItemBackground; public class CardPostCell extends CardView implements PostCellInterface, View.OnClickListener { @@ -52,6 +53,7 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On private Theme theme; private Post post; private PostCellInterface.PostCellCallback callback; + private boolean compact = false; private FixedRatioLinearLayout content; private PostImageThumbnailView thumbnailView; @@ -78,7 +80,7 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On super.onFinishInflate(); content = findViewById(R.id.card_content); - content.setRatio(9f / 16f); + content.setRatio(9f / 18f); thumbnailView = findViewById(R.id.thumbnail); thumbnailView.setRatio(16f / 13f); thumbnailView.setOnClickListener(this); @@ -89,33 +91,27 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On setRoundItemBackground(options); filterMatchColor = findViewById(R.id.filter_match_color); - int textSizeSp = Integer.parseInt(ChanSettings.fontSize.get()); - title.setTextSize(textSizeSp); - comment.setTextSize(textSizeSp); - replies.setTextSize(textSizeSp); - setOnClickListener(this); - options.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - List items = new ArrayList<>(); - - callback.onPopulatePostOptions(post, items); - - FloatingMenu menu = new FloatingMenu(getContext(), v, items); - menu.setCallback(new FloatingMenu.FloatingMenuCallback() { - @Override - public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { - callback.onPostOptionClicked(post, item.getId()); - } - - @Override - public void onFloatingMenuDismissed(FloatingMenu menu) { - } - }); - menu.show(); - } + setCompact(compact); + + options.setOnClickListener(v -> { + List items = new ArrayList<>(); + + callback.onPopulatePostOptions(post, items); + + FloatingMenu menu = new FloatingMenu(getContext(), v, items); + menu.setCallback(new FloatingMenu.FloatingMenuCallback() { + @Override + public void onFloatingMenuItemClicked(FloatingMenu menu, FloatingMenuItem item) { + callback.onPostOptionClicked(post, item.getId()); + } + + @Override + public void onFloatingMenuDismissed(FloatingMenu menu) { + } + }); + menu.show(); }); } @@ -148,7 +144,8 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On public void setPost(Theme theme, final Post post, PostCellInterface.PostCellCallback callback, boolean selectable, boolean highlighted, boolean selected, int markedNo, - boolean showDivider, ChanSettings.PostViewMode postViewMode) { + boolean showDivider, ChanSettings.PostViewMode postViewMode, + boolean compact) { if (this.post == post) { return; } @@ -167,6 +164,11 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On this.callback = callback; bindPost(theme, post); + + if (this.compact != compact) { + this.compact = compact; + setCompact(compact); + } } public Post getPost() { @@ -225,4 +227,22 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On private void unbindPost(Post post) { bound = false; } + + private void setCompact(boolean compact) { + int textReduction = compact ? -2 : 0; + int textSizeSp = Integer.parseInt(ChanSettings.fontSize.get()) + textReduction; + title.setTextSize(textSizeSp); + comment.setTextSize(textSizeSp); + replies.setTextSize(textSizeSp); + + int p = compact ? dp(3) : dp(8); + + // Same as the layout. + title.setPadding(p, p, p, 0); + comment.setPadding(p, p, p, 0); + replies.setPadding(p, p / 2, p, p); + + int optionsPadding = compact ? 0 : dp(5); + options.setPadding(0, optionsPadding, optionsPadding, 0); + } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java index 3cce7166..2ad9b6b4 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCell.java @@ -252,7 +252,8 @@ public class PostCell extends LinearLayout implements PostCellInterface { boolean selected, int markedNo, boolean showDivider, - ChanSettings.PostViewMode postViewMode) { + ChanSettings.PostViewMode postViewMode, + boolean compact) { if (this.post == post && this.selectable == selectable && this.highlighted == highlighted && diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java index 07c3404f..6721e6f1 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostCellInterface.java @@ -37,7 +37,8 @@ public interface PostCellInterface { boolean selected, int markedNo, boolean showDivider, - ChanSettings.PostViewMode postViewMode); + ChanSettings.PostViewMode postViewMode, + boolean compact); Post getPost(); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java index 3f2153d8..690698a0 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/cell/PostStubCell.java @@ -141,7 +141,8 @@ public class PostStubCell extends RelativeLayout implements PostCellInterface, V public void setPost(Theme theme, final Post post, PostCellInterface.PostCellCallback callback, boolean selectable, boolean highlighted, boolean selected, int markedNo, - boolean showDivider, ChanSettings.PostViewMode postViewMode) { + boolean showDivider, ChanSettings.PostViewMode postViewMode, + boolean compact) { if (this.post == post) { return; } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java index 1eb72b78..bc7fbb6c 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java @@ -195,7 +195,16 @@ public class PostRepliesController extends Controller { final Post p = getItem(position); boolean showDivider = position < getCount() - 1; - postCell.setPost(null, p, presenter, false, false, false, data.forPost.no, showDivider, ChanSettings.PostViewMode.LIST); + postCell.setPost(null, + p, + presenter, + false, + false, + false, + data.forPost.no, + showDivider, + ChanSettings.PostViewMode.LIST, + false); return (View) postCell; } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java index f789f7fb..d061ae57 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/ThemeSettingsController.java @@ -69,6 +69,7 @@ import static org.floens.chan.utils.AndroidUtils.getString; public class ThemeSettingsController extends Controller implements View.OnClickListener { private Board dummyBoard; + { dummyBoard = new Board(); dummyBoard.name = "name"; @@ -76,6 +77,7 @@ public class ThemeSettingsController extends Controller implements View.OnClickL } private Loadable dummyLoadable; + { dummyLoadable = Loadable.emptyLoadable(); dummyLoadable.mode = Loadable.Mode.THREAD; @@ -339,7 +341,16 @@ public class ThemeSettingsController extends Controller implements View.OnClickL themeContext.getResources().getDimensionPixelSize(R.dimen.toolbar_height))); PostCell postCell = (PostCell) LayoutInflater.from(themeContext).inflate(R.layout.cell_post, null); - postCell.setPost(theme, post, dummyPostCallback, false, false, false, -1, true, ChanSettings.PostViewMode.LIST); + postCell.setPost(theme, + post, + dummyPostCallback, + false, + false, + false, + -1, + true, + ChanSettings.PostViewMode.LIST, + false); linearLayout.addView(postCell, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); return linearLayout; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java index 1e7945bd..bd8bfaee 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java @@ -158,13 +158,18 @@ public class ThreadListLayout extends FrameLayout implements ReplyLayout.ReplyLa int cardWidth = getResources().getDimensionPixelSize(R.dimen.grid_card_width); int gridCountSetting = ChanSettings.boardGridSpanCount.get(); + boolean compactMode; if (gridCountSetting > 0) { spanCount = gridCountSetting; + compactMode = (getMeasuredWidth() / spanCount) < dp(120); } else { spanCount = Math.max(1, Math.round(getMeasuredWidth() / cardWidth)); + compactMode = false; } if (postViewMode == ChanSettings.PostViewMode.CARD) { + postAdapter.setCompact(compactMode); + ((GridLayoutManager) layoutManager).setSpanCount(spanCount); } } diff --git a/Clover/app/src/main/res/values-sw600dp/dimens.xml b/Clover/app/src/main/res/values-sw600dp/dimens.xml index 7030be44..d67a5d77 100644 --- a/Clover/app/src/main/res/values-sw600dp/dimens.xml +++ b/Clover/app/src/main/res/values-sw600dp/dimens.xml @@ -18,7 +18,5 @@ along with this program. If not, see . true - 105dp - 100dp