1
mirror of https://github.com/m2049r/xmrwallet synced 2025-09-06 02:27:11 +02:00

Compare commits

..

8 Commits

Author SHA1 Message Date
m2049r
1875e2df62 Bugfixes (#126)
* new domain

* InetSocketAddress.IllegalArgumentException

* white text for buttons

* tweak credit dialog

* prevent multiple popups
2017-11-11 08:02:13 +01:00
m2049r
347123d961 UI bugfixes (#120)
* better wallet load progress

new version

* dont start LoginFragment if is already started
2017-11-08 23:04:01 +01:00
m2049r
f5ad07c2b0 some bugfixes (#119)
* avoid IllegalStateException in rare cases

* clear error state on edit

* new version

* ignore error if fragment unloaded
2017-11-07 23:22:09 +01:00
m2049r
62695af9c6 layout correction + new version code 2017-11-05 01:01:36 +01:00
Stephan Hagios
3b1c3d564b Adjusted Layout files (#118)
* Adjusted layout files with correct sizes.

* Added password visibility toggle
2017-11-05 00:25:26 +01:00
Jonathan Cross
b28a140b48 FAQ improvements (#116) 2017-11-04 23:55:26 +01:00
m2049r
75bba4a091 remove e-notaion for android 5.0! (#117)
and new version
2017-11-04 23:54:49 +01:00
m2049r
cfb3c23003 hide receive button before wallet is loaded (#115) 2017-11-04 15:31:34 +01:00
33 changed files with 308 additions and 222 deletions

View File

@@ -8,8 +8,8 @@ android {
applicationId "com.m2049r.xmrwallet"
minSdkVersion 21
targetSdkVersion 25
versionCode 38
versionName "1.1.7"
versionCode 45
versionName "1.2.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {

View File

@@ -293,5 +293,6 @@ public class GenerateReviewFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.wallet_details_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
}

View File

@@ -48,8 +48,8 @@ import android.widget.TextView;
import android.widget.Toast;
import com.m2049r.xmrwallet.dialog.AboutFragment;
import com.m2049r.xmrwallet.dialog.HelpFragment;
import com.m2049r.xmrwallet.dialog.DonationFragment;
import com.m2049r.xmrwallet.dialog.HelpFragment;
import com.m2049r.xmrwallet.dialog.PrivacyFragment;
import com.m2049r.xmrwallet.layout.Toolbar;
import com.m2049r.xmrwallet.model.Wallet;
@@ -132,7 +132,7 @@ public class LoginActivity extends AppCompatActivity
});
if (Helper.getWritePermission(this)) {
startLoginFragment();
if (savedInstanceState == null) startLoginFragment();
} else {
Log.i(TAG, "Waiting for permissions");
}
@@ -1145,7 +1145,11 @@ public class LoginActivity extends AppCompatActivity
}
}
private class AsyncOpenWallet extends AsyncTask<WalletNode, Void, Boolean> {
private class AsyncOpenWallet extends AsyncTask<WalletNode, Void, Integer> {
final static int OK = 0;
final static int TIMEOUT = 1;
final static int INVALID = 2;
final static int IOEX = 3;
WalletNode walletNode;
@@ -1156,45 +1160,57 @@ public class LoginActivity extends AppCompatActivity
}
@Override
protected Boolean doInBackground(WalletNode... params) {
if (params.length != 1) return false;
protected Integer doInBackground(WalletNode... params) {
if (params.length != 1) return INVALID;
this.walletNode = params[0];
if (!walletNode.isValid()) return false;
if (!walletNode.isValid()) return INVALID;
Log.d(TAG, "checking " + walletNode.getAddress());
long timeDA = new Date().getTime();
SocketAddress address = new InetSocketAddress(walletNode.host, walletNode.port);
long timeDB = new Date().getTime();
Log.d(TAG, "Resolving " + walletNode.host + " took " + (timeDB - timeDA) + "ms.");
Socket socket = new Socket();
long timeA = new Date().getTime();
try {
long timeDA = new Date().getTime();
SocketAddress address = new InetSocketAddress(walletNode.host, walletNode.port);
long timeDB = new Date().getTime();
Log.d(TAG, "Resolving " + walletNode.host + " took " + (timeDB - timeDA) + "ms.");
Socket socket = new Socket();
long timeA = new Date().getTime();
socket.connect(address, LoginActivity.DAEMON_TIMEOUT);
socket.close();
long timeB = new Date().getTime();
long time = timeB - timeA;
Log.d(TAG, "Daemon " + walletNode.host + " is " + time + "ms away.");
return (time < LoginActivity.DAEMON_TIMEOUT ? OK : TIMEOUT);
} catch (IOException ex) {
Log.d(TAG, "Cannot reach daemon " + walletNode.host + "/" + walletNode.port + " because " + ex.getMessage());
return false;
return IOEX;
} catch (IllegalArgumentException ex) {
Log.d(TAG, "Cannot reach daemon " + walletNode.host + "/" + walletNode.port + " because " + ex.getMessage());
return INVALID;
}
long timeB = new Date().getTime();
long time = timeB - timeA;
Log.d(TAG, "Daemon " + walletNode.host + " is " + time + "ms away.");
return time < LoginActivity.DAEMON_TIMEOUT;
}
@Override
protected void onPostExecute(Boolean result) {
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if (isDestroyed()) {
return;
}
dismissProgressDialog();
if (result) {
Log.d(TAG, "selected wallet is ." + walletNode.name + ".");
// now it's getting real, check if wallet exists
promptAndStart(walletNode);
} else {
Toast.makeText(LoginActivity.this, getString(R.string.status_wallet_connect_timeout), Toast.LENGTH_LONG).show();
switch (result) {
case OK:
Log.d(TAG, "selected wallet is ." + walletNode.name + ".");
// now it's getting real, check if wallet exists
promptAndStart(walletNode);
break;
case TIMEOUT:
Toast.makeText(LoginActivity.this, getString(R.string.status_wallet_connect_timeout), Toast.LENGTH_LONG).show();
break;
case INVALID:
Toast.makeText(LoginActivity.this, getString(R.string.status_wallet_node_invalid), Toast.LENGTH_LONG).show();
break;
case IOEX:
Toast.makeText(LoginActivity.this, getString(R.string.status_wallet_connect_ioex), Toast.LENGTH_LONG).show();
break;
}
}
}

View File

@@ -116,8 +116,10 @@ public class ReceiveFragment extends Fragment {
evAmount.setOnFailedExchangeListener(new ExchangeView.OnFailedExchangeListener() {
@Override
public void onFailedExchange() {
clearQR();
Toast.makeText(getActivity(), getString(R.string.message_exchange_failed), Toast.LENGTH_LONG).show();
if (isAdded()) {
clearQR();
Toast.makeText(getActivity(), getString(R.string.message_exchange_failed), Toast.LENGTH_LONG).show();
}
}
});

View File

@@ -24,7 +24,9 @@ import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -137,6 +139,21 @@ public class SendFragment extends Fragment {
}
});
etAddress.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable editable) {
etAddress.setError(null);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
etPaymentId.getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
@@ -150,6 +167,21 @@ public class SendFragment extends Fragment {
}
});
etPaymentId.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable editable) {
etPaymentId.setError(null);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
bPrepareSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -234,7 +266,8 @@ public class SendFragment extends Fragment {
parentView.post(new Runnable() {
@Override
public void run() {
((TextView) parentView.getChildAt(0)).setTextColor(getResources().getColor(R.color.moneroGray));
if (isAdded())
((TextView) parentView.getChildAt(0)).setTextColor(getResources().getColor(R.color.moneroGray));
}
});
}
@@ -250,7 +283,8 @@ public class SendFragment extends Fragment {
parentView.post(new Runnable() {
@Override
public void run() {
((TextView) parentView.getChildAt(0)).setTextColor(getResources().getColor(R.color.moneroGray));
if (isAdded())
((TextView) parentView.getChildAt(0)).setTextColor(getResources().getColor(R.color.moneroGray));
}
});
}

View File

@@ -36,8 +36,8 @@ import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;
import com.m2049r.xmrwallet.dialog.HelpFragment;
import com.m2049r.xmrwallet.dialog.DonationFragment;
import com.m2049r.xmrwallet.dialog.HelpFragment;
import com.m2049r.xmrwallet.layout.Toolbar;
import com.m2049r.xmrwallet.model.PendingTransaction;
import com.m2049r.xmrwallet.model.TransactionInfo;
@@ -223,7 +223,7 @@ public class WalletActivity extends AppCompatActivity implements WalletFragment.
Fragment walletFragment = new WalletFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, walletFragment).commit();
.add(R.id.fragment_container, walletFragment, WalletFragment.TAG).commit();
Log.d(TAG, "fragment added");
startWalletService();
@@ -389,12 +389,12 @@ public class WalletActivity extends AppCompatActivity implements WalletFragment.
Log.d(TAG, "onRefreshed()");
try {
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
getSupportFragmentManager().findFragmentByTag(WalletFragment.TAG);
if (wallet.isSynchronized()) {
Log.d(TAG, "onRefreshed() synced");
releaseWakeLock(); // the idea is to stay awake until synced
if (!synced) {
onProgress(null);
if (!synced) { // first sync
onProgress(-1);
saveWallet(); // save on first sync
synced = true;
runOnUiThread(new Runnable() {
@@ -447,6 +447,16 @@ public class WalletActivity extends AppCompatActivity implements WalletFragment.
} else {
haveWallet = true;
invalidateOptionsMenu();
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
runOnUiThread(new Runnable() {
public void run() {
if (walletFragment != null) {
walletFragment.onLoaded();
}
}
});
}
}
@@ -513,10 +523,10 @@ public class WalletActivity extends AppCompatActivity implements WalletFragment.
public void onProgress(final String text) {
try {
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
getSupportFragmentManager().findFragmentByTag(WalletFragment.TAG);
runOnUiThread(new Runnable() {
public void run() {
walletFragment.onProgress(text);
walletFragment.setProgress(text);
}
});
} catch (ClassCastException ex) {
@@ -530,10 +540,10 @@ public class WalletActivity extends AppCompatActivity implements WalletFragment.
public void onProgress(final int n) {
try {
final WalletFragment walletFragment = (WalletFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
getSupportFragmentManager().findFragmentByTag(WalletFragment.TAG);
runOnUiThread(new Runnable() {
public void run() {
walletFragment.onProgress(n);
walletFragment.setProgress(n);
}
});
} catch (ClassCastException ex) {

View File

@@ -49,7 +49,7 @@ import java.util.List;
public class WalletFragment extends Fragment
implements TransactionInfoAdapter.OnInteractionListener,
AsyncExchangeRate.Listener {
private static final String TAG = "WalletFragment";
public static final String TAG = "WalletFragment";
private TransactionInfoAdapter adapter;
private NumberFormat formatter = NumberFormat.getInstance();
@@ -244,27 +244,40 @@ public class WalletFragment extends Fragment
}
}
public void setProgressText(final String text) {
tvProgress.setText(text);
boolean walletLoaded = false;
public void onLoaded() {
walletLoaded = true;
showReceive();
}
public void onProgress(final String text) {
if (text != null) {
setProgressText(text);
pbProgress.setVisibility(View.VISIBLE);
} else {
pbProgress.setVisibility(View.INVISIBLE);
setProgressText(getString(R.string.status_working));
onProgress(-1);
private void showReceive() {
if (walletLoaded) {
bReceive.setVisibility(View.VISIBLE);
bReceive.setEnabled(true);
}
}
public void onProgress(final int n) {
if (n >= 0) {
private String syncText = null;
public void setProgress(final String text) {
syncText = text;
tvProgress.setText(text);
}
private int syncProgress = -1;
public void setProgress(final int n) {
syncProgress = n;
if (n > 100) {
pbProgress.setIndeterminate(true);
pbProgress.setVisibility(View.VISIBLE);
} else if (n >= 0) {
pbProgress.setIndeterminate(false);
pbProgress.setProgress(n);
} else {
pbProgress.setIndeterminate(true);
pbProgress.setVisibility(View.VISIBLE);
} else { // <0
pbProgress.setVisibility(View.INVISIBLE);
}
}
@@ -287,7 +300,6 @@ public class WalletFragment extends Fragment
Log.d(TAG, "updateStatus()");
if (walletTitle == null) {
setActivityTitle(wallet);
onProgress(100); // of loading
}
long balance = wallet.getBalance();
unlockedBalance = wallet.getUnlockedBalance();
@@ -295,8 +307,6 @@ public class WalletFragment extends Fragment
double amountXmr = Double.parseDouble(Helper.getDisplayAmount(balance - unlockedBalance)); // assume this cannot fail!
String unconfirmed = Helper.getFormattedAmount(amountXmr, true);
tvUnconfirmedAmount.setText(getResources().getString(R.string.xmr_unconfirmed_amount, unconfirmed));
//tvUnconfirmedAmount.setText(getResources().getString(R.string.xmr_unconfirmed_amount,
// Helper.getDisplayAmount(balance - unlockedBalance, Helper.DISPLAY_DIGITS_SHORT)));
String sync = "";
if (!activityCallback.hasBoundService())
throw new IllegalStateException("WalletService not bound.");
@@ -310,16 +320,18 @@ public class WalletFragment extends Fragment
firstBlock = wallet.getBlockChainHeight();
}
int x = 100 - Math.round(100f * n / (1f * daemonHeight - firstBlock));
//onProgress(getString(R.string.status_syncing) + " " + sync);
if (x == 0) x = -1;
onProgress(x);
if (x == 0) x = 101; // indeterminate
setProgress(x);
ivSynced.setVisibility(View.GONE);
} else {
sync = getString(R.string.status_synced) + formatter.format(wallet.getBlockChainHeight());
ivSynced.setVisibility(View.VISIBLE);
}
} else {
sync = getString(R.string.status_wallet_connecting);
setProgress(101);
}
setProgressText(sync);
setProgress(sync);
// TODO show connected status somewhere
}
@@ -373,5 +385,8 @@ public class WalletFragment extends Fragment
Log.d(TAG, "onResume()");
activityCallback.setTitle(walletTitle, walletSubtitle);
activityCallback.setToolbarButton(Toolbar.BUTTON_CLOSE);
setProgress(syncProgress);
setProgress(syncText);
showReceive();
}
}

View File

@@ -103,6 +103,7 @@ public class WalletInfoAdapter extends RecyclerView.Adapter<WalletInfoAdapter.Vi
final TextView tvAddress;
final ImageButton ibOptions;
WalletManager.WalletInfo infoItem;
boolean popupOpen = false;
ViewHolder(View itemView) {
super(itemView);
@@ -112,10 +113,12 @@ public class WalletInfoAdapter extends RecyclerView.Adapter<WalletInfoAdapter.Vi
ibOptions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (popupOpen) return;
//creating a popup menu
PopupMenu popup = new PopupMenu(context, ibOptions);
//inflating menu from xml resource
popup.inflate(R.menu.list_context_menu);
popupOpen = true;
//adding click listener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
@@ -128,6 +131,12 @@ public class WalletInfoAdapter extends RecyclerView.Adapter<WalletInfoAdapter.Vi
});
//displaying the popup
popup.show();
popup.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
popupOpen = false;
}
});
}
});

View File

@@ -481,7 +481,7 @@ public class WalletService extends Service {
showProgress(100);
}
showProgress(getString(R.string.status_wallet_connecting));
showProgress(-1);
showProgress(101);
// if we try to refresh the history here we get occasional segfaults!
// doesnt matter since we update as soon as we get a new block anyway
Log.d(TAG, "start() done");

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/moneroText" android:state_enabled="false" />
<item android:color="@color/moneroWhite" />
</selector>

View File

@@ -17,11 +17,11 @@
9.24995106,8.48677287 C9.24995106,5.61623564 11.5770468,3.28929415
14.4474298,3.28929415 C17.3178128,3.28929415 19.6449085,5.61623564
19.6449085,8.48677287 C19.6449085,11.3571559 17.3178128,13.6840973
14.4474298,13.6840973 M14.4474298,-4.62765957e-05 C8.23695638,-4.62765957e-05
2.82706809,3.42395904 3.08510638e-05,8.48692713 C2.82706809,13.5494324
14.4474298,13.6840973 M14.4474298,-0.0000463 C8.23695638,-0.0000463
2.82706809,3.42395904 0.0000309,8.48692713 C2.82706809,13.5494324
8.23695638,16.9734378 14.4474298,16.9734378 C20.6579032,16.9734378
26.0676372,13.5494324 28.8948287,8.48692713 C26.0676372,3.42395904
20.6579032,-4.62765957e-05 14.4474298,-4.62765957e-05"
20.6579032,-0.0000463 14.4474298,-0.0000463"
android:strokeWidth="1" />
</group>
</group>

View File

@@ -3,9 +3,9 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="16sp"
android:paddingStart="16sp"
android:paddingTop="8sp">
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:paddingTop="8dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
@@ -14,7 +14,7 @@
<ImageView
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_height="48dp"
android:src="@mipmap/ic_launcher" />
<TextView

View File

@@ -2,9 +2,9 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8sp"
android:paddingEnd="16sp"
android:paddingStart="16sp">
android:paddingTop="8dp"
android:paddingEnd="16dp"
android:paddingStart="16dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
@@ -13,7 +13,7 @@
<ImageView
android:layout_width="match_parent"
android:layout_height="100sp"
android:layout_height="100dp"
android:src="@drawable/gunther_donate" />
<TextView

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8sp">
android:layout_margin="8dp">
<LinearLayout
android:layout_width="match_parent"

View File

@@ -3,9 +3,9 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="16sp"
android:paddingStart="16sp"
android:paddingTop="8sp">
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:paddingTop="8dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
@@ -14,7 +14,7 @@
<ImageView
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_height="48dp"
android:src="@mipmap/ic_launcher" />
<TextView

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8sp">
android:layout_margin="8dp">
<LinearLayout
android:layout_width="match_parent"
@@ -39,7 +39,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="8sp"
android:padding="8dp"
android:text="@string/label_login_wallets" />
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

View File

@@ -2,9 +2,9 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8sp"
android:paddingEnd="16sp"
android:paddingStart="16sp">
android:paddingTop="8dp"
android:paddingEnd="16dp"
android:paddingStart="16dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
@@ -13,7 +13,7 @@
<ImageView
android:layout_width="match_parent"
android:layout_height="50sp"
android:layout_height="48dp"
android:src="@drawable/ic_eye_black_24dp" />
<TextView

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8sp"
android:layout_margin="8dp"
android:orientation="vertical">
<ProgressBar
@@ -12,7 +12,7 @@
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:layout_marginBottom="4dp"
android:indeterminate="true"
android:visibility="gone" />
@@ -103,10 +103,10 @@
style="@style/MoneroButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:layout_marginTop="4sp"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:enabled="false"
android:minHeight="36sp"
android:minHeight="36dp"
android:text="@string/receive_generate_hint" />
<ImageView
@@ -117,7 +117,7 @@
<EditText
android:id="@+id/etDummy"
android:layout_width="0sp"
android:layout_height="0sp" />
android:layout_width="0dp"
android:layout_height="0dp" />
</LinearLayout>

View File

@@ -3,7 +3,7 @@
android:id="@+id/scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8sp">
android:layout_margin="8dp">
<LinearLayout
android:layout_width="match_parent"
@@ -137,7 +137,7 @@
android:layout_gravity="center"
android:layout_marginTop="@dimen/section_top"
android:background="?android:selectableItemBackground"
android:drawablePadding="4sp"
android:drawablePadding="4dp"
android:drawableStart="@drawable/ic_add_circle_outline"
android:text="@string/label_wallet_advanced_details"
android:visibility="gone" />

View File

@@ -5,7 +5,7 @@
android:id="@+id/scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8sp">
android:layout_margin="8dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
@@ -15,7 +15,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4sp"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:weightSum="10">
@@ -44,7 +44,7 @@
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:layout_marginStart="16sp"
android:layout_marginStart="16dp"
android:background="@drawable/ic_scan"
android:text="@string/send_qr_hint" />
</LinearLayout>
@@ -53,8 +53,8 @@
android:id="@+id/evAmount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16sp"
android:layout_marginTop="0sp"
android:layout_marginBottom="16dp"
android:layout_marginTop="0dp"
android:orientation="vertical"
android:paddingEnd="56dp"
android:paddingStart="56dp" />
@@ -62,7 +62,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:layout_marginBottom="4dp"
android:orientation="horizontal"
android:weightSum="10">
@@ -91,9 +91,9 @@
android:id="@+id/bPaymentId"
style="@style/MoneroText.Button.Small"
android:layout_width="56dp"
android:layout_height="56sp"
android:layout_height="56dp"
android:layout_gravity="center"
android:layout_marginStart="8sp"
android:layout_marginStart="8dp"
android:background="?android:selectableItemBackground"
android:drawableTop="@drawable/ic_settings_orange_24dp"
android:text="@string/send_generate_paymentid_hint"
@@ -102,8 +102,8 @@
<EditText
android:id="@+id/etDummy"
android:layout_width="0sp"
android:layout_height="0sp" />
android:layout_width="0dp"
android:layout_height="0dp" />
<LinearLayout
android:layout_width="match_parent"
@@ -116,7 +116,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|end"
android:layout_marginEnd="8sp"
android:layout_marginEnd="8dp"
android:text="Advanced:"
android:textAlignment="textEnd" />
@@ -125,7 +125,7 @@
style="@style/MoneroSpinnerGray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8sp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:entries="@array/mixin"
android:textAlignment="center" />
@@ -146,10 +146,10 @@
style="@style/MoneroButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:layout_marginTop="4sp"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:enabled="true"
android:minHeight="36sp"
android:minHeight="36dp"
android:text="@string/send_prepare_hint" />
<ProgressBar
@@ -164,8 +164,8 @@
android:id="@+id/llConfirmSend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:layout_marginTop="4sp"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:orientation="vertical"
android:visibility="gone">
@@ -174,8 +174,8 @@
style="@style/MoneroButton.Alert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:minHeight="36sp"
android:layout_marginBottom="4dp"
android:minHeight="36dp"
android:text="@string/send_dispose_hint" />
<LinearLayout
@@ -187,9 +187,9 @@
<TextView
android:id="@+id/tvTxAmountLabel"
style="@style/MoneroLabel.Caps"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8sp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="@string/send_amount_label"
android:textAlignment="textEnd" />
@@ -197,9 +197,9 @@
<TextView
android:id="@+id/tvTxAmount"
style="@style/MoneroText"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8sp"
android:layout_marginStart="8dp"
android:layout_weight="2"
android:textAlignment="textEnd"
tools:text="143.008000000000" />
@@ -214,9 +214,9 @@
<TextView
android:id="@+id/tvTxFeeLabel"
style="@style/MoneroLabel.Caps.Gray"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="4sp"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:text="@string/send_fee_label"
android:textAlignment="textEnd" />
@@ -224,9 +224,9 @@
<TextView
android:id="@+id/tvTxFee"
style="@style/MoneroText.Gray"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8sp"
android:layout_marginStart="8dp"
android:layout_weight="2"
android:textAlignment="textEnd"
tools:text="0.006817000000" />
@@ -241,9 +241,9 @@
<TextView
android:id="@+id/tvTxTotalLabel"
style="@style/MoneroLabel.Caps.Black"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8sp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="@string/send_total_label"
android:textAlignment="textEnd" />
@@ -251,9 +251,9 @@
<TextView
android:id="@+id/tvTxTotal"
style="@style/MoneroText.Black"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8sp"
android:layout_marginStart="8dp"
android:layout_weight="2"
android:textAlignment="textEnd"
tools:text="143.014817000000" />
@@ -264,7 +264,7 @@
style="@style/MoneroEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4sp"
android:layout_marginTop="4dp"
android:backgroundTint="@color/moneroGray"
android:hint="@string/send_notes_hint"
android:imeOptions="actionDone"
@@ -276,10 +276,10 @@
style="@style/MoneroButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4sp"
android:layout_marginTop="4sp"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:enabled="false"
android:minHeight="36sp"
android:minHeight="36dp"
android:text="@string/send_send_hint" />
<Button
@@ -287,8 +287,8 @@
style="@style/MoneroButton.ReallySend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8sp"
android:layout_marginTop="16sp"
android:layout_marginBottom="8dp"
android:layout_marginTop="16dp"
android:enabled="false"
android:padding="8dp"
android:text="@string/send_really_send_hint"

View File

@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8sp"
android:layout_margin="8dp"
android:fillViewport="true">
<LinearLayout
@@ -15,10 +15,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16sp">
android:padding="16dp">
<LinearLayout
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"
@@ -47,10 +47,10 @@
<TextView
android:id="@+id/tvTxTimestamp"
style="@style/MoneroText.PosDate"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="24sp"
android:layout_marginStart="24dp"
android:layout_weight="1"
android:gravity="center"
android:selectAllOnFocus="true"
@@ -59,7 +59,7 @@
</LinearLayout>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="1">
@@ -82,7 +82,7 @@
<EditText
android:id="@+id/etTxNotes"
style="@style/MoneroEdit"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="8"
android:backgroundTint="@color/moneroGray"
@@ -93,10 +93,10 @@
<Button
android:id="@+id/bTxNotes"
style="@style/MoneroButton.Small"
android:layout_width="0sp"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginBottom="8sp"
android:layout_marginTop="8sp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:layout_weight="2"
android:enabled="true"
android:text="@string/tx_button_notes" />
@@ -110,14 +110,14 @@
style="@style/MoneroLabel.Small"
android:layout_gravity="center_vertical"
android:gravity="end"
android:padding="8sp"
android:padding="8dp"
android:text="@string/tx_destination" />
<TextView
android:id="@+id/tvDestination"
style="@style/MoneroText"
android:gravity="start"
android:padding="8sp"
android:padding="8dp"
android:selectAllOnFocus="true"
android:textIsSelectable="true" />
</TableRow>
@@ -128,14 +128,14 @@
style="@style/MoneroLabel.Small"
android:layout_gravity="center_vertical"
android:gravity="end"
android:padding="8sp"
android:padding="8dp"
android:text="@string/tx_paymentId" />
<TextView
android:id="@+id/tvTxPaymentId"
style="@style/MoneroText"
android:gravity="start"
android:padding="8sp"
android:padding="8dp"
android:selectAllOnFocus="true"
android:textIsSelectable="true" />
</TableRow>
@@ -146,14 +146,14 @@
style="@style/MoneroLabel.Small"
android:layout_gravity="center_vertical"
android:gravity="end"
android:padding="8sp"
android:padding="8dp"
android:text="@string/tx_id" />
<TextView
android:id="@+id/tvTxId"
style="@style/MoneroText"
android:gravity="start"
android:padding="8sp"
android:padding="8dp"
android:selectAllOnFocus="true"
android:textIsSelectable="true" />
</TableRow>
@@ -164,14 +164,14 @@
style="@style/MoneroLabel.Small"
android:layout_gravity="center_vertical"
android:gravity="end"
android:padding="8sp"
android:padding="8dp"
android:text="@string/tx_key" />
<TextView
android:id="@+id/tvTxKey"
style="@style/MoneroText"
android:gravity="start"
android:padding="8sp"
android:padding="8dp"
android:selectAllOnFocus="true"
android:textIsSelectable="true" />
</TableRow>
@@ -182,14 +182,14 @@
style="@style/MoneroLabel.Small"
android:layout_gravity="center_vertical"
android:gravity="end"
android:padding="8sp"
android:padding="8dp"
android:text="@string/tx_blockheight" />
<TextView
android:id="@+id/tvTxBlockheight"
style="@style/MoneroText"
android:gravity="start"
android:padding="8sp"
android:padding="8dp"
android:selectAllOnFocus="true"
android:textIsSelectable="true" />
</TableRow>
@@ -200,14 +200,14 @@
style="@style/MoneroLabel.Small"
android:layout_gravity="center_vertical"
android:gravity="end"
android:padding="8sp"
android:padding="8dp"
android:text="@string/tx_transfers" />
<TextView
android:id="@+id/tvTxTransfers"
style="@style/MoneroText"
android:gravity="start"
android:padding="8sp"
android:padding="8dp"
android:selectAllOnFocus="true"
android:textIsSelectable="true" />

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8sp"
android:layout_margin="8dp"
android:orientation="vertical">
<LinearLayout
@@ -23,8 +23,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="0sp"
android:layout_marginStart="8sp"
android:layout_marginEnd="0dp"
android:layout_marginStart="8dp"
android:visibility="gone">
<ImageView
@@ -84,7 +84,7 @@
android:id="@+id/ivSynced"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8sp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_done_all"
android:visibility="gone" />
@@ -111,8 +111,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
<android.support.v7.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -137,11 +136,11 @@
android:layout_margin="8dp"
android:layout_weight="1"
android:drawableStart="@drawable/ic_hand"
android:enabled="true"
android:enabled="false"
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:text="@string/label_wallet_receive"
android:visibility="visible" />
android:visibility="invisible" />
<Button
android:id="@+id/bSend"
@@ -151,7 +150,7 @@
android:layout_margin="8dp"
android:layout_weight="1"
android:drawableStart="@drawable/ic_send"
android:enabled="true"
android:enabled="false"
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:text="@string/label_wallet_send"

View File

@@ -46,11 +46,11 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="16sp"
android:layout_marginStart="16sp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_weight="13"
android:gravity="start"
android:text="0123456789abcdef" />
tools:text="0123456789abcdef" />
<TextView
android:id="@+id/tx_datetime"
@@ -60,7 +60,7 @@
android:layout_gravity="center"
android:layout_weight="6"
android:gravity="center"
android:text="2017-05-22 21:32" />
tools:text="2017-05-22 21:32" />
<ImageView
android:layout_width="wrap_content"

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/card_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@@ -9,35 +10,31 @@
card_view:cardCornerRadius="1dp"
card_view:cardElevation="8dp">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_login"
android:orientation="horizontal">
android:background="@drawable/selector_login">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
<TextView
android:id="@+id/tvName"
style="@style/MoneroText.Label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginRight="32dp"
android:orientation="vertical"
android:padding="16dp">
android:layout_marginStart="48dp"
android:layout_marginTop="16dp"
android:layout_toStartOf="@+id/ibOptions"
tools:text="My Wallet" />
<TextView
android:id="@+id/tvName"
style="@style/MoneroText.Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Wallet" />
<TextView
android:id="@+id/tvAddress"
style="@style/MoneroText.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tvName"
android:text="4AdkPJox...g3viqCuk" />
</RelativeLayout>
<TextView
android:id="@+id/tvAddress"
style="@style/MoneroText.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tvName"
android:layout_marginBottom="16dp"
android:layout_marginStart="48dp"
android:layout_toStartOf="@+id/ibOptions"
tools:text="4AdkPJox...g3viqCuk" />
<ImageButton
android:id="@+id/ibOptions"

View File

@@ -3,14 +3,15 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/layout_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
android:padding="8dp">
<android.support.design.widget.TextInputLayout
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true"
app:errorEnabled="true">
<android.support.design.widget.TextInputEditText

View File

@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
android:padding="8dp" >
<TextView
android:id="@+id/tvRenameLabel"

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:showIn="LinearLayout"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
@@ -11,7 +12,7 @@
<Spinner
android:id="@+id/sCurrencyA"
android:layout_width="56sp"
android:layout_width="56dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:entries="@array/currency"

View File

@@ -14,10 +14,10 @@
<string name="donation_credits"><![CDATA[
<b>Credits</b>
<br/>
m2049r, baltsar777, rehrar, anhdres,
keejef, TheMonera, EarlOfEgo
m2049r, baltsar777, anhdres, keejef,
rehrar, EarlOfEgo et al.
<br/><br/>
<a href="www.xmrujo.com">www.xmrujo.com</a>
<a href="https://monerujo.io/">monerujo.io</a>
]]></string>
<string name="privacy_policy"><![CDATA[
@@ -53,14 +53,14 @@
<h2>Changes to this Privacy Policy</h2>
<p>We may update this privacy policy from time to time. We will notify
you of any changes by posting the new privacy policy in the app and on the
website (www.xmrujo.com)
website (www.monerujo.io)
You are advised to review this privacy policy periodically for any changes.
<p>This Privacy Policy was last updated: 2nd November, 2017.
<p>This Privacy Policy was last updated: 10th November, 2017.
</p>
<h2>Contact Us</h2>
<p>If you have any questions about our privacy policy,
or how your data is being collected and processed,
please e-mail privacy@xmrujo.com.
please e-mail privacy@monerujo.io.
</p>
]]></string>

View File

@@ -14,7 +14,7 @@
<color name="give">#FFFF6105</color>
<color name="moneroOrange">#cc5100</color>
<color name="moneroWhite">#e2e2e2</color>
<color name="moneroWhite">#ffffff</color>
<color name="moneroBlack">#000000</color>
<color name="moneroGray">#FD9B9B9B</color>

View File

@@ -10,9 +10,9 @@
<dimen name="event_title_text_size">@dimen/abc_text_size_title_material_toolbar</dimen>
<dimen name="header_top_first">12sp</dimen>
<dimen name="header_top">16sp</dimen>
<dimen name="section_top">24sp</dimen>
<dimen name="data_top">8sp</dimen>
<dimen name="header_top_first">12dp</dimen>
<dimen name="header_top">16dp</dimen>
<dimen name="section_top">24dp</dimen>
<dimen name="data_top">8dp</dimen>
</resources>

View File

@@ -45,8 +45,11 @@
<string name="status_wallet_unloaded">Wallet saved</string>
<string name="status_wallet_unload_failed">Wallet save failed!</string>
<string name="status_wallet_connecting">Connecting &#8230;</string>
<string name="status_wallet_connect_failed">Daemon connection failed!\nCheck username/password</string>
<string name="status_wallet_connect_timeout">Daemon connection timed out!\nTry again or another!</string>
<string name="status_wallet_connect_failed">Node connection failed!\nCheck username/password</string>
<string name="status_wallet_connect_timeout">Node connection timed out!\nTry again or another.</string>
<string name="status_wallet_node_invalid">Node invalid!\nTry another.</string>
<string name="status_wallet_connect_ioex">Cannot reach node!\nTry again or another.</string>
<string name="status_working">Working on it &#8230;</string>
<string name="status_wallet_disconnected">Disconnected</string>

View File

@@ -179,7 +179,7 @@
<style name="MoneroButton" parent="@style/Widget.AppCompat.Button">
<item name="android:background">@drawable/button_selector</item>
<item name="android:textColor">@color/text_color</item>
<item name="android:textColor">@color/moneroWhite</item>
<item name="android:textAppearance">@style/MoneroLabel</item>
<item name="android:textAllCaps">true</item>
</style>
@@ -194,16 +194,13 @@
</style>
<style name="MoneroButton.ReallySend">
<item name="android:textColor">@color/white</item>
</style>
<style name="MoneroButton.Take">
<item name="android:textColor">@color/white</item>
<item name="android:background">@color/take</item>
</style>
<style name="MoneroButton.Give">
<item name="android:textColor">@color/white</item>
<item name="android:background">@color/give</item>
</style>

Some files were not shown because too many files have changed in this diff Show More