summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2023-01-27 19:01:20 +0100
committerGitHub <noreply@github.com>2023-01-27 19:01:20 +0100
commit6e7d1f1994a6db266791cafa6a149dfbce8d42fd (patch)
tree696a238084d26df6cc56e068dfb28603246e086f /app
parent98107419e0baf52da18c80af8b450e922e18ef31 (diff)
downloadAntennaPod-6e7d1f1994a6db266791cafa6a149dfbce8d42fd.zip
Work around Android's AlertDialog pushing out buttons when content gets large (#6282)
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/FeedRefreshIntervalDialog.java21
-rw-r--r--app/src/main/res/layout/scrollable_dialog.xml37
2 files changed, 51 insertions, 7 deletions
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<String> 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <ScrollView
+ android:id="@+id/content"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="end"
+ android:orientation="horizontal"
+ android:paddingHorizontal="32dp"
+ android:paddingVertical="16dp"
+ style="?android:attr/buttonBarStyle">
+
+ <Button
+ android:id="@+id/negativeButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ <Button
+ android:id="@+id/positiveButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle" />
+
+ </LinearLayout>
+
+</LinearLayout>