From 6e7d1f1994a6db266791cafa6a149dfbce8d42fd Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 27 Jan 2023 19:01:20 +0100 Subject: Work around Android's AlertDialog pushing out buttons when content gets large (#6282) --- .../dialog/FeedRefreshIntervalDialog.java | 21 ++++++++---- app/src/main/res/layout/scrollable_dialog.xml | 37 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/scrollable_dialog.xml (limited to 'app/src/main') diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/FeedRefreshIntervalDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FeedRefreshIntervalDialog.java index 722435f48..3d92fd979 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/FeedRefreshIntervalDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/FeedRefreshIntervalDialog.java @@ -7,14 +7,15 @@ import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.widget.ArrayAdapter; +import androidx.appcompat.app.AlertDialog; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.storage.preferences.UserPreferences; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; import de.danoeh.antennapod.databinding.FeedRefreshDialogBinding; -import org.apache.commons.lang3.ArrayUtils; - +import de.danoeh.antennapod.databinding.ScrollableDialogBinding; +import de.danoeh.antennapod.storage.preferences.UserPreferences; import java.util.concurrent.TimeUnit; +import org.apache.commons.lang3.ArrayUtils; public class FeedRefreshIntervalDialog { private static final int[] INTERVAL_VALUES_HOURS = {1, 2, 4, 8, 12, 24, 72}; @@ -29,8 +30,10 @@ public class FeedRefreshIntervalDialog { MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context); builder.setTitle(R.string.feed_refresh_title); builder.setMessage(R.string.feed_refresh_sum); + ScrollableDialogBinding scrollableDialogBinding = ScrollableDialogBinding.inflate(LayoutInflater.from(context)); + builder.setView(scrollableDialogBinding.getRoot()); viewBinding = FeedRefreshDialogBinding.inflate(LayoutInflater.from(context)); - builder.setView(viewBinding.getRoot()); + scrollableDialogBinding.content.addView(viewBinding.getRoot()); ArrayAdapter spinnerArrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, buildSpinnerEntries()); @@ -68,7 +71,11 @@ public class FeedRefreshIntervalDialog { viewBinding.radioGroup.setOnCheckedChangeListener((radioGroup, i) -> updateVisibility()); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { + AlertDialog dialog = builder.show(); + + scrollableDialogBinding.positiveButton.setText(R.string.confirm_label); + scrollableDialogBinding.positiveButton.setOnClickListener(v -> { + dialog.dismiss(); if (viewBinding.intervalRadioButton.isChecked()) { UserPreferences.setUpdateInterval(INTERVAL_VALUES_HOURS[viewBinding.spinner.getSelectedItemPosition()]); AutoUpdateManager.restartUpdateAlarm(context); @@ -89,8 +96,8 @@ public class FeedRefreshIntervalDialog { } }); - builder.setNegativeButton(R.string.cancel_label, null); - builder.show(); + scrollableDialogBinding.negativeButton.setText(R.string.cancel_label); + scrollableDialogBinding.negativeButton.setOnClickListener((v) -> dialog.dismiss()); } private String[] buildSpinnerEntries() { diff --git a/app/src/main/res/layout/scrollable_dialog.xml b/app/src/main/res/layout/scrollable_dialog.xml new file mode 100644 index 000000000..29b84ee4b --- /dev/null +++ b/app/src/main/res/layout/scrollable_dialog.xml @@ -0,0 +1,37 @@ + + + + + + + +