mirror of
https://codeberg.org/r4v3r23/mysu.git
synced 2024-12-01 18:13:13 +00:00
use my own monero repo fork to fetch utxos
This commit is contained in:
parent
5184ca1a4c
commit
223f8a5edf
8 changed files with 234 additions and 2 deletions
|
@ -40,6 +40,7 @@ static jclass class_TransactionInfo;
|
||||||
static jclass class_Transfer;
|
static jclass class_Transfer;
|
||||||
static jclass class_Ledger;
|
static jclass class_Ledger;
|
||||||
static jclass class_WalletStatus;
|
static jclass class_WalletStatus;
|
||||||
|
static jclass class_CoinsInfo;
|
||||||
|
|
||||||
std::mutex _listenerMutex;
|
std::mutex _listenerMutex;
|
||||||
|
|
||||||
|
@ -62,6 +63,8 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) {
|
||||||
jenv->FindClass("net/mynero/wallet/model/WalletListener")));
|
jenv->FindClass("net/mynero/wallet/model/WalletListener")));
|
||||||
class_WalletStatus = static_cast<jclass>(jenv->NewGlobalRef(
|
class_WalletStatus = static_cast<jclass>(jenv->NewGlobalRef(
|
||||||
jenv->FindClass("net/mynero/wallet/model/Wallet$Status")));
|
jenv->FindClass("net/mynero/wallet/model/Wallet$Status")));
|
||||||
|
class_CoinsInfo = static_cast<jclass>(jenv->NewGlobalRef(
|
||||||
|
jenv->FindClass("net/mynero/wallet/model/CoinsInfo")));
|
||||||
return JNI_VERSION_1_6;
|
return JNI_VERSION_1_6;
|
||||||
}
|
}
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -1024,6 +1027,48 @@ Java_net_mynero_wallet_model_Wallet_disposeTransaction(JNIEnv *env, jobject inst
|
||||||
//virtual bool exportKeyImages(const std::string &filename) = 0;
|
//virtual bool exportKeyImages(const std::string &filename) = 0;
|
||||||
//virtual bool importKeyImages(const std::string &filename) = 0;
|
//virtual bool importKeyImages(const std::string &filename) = 0;
|
||||||
|
|
||||||
|
JNIEXPORT jlong JNICALL
|
||||||
|
Java_net_mynero_wallet_model_Wallet_getCoinsJ(JNIEnv *env, jobject instance) {
|
||||||
|
Monero::Wallet *wallet = getHandle<Monero::Wallet>(env, instance);
|
||||||
|
return reinterpret_cast<jlong>(wallet->coins());
|
||||||
|
}
|
||||||
|
|
||||||
|
jobject newCoinsInfo(JNIEnv *env, Monero::CoinsInfo *info) {
|
||||||
|
jmethodID c = env->GetMethodID(class_CoinsInfo, "<init>",
|
||||||
|
"(J)V");
|
||||||
|
jobject result = env->NewObject(class_CoinsInfo, c,
|
||||||
|
static_cast<jlong> (info->globalOutputIndex()));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
jobject coins_cpp2java(JNIEnv *env, const std::vector<Monero::CoinsInfo *> &vector) {
|
||||||
|
|
||||||
|
jmethodID java_util_ArrayList_ = env->GetMethodID(class_ArrayList, "<init>", "(I)V");
|
||||||
|
jmethodID java_util_ArrayList_add = env->GetMethodID(class_ArrayList, "add",
|
||||||
|
"(Ljava/lang/Object;)Z");
|
||||||
|
|
||||||
|
jobject arrayList = env->NewObject(class_ArrayList, java_util_ArrayList_,
|
||||||
|
static_cast<jint> (vector.size()));
|
||||||
|
for (Monero::CoinsInfo *s: vector) {
|
||||||
|
jobject info = newCoinsInfo(env, s);
|
||||||
|
env->CallBooleanMethod(arrayList, java_util_ArrayList_add, info);
|
||||||
|
env->DeleteLocalRef(info);
|
||||||
|
}
|
||||||
|
return arrayList;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL
|
||||||
|
Java_net_mynero_wallet_model_Coins_getCount(JNIEnv *env, jobject instance) {
|
||||||
|
Monero::Coins *coins = getHandle<Monero::Coins>(env, instance);
|
||||||
|
return coins->count();
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL
|
||||||
|
Java_net_mynero_wallet_model_Coins_refreshJ(JNIEnv *env, jobject instance) {
|
||||||
|
Monero::Coins *coins = getHandle<Monero::Coins>(env, instance);
|
||||||
|
coins->refresh();
|
||||||
|
return coins_cpp2java(env, coins->getAll());
|
||||||
|
}
|
||||||
|
|
||||||
//virtual TransactionHistory * history() const = 0;
|
//virtual TransactionHistory * history() const = 0;
|
||||||
JNIEXPORT jlong JNICALL
|
JNIEXPORT jlong JNICALL
|
||||||
|
|
|
@ -21,12 +21,15 @@ import com.google.zxing.qrcode.QRCodeWriter;
|
||||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
||||||
import net.mynero.wallet.R;
|
import net.mynero.wallet.R;
|
||||||
import net.mynero.wallet.data.Subaddress;
|
import net.mynero.wallet.data.Subaddress;
|
||||||
|
import net.mynero.wallet.model.CoinsInfo;
|
||||||
|
import net.mynero.wallet.model.WalletManager;
|
||||||
import net.mynero.wallet.service.AddressService;
|
import net.mynero.wallet.service.AddressService;
|
||||||
import net.mynero.wallet.util.DayNightMode;
|
import net.mynero.wallet.util.DayNightMode;
|
||||||
import net.mynero.wallet.util.Helper;
|
import net.mynero.wallet.util.Helper;
|
||||||
import net.mynero.wallet.util.NightmodeHelper;
|
import net.mynero.wallet.util.NightmodeHelper;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
@ -49,6 +52,12 @@ public class ReceiveBottomSheetDialog extends BottomSheetDialogFragment {
|
||||||
addressTextView.setText(addr.getAddress());
|
addressTextView.setText(addr.getAddress());
|
||||||
addressImageView.setImageBitmap(generate(addr.getAddress(), 256, 256));
|
addressImageView.setImageBitmap(generate(addr.getAddress(), 256, 256));
|
||||||
copyAddressImageButton.setOnClickListener(view1 -> Helper.clipBoardCopy(getContext(), "address", addr.getAddress()));
|
copyAddressImageButton.setOnClickListener(view1 -> Helper.clipBoardCopy(getContext(), "address", addr.getAddress()));
|
||||||
|
|
||||||
|
List<CoinsInfo> coins = WalletManager.getInstance().getWallet().getCoins().getAll();
|
||||||
|
System.out.println("COINS::");
|
||||||
|
for(CoinsInfo coinsInfo : coins) {
|
||||||
|
System.out.println(coinsInfo.getGlobalOutputIndex());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Bitmap generate(String text, int width, int height) {
|
public Bitmap generate(String text, int width, int height) {
|
||||||
|
|
51
app/src/main/java/net/mynero/wallet/model/Coins.java
Normal file
51
app/src/main/java/net/mynero/wallet/model/Coins.java
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 m2049r
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.mynero.wallet.model;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
public class Coins {
|
||||||
|
static {
|
||||||
|
System.loadLibrary("monerujo");
|
||||||
|
}
|
||||||
|
|
||||||
|
private final long handle;
|
||||||
|
|
||||||
|
private List<CoinsInfo> coins = new ArrayList<>();
|
||||||
|
|
||||||
|
public Coins(long handle) {
|
||||||
|
this.handle = handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public native int getCount(); // over all accounts/subaddresses
|
||||||
|
|
||||||
|
public List<CoinsInfo> getAll() {
|
||||||
|
return coins;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refresh() {
|
||||||
|
List<CoinsInfo> transactionInfos = refreshJ();
|
||||||
|
Timber.d("refresh size=%d", transactionInfos.size());
|
||||||
|
coins = transactionInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
private native List<CoinsInfo> refreshJ();
|
||||||
|
}
|
67
app/src/main/java/net/mynero/wallet/model/CoinsInfo.java
Normal file
67
app/src/main/java/net/mynero/wallet/model/CoinsInfo.java
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 m2049r
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.mynero.wallet.model;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CoinsInfo implements Parcelable {
|
||||||
|
static {
|
||||||
|
System.loadLibrary("monerujo");
|
||||||
|
}
|
||||||
|
|
||||||
|
long globalOutputIndex;
|
||||||
|
|
||||||
|
public CoinsInfo(long globalOutputIndex) {
|
||||||
|
this.globalOutputIndex = globalOutputIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CoinsInfo(Parcel in) {
|
||||||
|
globalOutputIndex = in.readLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<CoinsInfo> CREATOR = new Creator<CoinsInfo>() {
|
||||||
|
@Override
|
||||||
|
public CoinsInfo createFromParcel(Parcel in) {
|
||||||
|
return new CoinsInfo(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CoinsInfo[] newArray(int size) {
|
||||||
|
return new CoinsInfo[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public long getGlobalOutputIndex() {
|
||||||
|
return globalOutputIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(@NonNull Parcel parcel, int i) {
|
||||||
|
parcel.writeLong(globalOutputIndex);
|
||||||
|
}
|
||||||
|
}
|
|
@ -45,6 +45,7 @@ public class Wallet {
|
||||||
private long listenerHandle = 0;
|
private long listenerHandle = 0;
|
||||||
private PendingTransaction pendingTransaction = null;
|
private PendingTransaction pendingTransaction = null;
|
||||||
private TransactionHistory history = null;
|
private TransactionHistory history = null;
|
||||||
|
private Coins coins = null;
|
||||||
|
|
||||||
Wallet(long handle) {
|
Wallet(long handle) {
|
||||||
this.handle = handle;
|
this.handle = handle;
|
||||||
|
@ -324,6 +325,14 @@ public class Wallet {
|
||||||
|
|
||||||
private native long getHistoryJ();
|
private native long getHistoryJ();
|
||||||
|
|
||||||
|
public Coins getCoins() {
|
||||||
|
if (coins == null) {
|
||||||
|
coins = new Coins(getCoinsJ());
|
||||||
|
}
|
||||||
|
return coins;
|
||||||
|
}
|
||||||
|
private native long getCoinsJ();
|
||||||
|
|
||||||
//virtual bool exportKeyImages(const std::string &filename) = 0;
|
//virtual bool exportKeyImages(const std::string &filename) = 0;
|
||||||
//virtual bool importKeyImages(const std::string &filename) = 0;
|
//virtual bool importKeyImages(const std::string &filename) = 0;
|
||||||
|
|
||||||
|
@ -334,6 +343,10 @@ public class Wallet {
|
||||||
getHistory().refreshWithNotes(this);
|
getHistory().refreshWithNotes(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void refreshCoins() {
|
||||||
|
getCoins().refresh();
|
||||||
|
}
|
||||||
|
|
||||||
private native long setListenerJ(WalletListener listener);
|
private native long setListenerJ(WalletListener listener);
|
||||||
|
|
||||||
public void setListener(WalletListener listener) {
|
public void setListener(WalletListener listener) {
|
||||||
|
|
|
@ -115,6 +115,7 @@ public class MoneroHandlerThread extends Thread implements WalletListener {
|
||||||
|
|
||||||
private void refresh() {
|
private void refresh() {
|
||||||
wallet.refreshHistory();
|
wallet.refreshHistory();
|
||||||
|
wallet.refreshCoins();
|
||||||
listener.onRefresh();
|
listener.onRefresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
MONERUJO_monero master with monero release-v0.18.1.0-monerujo
|
MONERUJO_monero main with monero release-v0.18.1.0-mynero
|
||||||
|
|
|
@ -260,6 +260,51 @@ struct AddressBook
|
||||||
virtual int lookupPaymentID(const std::string &payment_id) const = 0;
|
virtual int lookupPaymentID(const std::string &payment_id) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The CoinsInfo - interface for displaying coins information
|
||||||
|
*/
|
||||||
|
struct CoinsInfo
|
||||||
|
{
|
||||||
|
virtual ~CoinsInfo() = 0;
|
||||||
|
|
||||||
|
virtual uint64_t blockHeight() const = 0;
|
||||||
|
virtual std::string hash() const = 0;
|
||||||
|
virtual size_t internalOutputIndex() const = 0;
|
||||||
|
virtual uint64_t globalOutputIndex() const = 0;
|
||||||
|
virtual bool spent() const = 0;
|
||||||
|
virtual bool frozen() const = 0;
|
||||||
|
virtual uint64_t spentHeight() const = 0;
|
||||||
|
virtual uint64_t amount() const = 0;
|
||||||
|
virtual bool rct() const = 0;
|
||||||
|
virtual bool keyImageKnown() const = 0;
|
||||||
|
virtual size_t pkIndex() const = 0;
|
||||||
|
virtual uint32_t subaddrIndex() const = 0;
|
||||||
|
virtual uint32_t subaddrAccount() const = 0;
|
||||||
|
virtual std::string address() const = 0;
|
||||||
|
virtual std::string addressLabel() const = 0;
|
||||||
|
virtual std::string keyImage() const = 0;
|
||||||
|
virtual uint64_t unlockTime() const = 0;
|
||||||
|
virtual bool unlocked() const = 0;
|
||||||
|
virtual std::string pubKey() const = 0;
|
||||||
|
virtual bool coinbase() const = 0;
|
||||||
|
virtual std::string description() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Coins
|
||||||
|
{
|
||||||
|
virtual ~Coins() = 0;
|
||||||
|
virtual int count() const = 0;
|
||||||
|
virtual CoinsInfo * coin(int index) const = 0;
|
||||||
|
virtual std::vector<CoinsInfo*> getAll() const = 0;
|
||||||
|
virtual void refresh() = 0;
|
||||||
|
virtual void setFrozen(std::string public_key) = 0;
|
||||||
|
virtual void setFrozen(int index) = 0;
|
||||||
|
virtual void thaw(std::string public_key) = 0;
|
||||||
|
virtual void thaw(int index) = 0;
|
||||||
|
virtual bool isTransferUnlocked(uint64_t unlockTime, uint64_t blockHeight) = 0;
|
||||||
|
virtual void setDescription(const std::string &public_key, const std::string &description) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
struct SubaddressRow {
|
struct SubaddressRow {
|
||||||
public:
|
public:
|
||||||
SubaddressRow(std::size_t _rowId, const std::string &_address, const std::string &_label):
|
SubaddressRow(std::size_t _rowId, const std::string &_address, const std::string &_label):
|
||||||
|
@ -936,6 +981,7 @@ struct Wallet
|
||||||
|
|
||||||
virtual TransactionHistory * history() = 0;
|
virtual TransactionHistory * history() = 0;
|
||||||
virtual AddressBook * addressBook() = 0;
|
virtual AddressBook * addressBook() = 0;
|
||||||
|
virtual Coins * coins() = 0;
|
||||||
virtual Subaddress * subaddress() = 0;
|
virtual Subaddress * subaddress() = 0;
|
||||||
virtual SubaddressAccount * subaddressAccount() = 0;
|
virtual SubaddressAccount * subaddressAccount() = 0;
|
||||||
virtual void setListener(WalletListener *) = 0;
|
virtual void setListener(WalletListener *) = 0;
|
||||||
|
|
Loading…
Reference in a new issue