From 8e58b92592907a5ca94146d9476b09641970995a Mon Sep 17 00:00:00 2001 From: Floens Date: Fri, 8 Apr 2016 10:44:13 +0200 Subject: [PATCH] Reduce catalog mode margin between the cards Add option to override how many columns the catalog mode should have. --- .../chan/core/settings/ChanSettings.java | 2 + .../org/floens/chan/ui/cell/CardPostCell.java | 4 ++ .../ui/controller/MainSettingsController.java | 12 ++++- .../ui/layout/FixedRatioLinearLayout.java | 54 +++++++++++++++++++ .../chan/ui/layout/ThreadListLayout.java | 15 ++++-- .../src/main/res/layout/cell_post_card.xml | 11 ++-- .../src/main/res/values-sw600dp/dimens.xml | 1 - Clover/app/src/main/res/values-v21/dimens.xml | 3 +- Clover/app/src/main/res/values/dimens.xml | 2 +- Clover/app/src/main/res/values/strings.xml | 3 ++ 10 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java index 71ff077f..57fefbc8 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java @@ -71,6 +71,7 @@ public class ChanSettings { public static final BooleanSetting videoOpenExternal; public static final BooleanSetting videoErrorIgnore; public static final StringSetting boardViewMode; + public static final IntegerSetting boardGridSpanCount; public static final StringSetting boardOrder; public static final StringSetting postDefaultName; @@ -141,6 +142,7 @@ public class ChanSettings { videoOpenExternal = new BooleanSetting(p, "preference_video_external", false); videoErrorIgnore = new BooleanSetting(p, "preference_video_error_ignore", false); boardViewMode = new StringSetting(p, "preference_board_view_mode", PostCellInterface.PostViewMode.LIST.name); // "list" or "grid" + boardGridSpanCount = new IntegerSetting(p, "preference_board_grid_span_count", 0); boardOrder = new StringSetting(p, "preference_board_order", PostsFilter.Order.BUMP.name); postDefaultName = new StringSetting(p, "preference_default_name", ""); 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 4a53dcdb..eeaedb63 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 @@ -30,6 +30,7 @@ import android.widget.TextView; import org.floens.chan.R; import org.floens.chan.core.model.Post; import org.floens.chan.core.settings.ChanSettings; +import org.floens.chan.ui.layout.FixedRatioLinearLayout; import org.floens.chan.ui.theme.Theme; import org.floens.chan.ui.theme.ThemeHelper; import org.floens.chan.ui.text.FastTextView; @@ -51,6 +52,7 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On private Post post; private PostCellInterface.PostCellCallback callback; + private FixedRatioLinearLayout content; private FixedRatioThumbnailView thumbnailView; private TextView title; private FastTextView comment; @@ -74,6 +76,8 @@ public class CardPostCell extends CardView implements PostCellInterface, View.On protected void onFinishInflate() { super.onFinishInflate(); + content = (FixedRatioLinearLayout) findViewById(R.id.card_content); + content.setRatio(9f / 16f); thumbnailView = (FixedRatioThumbnailView) findViewById(R.id.thumbnail); thumbnailView.setRatio(16f / 9f); thumbnailView.setOnClickListener(this); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java index 6340d57b..aa66c660 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/MainSettingsController.java @@ -65,6 +65,7 @@ public class MainSettingsController extends SettingsController implements Toolba private SettingView developerView; private SettingView fontView; private SettingView fontCondensed; + private SettingView gridColumnsView; private ToolbarMenuItem overflow; private PopupWindow advancedSettingsHint; @@ -135,6 +136,8 @@ public class MainSettingsController extends SettingsController implements Toolba updateVideoLoadModes(); } else if (item == fontView || item == fontCondensed) { EventBus.getDefault().post(new RefreshUIMessage("font")); + } else if (item == gridColumnsView) { + EventBus.getDefault().post(new RefreshUIMessage("gridcolumns")); } } @@ -179,12 +182,19 @@ public class MainSettingsController extends SettingsController implements Toolba List fontSizes = new ArrayList<>(); for (int size = 10; size <= 19; size++) { String name = size + (String.valueOf(size).equals(ChanSettings.fontSize.getDefault()) ? " " + getString(R.string.setting_font_size_default) : ""); - fontSizes.add(new ListSettingView.Item(name, String.valueOf(size))); + fontSizes.add(new ListSettingView.Item<>(name, String.valueOf(size))); } fontView = appearance.add(new ListSettingView<>(this, ChanSettings.fontSize, R.string.setting_font_size, fontSizes.toArray(new ListSettingView.Item[fontSizes.size()]))); fontCondensed = appearance.add(new BooleanSettingView(this, ChanSettings.fontCondensed, R.string.setting_font_condensed, R.string.setting_font_condensed_description)); + List gridColumns = new ArrayList<>(); + gridColumns.add(new ListSettingView.Item<>(getString(R.string.setting_board_grid_span_count_default), 0)); + for (int columns = 2; columns <= 5; columns++) { + gridColumns.add(new ListSettingView.Item<>(context.getString(R.string.setting_board_grid_span_count_item, columns), columns)); + } + gridColumnsView = appearance.add(new ListSettingView<>(this, ChanSettings.boardGridSpanCount, R.string.setting_board_grid_span_count, gridColumns)); + groups.add(appearance); // Browsing group diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java new file mode 100644 index 00000000..630cb7a9 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/FixedRatioLinearLayout.java @@ -0,0 +1,54 @@ +/* + * Clover - 4chan browser https://github.com/Floens/Clover/ + * Copyright (C) 2014 Floens + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.floens.chan.ui.layout; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +public class FixedRatioLinearLayout extends LinearLayout { + private float ratio; + + public FixedRatioLinearLayout(Context context) { + super(context); + } + + public FixedRatioLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public FixedRatioLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public void setRatio(float ratio) { + this.ratio = ratio; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY && (heightMode == MeasureSpec.UNSPECIFIED || heightMode == MeasureSpec.AT_MOST)) { + int width = MeasureSpec.getSize(widthMeasureSpec); + + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec((int) (width / ratio), MeasureSpec.EXACTLY)); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } +} 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 07b380c4..eaad9e46 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 @@ -142,7 +142,12 @@ public class ThreadListLayout extends FrameLayout implements ReplyLayout.ReplyLa super.onMeasure(widthMeasureSpec, heightMeasureSpec); int cardWidth = getResources().getDimensionPixelSize(R.dimen.grid_card_width); - spanCount = Math.max(1, Math.round(getMeasuredWidth() / cardWidth)); + int gridCountSetting = ChanSettings.boardGridSpanCount.get(); + if (gridCountSetting > 0) { + spanCount = gridCountSetting; + } else { + spanCount = Math.max(1, Math.round(getMeasuredWidth() / cardWidth)); + } if (postViewMode == PostCellInterface.PostViewMode.CARD) { ((GridLayoutManager) layoutManager).setSpanCount(spanCount); @@ -171,9 +176,9 @@ public class ThreadListLayout extends FrameLayout implements ReplyLayout.ReplyLa break; case CARD: GridLayoutManager gridLayoutManager = new GridLayoutManager(null, spanCount, GridLayoutManager.VERTICAL, false); - // The cards have a 4dp padding, this way there is always 8dp between the edges - recyclerViewTopPadding = dp(4); - recyclerView.setPadding(dp(4), recyclerViewTopPadding + toolbarHeight(), dp(4), dp(4)); + // The cards have a 1dp padding, this way there is always 2dp between the edges + recyclerViewTopPadding = dp(1); + recyclerView.setPadding(dp(1), recyclerViewTopPadding + toolbarHeight(), dp(1), dp(1)); recyclerView.setLayoutManager(gridLayoutManager); layoutManager = gridLayoutManager; @@ -317,7 +322,7 @@ public class ThreadListLayout extends FrameLayout implements ReplyLayout.ReplyLa case CARD: if (getTopAdapterPosition() == 0) { View top = layoutManager.findViewByPosition(0); - return top.getTop() != getDimen(getContext(), R.dimen.grid_card_margin) + dp(4) + toolbarHeight(); // 4dp for the cards, 4dp for this layout + return top.getTop() != getDimen(getContext(), R.dimen.grid_card_margin) + dp(1) + toolbarHeight(); } break; } diff --git a/Clover/app/src/main/res/layout/cell_post_card.xml b/Clover/app/src/main/res/layout/cell_post_card.xml index 2aba30e3..7fc379bd 100644 --- a/Clover/app/src/main/res/layout/cell_post_card.xml +++ b/Clover/app/src/main/res/layout/cell_post_card.xml @@ -22,12 +22,13 @@ along with this program. If not, see . android:layout_height="wrap_content" android:layout_margin="@dimen/grid_card_margin" card_view:cardBackgroundColor="?backcolor" - card_view:cardCornerRadius="2dp" - card_view:cardElevation="4dp"> + card_view:cardCornerRadius="@dimen/grid_card_corner_radius" + card_view:cardElevation="1dp"> - @@ -88,6 +89,6 @@ along with this program. If not, see . android:singleLine="true" android:textColor="?attr/text_color_secondary" /> - + diff --git a/Clover/app/src/main/res/values-sw600dp/dimens.xml b/Clover/app/src/main/res/values-sw600dp/dimens.xml index 455632f4..7030be44 100644 --- a/Clover/app/src/main/res/values-sw600dp/dimens.xml +++ b/Clover/app/src/main/res/values-sw600dp/dimens.xml @@ -19,7 +19,6 @@ along with this program. If not, see . true 105dp - 240dp 100dp diff --git a/Clover/app/src/main/res/values-v21/dimens.xml b/Clover/app/src/main/res/values-v21/dimens.xml index 3f81013b..92586836 100644 --- a/Clover/app/src/main/res/values-v21/dimens.xml +++ b/Clover/app/src/main/res/values-v21/dimens.xml @@ -16,5 +16,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . --> - 4dp + 0dp + 2dp diff --git a/Clover/app/src/main/res/values/dimens.xml b/Clover/app/src/main/res/values/dimens.xml index 559404fe..c05ad2c1 100644 --- a/Clover/app/src/main/res/values/dimens.xml +++ b/Clover/app/src/main/res/values/dimens.xml @@ -21,8 +21,8 @@ along with this program. If not, see . 56dp 120dp - 200dp 0dp + 0dp 72dp diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index c41c98ec..90439961 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -334,6 +334,9 @@ along with this program. If not, see . (default) Use condensed font Use a condensed font for the posts + Catalog mode columns + Auto + %1$d columns Ask before opening links Auto refresh threads Auto load images