Some refactoring (#742)

* configure enabling of shift & exchange
* refactor qr logo code
* fix rename wallet
This commit is contained in:
m2049r 2021-04-17 21:03:32 +02:00 committed by GitHub
parent c002b81ebd
commit f4c1af1bb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 70 additions and 63 deletions

View File

@ -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 {

View File

@ -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());

View File

@ -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;
} }

View File

@ -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);

View File

@ -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();

View File

@ -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";

View File

@ -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,

View File

@ -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);

View File

@ -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);

View File

@ -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">

View File

@ -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

View File

@ -1 +1 @@
MONERUJO feature_dockerbuild with MONERO release-v0.17.1.9-monerujo MONERUJO feature_refactor_some with MONERO feature_noaddress