mirror of
https://codeberg.org/r4v3r23/mysu.git
synced 2024-11-29 09:03:14 +00:00
copy some logic from monerujo. add new "fresh address" feature
This commit is contained in:
parent
fd0f756975
commit
9efe44d76a
4 changed files with 54 additions and 9 deletions
|
@ -8,6 +8,7 @@ import android.view.ViewGroup;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
@ -22,7 +23,11 @@ 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.TransactionInfo;
|
||||||
|
import net.mynero.wallet.model.Wallet;
|
||||||
|
import net.mynero.wallet.model.WalletManager;
|
||||||
import net.mynero.wallet.service.AddressService;
|
import net.mynero.wallet.service.AddressService;
|
||||||
|
import net.mynero.wallet.service.HistoryService;
|
||||||
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;
|
||||||
|
@ -33,6 +38,9 @@ import java.util.Map;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
public class ReceiveBottomSheetDialog extends BottomSheetDialogFragment {
|
public class ReceiveBottomSheetDialog extends BottomSheetDialogFragment {
|
||||||
|
private TextView addressTextView = null;
|
||||||
|
private ImageView addressImageView = null;
|
||||||
|
private ImageButton copyAddressImageButton = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -42,14 +50,29 @@ public class ReceiveBottomSheetDialog extends BottomSheetDialogFragment {
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
ImageView addressImageView = view.findViewById(R.id.monero_qr_imageview);
|
addressImageView = view.findViewById(R.id.monero_qr_imageview);
|
||||||
TextView addressTextView = view.findViewById(R.id.address_textview);
|
addressTextView = view.findViewById(R.id.address_textview);
|
||||||
ImageButton copyAddressImageButton = view.findViewById(R.id.copy_address_imagebutton);
|
copyAddressImageButton = view.findViewById(R.id.copy_address_imagebutton);
|
||||||
|
ImageView freshAddressImageView = view.findViewById(R.id.fresh_address_imageview);
|
||||||
|
Wallet wallet = WalletManager.getInstance().getWallet();
|
||||||
|
AddressService addressService = AddressService.getInstance();
|
||||||
|
|
||||||
Subaddress addr = AddressService.getInstance().currentSubaddress();
|
Subaddress addr = addressService.currentSubaddress();
|
||||||
addressTextView.setText(addr.getAddress());
|
setAddress(addr);
|
||||||
addressImageView.setImageBitmap(generate(addr.getAddress(), 256, 256));
|
freshAddressImageView.setOnClickListener(view1 -> {
|
||||||
copyAddressImageButton.setOnClickListener(view1 -> Helper.clipBoardCopy(getContext(), "address", addr.getAddress()));
|
final int maxSubaddresses = addressService.getLastUsedSubaddress() + wallet.getDeviceType().getSubaddressLookahead();
|
||||||
|
if(wallet.getNumSubaddresses() < maxSubaddresses) {
|
||||||
|
setAddress(AddressService.getInstance().freshSubaddress());
|
||||||
|
} else {
|
||||||
|
Toast.makeText(getContext(), getResources().getString(R.string.max_subaddresses_warning), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setAddress(Subaddress subaddress) {
|
||||||
|
addressTextView.setText(subaddress.getAddress());
|
||||||
|
addressImageView.setImageBitmap(generate(subaddress.getAddress(), 256, 256));
|
||||||
|
copyAddressImageButton.setOnClickListener(view1 -> Helper.clipBoardCopy(getContext(), "address", subaddress.getAddress()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Bitmap generate(String text, int width, int height) {
|
public Bitmap generate(String text, int width, int height) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package net.mynero.wallet.service;
|
package net.mynero.wallet.service;
|
||||||
|
|
||||||
|
import net.mynero.wallet.MoneroApplication;
|
||||||
import net.mynero.wallet.data.Subaddress;
|
import net.mynero.wallet.data.Subaddress;
|
||||||
import net.mynero.wallet.model.TransactionInfo;
|
import net.mynero.wallet.model.TransactionInfo;
|
||||||
import net.mynero.wallet.model.Wallet;
|
import net.mynero.wallet.model.Wallet;
|
||||||
|
@ -14,6 +15,7 @@ import java.util.Locale;
|
||||||
public class AddressService extends ServiceBase {
|
public class AddressService extends ServiceBase {
|
||||||
public static AddressService instance = null;
|
public static AddressService instance = null;
|
||||||
private int latestAddressIndex = 1;
|
private int latestAddressIndex = 1;
|
||||||
|
private int lastUsedSubaddress = 0;
|
||||||
|
|
||||||
public AddressService(MoneroHandlerThread thread) {
|
public AddressService(MoneroHandlerThread thread) {
|
||||||
super(thread);
|
super(thread);
|
||||||
|
@ -25,9 +27,18 @@ public class AddressService extends ServiceBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshAddresses() {
|
public void refreshAddresses() {
|
||||||
|
List<TransactionInfo> localTransactionList = new ArrayList<>(HistoryService.getInstance().getHistory());
|
||||||
|
for (TransactionInfo info : localTransactionList) {
|
||||||
|
if (info.addressIndex > lastUsedSubaddress)
|
||||||
|
lastUsedSubaddress = info.addressIndex;
|
||||||
|
}
|
||||||
latestAddressIndex = WalletManager.getInstance().getWallet().getNumSubaddresses();
|
latestAddressIndex = WalletManager.getInstance().getWallet().getNumSubaddresses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getLastUsedSubaddress() {
|
||||||
|
return lastUsedSubaddress;
|
||||||
|
}
|
||||||
|
|
||||||
public String getPrimaryAddress() {
|
public String getPrimaryAddress() {
|
||||||
return WalletManager.getInstance().getWallet().getAddress();
|
return WalletManager.getInstance().getWallet().getAddress();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,27 @@
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/recv_monero_textview"
|
android:id="@+id/recv_monero_textview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="32dp"
|
android:layout_marginBottom="32dp"
|
||||||
android:text="@string/recv_monero"
|
android:text="@string/recv_monero"
|
||||||
android:textSize="32sp"
|
android:textSize="32sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
app:layout_constraintBottom_toTopOf="@id/monero_qr_imageview"
|
app:layout_constraintBottom_toTopOf="@id/monero_qr_imageview"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toStartOf="@id/fresh_address_imageview"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fresh_address_imageview"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/lb_ic_replay"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/recv_monero_textview"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@id/recv_monero_textview"
|
||||||
|
app:tint="@color/oled_textColorPrimary" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/monero_qr_imageview"
|
android:id="@+id/monero_qr_imageview"
|
||||||
android:layout_width="256dp"
|
android:layout_width="256dp"
|
||||||
|
|
|
@ -98,4 +98,5 @@
|
||||||
<string name="outpoint_text">Outpoint: %1$s</string>
|
<string name="outpoint_text">Outpoint: %1$s</string>
|
||||||
<string name="create_wallet_failed">Create wallet failed: %1$s</string>
|
<string name="create_wallet_failed">Create wallet failed: %1$s</string>
|
||||||
<string name="wallet_keys_label">Wallet Keys</string>
|
<string name="wallet_keys_label">Wallet Keys</string>
|
||||||
|
<string name="max_subaddresses_warning">Max subaddresses. Please receive funds first.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue