mirror of
https://github.com/m2049r/xmrwallet
synced 2025-09-11 14:40:50 +02:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
dceca0e198 | ||
![]() |
94947de9ef | ||
![]() |
10ea6d8e0c | ||
![]() |
0d03b75785 | ||
![]() |
a3db07c6a7 |
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -37,7 +37,7 @@
|
|||||||
<ConfirmationsSetting value="0" id="Add" />
|
<ConfirmationsSetting value="0" id="Add" />
|
||||||
<ConfirmationsSetting value="0" id="Remove" />
|
<ConfirmationsSetting value="0" id="Remove" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
@@ -8,8 +8,8 @@ android {
|
|||||||
applicationId "com.m2049r.xmrwallet"
|
applicationId "com.m2049r.xmrwallet"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 25
|
targetSdkVersion 25
|
||||||
versionCode 17
|
versionCode 20
|
||||||
versionName "0.8.0.4"
|
versionName "0.8.0.7"
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
|
@@ -39,6 +39,8 @@ static jclass class_WalletListener;
|
|||||||
static jclass class_TransactionInfo;
|
static jclass class_TransactionInfo;
|
||||||
static jclass class_Transfer;
|
static jclass class_Transfer;
|
||||||
|
|
||||||
|
std::mutex _listenerMutex;
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
|
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
|
||||||
cachedJVM = jvm;
|
cachedJVM = jvm;
|
||||||
LOGI("JNI_OnLoad");
|
LOGI("JNI_OnLoad");
|
||||||
@@ -101,6 +103,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void deleteGlobalJavaRef(JNIEnv *env) {
|
void deleteGlobalJavaRef(JNIEnv *env) {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
env->DeleteGlobalRef(jlistener);
|
env->DeleteGlobalRef(jlistener);
|
||||||
jlistener = nullptr;
|
jlistener = nullptr;
|
||||||
}
|
}
|
||||||
@@ -109,6 +112,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
* @brief updated - generic callback, called when any event (sent/received/block reveived/etc) happened with the wallet;
|
* @brief updated - generic callback, called when any event (sent/received/block reveived/etc) happened with the wallet;
|
||||||
*/
|
*/
|
||||||
void updated() {
|
void updated() {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
LOGD("updated");
|
LOGD("updated");
|
||||||
JNIEnv *jenv;
|
JNIEnv *jenv;
|
||||||
@@ -128,6 +132,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
* @param amount - amount
|
* @param amount - amount
|
||||||
*/
|
*/
|
||||||
void moneySpent(const std::string &txId, uint64_t amount) {
|
void moneySpent(const std::string &txId, uint64_t amount) {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
LOGD("moneySpent %"
|
LOGD("moneySpent %"
|
||||||
PRIu64, amount);
|
PRIu64, amount);
|
||||||
@@ -139,6 +144,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
* @param amount - amount
|
* @param amount - amount
|
||||||
*/
|
*/
|
||||||
void moneyReceived(const std::string &txId, uint64_t amount) {
|
void moneyReceived(const std::string &txId, uint64_t amount) {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
LOGD("moneyReceived %"
|
LOGD("moneyReceived %"
|
||||||
PRIu64, amount);
|
PRIu64, amount);
|
||||||
@@ -150,6 +156,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
* @param amount - amount
|
* @param amount - amount
|
||||||
*/
|
*/
|
||||||
void unconfirmedMoneyReceived(const std::string &txId, uint64_t amount) {
|
void unconfirmedMoneyReceived(const std::string &txId, uint64_t amount) {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
LOGD("unconfirmedMoneyReceived %"
|
LOGD("unconfirmedMoneyReceived %"
|
||||||
PRIu64, amount);
|
PRIu64, amount);
|
||||||
@@ -160,6 +167,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
* @param height - block height
|
* @param height - block height
|
||||||
*/
|
*/
|
||||||
void newBlock(uint64_t height) {
|
void newBlock(uint64_t height) {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
//LOGD("newBlock");
|
//LOGD("newBlock");
|
||||||
JNIEnv *jenv;
|
JNIEnv *jenv;
|
||||||
@@ -178,6 +186,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
|
|||||||
* @brief refreshed - called when wallet refreshed by background thread or explicitly refreshed by calling "refresh" synchronously
|
* @brief refreshed - called when wallet refreshed by background thread or explicitly refreshed by calling "refresh" synchronously
|
||||||
*/
|
*/
|
||||||
void refreshed() {
|
void refreshed() {
|
||||||
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
LOGD("refreshed");
|
LOGD("refreshed");
|
||||||
JNIEnv *jenv;
|
JNIEnv *jenv;
|
||||||
@@ -465,14 +474,15 @@ JNIEXPORT jboolean JNICALL
|
|||||||
Java_com_m2049r_xmrwallet_model_WalletManager_closeJ(JNIEnv *env, jobject instance,
|
Java_com_m2049r_xmrwallet_model_WalletManager_closeJ(JNIEnv *env, jobject instance,
|
||||||
jobject walletInstance) {
|
jobject walletInstance) {
|
||||||
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, walletInstance);
|
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, walletInstance);
|
||||||
bool closeSuccess = Bitmonero::WalletManagerFactory::getWalletManager()->closeWallet(wallet, false);
|
bool closeSuccess = Bitmonero::WalletManagerFactory::getWalletManager()->closeWallet(wallet,
|
||||||
|
false);
|
||||||
if (closeSuccess) {
|
if (closeSuccess) {
|
||||||
MyWalletListener *walletListener = getHandle<MyWalletListener>(env, walletInstance,
|
MyWalletListener *walletListener = getHandle<MyWalletListener>(env, walletInstance,
|
||||||
"listenerHandle");
|
"listenerHandle");
|
||||||
if (walletListener != nullptr) {
|
if (walletListener != nullptr) {
|
||||||
walletListener->deleteGlobalJavaRef(env);
|
walletListener->deleteGlobalJavaRef(env);
|
||||||
|
delete walletListener;
|
||||||
}
|
}
|
||||||
delete walletListener;
|
|
||||||
}
|
}
|
||||||
LOGD("wallet closed");
|
LOGD("wallet closed");
|
||||||
return closeSuccess;
|
return closeSuccess;
|
||||||
@@ -601,7 +611,8 @@ Java_com_m2049r_xmrwallet_model_Wallet_initJ(JNIEnv *env, jobject instance,
|
|||||||
const char *_daemon_username = env->GetStringUTFChars(daemon_username, JNI_FALSE);
|
const char *_daemon_username = env->GetStringUTFChars(daemon_username, JNI_FALSE);
|
||||||
const char *_daemon_password = env->GetStringUTFChars(daemon_password, JNI_FALSE);
|
const char *_daemon_password = env->GetStringUTFChars(daemon_password, JNI_FALSE);
|
||||||
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, instance);
|
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, instance);
|
||||||
bool status = wallet->init(_daemon_address, upper_transaction_size_limit, _daemon_username, _daemon_password);
|
bool status = wallet->init(_daemon_address, upper_transaction_size_limit, _daemon_username,
|
||||||
|
_daemon_password);
|
||||||
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);
|
||||||
@@ -919,7 +930,7 @@ jobject newTransferInstance(JNIEnv *env, uint64_t amount, const std::string &add
|
|||||||
|
|
||||||
jobject newTransferList(JNIEnv *env, Bitmonero::TransactionInfo *info) {
|
jobject newTransferList(JNIEnv *env, Bitmonero::TransactionInfo *info) {
|
||||||
const std::vector<Bitmonero::TransactionInfo::Transfer> &transfers = info->transfers();
|
const std::vector<Bitmonero::TransactionInfo::Transfer> &transfers = info->transfers();
|
||||||
if (transfers.size()==0) { // don't create empty Lists
|
if (transfers.size() == 0) { // don't create empty Lists
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
// make new ArrayList
|
// make new ArrayList
|
||||||
|
@@ -186,7 +186,7 @@ public class LoginFragment extends Fragment {
|
|||||||
etDaemonAddress.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
etDaemonAddress.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFocusChange(View v, boolean hasFocus) {
|
public void onFocusChange(View v, boolean hasFocus) {
|
||||||
if (hasFocus) {
|
if (hasFocus && !getActivity().isFinishing() && etDaemonAddress.isLaidOut()) {
|
||||||
etDaemonAddress.showDropDown();
|
etDaemonAddress.showDropDown();
|
||||||
Helper.showKeyboard(getActivity());
|
Helper.showKeyboard(getActivity());
|
||||||
}
|
}
|
||||||
@@ -376,7 +376,7 @@ public class LoginFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String getDaemon() {
|
String getDaemon() {
|
||||||
return etDaemonAddress.getText().toString();
|
return etDaemonAddress.getText().toString().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDaemon(NodeList nodeList) {
|
void setDaemon(NodeList nodeList) {
|
||||||
|
@@ -144,7 +144,7 @@ public class LicensesFragment extends DialogFragment {
|
|||||||
mWebView = (WebView) content.findViewById(R.id.licensesFragmentWebView);
|
mWebView = (WebView) content.findViewById(R.id.licensesFragmentWebView);
|
||||||
mIndeterminateProgress = (ProgressBar) content.findViewById(R.id.licensesFragmentIndeterminateProgress);
|
mIndeterminateProgress = (ProgressBar) content.findViewById(R.id.licensesFragmentIndeterminateProgress);
|
||||||
|
|
||||||
boolean showCloseButton = false;
|
boolean showCloseButton = true;
|
||||||
Bundle arguments = getArguments();
|
Bundle arguments = getArguments();
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
showCloseButton = arguments.getBoolean(KEY_SHOW_CLOSE_BUTTON);
|
showCloseButton = arguments.getBoolean(KEY_SHOW_CLOSE_BUTTON);
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -27,6 +27,11 @@
|
|||||||
- Archive (=Backup and delete)
|
- Archive (=Backup and delete)
|
||||||
- 3 Default nodes + History of last 5 used nodes
|
- 3 Default nodes + History of last 5 used nodes
|
||||||
|
|
||||||
|
## After installing from Google Play the wallet list is empty!
|
||||||
|
Sorry about that. The folder for the wallets was renamed from "Monerujo" to "monerujo".
|
||||||
|
On most devices this does not matter (they don't care about upper/lower case). Yours does.
|
||||||
|
If you use a file explorer (e.g. es file explorer) you can find the Monerujo folder and rename it to "monerujo".
|
||||||
|
|
||||||
## I cannot select and copy the mnemonic seed
|
## I cannot select and copy the mnemonic seed
|
||||||
Copying anything to the clipboard on Android exposes it to any other App running. So this
|
Copying anything to the clipboard on Android exposes it to any other App running. So this
|
||||||
is a security measure to keep your seed safe(r).
|
is a security measure to keep your seed safe(r).
|
||||||
|
Reference in New Issue
Block a user