From 104896ae1b89b11dd7fd66a39ffdb1f23a0b73ae Mon Sep 17 00:00:00 2001 From: Grishka Date: Mon, 15 Apr 2024 20:05:12 +0300 Subject: [PATCH] Custom layout for suggested amount buttons --- mastodon/build.gradle | 2 +- .../android/ui/sheets/DonationSheet.java | 68 +++++++++++++++++-- .../src/main/res/layout/sheet_donation.xml | 3 +- 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/mastodon/build.gradle b/mastodon/build.gradle index c7148d80..3dbf0d6c 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -13,7 +13,7 @@ android { applicationId "org.joinmastodon.android" minSdk 23 targetSdk 33 - versionCode 94 + versionCode 95 versionName "2.5.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/DonationSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/DonationSheet.java index 4fa4ab52..f14140cd 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/DonationSheet.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/sheets/DonationSheet.java @@ -5,6 +5,7 @@ import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; +import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -24,6 +25,7 @@ import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.views.CurrencyAmountInput; import java.text.NumberFormat; +import java.util.Arrays; import java.util.Currency; import java.util.List; import java.util.Locale; @@ -31,6 +33,7 @@ import java.util.stream.Collectors; import androidx.annotation.NonNull; import me.grishka.appkit.Nav; +import me.grishka.appkit.utils.CustomViewHelper; import me.grishka.appkit.utils.V; import me.grishka.appkit.views.BottomSheet; @@ -128,7 +131,7 @@ public class DonationSheet extends BottomSheet{ button=findViewById(R.id.button); buttonText=findViewById(R.id.button_text); - LinearLayout suggestedAmounts=findViewById(R.id.suggested_amounts); + ViewGroup suggestedAmounts=findViewById(R.id.suggested_amounts); for(int i=0;iopenWebView()); + + Arrays.stream(getCurrentSuggestedAmounts(campaign.defaultCurrency)).min().ifPresent(amountField::setAmount); } @Override @@ -285,4 +288,61 @@ public class DonationSheet extends BottomSheet{ MONTHLY, YEARLY } + + public static class SuggestedAmountsLayout extends ViewGroup implements CustomViewHelper{ + private int visibleChildCount; + private static final int H_GAP=24; + private static final int V_GAP=8; + private static final int ROW_HEIGHT=32; + + public SuggestedAmountsLayout(Context context){ + this(context, null); + } + + public SuggestedAmountsLayout(Context context, AttributeSet attrs){ + this(context, attrs, 0); + } + + public SuggestedAmountsLayout(Context context, AttributeSet attrs, int defStyle){ + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ + visibleChildCount=0; + for(int i=0;i4 ? dp(ROW_HEIGHT*2+V_GAP) : dp(ROW_HEIGHT)); + int buttonsPerRow=visibleChildCount>4 ? 3 : visibleChildCount; + int buttonWidth=(width-dp(H_GAP)*(buttonsPerRow-1))/buttonsPerRow; + for(int i=0;i4 ? 3 : visibleChildCount; + int buttonWidth=(width-dp(H_GAP)*(buttonsPerRow-1))/buttonsPerRow; + for(int i=0;i -