mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-23 03:59:23 +00:00
CAKE-192 | parse_address_from_domain.dart fixed and split on 2 files (current and parse_address_from_domain_alert.dart), then moved to the entities directory; used one channel for native calls; removed unneeded spaces; fixed handle of unstoppable domain error in the MainActivity.java
This commit is contained in:
parent
bb219e4da2
commit
f995342491
8 changed files with 97 additions and 100 deletions
|
@ -21,7 +21,6 @@ import java.security.SecureRandom;
|
||||||
|
|
||||||
public class MainActivity extends FlutterFragmentActivity {
|
public class MainActivity extends FlutterFragmentActivity {
|
||||||
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
|
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
|
||||||
final String UNSTOPPABLE_DOMAIN_CHANNEL = "com.cakewallet.cake_wallet/unstoppable-domain";
|
|
||||||
final int UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK = 24;
|
final int UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK = 24;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,12 +32,6 @@ public class MainActivity extends FlutterFragmentActivity {
|
||||||
UTILS_CHANNEL);
|
UTILS_CHANNEL);
|
||||||
|
|
||||||
utilsChannel.setMethodCallHandler(this::handle);
|
utilsChannel.setMethodCallHandler(this::handle);
|
||||||
|
|
||||||
MethodChannel unstoppableDomainChannel =
|
|
||||||
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(),
|
|
||||||
UNSTOPPABLE_DOMAIN_CHANNEL);
|
|
||||||
|
|
||||||
unstoppableDomainChannel.setMethodCallHandler(this::handle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handle(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
|
private void handle(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
|
||||||
|
@ -80,7 +73,8 @@ public class MainActivity extends FlutterFragmentActivity {
|
||||||
String address = resolution.getAddress(domain, ticker);
|
String address = resolution.getAddress(domain, ticker);
|
||||||
handler.post(() -> result.success(address));
|
handler.post(() -> result.success(address));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
handler.post(() -> result.error("INVALID DOMAIN", e.getMessage(), null));
|
System.out.println("Expected Address, but got " + e.getMessage());
|
||||||
|
handler.post(() -> result.success(""));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,24 +75,11 @@ import UnstoppableDomainsResolution
|
||||||
}
|
}
|
||||||
|
|
||||||
result(secRandom(count: count))
|
result(secRandom(count: count))
|
||||||
default:
|
|
||||||
result(FlutterMethodNotImplemented)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
let unstoppableDomainChannel = FlutterMethodChannel(name: "com.cakewallet.cake_wallet/unstoppable-domain", binaryMessenger: controller.binaryMessenger)
|
|
||||||
unstoppableDomainChannel.setMethodCallHandler({ [weak self]
|
|
||||||
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
|
|
||||||
switch call.method {
|
|
||||||
case "getUnstoppableDomainAddress":
|
case "getUnstoppableDomainAddress":
|
||||||
guard let args = call.arguments as? Dictionary<String, String>,
|
guard let args = call.arguments as? Dictionary<String, String>,
|
||||||
let domain = args["domain"],
|
let domain = args["domain"],
|
||||||
let ticker = args["ticker"] else {
|
let ticker = args["ticker"],
|
||||||
result(nil)
|
let resolution = self?.resolution else {
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let resolution = self?.resolution else {
|
|
||||||
result(nil)
|
result(nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
52
lib/entities/parse_address_from_domain.dart
Normal file
52
lib/entities/parse_address_from_domain.dart
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import 'package:cake_wallet/entities/openalias_record.dart';
|
||||||
|
import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
|
||||||
|
import 'package:cake_wallet/src/screens/send/widgets/parse_address_from_domain_alert.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
|
||||||
|
const topLevelDomain = 'crypto';
|
||||||
|
|
||||||
|
Future<String> parseAddressFromDomain(
|
||||||
|
BuildContext context, String domain, String ticker) async {
|
||||||
|
try {
|
||||||
|
final domainParts = domain.split('.');
|
||||||
|
final name = domainParts.last;
|
||||||
|
|
||||||
|
if (domainParts.length <= 1 || domainParts.first.isEmpty || name.isEmpty) {
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name.contains(topLevelDomain)) {
|
||||||
|
final address = await fetchUnstoppableDomainAddress(domain, ticker);
|
||||||
|
|
||||||
|
if (address?.isEmpty ?? true) {
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
showAddressAlert(
|
||||||
|
context,
|
||||||
|
S.of(context).address_detected,
|
||||||
|
S.of(context).address_from_domain(domain));
|
||||||
|
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
final record = await OpenaliasRecord.fetchAddressAndName(
|
||||||
|
OpenaliasRecord.formatDomainName(domain));
|
||||||
|
|
||||||
|
if (record == null || record.address.contains(domain)) {
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
showAddressAlert(
|
||||||
|
context,
|
||||||
|
S.of(context).openalias_alert_title,
|
||||||
|
S.of(context).openalias_alert_content(domain));
|
||||||
|
|
||||||
|
return record.address;
|
||||||
|
} catch (e) {
|
||||||
|
print(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return domain;
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
const channel = MethodChannel('com.cakewallet.cake_wallet/unstoppable-domain');
|
const channel = MethodChannel('com.cake_wallet/native_utils');
|
||||||
|
|
||||||
Future<String> fetchUnstoppableDomainAddress(String domain, String ticker) async {
|
Future<String> fetchUnstoppableDomainAddress(String domain, String ticker) async {
|
||||||
String address;
|
var address = '';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
address = await channel.invokeMethod(
|
address = await channel.invokeMethod(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:cake_wallet/entities/sync_status.dart';
|
import 'package:cake_wallet/entities/sync_status.dart';
|
||||||
import 'package:cake_wallet/entities/wallet_type.dart';
|
import 'package:cake_wallet/entities/wallet_type.dart';
|
||||||
import 'package:cake_wallet/src/screens/send/parse_address_from_domain.dart';
|
import 'package:cake_wallet/entities/parse_address_from_domain.dart';
|
||||||
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
|
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
|
||||||
import 'package:dotted_border/dotted_border.dart';
|
import 'package:dotted_border/dotted_border.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
import 'package:cake_wallet/entities/openalias_record.dart';
|
|
||||||
import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
|
|
||||||
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
|
||||||
import 'package:cake_wallet/utils/show_pop_up.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
|
||||||
|
|
||||||
const topLevelDomain = 'crypto';
|
|
||||||
|
|
||||||
Future<String> parseAddressFromDomain(
|
|
||||||
BuildContext context, String domain, String ticker) async {
|
|
||||||
try {
|
|
||||||
final name = domain.split('.').last;
|
|
||||||
|
|
||||||
if (name.contains(topLevelDomain)) {
|
|
||||||
final address = await fetchUnstoppableDomainAddress(domain, ticker);
|
|
||||||
if (address.isNotEmpty) {
|
|
||||||
showAddressAlert(
|
|
||||||
context,
|
|
||||||
S.of(context).address_detected,
|
|
||||||
S.of(context).address_from_domain(domain));
|
|
||||||
return address;
|
|
||||||
}
|
|
||||||
} else if (name.isNotEmpty) {
|
|
||||||
final record = await OpenaliasRecord.fetchAddressAndName(
|
|
||||||
OpenaliasRecord.formatDomainName(domain));
|
|
||||||
if (record.name != null && record.name != domain) {
|
|
||||||
showAddressAlert(
|
|
||||||
context,
|
|
||||||
S.of(context).openalias_alert_title,
|
|
||||||
S.of(context).openalias_alert_content(domain));
|
|
||||||
return record.address;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
print(e.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
void showAddressAlert(BuildContext context, String title, String content) async {
|
|
||||||
await showPopUp<void>(
|
|
||||||
context: context,
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
|
|
||||||
return AlertWithOneAction(
|
|
||||||
alertTitle: title,
|
|
||||||
alertContent: content,
|
|
||||||
buttonText: S.of(context).ok,
|
|
||||||
buttonAction: () => Navigator.of(context).pop());
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:cake_wallet/entities/transaction_priority.dart';
|
import 'package:cake_wallet/entities/transaction_priority.dart';
|
||||||
import 'package:cake_wallet/src/screens/send/parse_address_from_domain.dart';
|
import 'package:cake_wallet/entities/parse_address_from_domain.dart';
|
||||||
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
|
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
|
||||||
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
|
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
|
||||||
import 'package:cake_wallet/src/widgets/picker.dart';
|
import 'package:cake_wallet/src/widgets/picker.dart';
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
||||||
|
import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
|
||||||
|
void showAddressAlert(BuildContext context, String title, String content) async {
|
||||||
|
await showPopUp<void>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
|
||||||
|
return AlertWithOneAction(
|
||||||
|
alertTitle: title,
|
||||||
|
alertContent: content,
|
||||||
|
buttonText: S.of(context).ok,
|
||||||
|
buttonAction: () => Navigator.of(context).pop());
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue