tweaks to barcode/tag reading (#494)
- deal with empty payment_id - use btc message as description - BarcodeData is final
This commit is contained in:
parent
94f87a5193
commit
7e9bf84640
|
@ -38,6 +38,7 @@ public class BarcodeData {
|
||||||
public static final String OA_BTC_ASSET = "btc";
|
public static final String OA_BTC_ASSET = "btc";
|
||||||
|
|
||||||
static final String BTC_SCHEME = "bitcoin:";
|
static final String BTC_SCHEME = "bitcoin:";
|
||||||
|
static final String BTC_DESCRIPTION = "message";
|
||||||
static final String BTC_AMOUNT = "amount";
|
static final String BTC_AMOUNT = "amount";
|
||||||
|
|
||||||
public enum Asset {
|
public enum Asset {
|
||||||
|
@ -50,28 +51,32 @@ public class BarcodeData {
|
||||||
OA_DNSSEC
|
OA_DNSSEC
|
||||||
}
|
}
|
||||||
|
|
||||||
public Asset asset = null;
|
final public Asset asset;
|
||||||
public String addressName = null;
|
final public String address;
|
||||||
public String address = null;
|
final public String addressName;
|
||||||
public String paymentId = null;
|
final public String paymentId;
|
||||||
public String amount = null;
|
final public String amount;
|
||||||
public String description = null;
|
final public String description;
|
||||||
public Security security = Security.NORMAL;
|
final public Security security;
|
||||||
|
|
||||||
public BarcodeData(String uri) {
|
|
||||||
this.asset = asset;
|
|
||||||
this.address = address;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BarcodeData(Asset asset, String address) {
|
public BarcodeData(Asset asset, String address) {
|
||||||
this.asset = asset;
|
this.asset = asset;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
|
amount = null;
|
||||||
|
paymentId = null;
|
||||||
|
addressName = null;
|
||||||
|
description = null;
|
||||||
|
this.security = Security.NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BarcodeData(Asset asset, String address, String amount) {
|
public BarcodeData(Asset asset, String address, String amount) {
|
||||||
this.asset = asset;
|
this.asset = asset;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
|
paymentId = null;
|
||||||
|
addressName = null;
|
||||||
|
description = null;
|
||||||
|
this.security = Security.NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BarcodeData(Asset asset, String address, String paymentId, String amount) {
|
public BarcodeData(Asset asset, String address, String paymentId, String amount) {
|
||||||
|
@ -79,6 +84,9 @@ public class BarcodeData {
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this.paymentId = paymentId;
|
this.paymentId = paymentId;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
|
addressName = null;
|
||||||
|
description = null;
|
||||||
|
this.security = Security.NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BarcodeData(Asset asset, String address, String paymentId, String description, String amount) {
|
public BarcodeData(Asset asset, String address, String paymentId, String description, String amount) {
|
||||||
|
@ -87,14 +95,18 @@ public class BarcodeData {
|
||||||
this.paymentId = paymentId;
|
this.paymentId = paymentId;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
|
addressName = null;
|
||||||
|
this.security = Security.NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAddressName(String name) {
|
public BarcodeData(Asset asset, String address, String addressName, String paymentId, String description, String amount, Security sec) {
|
||||||
addressName = name;
|
this.asset = asset;
|
||||||
}
|
this.address = address;
|
||||||
|
this.addressName = addressName;
|
||||||
public void setSecurity(Security security) {
|
this.paymentId = paymentId;
|
||||||
this.security = security;
|
this.description = description;
|
||||||
|
this.amount = amount;
|
||||||
|
this.security = sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uri getUri() {
|
public Uri getUri() {
|
||||||
|
@ -140,7 +152,7 @@ public class BarcodeData {
|
||||||
}
|
}
|
||||||
// check for OpenAlias
|
// check for OpenAlias
|
||||||
if (bcData == null) {
|
if (bcData == null) {
|
||||||
bcData = parseOpenAlias(qrCode);
|
bcData = parseOpenAlias(qrCode, false);
|
||||||
}
|
}
|
||||||
return bcData;
|
return bcData;
|
||||||
}
|
}
|
||||||
|
@ -175,7 +187,11 @@ public class BarcodeData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String address = monero.getPath();
|
String address = monero.getPath();
|
||||||
|
|
||||||
String paymentId = parms.get(XMR_PAYMENTID);
|
String paymentId = parms.get(XMR_PAYMENTID);
|
||||||
|
// deal with empty payment_id created by non-spec-conforming apps
|
||||||
|
if ((paymentId != null) && paymentId.isEmpty()) paymentId = null;
|
||||||
|
|
||||||
String description = parms.get(XMR_DESCRIPTION);
|
String description = parms.get(XMR_DESCRIPTION);
|
||||||
String amount = parms.get(XMR_AMOUNT);
|
String amount = parms.get(XMR_AMOUNT);
|
||||||
if (amount != null) {
|
if (amount != null) {
|
||||||
|
@ -235,6 +251,7 @@ public class BarcodeData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String address = bitcoin.getPath();
|
String address = bitcoin.getPath();
|
||||||
|
String description = parms.get(BTC_DESCRIPTION);
|
||||||
String amount = parms.get(BTC_AMOUNT);
|
String amount = parms.get(BTC_AMOUNT);
|
||||||
if (amount != null) {
|
if (amount != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -248,7 +265,7 @@ public class BarcodeData {
|
||||||
Timber.d("address invalid");
|
Timber.d("address invalid");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return new BarcodeData(BarcodeData.Asset.BTC, address, amount);
|
return new BarcodeData(BarcodeData.Asset.BTC, address, null, description, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static public BarcodeData parseBitcoinNaked(String address) {
|
static public BarcodeData parseBitcoinNaked(String address) {
|
||||||
|
@ -264,7 +281,7 @@ public class BarcodeData {
|
||||||
return new BarcodeData(BarcodeData.Asset.BTC, address);
|
return new BarcodeData(BarcodeData.Asset.BTC, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
static public BarcodeData parseOpenAlias(String oaString) {
|
static public BarcodeData parseOpenAlias(String oaString, boolean dnssec) {
|
||||||
Timber.d("parseOpenAlias=%s", oaString);
|
Timber.d("parseOpenAlias=%s", oaString);
|
||||||
if (oaString == null) return null;
|
if (oaString == null) return null;
|
||||||
|
|
||||||
|
@ -316,8 +333,8 @@ public class BarcodeData {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
BarcodeData bc = new BarcodeData(asset, address, paymentId, description, amount);
|
Security sec = dnssec ? BarcodeData.Security.OA_DNSSEC : BarcodeData.Security.OA_NO_DNSSEC;
|
||||||
bc.setAddressName(addressName);
|
|
||||||
return bc;
|
return new BarcodeData(asset, address, addressName, paymentId, description, amount, sec);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -140,9 +140,8 @@ public class OpenAliasHelper {
|
||||||
if (success) {
|
if (success) {
|
||||||
Map<BarcodeData.Asset, BarcodeData> dataMap = new HashMap<>();
|
Map<BarcodeData.Asset, BarcodeData> dataMap = new HashMap<>();
|
||||||
for (String txt : txts) {
|
for (String txt : txts) {
|
||||||
BarcodeData bc = BarcodeData.parseOpenAlias(txt);
|
BarcodeData bc = BarcodeData.parseOpenAlias(txt, dnssec);
|
||||||
if (bc != null) {
|
if (bc != null) {
|
||||||
bc.setSecurity(dnssec ? BarcodeData.Security.OA_DNSSEC : BarcodeData.Security.OA_NO_DNSSEC);
|
|
||||||
if (!dataMap.containsKey(bc.asset)) {
|
if (!dataMap.containsKey(bc.asset)) {
|
||||||
dataMap.put(bc.asset, bc);
|
dataMap.put(bc.asset, bc);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue