1
mirror of https://github.com/m2049r/xmrwallet synced 2025-09-03 08:23:04 +02:00

Compare commits

...

3 Commits

Author SHA1 Message Date
m2049r
a3db07c6a7 Bugfixes (#85)
* android.view.WindowManager

* refactor

* lock_guard listener

* new version
2017-09-25 22:53:16 +02:00
m2049r
6678222202 Bugfix: Generate screen is now scrollable (#84)
* generate+detail screens made scrollable

* new version
2017-09-23 22:26:12 +02:00
m2049r
793d984200 Bugfix: crashing on android 5 & 6 (new wallet, receive, ...) (#83)
* getAddress() mess fixed

* v0.8.0.3
2017-09-23 18:23:41 +02:00
24 changed files with 233 additions and 218 deletions

View File

@@ -8,8 +8,8 @@ android {
applicationId "com.m2049r.xmrwallet"
minSdkVersion 21
targetSdkVersion 25
versionCode 15
versionName "0.8.0.2"
versionCode 18
versionName "0.8.0.5"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {

View File

@@ -39,6 +39,8 @@ static jclass class_WalletListener;
static jclass class_TransactionInfo;
static jclass class_Transfer;
std::mutex _listenerMutex;
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
cachedJVM = jvm;
LOGI("JNI_OnLoad");
@@ -101,6 +103,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
};
void deleteGlobalJavaRef(JNIEnv *env) {
std::lock_guard<std::mutex> lock(_listenerMutex);
env->DeleteGlobalRef(jlistener);
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;
*/
void updated() {
std::lock_guard<std::mutex> lock(_listenerMutex);
if (jlistener == nullptr) return;
LOGD("updated");
JNIEnv *jenv;
@@ -128,6 +132,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
* @param amount - amount
*/
void moneySpent(const std::string &txId, uint64_t amount) {
std::lock_guard<std::mutex> lock(_listenerMutex);
if (jlistener == nullptr) return;
LOGD("moneySpent %"
PRIu64, amount);
@@ -139,6 +144,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
* @param amount - amount
*/
void moneyReceived(const std::string &txId, uint64_t amount) {
std::lock_guard<std::mutex> lock(_listenerMutex);
if (jlistener == nullptr) return;
LOGD("moneyReceived %"
PRIu64, amount);
@@ -150,6 +156,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
* @param amount - amount
*/
void unconfirmedMoneyReceived(const std::string &txId, uint64_t amount) {
std::lock_guard<std::mutex> lock(_listenerMutex);
if (jlistener == nullptr) return;
LOGD("unconfirmedMoneyReceived %"
PRIu64, amount);
@@ -160,6 +167,7 @@ struct MyWalletListener : Bitmonero::WalletListener {
* @param height - block height
*/
void newBlock(uint64_t height) {
std::lock_guard<std::mutex> lock(_listenerMutex);
if (jlistener == nullptr) return;
//LOGD("newBlock");
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
*/
void refreshed() {
std::lock_guard<std::mutex> lock(_listenerMutex);
if (jlistener == nullptr) return;
LOGD("refreshed");
JNIEnv *jenv;
@@ -465,14 +474,15 @@ JNIEXPORT jboolean JNICALL
Java_com_m2049r_xmrwallet_model_WalletManager_closeJ(JNIEnv *env, jobject instance,
jobject 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) {
MyWalletListener *walletListener = getHandle<MyWalletListener>(env, walletInstance,
"listenerHandle");
if (walletListener != nullptr) {
walletListener->deleteGlobalJavaRef(env);
delete walletListener;
}
delete walletListener;
}
LOGD("wallet closed");
return closeSuccess;
@@ -531,8 +541,7 @@ Java_com_m2049r_xmrwallet_model_Wallet_setPassword(JNIEnv *env, jobject instance
JNIEXPORT jstring JNICALL
Java_com_m2049r_xmrwallet_model_Wallet_getAddressJ(JNIEnv *env, jobject instance) {
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, instance);
const char *address = wallet->address().c_str();
return env->NewStringUTF(address);
return env->NewStringUTF(wallet->address().c_str());
}
JNIEXPORT jstring JNICALL
@@ -602,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_password = env->GetStringUTFChars(daemon_password, JNI_FALSE);
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_username, _daemon_username);
env->ReleaseStringUTFChars(daemon_password, _daemon_password);
@@ -920,7 +930,7 @@ jobject newTransferInstance(JNIEnv *env, uint64_t amount, const std::string &add
jobject newTransferList(JNIEnv *env, Bitmonero::TransactionInfo *info) {
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;
}
// make new ArrayList

View File

@@ -186,7 +186,7 @@ public class LoginFragment extends Fragment {
etDaemonAddress.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
if (hasFocus && !getActivity().isFinishing()) {
etDaemonAddress.showDropDown();
Helper.showKeyboard(getActivity());
}

View File

@@ -36,7 +36,6 @@ public class Wallet {
Wallet(long handle) {
this.handle = handle;
getAddress(); // cache address for later
}
public enum Status {
@@ -73,10 +72,6 @@ public class Wallet {
if (address == null) {
address = getAddressJ();
}
if (!Wallet.isAddressValid(address, WalletManager.getInstance().isTestNet())) {
// just die!
throw new IllegalStateException("Wallet returned invalid address: " + address);
}
return address;
}

View File

@@ -1,107 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/etWalletName"
style="@style/MoneroEdit"
android:layout_width="0dp"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/generate_name_hint"
android:imeOptions="actionNext"
android:inputType="text"
android:maxLines="1"
android:textAlignment="center" />
android:orientation="horizontal"
android:weightSum="2">
<EditText
android:id="@+id/etWalletName"
style="@style/MoneroEdit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/generate_name_hint"
android:imeOptions="actionNext"
android:inputType="text"
android:maxLines="1"
android:textAlignment="center" />
<EditText
android:id="@+id/etWalletPassword"
style="@style/MoneroEdit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/generate_password_hint"
android:imeOptions="actionNext"
android:inputType="text"
android:textAlignment="center" />
</LinearLayout>
<EditText
android:id="@+id/etWalletPassword"
style="@style/MoneroEdit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/generate_password_hint"
android:imeOptions="actionNext"
android:inputType="text"
android:textAlignment="center" />
</LinearLayout>
<EditText
android:id="@+id/etWalletMnemonic"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_mnemonic_hint"
android:imeOptions="actionNext"
android:inputType="textMultiLine"
android:textAlignment="center" />
<EditText
android:id="@+id/etWalletAddress"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_address_hint"
android:imeOptions="actionNext"
android:inputType="textMultiLine"
android:textAlignment="center" />
<LinearLayout
android:id="@+id/llRestoreKeys"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<EditText
android:id="@+id/etWalletViewKey"
android:id="@+id/etWalletMnemonic"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_viewkey_hint"
android:hint="@string/generate_mnemonic_hint"
android:imeOptions="actionNext"
android:inputType="textMultiLine"
android:textAlignment="center" />
<EditText
android:id="@+id/etWalletSpendKey"
android:id="@+id/etWalletAddress"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_spendkey_hint"
android:hint="@string/generate_address_hint"
android:imeOptions="actionNext"
android:inputType="textMultiLine"
android:textAlignment="center"/>
android:textAlignment="center" />
<LinearLayout
android:id="@+id/llRestoreKeys"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<EditText
android:id="@+id/etWalletViewKey"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_viewkey_hint"
android:imeOptions="actionNext"
android:inputType="textMultiLine"
android:textAlignment="center" />
<EditText
android:id="@+id/etWalletSpendKey"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_spendkey_hint"
android:imeOptions="actionNext"
android:inputType="textMultiLine"
android:textAlignment="center" />
</LinearLayout>
<EditText
android:id="@+id/etWalletRestoreHeight"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_restoreheight_hint"
android:imeOptions="actionDone"
android:inputType="number"
android:textAlignment="center"
android:visibility="gone" />
<Button
android:id="@+id/bGenerate"
style="@style/MoneroButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:enabled="false"
android:text="@string/generate_buttonGenerate" />
</LinearLayout>
<EditText
android:id="@+id/etWalletRestoreHeight"
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/generate_restoreheight_hint"
android:imeOptions="actionDone"
android:inputType="number"
android:textAlignment="center"
android:visibility="gone" />
<Button
android:id="@+id/bGenerate"
style="@style/MoneroButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:enabled="false"
android:text="@string/generate_buttonGenerate" />
</LinearLayout>
</ScrollView>

File diff suppressed because it is too large Load Diff