mirror of
https://codeberg.org/r4v3r23/mysu.git
synced 2024-11-30 01:23:16 +00:00
Fix ANR issue when syncing over Tor
This commit is contained in:
parent
0864b15c69
commit
a2b7e27e8b
8 changed files with 38 additions and 24 deletions
|
@ -709,13 +709,16 @@ Java_com_m2049r_xmrwallet_model_Wallet_initJ(JNIEnv *env, jobject instance,
|
||||||
const char *_daemon_address = env->GetStringUTFChars(daemon_address, nullptr);
|
const char *_daemon_address = env->GetStringUTFChars(daemon_address, nullptr);
|
||||||
const char *_daemon_username = env->GetStringUTFChars(daemon_username, nullptr);
|
const char *_daemon_username = env->GetStringUTFChars(daemon_username, nullptr);
|
||||||
const char *_daemon_password = env->GetStringUTFChars(daemon_password, nullptr);
|
const char *_daemon_password = env->GetStringUTFChars(daemon_password, nullptr);
|
||||||
|
const char *_daemon_proxy = env->GetStringUTFChars(proxy, nullptr);
|
||||||
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
|
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
|
||||||
bool status = wallet->init(_daemon_address, (uint64_t) upper_transaction_size_limit,
|
bool status = wallet->init(_daemon_address, (uint64_t) upper_transaction_size_limit,
|
||||||
_daemon_username,
|
_daemon_username,
|
||||||
_daemon_password, false, false, "127.0.0.1:9050");
|
_daemon_password, false, false, _daemon_proxy);
|
||||||
env->ReleaseStringUTFChars(daemon_address, _daemon_address);
|
env->ReleaseStringUTFChars(daemon_address, _daemon_address);
|
||||||
env->ReleaseStringUTFChars(daemon_username, _daemon_username);
|
env->ReleaseStringUTFChars(daemon_username, _daemon_username);
|
||||||
env->ReleaseStringUTFChars(daemon_password, _daemon_password);
|
env->ReleaseStringUTFChars(daemon_password, _daemon_password);
|
||||||
|
env->ReleaseStringUTFChars(proxy, _daemon_proxy);
|
||||||
|
|
||||||
return static_cast<jboolean>(status);
|
return static_cast<jboolean>(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class MainActivity extends AppCompatActivity implements MoneroHandlerThre
|
||||||
|
|
||||||
public void init(File walletFile, String password) {
|
public void init(File walletFile, String password) {
|
||||||
Wallet wallet = WalletManager.getInstance().openWallet(walletFile.getAbsolutePath(), password);
|
Wallet wallet = WalletManager.getInstance().openWallet(walletFile.getAbsolutePath(), password);
|
||||||
thread = new MoneroHandlerThread("WalletService", wallet, this);
|
thread = new MoneroHandlerThread("WalletService", this, wallet);
|
||||||
this.txService = new TxService(this, thread);
|
this.txService = new TxService(this, thread);
|
||||||
this.balanceService = new BalanceService(this, thread);
|
this.balanceService = new BalanceService(this, thread);
|
||||||
this.addressService = new AddressService(this, thread);
|
this.addressService = new AddressService(this, thread);
|
||||||
|
@ -84,7 +84,6 @@ public class MainActivity extends AppCompatActivity implements MoneroHandlerThre
|
||||||
public void onRefresh() {
|
public void onRefresh() {
|
||||||
this.historyService.refreshHistory();
|
this.historyService.refreshHistory();
|
||||||
this.balanceService.refreshBalance();
|
this.balanceService.refreshBalance();
|
||||||
this.addressService.refreshAddress();
|
|
||||||
this.blockchainService.refreshBlockchain();
|
this.blockchainService.refreshBlockchain();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,14 +39,10 @@ public class ReceiveBottomSheetDialog extends BottomSheetDialogFragment {
|
||||||
ImageView addressImageView = view.findViewById(R.id.monero_qr_imageview);
|
ImageView addressImageView = view.findViewById(R.id.monero_qr_imageview);
|
||||||
TextView addressTextView = view.findViewById(R.id.address_textview);
|
TextView addressTextView = view.findViewById(R.id.address_textview);
|
||||||
|
|
||||||
AddressService.getInstance().address.observe(getViewLifecycleOwner(), addr -> {
|
String addr = AddressService.getInstance().getAddress();
|
||||||
if (!addr.isEmpty()) {
|
|
||||||
System.out.println(addr);
|
|
||||||
addressTextView.setText(addr);
|
addressTextView.setText(addr);
|
||||||
addressImageView.setImageBitmap(generate(addr, 256, 256));
|
addressImageView.setImageBitmap(generate(addr, 256, 256));
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public Bitmap generate(String text, int width, int height) {
|
public Bitmap generate(String text, int width, int height) {
|
||||||
if ((width <= 0) || (height <= 0)) return null;
|
if ((width <= 0) || (height <= 0)) return null;
|
||||||
|
|
|
@ -14,6 +14,7 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
import com.m2049r.xmrwallet.R;
|
import com.m2049r.xmrwallet.R;
|
||||||
import com.m2049r.xmrwallet.model.Wallet;
|
import com.m2049r.xmrwallet.model.Wallet;
|
||||||
import com.m2049r.xmrwallet.model.WalletManager;
|
import com.m2049r.xmrwallet.model.WalletManager;
|
||||||
|
import com.m2049r.xmrwallet.service.BlockchainService;
|
||||||
|
|
||||||
public class SettingsFragment extends Fragment {
|
public class SettingsFragment extends Fragment {
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ public class SettingsFragment extends Fragment {
|
||||||
stringBuilder.append("Private view-key: " + wallet.getSecretViewKey()+"\n\n");
|
stringBuilder.append("Private view-key: " + wallet.getSecretViewKey()+"\n\n");
|
||||||
stringBuilder.append("Restore height: " + wallet.getRestoreHeight() + "\n\n");
|
stringBuilder.append("Restore height: " + wallet.getRestoreHeight() + "\n\n");
|
||||||
stringBuilder.append("Wallet height: " + wallet.getBlockChainHeight() + "\n\n");
|
stringBuilder.append("Wallet height: " + wallet.getBlockChainHeight() + "\n\n");
|
||||||
stringBuilder.append("Daemon height: " + wallet.getDaemonBlockChainHeight() + "\n\n");
|
stringBuilder.append("Daemon height: " + BlockchainService.getInstance().getDaemonHeight() + "\n\n");
|
||||||
walletInfoTextView.setText(stringBuilder.toString());
|
walletInfoTextView.setText(stringBuilder.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -219,11 +219,11 @@ public class Wallet {
|
||||||
public boolean init(long upper_transaction_size_limit) {
|
public boolean init(long upper_transaction_size_limit) {
|
||||||
return initJ(WalletManager.getInstance().getDaemonAddress(), upper_transaction_size_limit,
|
return initJ(WalletManager.getInstance().getDaemonAddress(), upper_transaction_size_limit,
|
||||||
WalletManager.getInstance().getDaemonUsername(),
|
WalletManager.getInstance().getDaemonUsername(),
|
||||||
WalletManager.getInstance().getDaemonPassword(), false, false, WalletManager.getInstance().getProxy());
|
WalletManager.getInstance().getDaemonPassword(), WalletManager.getInstance().getProxy());
|
||||||
}
|
}
|
||||||
|
|
||||||
private native boolean initJ(String daemon_address, long upper_transaction_size_limit,
|
private native boolean initJ(String daemon_address, long upper_transaction_size_limit,
|
||||||
String daemon_username, String daemon_password, boolean useSsl, boolean lightWallet, String proxy);
|
String daemon_username, String daemon_password, String proxy);
|
||||||
|
|
||||||
// virtual bool createWatchOnly(const std::string &path, const std::string &password, const std::string &language) const = 0;
|
// virtual bool createWatchOnly(const std::string &path, const std::string &password, const std::string &language) const = 0;
|
||||||
// virtual void setRefreshFromBlockHeight(uint64_t refresh_from_block_height) = 0;
|
// virtual void setRefreshFromBlockHeight(uint64_t refresh_from_block_height) = 0;
|
||||||
|
|
|
@ -13,15 +13,12 @@ public class AddressService extends ServiceBase {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final MutableLiveData<String> _address = new MutableLiveData<>("");
|
|
||||||
public LiveData<String> address = _address;
|
|
||||||
|
|
||||||
public AddressService(MainActivity mainActivity, MoneroHandlerThread thread) {
|
public AddressService(MainActivity mainActivity, MoneroHandlerThread thread) {
|
||||||
super(mainActivity, thread);
|
super(mainActivity, thread);
|
||||||
instance = this;
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshAddress() {
|
public String getAddress() {
|
||||||
_address.postValue(WalletManager.getInstance().getWallet().getAddress());
|
return WalletManager.getInstance().getWallet().getAddress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,8 @@ public class BlockchainService extends ServiceBase {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long daemonHeight = 0;
|
||||||
|
private long lastDaemonHeightUpdateTimeMs = 0;
|
||||||
private final MutableLiveData<Long> _currentHeight = new MutableLiveData<>(0L);
|
private final MutableLiveData<Long> _currentHeight = new MutableLiveData<>(0L);
|
||||||
public LiveData<Long> height = _currentHeight;
|
public LiveData<Long> height = _currentHeight;
|
||||||
|
|
||||||
|
@ -30,6 +32,19 @@ public class BlockchainService extends ServiceBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getDaemonHeight() {
|
public long getDaemonHeight() {
|
||||||
return WalletManager.getInstance().getWallet().getDaemonBlockChainHeight();
|
return this.daemonHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDaemonHeight(long height) {
|
||||||
|
long t = System.currentTimeMillis();
|
||||||
|
if(height > 0) {
|
||||||
|
daemonHeight = height;
|
||||||
|
lastDaemonHeightUpdateTimeMs = t;
|
||||||
|
} else {
|
||||||
|
if(t - lastDaemonHeightUpdateTimeMs > 120000) {
|
||||||
|
daemonHeight = WalletManager.getInstance().getWallet().getDaemonBlockChainHeight();
|
||||||
|
lastDaemonHeightUpdateTimeMs = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ import com.m2049r.xmrwallet.model.Wallet;
|
||||||
import com.m2049r.xmrwallet.model.WalletListener;
|
import com.m2049r.xmrwallet.model.WalletListener;
|
||||||
import com.m2049r.xmrwallet.model.WalletManager;
|
import com.m2049r.xmrwallet.model.WalletManager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handy class for starting a new thread that has a looper. The looper can then be
|
* Handy class for starting a new thread that has a looper. The looper can then be
|
||||||
|
@ -35,14 +37,14 @@ import com.m2049r.xmrwallet.model.WalletManager;
|
||||||
*/
|
*/
|
||||||
public class MoneroHandlerThread extends Thread implements WalletListener {
|
public class MoneroHandlerThread extends Thread implements WalletListener {
|
||||||
private Listener listener = null;
|
private Listener listener = null;
|
||||||
private Wallet wallet = null;
|
|
||||||
// from src/cryptonote_config.h
|
// from src/cryptonote_config.h
|
||||||
static public final long THREAD_STACK_SIZE = 5 * 1024 * 1024;
|
static public final long THREAD_STACK_SIZE = 5 * 1024 * 1024;
|
||||||
|
private Wallet wallet;
|
||||||
|
|
||||||
public MoneroHandlerThread(String name, Wallet wallet, Listener listener) {
|
public MoneroHandlerThread(String name, Listener listener, Wallet wallet) {
|
||||||
super(null, null, name, THREAD_STACK_SIZE);
|
super(null, null, name, THREAD_STACK_SIZE);
|
||||||
this.wallet = wallet;
|
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
|
this.wallet = wallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -53,9 +55,9 @@ public class MoneroHandlerThread extends Thread implements WalletListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
WalletManager.getInstance().setProxy("127.0.0.1:9050");
|
WalletManager.getInstance().setDaemon(Node.fromString(DefaultNodes.XMRTW.getUri()));
|
||||||
WalletManager.getInstance().setDaemon(Node.fromString(DefaultNodes.MONERUJO_ONION.getUri()));
|
|
||||||
wallet.init(0);
|
wallet.init(0);
|
||||||
|
wallet.setProxy("127.0.0.1:9050");
|
||||||
wallet.setListener(this);
|
wallet.setListener(this);
|
||||||
wallet.startRefresh();
|
wallet.startRefresh();
|
||||||
}
|
}
|
||||||
|
@ -75,6 +77,7 @@ public class MoneroHandlerThread extends Thread implements WalletListener {
|
||||||
@Override
|
@Override
|
||||||
public void newBlock(long height) {
|
public void newBlock(long height) {
|
||||||
refresh();
|
refresh();
|
||||||
|
BlockchainService.getInstance().setDaemonHeight(wallet.isSynchronized() ? height : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue