summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-06-21 12:49:02 +0200
committerByteHamster <info@bytehamster.com>2020-06-21 13:17:36 +0200
commit7de9e0d4c1807bff054c1aef999fc600088ab521 (patch)
treec22e722c152aa5b95955391e41c681bff6cc8ca1 /app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java
parentf243bcd4cce1f3af9449c74fa38f6c90f2ea9d22 (diff)
downloadAntennaPod-7de9e0d4c1807bff054c1aef999fc600088ab521.zip
Using state lists for colors
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java68
1 files changed, 68 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java b/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java
new file mode 100644
index 000000000..162f524bf
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/view/RecursiveRadioGroup.java
@@ -0,0 +1,68 @@
+package de.danoeh.antennapod.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.ActionMode;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import java.util.ArrayList;
+
+/**
+ * An alternative to {@link android.widget.RadioGroup} that allows to nest children.
+ * Basend on https://stackoverflow.com/a/14309274.
+ */
+public class RecursiveRadioGroup extends LinearLayout {
+ private final ArrayList<RadioButton> radioButtons = new ArrayList<>();
+ private RadioButton checkedButton = null;
+
+ public RecursiveRadioGroup(Context context) {
+ super(context);
+ }
+
+ public RecursiveRadioGroup(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public RecursiveRadioGroup(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ public void addView(View child, int index, ViewGroup.LayoutParams params) {
+ super.addView(child, index, params);
+ parseChild(child);
+ }
+
+ public void parseChild(final View child) {
+ if (child instanceof RadioButton) {
+ RadioButton button = (RadioButton) child;
+ radioButtons.add(button);
+ button.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ if (!isChecked) {
+ return;
+ }
+ checkedButton = (RadioButton) buttonView;
+
+ for (RadioButton view : radioButtons) {
+ if (view != buttonView) {
+ view.setChecked(false);
+ }
+ }
+ });
+ } else if (child instanceof ViewGroup) {
+ parseChildren((ViewGroup) child);
+ }
+ }
+
+ public void parseChildren(final ViewGroup child) {
+ for (int i = 0; i < child.getChildCount(); i++) {
+ parseChild(child.getChildAt(i));
+ }
+ }
+
+ public RadioButton getCheckedButton() {
+ return checkedButton;
+ }
+}