mirror of https://github.com/m2049r/xmrwallet.git
Some refactoring (#742)
* configure enabling of shift & exchange * refactor qr logo code * fix rename wallet
This commit is contained in:
parent
c002b81ebd
commit
f4c1af1bb8
|
@ -7,8 +7,8 @@ android {
|
||||||
applicationId "com.m2049r.xmrwallet"
|
applicationId "com.m2049r.xmrwallet"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 900
|
versionCode 1000
|
||||||
versionName "1.19.0.2 'XXX'"
|
versionName "2.0.0.0 'Puginarug'"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
|
|
|
@ -985,16 +985,16 @@ public class LoginActivity extends BaseActivity
|
||||||
File dstDir = dstWallet.getParentFile();
|
File dstDir = dstWallet.getParentFile();
|
||||||
String dstName = dstWallet.getName();
|
String dstName = dstWallet.getName();
|
||||||
try {
|
try {
|
||||||
try {
|
copyFile(new File(srcDir, srcName + ".keys"), new File(dstDir, dstName + ".keys"));
|
||||||
|
try { // cache & address.txt are optional files
|
||||||
copyFile(new File(srcDir, srcName), new File(dstDir, dstName));
|
copyFile(new File(srcDir, srcName), new File(dstDir, dstName));
|
||||||
|
copyFile(new File(srcDir, srcName + ".address.txt"), new File(dstDir, dstName + ".address.txt"));
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Timber.d("CACHE %s", ignoreCacheError);
|
Timber.d("CACHE %s", ignoreCacheError);
|
||||||
if (!ignoreCacheError) { // ignore cache backup error if backing up (can be resynced)
|
if (!ignoreCacheError) { // ignore cache backup error if backing up (can be resynced)
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
copyFile(new File(srcDir, srcName + ".keys"), new File(dstDir, dstName + ".keys"));
|
|
||||||
copyFile(new File(srcDir, srcName + ".address.txt"), new File(dstDir, dstName + ".address.txt"));
|
|
||||||
success = true;
|
success = true;
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Timber.e("wallet copy failed: %s", ex.getMessage());
|
Timber.e("wallet copy failed: %s", ex.getMessage());
|
||||||
|
|
|
@ -385,24 +385,18 @@ public class ReceiveFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Bitmap addLogo(Bitmap qrBitmap) {
|
private Bitmap addLogo(Bitmap qrBitmap) {
|
||||||
|
// addume logo & qrcode are both square
|
||||||
Bitmap logo = getMoneroLogo();
|
Bitmap logo = getMoneroLogo();
|
||||||
int qrWidth = qrBitmap.getWidth();
|
final int qrSize = qrBitmap.getWidth();
|
||||||
int qrHeight = qrBitmap.getHeight();
|
final int logoSize = logo.getWidth();
|
||||||
int logoWidth = logo.getWidth();
|
|
||||||
int logoHeight = logo.getHeight();
|
|
||||||
|
|
||||||
Bitmap logoBitmap = Bitmap.createBitmap(qrWidth, qrHeight, Bitmap.Config.ARGB_8888);
|
Bitmap logoBitmap = Bitmap.createBitmap(qrSize, qrSize, Bitmap.Config.ARGB_8888);
|
||||||
Canvas canvas = new Canvas(logoBitmap);
|
Canvas canvas = new Canvas(logoBitmap);
|
||||||
canvas.drawBitmap(qrBitmap, 0, 0, null);
|
canvas.drawBitmap(qrBitmap, 0, 0, null);
|
||||||
canvas.save();
|
canvas.save();
|
||||||
// figure out how to scale the logo
|
final float sx = 0.2f * qrSize / logoSize;
|
||||||
float scaleSize = 1.0f;
|
canvas.scale(sx, sx, qrSize / 2f, qrSize / 2f);
|
||||||
while ((logoWidth / scaleSize) > (qrWidth / 5.) || (logoHeight / scaleSize) > (qrHeight / 5.)) {
|
canvas.drawBitmap(logo, (qrSize - logoSize) / 2f, (qrSize - logoSize) / 2f, null);
|
||||||
scaleSize *= 2;
|
|
||||||
}
|
|
||||||
float sx = 1.0f / scaleSize;
|
|
||||||
canvas.scale(sx, sx, qrWidth / 2f, qrHeight / 2f);
|
|
||||||
canvas.drawBitmap(logo, (qrWidth - logoWidth) / 2f, (qrHeight - logoHeight) / 2f, null);
|
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
return logoBitmap;
|
return logoBitmap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,8 @@ public class WalletFragment extends Fragment
|
||||||
sCurrency = view.findViewById(R.id.sCurrency);
|
sCurrency = view.findViewById(R.id.sCurrency);
|
||||||
List<String> currencies = new ArrayList<>();
|
List<String> currencies = new ArrayList<>();
|
||||||
currencies.add(Helper.BASE_CRYPTO);
|
currencies.add(Helper.BASE_CRYPTO);
|
||||||
currencies.addAll(Arrays.asList(getResources().getStringArray(R.array.currency)));
|
if (Helper.SHOW_EXCHANGERATES)
|
||||||
|
currencies.addAll(Arrays.asList(getResources().getStringArray(R.array.currency)));
|
||||||
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(Objects.requireNonNull(getContext()), R.layout.item_spinner_balance, currencies);
|
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(Objects.requireNonNull(getContext()), R.layout.item_spinner_balance, currencies);
|
||||||
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
sCurrency.setAdapter(spinnerAdapter);
|
sCurrency.setAdapter(spinnerAdapter);
|
||||||
|
|
|
@ -117,32 +117,34 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||||
|
|
||||||
View view = inflater.inflate(R.layout.fragment_send_address, container, false);
|
View view = inflater.inflate(R.layout.fragment_send_address, container, false);
|
||||||
|
|
||||||
tvXmrTo = view.findViewById(R.id.tvXmrTo);
|
if (Helper.ALLOW_SHIFT) {
|
||||||
|
tvXmrTo = view.findViewById(R.id.tvXmrTo);
|
||||||
ibCrypto = new HashMap<>();
|
ibCrypto = new HashMap<>();
|
||||||
for (Crypto crypto : Crypto.values()) {
|
for (Crypto crypto : Crypto.values()) {
|
||||||
final ImageButton button = view.findViewById(crypto.getButtonId());
|
final ImageButton button = view.findViewById(crypto.getButtonId());
|
||||||
ibCrypto.put(crypto, button);
|
ibCrypto.put(crypto, button);
|
||||||
button.setOnClickListener(v -> {
|
button.setOnClickListener(v -> {
|
||||||
if (possibleCryptos.contains(crypto)) {
|
if (possibleCryptos.contains(crypto)) {
|
||||||
selectedCrypto = crypto;
|
selectedCrypto = crypto;
|
||||||
updateCryptoButtons(false);
|
updateCryptoButtons(false);
|
||||||
} else {
|
|
||||||
// show help what to do:
|
|
||||||
if (button.getId() != R.id.ibXMR) {
|
|
||||||
final String name = getResources().getStringArray(R.array.cryptos)[crypto.ordinal()];
|
|
||||||
final String symbol = getCryptoForButton(button).getSymbol();
|
|
||||||
tvXmrTo.setText(Html.fromHtml(getString(R.string.info_xmrto_help, name, symbol)));
|
|
||||||
tvXmrTo.setVisibility(View.VISIBLE);
|
|
||||||
} else {
|
} else {
|
||||||
tvXmrTo.setText(Html.fromHtml(getString(R.string.info_xmrto_help_xmr)));
|
// show help what to do:
|
||||||
tvXmrTo.setVisibility(View.VISIBLE);
|
if (button.getId() != R.id.ibXMR) {
|
||||||
|
final String name = getResources().getStringArray(R.array.cryptos)[crypto.ordinal()];
|
||||||
|
final String symbol = getCryptoForButton(button).getSymbol();
|
||||||
|
tvXmrTo.setText(Html.fromHtml(getString(R.string.info_xmrto_help, name, symbol)));
|
||||||
|
tvXmrTo.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
tvXmrTo.setText(Html.fromHtml(getString(R.string.info_xmrto_help_xmr)));
|
||||||
|
tvXmrTo.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
|
updateCryptoButtons(true);
|
||||||
|
} else {
|
||||||
|
view.findViewById(R.id.llExchange).setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
updateCryptoButtons(true);
|
|
||||||
|
|
||||||
etAddress = view.findViewById(R.id.etAddress);
|
etAddress = view.findViewById(R.id.etAddress);
|
||||||
etAddress.getEditText().setRawInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
etAddress.getEditText().setRawInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||||
etAddress.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
etAddress.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||||
|
@ -285,6 +287,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCryptoButtons(boolean noAddress) {
|
private void updateCryptoButtons(boolean noAddress) {
|
||||||
|
if (!Helper.ALLOW_SHIFT) return;
|
||||||
for (Crypto crypto : Crypto.values()) {
|
for (Crypto crypto : Crypto.values()) {
|
||||||
if (crypto == selectedCrypto) {
|
if (crypto == selectedCrypto) {
|
||||||
selectedCrypto(crypto);
|
selectedCrypto(crypto);
|
||||||
|
@ -447,7 +450,11 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
||||||
BarcodeData barcodeData = sendListener.getBarcodeData();
|
BarcodeData barcodeData = sendListener.getBarcodeData();
|
||||||
if (barcodeData != null) {
|
if (barcodeData != null) {
|
||||||
Timber.d("GOT DATA");
|
Timber.d("GOT DATA");
|
||||||
|
if (!Helper.ALLOW_SHIFT && (barcodeData.asset != Crypto.XMR)) {
|
||||||
|
Timber.d("BUT ONLY XMR SUPPORTED");
|
||||||
|
barcodeData = null;
|
||||||
|
sendListener.setBarcodeData(barcodeData);
|
||||||
|
}
|
||||||
if (barcodeData.address != null) {
|
if (barcodeData.address != null) {
|
||||||
etAddress.getEditText().setText(barcodeData.address);
|
etAddress.getEditText().setText(barcodeData.address);
|
||||||
possibleCryptos.clear();
|
possibleCryptos.clear();
|
||||||
|
|
|
@ -57,6 +57,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import com.google.android.material.textfield.TextInputLayout;
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
import com.m2049r.xmrwallet.BuildConfig;
|
import com.m2049r.xmrwallet.BuildConfig;
|
||||||
import com.m2049r.xmrwallet.R;
|
import com.m2049r.xmrwallet.R;
|
||||||
|
import com.m2049r.xmrwallet.data.Crypto;
|
||||||
import com.m2049r.xmrwallet.model.WalletManager;
|
import com.m2049r.xmrwallet.model.WalletManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -78,7 +79,10 @@ import timber.log.Timber;
|
||||||
public class Helper {
|
public class Helper {
|
||||||
static public final String NOCRAZYPASS_FLAGFILE = ".nocrazypass";
|
static public final String NOCRAZYPASS_FLAGFILE = ".nocrazypass";
|
||||||
|
|
||||||
static public final String BASE_CRYPTO = "XMR";
|
static public final String BASE_CRYPTO = Crypto.XMR.getSymbol();
|
||||||
|
|
||||||
|
static public final boolean SHOW_EXCHANGERATES = true;
|
||||||
|
static public final boolean ALLOW_SHIFT = true;
|
||||||
|
|
||||||
static private final String WALLET_DIR = "wallets";
|
static private final String WALLET_DIR = "wallets";
|
||||||
static private final String MONERO_DIR = "monero";
|
static private final String MONERO_DIR = "monero";
|
||||||
|
|
|
@ -18,8 +18,6 @@ package com.m2049r.xmrwallet.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -27,6 +25,9 @@ import android.widget.ImageButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.m2049r.xmrwallet.R;
|
import com.m2049r.xmrwallet.R;
|
||||||
import com.m2049r.xmrwallet.dialog.HelpFragment;
|
import com.m2049r.xmrwallet.dialog.HelpFragment;
|
||||||
|
|
||||||
|
@ -44,12 +45,13 @@ public class Notice {
|
||||||
synchronized (Notice.class) {
|
synchronized (Notice.class) {
|
||||||
if (notices != null) return;
|
if (notices != null) return;
|
||||||
notices = new ArrayList<>();
|
notices = new ArrayList<>();
|
||||||
notices.add(
|
if (Helper.ALLOW_SHIFT)
|
||||||
new Notice(NOTICE_SHOW_XMRTO_ENABLED_SEND,
|
notices.add(
|
||||||
R.string.info_xmrto_enabled,
|
new Notice(NOTICE_SHOW_XMRTO_ENABLED_SEND,
|
||||||
R.string.help_xmrto,
|
R.string.info_xmrto_enabled,
|
||||||
1)
|
R.string.help_xmrto,
|
||||||
);
|
1)
|
||||||
|
);
|
||||||
notices.add(
|
notices.add(
|
||||||
new Notice(NOTICE_SHOW_LEDGER,
|
new Notice(NOTICE_SHOW_LEDGER,
|
||||||
R.string.info_ledger_enabled,
|
R.string.info_ledger_enabled,
|
||||||
|
|
|
@ -172,7 +172,8 @@ public class ExchangeEditText extends LinearLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setCurrencyAdapter(Spinner spinner, List<String> currencies) {
|
protected void setCurrencyAdapter(Spinner spinner, List<String> currencies) {
|
||||||
currencies.addAll(Arrays.asList(getResources().getStringArray(R.array.currency)));
|
if (Helper.SHOW_EXCHANGERATES)
|
||||||
|
currencies.addAll(Arrays.asList(getResources().getStringArray(R.array.currency)));
|
||||||
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, currencies);
|
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, currencies);
|
||||||
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
spinner.setAdapter(spinnerAdapter);
|
spinner.setAdapter(spinnerAdapter);
|
||||||
|
|
|
@ -155,7 +155,8 @@ public class ExchangeView extends LinearLayout {
|
||||||
void setCurrencyAdapter(Spinner spinner) {
|
void setCurrencyAdapter(Spinner spinner) {
|
||||||
List<String> currencies = new ArrayList<>();
|
List<String> currencies = new ArrayList<>();
|
||||||
currencies.add(Helper.BASE_CRYPTO);
|
currencies.add(Helper.BASE_CRYPTO);
|
||||||
currencies.addAll(Arrays.asList(getResources().getStringArray(R.array.currency)));
|
if (Helper.SHOW_EXCHANGERATES)
|
||||||
|
currencies.addAll(Arrays.asList(getResources().getStringArray(R.array.currency)));
|
||||||
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, currencies);
|
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, currencies);
|
||||||
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
spinner.setAdapter(spinnerAdapter);
|
spinner.setAdapter(spinnerAdapter);
|
||||||
|
@ -167,11 +168,7 @@ public class ExchangeView extends LinearLayout {
|
||||||
etAmount = findViewById(R.id.etAmount);
|
etAmount = findViewById(R.id.etAmount);
|
||||||
tvAmountB = findViewById(R.id.tvAmountB);
|
tvAmountB = findViewById(R.id.tvAmountB);
|
||||||
sCurrencyA = findViewById(R.id.sCurrencyA);
|
sCurrencyA = findViewById(R.id.sCurrencyA);
|
||||||
ArrayAdapter adapter = ArrayAdapter.createFromResource(getContext(), R.array.currency, R.layout.item_spinner);
|
|
||||||
adapter.setDropDownViewResource(R.layout.item_spinner_dropdown_item);
|
|
||||||
sCurrencyA.setAdapter(adapter);
|
|
||||||
sCurrencyB = findViewById(R.id.sCurrencyB);
|
sCurrencyB = findViewById(R.id.sCurrencyB);
|
||||||
sCurrencyB.setAdapter(adapter);
|
|
||||||
evExchange = findViewById(R.id.evExchange);
|
evExchange = findViewById(R.id.evExchange);
|
||||||
pbExchange = findViewById(R.id.pbExchange);
|
pbExchange = findViewById(R.id.pbExchange);
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/llExchange"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
|
@ -45,10 +45,6 @@ VERSION:
|
||||||
echo MONERUJO `git -C . branch | grep "^\*" | sed 's/^..//'` with MONERO `git -C monero branch | grep "^\*" | sed 's/^..//'` > VERSION
|
echo MONERUJO `git -C . branch | grep "^\*" | sed 's/^..//'` with MONERO `git -C monero branch | grep "^\*" | sed 's/^..//'` > VERSION
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-docker container rm monero-android-arm64 -f
|
|
||||||
-docker container rm monero-android-arm32 -f
|
|
||||||
-docker container rm monero-android-x86_64 -f
|
|
||||||
-docker container rm monero-android-x86 -f
|
|
||||||
-rm -rf arm64-v8a
|
-rm -rf arm64-v8a
|
||||||
-rm -rf armeabi-v7a
|
-rm -rf armeabi-v7a
|
||||||
-rm -rf x86_64
|
-rm -rf x86_64
|
||||||
|
@ -57,6 +53,10 @@ clean:
|
||||||
-rm -f VERSION
|
-rm -f VERSION
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
|
-docker container rm monero-android-arm64 -f
|
||||||
|
-docker container rm monero-android-arm32 -f
|
||||||
|
-docker container rm monero-android-x86_64 -f
|
||||||
|
-docker container rm monero-android-x86 -f
|
||||||
-docker image rm monero-android-arm64 -f
|
-docker image rm monero-android-arm64 -f
|
||||||
-docker image rm monero-android-arm32 -f
|
-docker image rm monero-android-arm32 -f
|
||||||
-docker image rm monero-android-x86_64 -f
|
-docker image rm monero-android-x86_64 -f
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
MONERUJO feature_dockerbuild with MONERO release-v0.17.1.9-monerujo
|
MONERUJO feature_refactor_some with MONERO feature_noaddress
|
||||||
|
|
Loading…
Reference in New Issue