Detailed changes
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:viewportHeight="64"
+ android:viewportWidth="64" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"
+ android:tint="?attr/colorControlNormal">
@@ -1429,7 +1429,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
public synchronized Uri wholeIsKnownURI() {
if (wholeIsKnownURI != null) return wholeIsKnownURI;
- if (Patterns.BITCOIN_URI.matcher(body).matches() ||Patterns.BITCOINCASH_URI.matcher(body).matches() || Patterns.MONERO_URI.matcher(body).matches()) {
+ if (Patterns.BITCOIN_URI.matcher(body).matches() ||Patterns.BITCOINCASH_URI.matcher(body).matches() || Patterns.MONERO_URI.matcher(body).matches() || Patterns.WOWNERO_URI.matcher(body).matches()) {
wholeIsKnownURI = Uri.parse(body.replace(":", "://")); // hack to make query parser work
}
@@ -831,6 +831,10 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
binding.command.setText(uri.getSchemeSpecificPart());
binding.command.setCompoundDrawablesRelativeWithIntrinsicBounds(getDrawable(R.drawable.monero_24dp), null, null, null);
binding.command.setCompoundDrawablePadding(20);
+ } else if (uri.getScheme().equals("wownero")) {
+ binding.command.setText(uri.getSchemeSpecificPart());
+ binding.command.setCompoundDrawablesRelativeWithIntrinsicBounds(getDrawable(R.drawable.wownero_24dp), null, null, null);
+ binding.command.setCompoundDrawablePadding(20);
} else if (uri.getScheme().equals("https") && "liberapay.com".equals(uri.getHost())) {
binding.command.setText(uri.getPath().substring(1));
binding.command.setCompoundDrawablesRelativeWithIntrinsicBounds(getDrawable(R.drawable.liberapay), null, null, null);
@@ -948,6 +948,11 @@ public class MessageAdapter extends ArrayAdapter<Message> {
final var formattedAmount = amount == null || amount.equals("") ? "" : amount + " ";
viewHolder.download_button.setIconResource(R.drawable.monero_24dp);
viewHolder.download_button.setText("Send " + formattedAmount + "Monero");
+ } else if ("wownero".equals(uri.getScheme())) {
+ final var amount = uri.getQueryParameter("tx_amount");
+ final var formattedAmount = amount == null || amount.equals("") ? "" : amount + " ";
+ viewHolder.download_button.setIconResource(R.drawable.wownero_24dp);
+ viewHolder.download_button.setText("Send " + formattedAmount + "Wownero");
}
viewHolder.download_button.setOnClickListener(v -> new FixedURLSpan(message.getRawBody()).onClick(v));
}
@@ -135,6 +135,7 @@ public class MyLinkify {
Linkify.addLinks(body, Patterns.BITCOIN_URI, "bitcoin");
Linkify.addLinks(body, Patterns.BITCOINCASH_URI, "bitcoincash");
Linkify.addLinks(body, Patterns.MONERO_URI, "monero");
+ Linkify.addLinks(body, Patterns.WOWNERO_URI, "wownero");
Linkify.addLinks(body, Patterns.AUTOLINK_WEB_URL, "http", WEBURL_MATCH_FILTER, WEBURL_TRANSFORM_FILTER);
if (includeGeo) {
Linkify.addLinks(body, GeoHelper.GEO_URI, "geo");
@@ -51,6 +51,12 @@ public class Patterns {
+ "\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])"
+ "|(?:\\%[a-fA-F0-9]{2}))+)?");
+ public static final Pattern WOWNERO_URI = Pattern
+ .compile("wownero\\:(?:W(?:[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{96}|[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{106}|[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{187}))(?:\\?(?:(?:["
+ + Patterns.GOOD_IRI_CHAR
+ + "\\;\\/\\?\\@\\&\\=\\#\\~\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])"
+ + "|(?:\\%[a-fA-F0-9]{2}))+)?");
+
/**
* Regular expression to match all IANA top-level domains.
* List accurate as of 2011/07/18. List taken from: