From a0266479a021c749bbc263a8cfbed1bde6cba839 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 21 Jun 2022 11:10:06 -0500 Subject: [PATCH] Use radio buttons when there is no existing value --- .../java/com/cheogram/android/GridView.java | 38 +++++ .../eu/siacs/conversations/xmpp/Option.java | 41 +++++ .../res/layout/command_radio_edit_field.xml | 41 +++++ src/cheogram/res/layout/radio_grid_item.xml | 9 ++ .../conversations/entities/Conversation.java | 149 ++++++++++++++---- 5 files changed, 244 insertions(+), 34 deletions(-) create mode 100644 src/cheogram/java/com/cheogram/android/GridView.java create mode 100644 src/cheogram/java/eu/siacs/conversations/xmpp/Option.java create mode 100644 src/cheogram/res/layout/command_radio_edit_field.xml create mode 100644 src/cheogram/res/layout/radio_grid_item.xml diff --git a/src/cheogram/java/com/cheogram/android/GridView.java b/src/cheogram/java/com/cheogram/android/GridView.java new file mode 100644 index 0000000000000000000000000000000000000000..4301c958a66eee88bbc90032b76c61d0d3324278 --- /dev/null +++ b/src/cheogram/java/com/cheogram/android/GridView.java @@ -0,0 +1,38 @@ +package com.cheogram.android; + +import android.content.Context; +import android.util.AttributeSet; + +// https://blog.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/ +public class GridView extends android.widget.GridView { + public GridView(Context context) { + super(context); + } + + public GridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public GridView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int heightSpec; + + if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) { + // The great Android "hackatlon", the love, the magic. + // The two leftmost bits in the height measure spec have + // a special meaning, hence we can't use them to describe height. + heightSpec = MeasureSpec.makeMeasureSpec( + Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + } + else { + // Any other height should be respected as is. + heightSpec = heightMeasureSpec; + } + + super.onMeasure(widthMeasureSpec, heightSpec); + } +} diff --git a/src/cheogram/java/eu/siacs/conversations/xmpp/Option.java b/src/cheogram/java/eu/siacs/conversations/xmpp/Option.java new file mode 100644 index 0000000000000000000000000000000000000000..f882c0c7a3717b1026b01bde7ed6bbfc4b83a90e --- /dev/null +++ b/src/cheogram/java/eu/siacs/conversations/xmpp/Option.java @@ -0,0 +1,41 @@ +package eu.siacs.conversations.xmpp; + +import java.util.ArrayList; +import java.util.List; +import eu.siacs.conversations.xml.Element; + +public class Option { + protected final String value; + protected final String label; + + public static List