From 8f90a988534541300cdaadae6129077894da2256 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 26 Apr 2023 12:54:04 -0500 Subject: [PATCH] Phone number and date formatting for result forms --- .../conversations/entities/Conversation.java | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index e1a27074505ee0643cf2bc56d8e215248e01ae66..b6e20c4e9ae6c2d93b54884eb862e8e8015ad493 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -11,6 +11,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Rect; import android.net.Uri; +import android.telephony.PhoneNumberUtils; import android.text.Editable; import android.text.InputType; import android.text.SpannableStringBuilder; @@ -72,6 +73,12 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeParseException; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -1662,6 +1669,30 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl textinput.setInputType(flags | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); } } + + protected String formatValue(String datatype, String value, boolean compact) { + if ("xs:dateTime".equals(datatype)) { + ZonedDateTime zonedDateTime = null; + try { + zonedDateTime = ZonedDateTime.parse(value, DateTimeFormatter.ISO_DATE_TIME); + } catch (final DateTimeParseException e) { + try { + DateTimeFormatter almostIso = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm[:ss] X"); + zonedDateTime = ZonedDateTime.parse(value, almostIso); + } catch (final DateTimeParseException e2) { } + } + if (zonedDateTime == null) return value; + ZonedDateTime localZonedDateTime = zonedDateTime.withZoneSameInstant(ZoneId.systemDefault()); + DateTimeFormatter outputFormat = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT); + return localZonedDateTime.toLocalDateTime().format(outputFormat); + } + + if ("html:tel".equals(datatype) && !compact) { + return PhoneNumberUtils.formatNumber(value, value, null); + } + + return value; + } } class ErrorViewHolder extends ViewHolder { @@ -1704,22 +1735,25 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl setTextOrHide(binding.label, field.getLabel()); setTextOrHide(binding.desc, field.getDesc()); - ArrayAdapter values = new ArrayAdapter(binding.getRoot().getContext(), R.layout.simple_list_item); + Element validate = field.el.findChild("validate", "http://jabber.org/protocol/xdata-validate"); + String datatype = validate == null ? null : validate.getAttribute("datatype"); + + ArrayAdapter