diff --git a/.gitignore b/.gitignore
index db43e964a..0580d006c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -96,3 +96,5 @@ vendor/
android/app/.cxx/**
ios/Flutter/.last_build_id
/lib/generated/**
+#**#
+/**/#**#
\ No newline at end of file
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 52f1e3224..d74761d26 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -25,7 +25,6 @@ linter:
- empty_constructor_bodies
- empty_statements
- hash_and_equals
- - implementation_imports
- invariant_booleans
- iterable_contains_unrelated_type
- library_names
diff --git a/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java b/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java
index cf650375f..26cc56187 100644
--- a/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java
+++ b/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java
@@ -1,15 +1,49 @@
package com.cakewallet.cake_wallet;
import androidx.annotation.NonNull;
+
import io.flutter.embedding.android.FlutterFragmentActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Looper;
+
+import java.security.SecureRandom;
public class MainActivity extends FlutterFragmentActivity {
+ final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
+
+ MethodChannel utilsChannel =
+ new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(),
+ UTILS_CHANNEL);
+
+ utilsChannel.setMethodCallHandler(this::handle);
+ }
+
+ private void handle(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
+ Handler handler = new Handler(Looper.getMainLooper());
+
+ try {
+ if (call.method.equals("sec_random")) {
+ int count = call.argument("count");
+ SecureRandom random = new SecureRandom();
+ byte bytes[] = new byte[count];
+ random.nextBytes(bytes);
+ handler.post(() -> result.success(bytes));
+ } else {
+ handler.post(() -> result.notImplemented());
+ }
+ } catch (Exception e) {
+ handler.post(() -> result.error("UNCAUGHT_ERROR", e.getMessage(), null));
+ }
}
}
diff --git a/android/app/src/main/kotlin/com/cakewallet/cake_wallet/MainActivity.kt b/android/app/src/main/kotlin/com/cakewallet/cake_wallet/MainActivity.kt
deleted file mode 100644
index b5c933268..000000000
--- a/android/app/src/main/kotlin/com/cakewallet/cake_wallet/MainActivity.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.cakewallet.cake_wallet
-
-import androidx.annotation.NonNull;
-import io.flutter.embedding.android.FlutterActivity
-import io.flutter.embedding.android.FlutterFragmentActivity
-import io.flutter.embedding.engine.FlutterEngine
-import io.flutter.plugins.GeneratedPluginRegistrant
-
-class MainActivity: FlutterActivity() {
- override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine){
- GeneratedPluginRegistrant.registerWith(flutterEngine);
- }
-}
diff --git a/android/app/src/main/res/drawable/ic_launcher.png b/android/app/src/main/res/drawable/ic_launcher.png
new file mode 100755
index 000000000..a96724f1c
Binary files /dev/null and b/android/app/src/main/res/drawable/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 000000000..b2c4ad887
--- /dev/null
+++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 5d9200d0a..b11806d56 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
index 83a98b56d..b76508e83 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index c8cbe84dd..1d32c2836 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index c4352f579..d5b7374a7 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 73fe04234..af40ea947 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/assets/electrum_server_list.yml b/assets/bitcoin_electrum_server_list.yml
similarity index 100%
rename from assets/electrum_server_list.yml
rename to assets/bitcoin_electrum_server_list.yml
diff --git a/assets/images/2.0x/cake_logo.png b/assets/images/2.0x/cake_logo.png
index c464cdcd4..277816813 100644
Binary files a/assets/images/2.0x/cake_logo.png and b/assets/images/2.0x/cake_logo.png differ
diff --git a/assets/images/3.0x/cake_logo.png b/assets/images/3.0x/cake_logo.png
index 5da47a539..87dd05ce2 100644
Binary files a/assets/images/3.0x/cake_logo.png and b/assets/images/3.0x/cake_logo.png differ
diff --git a/assets/images/app_logo.png b/assets/images/app_logo.png
index 4540659cf..bf6896ad2 100644
Binary files a/assets/images/app_logo.png and b/assets/images/app_logo.png differ
diff --git a/assets/images/cake_logo.png b/assets/images/cake_logo.png
index fb5267a79..8a85bf225 100644
Binary files a/assets/images/cake_logo.png and b/assets/images/cake_logo.png differ
diff --git a/assets/images/litecoin_icon.png b/assets/images/litecoin_icon.png
new file mode 100644
index 000000000..9cc47b6fb
Binary files /dev/null and b/assets/images/litecoin_icon.png differ
diff --git a/assets/images/litecoin_menu.png b/assets/images/litecoin_menu.png
new file mode 100644
index 000000000..d39aff717
Binary files /dev/null and b/assets/images/litecoin_menu.png differ
diff --git a/assets/images/monero_menu.png b/assets/images/monero_menu.png
index 2bb420a80..51b1e2240 100644
Binary files a/assets/images/monero_menu.png and b/assets/images/monero_menu.png differ
diff --git a/assets/litecoin_electrum_server_list.yml b/assets/litecoin_electrum_server_list.yml
new file mode 100644
index 000000000..e61d0996c
--- /dev/null
+++ b/assets/litecoin_electrum_server_list.yml
@@ -0,0 +1,2 @@
+-
+ uri: ltc-electrum.cakewallet.com:50002
\ No newline at end of file
diff --git a/cw_monero/ios/Classes/monero_api.cpp b/cw_monero/ios/Classes/monero_api.cpp
index d0313a194..dd1ab3cbb 100644
--- a/cw_monero/ios/Classes/monero_api.cpp
+++ b/cw_monero/ios/Classes/monero_api.cpp
@@ -179,8 +179,6 @@ extern "C"
Monero::SubaddressAccount *m_account;
uint64_t m_last_known_wallet_height;
uint64_t m_cached_syncing_blockchain_height = 0;
- std::mutex store_mutex;
-
void change_current_wallet(Monero::Wallet *wallet)
{
@@ -451,9 +449,7 @@ extern "C"
void store(char *path)
{
- store_mutex.lock();
get_current_wallet()->store(std::string(path));
- store_mutex.unlock();
}
bool transaction_create(char *address, char *payment_id, char *amount,
diff --git a/cw_monero/ios/cw_monero.podspec b/cw_monero/ios/cw_monero.podspec
index 78416a9e7..ad8a94d04 100644
--- a/cw_monero/ios/cw_monero.podspec
+++ b/cw_monero/ios/cw_monero.podspec
@@ -5,20 +5,18 @@
Pod::Spec.new do |s|
s.name = 'cw_monero'
s.version = '0.0.2'
- s.summary = 'A new flutter plugin project.'
- s.description = <<-DESC
-A new flutter plugin project.
- DESC
- s.homepage = 'http://example.com'
+ s.summary = 'CW Monero'
+ s.description = 'Cake Wallet wrapper over Monero project.'
+ s.homepage = 'http://cakewallet.com'
s.license = { :file => '../LICENSE' }
- s.author = { 'Your Company' => 'email@example.com' }
+ s.author = { 'CakeWallet' => 'support@cakewallet.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h, Classes/*.h, External/ios/libs/monero/include/src/**/*.h, External/ios/libs/monero/include/contrib/**/*.h, External/ios/libs/monero/include/External/ios/**/*.h'
s.dependency 'Flutter'
s.platform = :ios, '9.0'
s.swift_version = '4.0'
- s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'arm64' }
+ s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/Classes/*.h" }
s.subspec 'OpenSSL' do |openssl|
@@ -53,4 +51,4 @@ A new flutter plugin project.
lmdb.vendored_libraries = 'External/ios/libs/lmdb/liblmdb.a'
lmdb.libraries = 'lmdb'
end
-end
\ No newline at end of file
+end
diff --git a/cw_monero/lib/account_list.dart b/cw_monero/lib/account_list.dart
index 6e84f5931..79342cf3b 100644
--- a/cw_monero/lib/account_list.dart
+++ b/cw_monero/lib/account_list.dart
@@ -5,6 +5,7 @@ import 'package:cw_monero/types.dart';
import 'package:cw_monero/monero_api.dart';
import 'package:cw_monero/structs/account_row.dart';
import 'package:flutter/foundation.dart';
+import 'package:cw_monero/wallet.dart';
final accountSizeNative = moneroApi
.lookup>('account_size')
@@ -70,8 +71,13 @@ void _setLabelForAccount(Map args) {
setLabelForAccountSync(label: label, accountIndex: accountIndex);
}
-Future addAccount({String label}) async => compute(_addAccount, label);
+Future addAccount({String label}) async {
+ await compute(_addAccount, label);
+ await store();
+}
-Future setLabelForAccount({int accountIndex, String label}) async =>
- compute(
- _setLabelForAccount, {'accountIndex': accountIndex, 'label': label});
\ No newline at end of file
+Future setLabelForAccount({int accountIndex, String label}) async {
+ await compute(
+ _setLabelForAccount, {'accountIndex': accountIndex, 'label': label});
+ await store();
+}
\ No newline at end of file
diff --git a/cw_monero/lib/subaddress_list.dart b/cw_monero/lib/subaddress_list.dart
index 97a307040..caa0fffd3 100644
--- a/cw_monero/lib/subaddress_list.dart
+++ b/cw_monero/lib/subaddress_list.dart
@@ -5,6 +5,7 @@ import 'package:cw_monero/signatures.dart';
import 'package:cw_monero/types.dart';
import 'package:cw_monero/monero_api.dart';
import 'package:cw_monero/structs/subaddress_row.dart';
+import 'package:cw_monero/wallet.dart';
final subaddressSizeNative = moneroApi
.lookup>('subaddrress_size')
@@ -79,14 +80,18 @@ void _setLabelForSubaddress(Map args) {
accountIndex: accountIndex, addressIndex: addressIndex, label: label);
}
-Future addSubaddress({int accountIndex, String label}) async =>
- compute