mirror of
https://github.com/m2049r/xmrwallet
synced 2025-09-04 17:28:42 +02:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c9927edbd1 | ||
![]() |
f0a3c05a9a | ||
![]() |
d6eb82c457 | ||
![]() |
7f47307307 | ||
![]() |
165dd3dfd1 | ||
![]() |
171727c9db | ||
![]() |
1492814ec9 | ||
![]() |
9b1225fe4b | ||
![]() |
595d88e42e | ||
![]() |
0e207d7401 | ||
![]() |
5920d6c9e8 |
@@ -8,8 +8,8 @@ android {
|
||||
applicationId "com.m2049r.xmrwallet"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 25
|
||||
versionCode 65
|
||||
versionName "1.3.5 'Satoshis Dream'"
|
||||
versionCode 70
|
||||
versionName "1.3.10 'Satoshis Dream'"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
@@ -27,6 +27,9 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
}
|
||||
}
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
|
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher.png
Executable file
BIN
app/src/debug/res/mipmap-hdpi/ic_launcher.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 8.1 KiB |
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher.png
Executable file
BIN
app/src/debug/res/mipmap-mdpi/ic_launcher.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher.png
Executable file
BIN
app/src/debug/res/mipmap-xhdpi/ic_launcher.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
Executable file
BIN
app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
Executable file
BIN
app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
4
app/src/debug/res/values/strings.xml
Normal file
4
app/src/debug/res/values/strings.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" translatable="false">monerujo - Debug</string>
|
||||
</resources>
|
@@ -291,41 +291,48 @@ Java_com_m2049r_xmrwallet_model_WalletManager_openWalletJ(JNIEnv *env, jobject i
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_com_m2049r_xmrwallet_model_WalletManager_recoveryWalletJ(JNIEnv *env, jobject instance,
|
||||
jstring path, jstring mnemonic,
|
||||
jstring path, jstring password,
|
||||
jstring mnemonic,
|
||||
jboolean isTestNet,
|
||||
jlong restoreHeight) {
|
||||
const char *_path = env->GetStringUTFChars(path, NULL);
|
||||
const char *_password = env->GetStringUTFChars(password, NULL);
|
||||
const char *_mnemonic = env->GetStringUTFChars(mnemonic, NULL);
|
||||
|
||||
Bitmonero::Wallet *wallet =
|
||||
Bitmonero::WalletManagerFactory::getWalletManager()->recoveryWallet(
|
||||
std::string(_path),
|
||||
std::string(_password),
|
||||
std::string(_mnemonic),
|
||||
isTestNet,
|
||||
restoreHeight);
|
||||
|
||||
env->ReleaseStringUTFChars(path, _path);
|
||||
env->ReleaseStringUTFChars(password, _password);
|
||||
env->ReleaseStringUTFChars(mnemonic, _mnemonic);
|
||||
return reinterpret_cast<jlong>(wallet);
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_com_m2049r_xmrwallet_model_WalletManager_createWalletFromKeysJ(JNIEnv *env, jobject instance,
|
||||
jstring path, jstring language,
|
||||
Java_com_m2049r_xmrwallet_model_WalletManager_createWalletWithKeysJ(JNIEnv *env, jobject instance,
|
||||
jstring path, jstring password,
|
||||
jstring language,
|
||||
jboolean isTestNet,
|
||||
jlong restoreHeight,
|
||||
jstring addressString,
|
||||
jstring viewKeyString,
|
||||
jstring spendKeyString) {
|
||||
const char *_path = env->GetStringUTFChars(path, NULL);
|
||||
const char *_password = env->GetStringUTFChars(password, NULL);
|
||||
const char *_language = env->GetStringUTFChars(language, NULL);
|
||||
const char *_addressString = env->GetStringUTFChars(addressString, NULL);
|
||||
const char *_viewKeyString = env->GetStringUTFChars(viewKeyString, NULL);
|
||||
const char *_spendKeyString = env->GetStringUTFChars(spendKeyString, NULL);
|
||||
|
||||
Bitmonero::Wallet *wallet =
|
||||
Bitmonero::WalletManagerFactory::getWalletManager()->createWalletFromKeys(
|
||||
Bitmonero::WalletManagerFactory::getWalletManager()->createWalletWithKeys(
|
||||
std::string(_path),
|
||||
std::string(_password),
|
||||
std::string(_language),
|
||||
isTestNet,
|
||||
restoreHeight,
|
||||
@@ -334,6 +341,7 @@ Java_com_m2049r_xmrwallet_model_WalletManager_createWalletFromKeysJ(JNIEnv *env,
|
||||
std::string(_spendKeyString));
|
||||
|
||||
env->ReleaseStringUTFChars(path, _path);
|
||||
env->ReleaseStringUTFChars(password, _password);
|
||||
env->ReleaseStringUTFChars(language, _language);
|
||||
env->ReleaseStringUTFChars(addressString, _addressString);
|
||||
env->ReleaseStringUTFChars(viewKeyString, _viewKeyString);
|
||||
|
@@ -778,13 +778,14 @@ public class LoginActivity extends SecureActivity
|
||||
static final String MNEMONIC_LANGUAGE = "English"; // see mnemonics/electrum-words.cpp for more
|
||||
|
||||
private class AsyncCreateWallet extends AsyncTask<Void, Void, Boolean> {
|
||||
String walletName;
|
||||
String walletPassword;
|
||||
WalletCreator walletCreator;
|
||||
final String walletName;
|
||||
final String walletPassword;
|
||||
final WalletCreator walletCreator;
|
||||
|
||||
File newWalletFile;
|
||||
|
||||
public AsyncCreateWallet(String name, String password, WalletCreator walletCreator) {
|
||||
public AsyncCreateWallet(final String name, final String password,
|
||||
final WalletCreator walletCreator) {
|
||||
super();
|
||||
this.walletName = name;
|
||||
this.walletPassword = password;
|
||||
@@ -814,12 +815,7 @@ public class LoginActivity extends SecureActivity
|
||||
return false;
|
||||
}
|
||||
|
||||
File newWalletFolder = Helper.getNewWalletDir(getApplicationContext());
|
||||
if (!newWalletFolder.isDirectory()) {
|
||||
Timber.e("New Wallet dir " + newWalletFolder.getAbsolutePath() + "is not a directory");
|
||||
return false;
|
||||
}
|
||||
newWalletFile = new File(newWalletFolder, walletName);
|
||||
newWalletFile = new File(walletFolder, walletName);
|
||||
boolean success = walletCreator.createWallet(newWalletFile, walletPassword);
|
||||
if (success) {
|
||||
return true;
|
||||
@@ -844,7 +840,8 @@ public class LoginActivity extends SecureActivity
|
||||
}
|
||||
}
|
||||
|
||||
public void createWallet(String name, String password, WalletCreator walletCreator) {
|
||||
public void createWallet(final String name, final String password,
|
||||
final WalletCreator walletCreator) {
|
||||
new AsyncCreateWallet(name, password, walletCreator)
|
||||
.executeOnExecutor(MoneroThreadPoolExecutor.MONERO_THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
@@ -865,7 +862,7 @@ public class LoginActivity extends SecureActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGenerate(String name, String password) {
|
||||
public void onGenerate(final String name, final String password) {
|
||||
createWallet(name, password,
|
||||
new WalletCreator() {
|
||||
public boolean createWallet(File aFile, String password) {
|
||||
@@ -883,16 +880,15 @@ public class LoginActivity extends SecureActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGenerate(String name, String password, final String seed, final long restoreHeight) {
|
||||
public void onGenerate(final String name, final String password, final String seed,
|
||||
final long restoreHeight) {
|
||||
createWallet(name, password,
|
||||
new WalletCreator() {
|
||||
public boolean createWallet(File aFile, String password) {
|
||||
Wallet newWallet = WalletManager.getInstance().recoveryWallet(aFile, seed, restoreHeight);
|
||||
Wallet newWallet = WalletManager.getInstance().
|
||||
recoveryWallet(aFile, password, seed, restoreHeight);
|
||||
boolean success = (newWallet.getStatus() == Wallet.Status.Status_Ok);
|
||||
if (success) {
|
||||
newWallet.setPassword(password);
|
||||
success = success && newWallet.store();
|
||||
} else {
|
||||
if (!success) {
|
||||
Timber.e(newWallet.getErrorString());
|
||||
toast(newWallet.getErrorString());
|
||||
}
|
||||
@@ -903,19 +899,17 @@ public class LoginActivity extends SecureActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGenerate(String name, String password,
|
||||
final String address, final String viewKey, final String spendKey, final long restoreHeight) {
|
||||
public void onGenerate(final String name, final String password,
|
||||
final String address, final String viewKey, final String spendKey,
|
||||
final long restoreHeight) {
|
||||
createWallet(name, password,
|
||||
new WalletCreator() {
|
||||
public boolean createWallet(File aFile, String password) {
|
||||
Wallet newWallet = WalletManager.getInstance()
|
||||
.createWalletFromKeys(aFile, MNEMONIC_LANGUAGE, restoreHeight,
|
||||
.createWalletWithKeys(aFile, password, MNEMONIC_LANGUAGE, restoreHeight,
|
||||
address, viewKey, spendKey);
|
||||
boolean success = (newWallet.getStatus() == Wallet.Status.Status_Ok);
|
||||
if (success) {
|
||||
newWallet.setPassword(password);
|
||||
success = success && newWallet.store();
|
||||
} else {
|
||||
if (!success) {
|
||||
Timber.e(newWallet.getErrorString());
|
||||
toast(newWallet.getErrorString());
|
||||
}
|
||||
@@ -936,16 +930,10 @@ public class LoginActivity extends SecureActivity
|
||||
|
||||
@Override
|
||||
public void onAccept(final String name, final String password) {
|
||||
File newWalletFile = new File(Helper.getNewWalletDir(getApplicationContext()), name);
|
||||
Timber.d("New Wallet %s", newWalletFile.getAbsolutePath());
|
||||
newWalletFile.delete(); // when recovering wallets, the cache seems corrupt
|
||||
// TODO: figure out why this is so? Only for a private testnet?
|
||||
|
||||
// now copy the new wallet to the wallet folder
|
||||
File walletFile = new File(getStorageRoot(), name);
|
||||
Timber.d("Wallet %s", walletFile.getAbsolutePath());
|
||||
copyWallet(newWalletFile, walletFile, false, true);
|
||||
deleteWallet(newWalletFile); // delete it no matter what (can't recover from this anyway)
|
||||
File walletFolder = getStorageRoot();
|
||||
File walletFile = new File(walletFolder, name);
|
||||
Timber.d("New Wallet %s", walletFile.getAbsolutePath());
|
||||
walletFile.delete(); // when recovering wallets, the cache seems corrupt
|
||||
|
||||
boolean rc = testWallet(walletFile.getAbsolutePath(), password) == Wallet.Status.Status_Ok;
|
||||
|
||||
|
@@ -43,6 +43,7 @@ import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.m2049r.xmrwallet.dialog.HelpFragment;
|
||||
import com.m2049r.xmrwallet.layout.WalletInfoAdapter;
|
||||
import com.m2049r.xmrwallet.model.WalletManager;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
@@ -61,15 +62,18 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
|
||||
private WalletInfoAdapter adapter;
|
||||
|
||||
List<WalletManager.WalletInfo> walletList = new ArrayList<>();
|
||||
List<WalletManager.WalletInfo> displayedList = new ArrayList<>();
|
||||
private List<WalletManager.WalletInfo> walletList = new ArrayList<>();
|
||||
private List<WalletManager.WalletInfo> displayedList = new ArrayList<>();
|
||||
|
||||
EditText etDummy;
|
||||
ImageView ivGunther;
|
||||
DropDownEditText etDaemonAddress;
|
||||
ArrayAdapter<String> nodeAdapter;
|
||||
private EditText etDummy;
|
||||
private ImageView ivGunther;
|
||||
private DropDownEditText etDaemonAddress;
|
||||
private ArrayAdapter<String> nodeAdapter;
|
||||
|
||||
Listener activityCallback;
|
||||
private View llXmrToEnabled;
|
||||
private View ibXmrToInfoClose;
|
||||
|
||||
private Listener activityCallback;
|
||||
|
||||
// Container Activity must implement this interface
|
||||
public interface Listener {
|
||||
@@ -165,6 +169,25 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
recyclerView.setAdapter(adapter);
|
||||
|
||||
etDummy = (EditText) view.findViewById(R.id.etDummy);
|
||||
|
||||
llXmrToEnabled = view.findViewById(R.id.llXmrToEnabled);
|
||||
llXmrToEnabled.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
HelpFragment.display(getChildFragmentManager(), R.string.help_xmrto);
|
||||
|
||||
}
|
||||
});
|
||||
ibXmrToInfoClose = view.findViewById(R.id.ibXmrToInfoClose);
|
||||
ibXmrToInfoClose.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
llXmrToEnabled.setVisibility(View.GONE);
|
||||
showXmrtoEnabled = false;
|
||||
saveXmrToPrefs();
|
||||
}
|
||||
});
|
||||
|
||||
etDaemonAddress = (DropDownEditText) view.findViewById(R.id.etDaemonAddress);
|
||||
nodeAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_dropdown_item_1line);
|
||||
etDaemonAddress.setAdapter(nodeAdapter);
|
||||
@@ -211,6 +234,9 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
});
|
||||
|
||||
loadPrefs();
|
||||
if (!showXmrtoEnabled) {
|
||||
llXmrToEnabled.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
@@ -290,9 +316,8 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
activityCallback.onWalletDetails(name, isTestnet());
|
||||
}
|
||||
|
||||
private boolean showReceive(@NonNull String name) {
|
||||
private void showReceive(@NonNull String name) {
|
||||
activityCallback.onWalletReceive(name, isTestnet());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -308,7 +333,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
}
|
||||
|
||||
boolean testnet = false;
|
||||
private boolean testnet = BuildConfig.DEBUG;
|
||||
|
||||
boolean isTestnet() {
|
||||
return testnet;
|
||||
@@ -336,6 +361,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
|
||||
private static final String PREF_DAEMON_TESTNET = "daemon_testnet";
|
||||
private static final String PREF_DAEMON_MAINNET = "daemon_mainnet";
|
||||
private static final String PREF_SHOW_XMRTO_ENABLED = "info_xmrto_enabled_login";
|
||||
|
||||
private static final String PREF_DAEMONLIST_MAINNET =
|
||||
"node.moneroworld.com:18089;node.xmrbackb.one;node.xmr.be";
|
||||
@@ -346,22 +372,33 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
private NodeList daemonTestNet;
|
||||
private NodeList daemonMainNet;
|
||||
|
||||
boolean showXmrtoEnabled = true;
|
||||
|
||||
void loadPrefs() {
|
||||
SharedPreferences sharedPref = activityCallback.getPrefs();
|
||||
|
||||
daemonMainNet = new NodeList(sharedPref.getString(PREF_DAEMON_MAINNET, PREF_DAEMONLIST_MAINNET));
|
||||
daemonTestNet = new NodeList(sharedPref.getString(PREF_DAEMON_TESTNET, PREF_DAEMONLIST_TESTNET));
|
||||
setNet(isTestnet(), false);
|
||||
|
||||
showXmrtoEnabled = sharedPref.getBoolean(PREF_SHOW_XMRTO_ENABLED, true);
|
||||
}
|
||||
|
||||
void saveXmrToPrefs() {
|
||||
SharedPreferences sharedPref = activityCallback.getPrefs();
|
||||
SharedPreferences.Editor editor = sharedPref.edit();
|
||||
editor.putBoolean(PREF_SHOW_XMRTO_ENABLED, showXmrtoEnabled);
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
void savePrefs() {
|
||||
savePrefs(false);
|
||||
}
|
||||
|
||||
void savePrefs(boolean usePreviousState) {
|
||||
Timber.d("SAVE / %s", usePreviousState);
|
||||
void savePrefs(boolean usePreviousTestnetState) {
|
||||
Timber.d("SAVE / %s", usePreviousTestnetState);
|
||||
// save the daemon address for the net
|
||||
boolean testnet = isTestnet() ^ usePreviousState;
|
||||
boolean testnet = isTestnet() ^ usePreviousTestnetState;
|
||||
String daemon = getDaemon();
|
||||
if (testnet) {
|
||||
daemonTestNet.setRecent(daemon);
|
||||
@@ -373,6 +410,7 @@ public class LoginFragment extends Fragment implements WalletInfoAdapter.OnInter
|
||||
SharedPreferences.Editor editor = sharedPref.edit();
|
||||
editor.putString(PREF_DAEMON_MAINNET, daemonMainNet.toString());
|
||||
editor.putString(PREF_DAEMON_TESTNET, daemonTestNet.toString());
|
||||
editor.putBoolean(PREF_SHOW_XMRTO_ENABLED, showXmrtoEnabled);
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
|
@@ -22,6 +22,7 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
@@ -140,6 +141,9 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
Timber.d("onDestroy()");
|
||||
if ((mBoundService != null) && !isSynced() && (getWallet() != null)) {
|
||||
saveWallet();
|
||||
}
|
||||
stopWalletService();
|
||||
super.onDestroy();
|
||||
}
|
||||
@@ -807,9 +811,6 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
|
||||
super.onBackPressed();
|
||||
}
|
||||
} else {
|
||||
if (!isSynced()) {
|
||||
saveWallet();
|
||||
}
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
@@ -818,4 +819,10 @@ public class WalletActivity extends SecureActivity implements WalletFragment.Lis
|
||||
public void onFragmentDone() {
|
||||
popFragmentStack(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SharedPreferences getPrefs() {
|
||||
return getPreferences(Context.MODE_PRIVATE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@
|
||||
package com.m2049r.xmrwallet.fragment.send;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
@@ -41,9 +42,11 @@ import com.m2049r.xmrwallet.data.BarcodeData;
|
||||
import com.m2049r.xmrwallet.data.PendingTx;
|
||||
import com.m2049r.xmrwallet.data.TxData;
|
||||
import com.m2049r.xmrwallet.data.TxDataBtc;
|
||||
import com.m2049r.xmrwallet.dialog.HelpFragment;
|
||||
import com.m2049r.xmrwallet.layout.SpendViewPager;
|
||||
import com.m2049r.xmrwallet.model.PendingTransaction;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.NodeList;
|
||||
import com.m2049r.xmrwallet.util.UserNotes;
|
||||
import com.m2049r.xmrwallet.widget.DotBar;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
@@ -63,6 +66,8 @@ public class SendFragment extends Fragment
|
||||
private Listener activityCallback;
|
||||
|
||||
public interface Listener {
|
||||
SharedPreferences getPrefs();
|
||||
|
||||
long getTotalFunds();
|
||||
|
||||
void onPrepareSend(String tag, TxData data);
|
||||
@@ -93,6 +98,10 @@ public class SendFragment extends Fragment
|
||||
|
||||
private Button bDone;
|
||||
|
||||
private View llXmrToEnabled;
|
||||
private View ibXmrToInfoClose;
|
||||
|
||||
|
||||
static private int MAX_FALLBACK = Integer.MAX_VALUE;
|
||||
|
||||
@Override
|
||||
@@ -110,6 +119,28 @@ public class SendFragment extends Fragment
|
||||
arrowPrev = getResources().getDrawable(R.drawable.ic_navigate_prev_white_24dp);
|
||||
arrowNext = getResources().getDrawable(R.drawable.ic_navigate_next_white_24dp);
|
||||
|
||||
llXmrToEnabled = view.findViewById(R.id.llXmrToEnabled);
|
||||
llXmrToEnabled.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
HelpFragment.display(getChildFragmentManager(), R.string.help_xmrto);
|
||||
|
||||
}
|
||||
});
|
||||
ibXmrToInfoClose = view.findViewById(R.id.ibXmrToInfoClose);
|
||||
ibXmrToInfoClose.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
llXmrToEnabled.setVisibility(View.GONE);
|
||||
showXmrtoEnabled = false;
|
||||
saveXmrToPrefs();
|
||||
}
|
||||
});
|
||||
loadPrefs();
|
||||
if (!showXmrtoEnabled) {
|
||||
llXmrToEnabled.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
spendViewPager = (SpendViewPager) view.findViewById(R.id.pager);
|
||||
pagerAdapter = new SpendPagerAdapter(getChildFragmentManager());
|
||||
spendViewPager.setOffscreenPageLimit(pagerAdapter.getCount()); // load & keep all pages in cache
|
||||
@@ -518,4 +549,22 @@ public class SendFragment extends Fragment
|
||||
inflater.inflate(R.menu.send_menu, menu);
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
}
|
||||
|
||||
// xmr.to info box
|
||||
private static final String PREF_SHOW_XMRTO_ENABLED = "info_xmrto_enabled_send";
|
||||
|
||||
boolean showXmrtoEnabled = true;
|
||||
|
||||
void loadPrefs() {
|
||||
SharedPreferences sharedPref = activityCallback.getPrefs();
|
||||
showXmrtoEnabled = sharedPref.getBoolean(PREF_SHOW_XMRTO_ENABLED, true);
|
||||
}
|
||||
|
||||
void saveXmrToPrefs() {
|
||||
SharedPreferences sharedPref = activityCallback.getPrefs();
|
||||
SharedPreferences.Editor editor = sharedPref.edit();
|
||||
editor.putBoolean(PREF_SHOW_XMRTO_ENABLED, showXmrtoEnabled);
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -130,6 +130,13 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
|
||||
void bind(int position) {
|
||||
this.infoItem = infoItems.get(position);
|
||||
|
||||
UserNotes userNotes = new UserNotes(infoItem.notes);
|
||||
if (userNotes.xmrtoKey != null) {
|
||||
ivTxType.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
ivTxType.setVisibility(View.GONE); // gives us more space for the amount
|
||||
}
|
||||
|
||||
long realAmount = infoItem.amount;
|
||||
if (infoItem.isPending) {
|
||||
realAmount = realAmount - infoItem.fee;
|
||||
@@ -163,13 +170,6 @@ public class TransactionInfoAdapter extends RecyclerView.Adapter<TransactionInfo
|
||||
setTxColour(outboundColour);
|
||||
}
|
||||
|
||||
UserNotes userNotes = new UserNotes(infoItem.notes);
|
||||
if (userNotes.xmrtoKey != null) {
|
||||
ivTxType.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
ivTxType.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
if ((userNotes.note.isEmpty())) {
|
||||
this.tvPaymentId.setText(infoItem.paymentId.equals("0000000000000000") ? "" : infoItem.paymentId);
|
||||
} else {
|
||||
|
@@ -86,31 +86,33 @@ public class WalletManager {
|
||||
|
||||
private native long openWalletJ(String path, String password, boolean isTestNet);
|
||||
|
||||
public Wallet recoveryWallet(File aFile, String mnemonic) {
|
||||
Wallet wallet = recoveryWallet(aFile, mnemonic, 0);
|
||||
manageWallet(wallet);
|
||||
return wallet;
|
||||
public Wallet recoveryWallet(File aFile, String password, String mnemonic) {
|
||||
return recoveryWallet(aFile, password, mnemonic, 0);
|
||||
}
|
||||
|
||||
public Wallet recoveryWallet(File aFile, String mnemonic, long restoreHeight) {
|
||||
long walletHandle = recoveryWalletJ(aFile.getAbsolutePath(), mnemonic, isTestNet(), restoreHeight);
|
||||
public Wallet recoveryWallet(File aFile, String password, String mnemonic, long restoreHeight) {
|
||||
long walletHandle = recoveryWalletJ(aFile.getAbsolutePath(), password, mnemonic,
|
||||
isTestNet(), restoreHeight);
|
||||
Wallet wallet = new Wallet(walletHandle);
|
||||
manageWallet(wallet);
|
||||
return wallet;
|
||||
}
|
||||
|
||||
private native long recoveryWalletJ(String path, String mnemonic, boolean isTestNet, long restoreHeight);
|
||||
private native long recoveryWalletJ(String path, String password, String mnemonic,
|
||||
boolean isTestNet, long restoreHeight);
|
||||
|
||||
public Wallet createWalletFromKeys(File aFile, String language, long restoreHeight,
|
||||
public Wallet createWalletWithKeys(File aFile, String password, String language, long restoreHeight,
|
||||
String addressString, String viewKeyString, String spendKeyString) {
|
||||
long walletHandle = createWalletFromKeysJ(aFile.getAbsolutePath(), language, isTestNet(), restoreHeight,
|
||||
long walletHandle = createWalletWithKeysJ(aFile.getAbsolutePath(), password,
|
||||
language, isTestNet(), restoreHeight,
|
||||
addressString, viewKeyString, spendKeyString);
|
||||
Wallet wallet = new Wallet(walletHandle);
|
||||
manageWallet(wallet);
|
||||
return wallet;
|
||||
}
|
||||
|
||||
private native long createWalletFromKeysJ(String path, String language,
|
||||
private native long createWalletWithKeysJ(String path, String password,
|
||||
String language,
|
||||
boolean isTestNet,
|
||||
long restoreHeight,
|
||||
String addressString,
|
||||
|
@@ -58,17 +58,6 @@ public class Helper {
|
||||
|
||||
static public int DISPLAY_DIGITS_INFO = 5;
|
||||
|
||||
static public File getNewWalletDir(Context context) {
|
||||
File newWalletDir = context.getDir("new", Context.MODE_PRIVATE);
|
||||
Timber.d("new wallet directory is %s", newWalletDir.getAbsolutePath());
|
||||
if (!newWalletDir.exists() || !newWalletDir.isDirectory()) {
|
||||
String msg = newWalletDir.getAbsolutePath() + " is not a directory!";
|
||||
Timber.e(msg);
|
||||
throw new IllegalStateException(msg);
|
||||
}
|
||||
return newWalletDir;
|
||||
}
|
||||
|
||||
static public File getStorageRoot(Context context) {
|
||||
if (!isExternalStorageWritable()) {
|
||||
String msg = context.getString(R.string.message_strorage_not_writable);
|
||||
|
@@ -89,7 +89,7 @@
|
||||
android:hint="@string/generate_address_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="textStart" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
@@ -109,7 +109,7 @@
|
||||
android:hint="@string/generate_viewkey_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="textStart" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
@@ -128,7 +128,7 @@
|
||||
android:hint="@string/generate_spendkey_hint"
|
||||
android:imeOptions="actionNext"
|
||||
android:inputType="textMultiLine"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="textStart" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
@@ -145,7 +145,7 @@
|
||||
android:hint="@string/generate_restoreheight_hint"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="textStart" />
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<Button
|
||||
|
@@ -10,6 +10,36 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llXmrToEnabled"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/moneroBlue"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawablePadding="8dp"
|
||||
android:drawableStart="@drawable/ic_info_white_24dp"
|
||||
android:gravity="start|center_vertical"
|
||||
android:padding="8dp"
|
||||
android:text="@string/info_xmrto_enabled"
|
||||
android:textColor="@color/white" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/ibXmrToInfoClose"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:backgroundTint="#00000000"
|
||||
android:padding="8dp"
|
||||
android:src="@drawable/ic_close_white_24dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etDummy"
|
||||
android:layout_width="0dp"
|
||||
|
@@ -6,6 +6,36 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llXmrToEnabled"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/moneroBlue"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawablePadding="8dp"
|
||||
android:drawableStart="@drawable/ic_info_white_24dp"
|
||||
android:gravity="start|center_vertical"
|
||||
android:padding="8dp"
|
||||
android:text="@string/info_xmrto_enabled"
|
||||
android:textColor="@color/white" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/ibXmrToInfoClose"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:backgroundTint="#00000000"
|
||||
android:padding="8dp"
|
||||
android:src="@drawable/ic_close_white_24dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etDummy"
|
||||
android:layout_width="0dp"
|
||||
@@ -16,6 +46,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@+id/llNavBar"
|
||||
android:layout_below="@id/llXmrToEnabled"
|
||||
android:padding="8dp" />
|
||||
|
||||
<LinearLayout
|
||||
|
@@ -16,36 +16,43 @@
|
||||
android:orientation="horizontal"
|
||||
android:padding="8dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivTxType"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_xmrto_32dp"
|
||||
android:visibility="visible"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_weight="9"
|
||||
android:orientation="vertical">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tx_amount"
|
||||
style="@style/MoneroText.PosAmount"
|
||||
<ImageView
|
||||
android:id="@+id/ivTxType"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_xmrto_32dp"
|
||||
android:visibility="visible" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
tools:text="999.999999" />
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tx_fee"
|
||||
style="@style/MoneroText.PosFee"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
tools:text="Fee 0.06817" />
|
||||
<TextView
|
||||
android:id="@+id/tx_amount"
|
||||
style="@style/MoneroText.PosAmount"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
tools:text="+ 999.999999" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tx_fee"
|
||||
style="@style/MoneroText.PosFee"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
tools:text="Fee 0.06817" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
|
@@ -172,6 +172,60 @@
|
||||
comisión de transacción, y lo opuesto en el caso de una prioridad baja. Por favor,
|
||||
ten en cuenta que si configuras tu transacción con una baja prioridad puede llevar horas
|
||||
hasta que sea incluída en la cadena de bloques. La prioridad por defecto es \"Media\".</p>
|
||||
<h1>Enviar BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin.
|
||||
Usamos la API de XMR.TO para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa
|
||||
https://xmr.to y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo
|
||||
no está asociado con XMR.TO y no puede ayudarte con su servicio.</p>
|
||||
<h2>Tipo de cambio XMR.TO<h2>
|
||||
<p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio XMR.TO.
|
||||
Estas incluyen el tipo de cambio del momento así como también los límites mínimo y máximo de BTC.
|
||||
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia. También verás el
|
||||
monto tope hasta el cual la transacción será ejecutada instantáneamente sin esperar a
|
||||
confirmaciones de XMR (revisa el FAQ de XMR.TO para más detalles). Por favor observa que
|
||||
XMR.TO no cobra comisiones extra - increíble, verdad?</p>
|
||||
<h2>Orden XMR.TO<h2>
|
||||
<p> En la pantalla \"Confirmar\" verás la orden XMR.TO final. Esta orden es válida por un
|
||||
tiempo limitado - notarás una cuenta atrás en el botón de \"Gastar\". El tipo de cambio a
|
||||
esta altura puede ser distinto al aproximado que era mostrado en pantallas anteriores.</p>
|
||||
<h2>Clave secreta XMR.TO<h2>
|
||||
<p>Dado que Monerujo sólo administra la parte en Monero de tu transacción, puedes usar tu
|
||||
clave secreta XMR.TO para rastrear la parte en Bitcoin de tu orden en la página de XMR.TO.</p>
|
||||
<p>Por favor ten en cuenta que esta clave secreta sólo es válida por 24 horas a partir de
|
||||
iniciada la transacción!</p>
|
||||
<h2>Cuenta atrás XMR.TO!</h2>
|
||||
<p>Una vez que la cuenta atrás alcanza el cero, necesitarás pedir una nueva cotización de
|
||||
parte de XMR.TO, esto se logra dando un paso atrás y luego volviendo a la pantalla de
|
||||
\"Confirmar\".</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_xmrto"><![CDATA[
|
||||
<h1>Enviar BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO es un servicio de terceros que actúa como casa de cambio de Monero a Bitcoin.
|
||||
Usamos la API de XMR.TO para integrar pagos de Bitcoin dentro de Monerujo. Por favor revisa
|
||||
https://xmr.to y decide por ti mismo si es un servicio que quieres usar. El equipo de Monerujo
|
||||
no está asociado con XMR.TO y no puede ayudarte con su servicio.</p>
|
||||
<h2>Tipo de cambio XMR.TO<h2>
|
||||
<p>En la pantalla de \"Monto\" se te mostrará las condiciones actuales del servicio XMR.TO.
|
||||
Estas incluyen el tipo de cambio del momento así como también los límites mínimo y máximo de BTC.
|
||||
Toma nota de que el tipo de cambio aún no está garantizado en esa instancia. También verás el
|
||||
monto tope hasta el cual la transacción será ejecutada instantáneamente sin esperar a
|
||||
confirmaciones de XMR (revisa el FAQ de XMR.TO para más detalles). Por favor observa que
|
||||
XMR.TO no cobra comisiones extra - increíble, verdad?</p>
|
||||
<h2>Orden XMR.TO<h2>
|
||||
<p> En la pantalla \"Confirmar\" verás la orden XMR.TO final. Esta orden es válida por un
|
||||
tiempo limitado - notarás una cuenta atrás en el botón de \"Gastar\". El tipo de cambio a
|
||||
esta altura puede ser distinto al aproximado que era mostrado en pantallas anteriores.</p>
|
||||
<h2>Clave secreta XMR.TO<h2>
|
||||
<p>Dado que Monerujo sólo administra la parte en Monero de tu transacción, puedes usar tu
|
||||
clave secreta XMR.TO para rastrear la parte en Bitcoin de tu orden en la página de XMR.TO.</p>
|
||||
<p>Por favor ten en cuenta que esta clave secreta sólo es válida por 24 horas a partir de
|
||||
iniciada la transacción!</p>
|
||||
<h2>Cuenta atrás XMR.TO!</h2>
|
||||
<p>Una vez que la cuenta atrás alcanza el cero, necesitarás pedir una nueva cotización de
|
||||
parte de XMR.TO, esto se logra dando un paso atrás y luego volviendo a la pantalla de
|
||||
\"Confirmar\".</p>
|
||||
]]></string>
|
||||
</resources>
|
||||
|
@@ -165,7 +165,7 @@
|
||||
<string name="generate_check_address">Introduce una dirección válida</string>
|
||||
<string name="generate_check_mnemonic">Introduce tu semilla de 25 palabras</string>
|
||||
|
||||
<string name="send_address_hint">Dirección del Destinatario</string>
|
||||
<string name="send_address_hint">Dirección XMR o BTC del Destinatario</string>
|
||||
<string name="send_paymentid_hint">ID de Pago (opcional)</string>
|
||||
<string name="send_amount_hint">0.00</string>
|
||||
<string name="send_notes_hint">Notas Privadas (opcional)</string>
|
||||
@@ -328,4 +328,5 @@
|
||||
<string name="receive_bitcoin_paymentid_invalid">Debe quedar vacío con una dirección Bitcoin</string>
|
||||
<string name="about_whoami">Soy monerujo</string>
|
||||
<string name="info_send_xmrto_success_order_label">Orden XMR.TO</string>
|
||||
<string name="info_xmrto_enabled">Pago de BTC posible, toque para más info.</string>
|
||||
</resources>
|
||||
|
@@ -2,8 +2,8 @@
|
||||
<resources>
|
||||
<color name="tx_green">@color/take</color>
|
||||
<color name="tx_red">@color/give</color>
|
||||
<color name="tx_pending">@color/gradientPink</color>
|
||||
<color name="tx_failed">@color/moneroFab</color>
|
||||
<color name="tx_pending">@color/moneroFab</color>
|
||||
<color name="tx_failed">@color/moneroBlack</color>
|
||||
|
||||
<color name="gradientOrange">#FFFF6105</color>
|
||||
<color name="gradientPink">#FFF0006B</color>
|
||||
@@ -18,6 +18,7 @@
|
||||
<color name="moneroOrange">#cc5100</color>
|
||||
<color name="moneroWhite">#ffffff</color>
|
||||
<color name="moneroBlack">#000000</color>
|
||||
<color name="moneroBlue">#1F4E97</color>
|
||||
<color name="moneroGray">#FD9B9B9B</color>
|
||||
|
||||
<color name="dotGray">#FF4A4A4A</color>
|
||||
|
@@ -178,8 +178,39 @@
|
||||
<h2>XMR.TO Secret Key<h2>
|
||||
<p>Since Monerujo only handles the Monero part of your transaction your XMR.TO secret key
|
||||
can be used to track the Bitcoin part of your order on the XMR.TO homepage.</p>
|
||||
<p>Please note, that this secret key is only valid for 24 hours after the transaction is
|
||||
started!</p>
|
||||
<h2>XMR.TO Countdown!</h2>
|
||||
<p>Once the countdown reaches zero, you need to get a new quote from XMR.TO by going back to the
|
||||
previous step and then coming back to the \"Confirm\" screen.</p>
|
||||
]]></string>
|
||||
|
||||
<string name="help_xmrto"><![CDATA[
|
||||
<h1>Sending BTC</h1>
|
||||
<h2>XMR.TO</h2>
|
||||
<p>XMR.TO is a third party service which acts as an exchange from Monero to Bitcoin.
|
||||
We use the XMR.TO API to integrate Bitcoin payments into Monerujo. Please check out
|
||||
https://xmr.to and decide for yourself if this is something you want to use. The Monerujo
|
||||
Team is not associated with XMR.TO and cannot help you with their service.</p>
|
||||
<h2>XMR.TO Exchange Rate<h2>
|
||||
<p>On the \"Amount\" screen you will be shown the current parameters of the XMR.TO service. These
|
||||
include the current exchange rate as well as upper and lower BTC limits. Note that this
|
||||
rate is not guaranteed at this point. You will also see
|
||||
the amount up to which the BTC transaction will be executed instantly without waiting for
|
||||
XMR confirmations (see the XMR.TO FAQ for more details). Please note, that XMR.TO does
|
||||
not charge extra fees - how cool is that?</p>
|
||||
<h2>XMR.TO Order<h2>
|
||||
<p>On the \"Confirm\" screen, you will see the actual XMR.TO order. This order is valid for
|
||||
a limited time - you may notice a countdown on the \"Spend\" button. The exchange rate may
|
||||
be different to the indicative one shown on previous screens.</p>
|
||||
<h2>XMR.TO Secret Key<h2>
|
||||
<p>Since Monerujo only handles the Monero part of your transaction your XMR.TO secret key
|
||||
can be used to track the Bitcoin part of your order on the XMR.TO homepage.</p>
|
||||
<p>Please note, that this secret key is only valid for 24 hours after the transaction is
|
||||
started!</p>
|
||||
<h2>XMR.TO Countdown!</h2>
|
||||
<p>Once the countdown reaches zero, you need to get a new quote from XMR.TO by going back to the
|
||||
previous step and then coming back to the \"Confirm\" screen.</p>
|
||||
]]></string>
|
||||
|
||||
</resources>
|
@@ -28,6 +28,8 @@
|
||||
<string name="label_receive_info_gen_qr_code">Touch for QR Code</string>
|
||||
<string name="info_send_prio_fees">Higher Priority = Higher Fees</string>
|
||||
|
||||
<string name="info_xmrto_enabled">BTC payment enabled, tap for more info.</string>
|
||||
|
||||
<string name="info_xmrto"><![CDATA[
|
||||
<b>You entered a Bitcoin address.</b><br/>
|
||||
<i>You'll send XMR and the receiver will get BTC using the <b>XMR.TO</b> service.</i>
|
||||
@@ -236,7 +238,7 @@
|
||||
|
||||
<string name="send_amount_btc_xmr">%1$s (indicative)</string>
|
||||
|
||||
<string name="send_address_hint">Receiver\'s Address</string>
|
||||
<string name="send_address_hint">Receiver\'s XMR or BTC Address</string>
|
||||
<string name="send_paymentid_hint">Payment ID (optional)</string>
|
||||
<string name="send_amount_hint">0.00</string>
|
||||
<string name="send_notes_hint">Private Notes (optional)</string>
|
||||
|
@@ -630,6 +630,18 @@ struct WalletManager
|
||||
virtual Wallet * openWallet(const std::string &path, const std::string &password, bool testnet = false) = 0;
|
||||
|
||||
/*!
|
||||
* \brief recovers existing wallet using memo (electrum seed)
|
||||
* \param path Name of wallet file to be created
|
||||
* \param password Password of wallet file
|
||||
* \param memo memo (25 words electrum seed)
|
||||
* \param testnet testnet
|
||||
* \param restoreHeight restore from start height
|
||||
* \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully)
|
||||
*/
|
||||
virtual Wallet * recoveryWallet(const std::string &path, const std::string &password, const std::string &memo, bool testnet = false, uint64_t restoreHeight = 0) = 0;
|
||||
|
||||
/*!
|
||||
* \deprecated this method creates a wallet WITHOUT a psssphrase, use the alternate recoverWallet() method
|
||||
* \brief recovers existing wallet using memo (electrum seed)
|
||||
* \param path Name of wallet file to be created
|
||||
* \param memo memo (25 words electrum seed)
|
||||
@@ -639,18 +651,40 @@ struct WalletManager
|
||||
*/
|
||||
virtual Wallet * recoveryWallet(const std::string &path, const std::string &memo, bool testnet = false, uint64_t restoreHeight = 0) = 0;
|
||||
|
||||
/*!
|
||||
* \brief recovers existing wallet using keys. Creates a view only wallet if spend key is omitted
|
||||
* \param path Name of wallet file to be created
|
||||
* \param language language
|
||||
* \param testnet testnet
|
||||
* \param restoreHeight restore from start height
|
||||
* \param addressString public address
|
||||
* \param viewKeyString view key
|
||||
* \param spendKeyString spend key (optional)
|
||||
* \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully)
|
||||
*/
|
||||
virtual Wallet * createWalletFromKeys(const std::string &path,
|
||||
/*!
|
||||
* \brief recovers existing wallet using keys. Creates a view only wallet if spend key is omitted
|
||||
* \param path Name of wallet file to be created
|
||||
* \param password Password of wallet file
|
||||
* \param language language
|
||||
* \param testnet testnet
|
||||
* \param restoreHeight restore from start height
|
||||
* \param addressString public address
|
||||
* \param viewKeyString view key
|
||||
* \param spendKeyString spend key (optional)
|
||||
* \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully)
|
||||
*/
|
||||
virtual Wallet * createWalletWithKeys(const std::string &path,
|
||||
const std::string &password,
|
||||
const std::string &language,
|
||||
bool testnet,
|
||||
uint64_t restoreHeight,
|
||||
const std::string &addressString,
|
||||
const std::string &viewKeyString,
|
||||
const std::string &spendKeyString = "") = 0;
|
||||
|
||||
/*!
|
||||
* \deprecated this method creates a wallet WITHOUT a psssphrase, use createWalletWithKeys() instead
|
||||
* \brief recovers existing wallet using keys. Creates a view only wallet if spend key is omitted
|
||||
* \param path Name of wallet file to be created
|
||||
* \param language language
|
||||
* \param testnet testnet
|
||||
* \param restoreHeight restore from start height
|
||||
* \param addressString public address
|
||||
* \param viewKeyString view key
|
||||
* \param spendKeyString spend key (optional)
|
||||
* \return Wallet instance (Wallet::status() needs to be called to check if recovered successfully)
|
||||
*/
|
||||
virtual Wallet * createWalletFromKeys(const std::string &path,
|
||||
const std::string &language,
|
||||
bool testnet,
|
||||
uint64_t restoreHeight,
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user