mirror of
https://github.com/m2049r/xmrwallet
synced 2025-09-03 08:23:04 +02:00
Compare commits
32 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0512af1496 | ||
![]() |
bd2c49669a | ||
![]() |
ac7831d0f9 | ||
![]() |
0f0b9a38c7 | ||
![]() |
807db19603 | ||
![]() |
c956f38899 | ||
![]() |
db68f517d3 | ||
![]() |
d4b293af80 | ||
![]() |
f7bbfc2fac | ||
![]() |
e08964749e | ||
![]() |
a05fa9d177 | ||
![]() |
7fe2fbe37d | ||
![]() |
40e30fed08 | ||
![]() |
320c7865ff | ||
![]() |
5e8cf8010e | ||
![]() |
e671fa19e0 | ||
![]() |
20d5b9a100 | ||
![]() |
5d489a634b | ||
![]() |
59b6f484fd | ||
![]() |
ecaa49d67d | ||
![]() |
d2dc53599e | ||
![]() |
4d8b26f97f | ||
![]() |
581c76e7be | ||
![]() |
6f66862870 | ||
![]() |
dd92f7bb36 | ||
![]() |
46808d306b | ||
![]() |
20503d2cbd | ||
![]() |
604691ca7e | ||
![]() |
1b626ba2b0 | ||
![]() |
0ed7bdfcee | ||
![]() |
524c3dd79f | ||
![]() |
197dffeae1 |
@@ -3,13 +3,11 @@ jobs:
|
||||
build:
|
||||
working_directory: ~/code
|
||||
docker:
|
||||
- image: circleci/android:api-28-ndk
|
||||
- image: cimg/android:2022.03-ndk
|
||||
environment:
|
||||
JVM_OPTS: -Xmx3200m
|
||||
steps:
|
||||
- checkout
|
||||
- run: yes | sdkmanager --licenses || exit 0
|
||||
- run: yes | sdkmanager --update || exit 0
|
||||
- restore_cache:
|
||||
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
|
||||
- run:
|
||||
|
@@ -121,7 +121,7 @@ set_target_properties(easylogging PROPERTIES IMPORTED_LOCATION
|
||||
|
||||
add_library(unbound STATIC IMPORTED)
|
||||
set_target_properties(unbound PROPERTIES IMPORTED_LOCATION
|
||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/monero/libunbound.a)
|
||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/libunbound.a)
|
||||
|
||||
add_library(epee STATIC IMPORTED)
|
||||
set_target_properties(epee PROPERTIES IMPORTED_LOCATION
|
||||
|
@@ -8,8 +8,8 @@ android {
|
||||
applicationId "com.m2049r.xmrwallet"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 31
|
||||
versionCode 1303
|
||||
versionName "2.3.3 'Baldaŭ'"
|
||||
versionCode 3001
|
||||
versionName "3.0.1 'Fluorine Fermi'"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
@@ -72,7 +72,7 @@ android {
|
||||
abi {
|
||||
enable true
|
||||
reset()
|
||||
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
||||
include 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
||||
universalApk true
|
||||
}
|
||||
}
|
||||
@@ -111,6 +111,7 @@ android {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
namespace 'com.m2049r.xmrwallet'
|
||||
}
|
||||
|
||||
static def getId(name) {
|
||||
@@ -129,7 +130,7 @@ dependencies {
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
||||
implementation 'androidx.preference:preference:1.2.0'
|
||||
|
||||
implementation 'com.google.android.material:material:1.5.0'
|
||||
implementation 'com.google.android.material:material:1.6.0'
|
||||
|
||||
implementation 'me.dm7.barcodescanner:zxing:1.9.8'
|
||||
implementation "com.squareup.okhttp3:okhttp:4.9.3"
|
||||
|
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.m2049r.xmrwallet">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -78,7 +78,7 @@ public class BTChipTransportAndroidHID implements BTChipTransport {
|
||||
}
|
||||
|
||||
private static final int VID = 0x2C97;
|
||||
private static final int[] PID_HIDS = {0x0001, 0x0004};
|
||||
private static final int[] PID_HIDS = {0x0001, 0x0004, 0x0005};
|
||||
|
||||
private UsbDeviceConnection connection;
|
||||
private UsbInterface dongleInterface;
|
||||
|
@@ -916,9 +916,9 @@ public class LoginActivity extends BaseActivity
|
||||
@Override
|
||||
public boolean createWallet(File aFile, String password) {
|
||||
NodeInfo currentNode = getNode();
|
||||
// get it from the connected node if we have one, and go back ca. 4 days
|
||||
// get it from the connected node if we have one
|
||||
final long restoreHeight =
|
||||
(currentNode != null) ? currentNode.getHeight() - 2000 : -1;
|
||||
(currentNode != null) ? currentNode.getHeight() : -1;
|
||||
Wallet newWallet = WalletManager.getInstance()
|
||||
.createWallet(aFile, password, MNEMONIC_LANGUAGE, restoreHeight);
|
||||
return checkAndCloseWallet(newWallet);
|
||||
|
@@ -415,7 +415,14 @@ public class NodeFragment extends Fragment
|
||||
}
|
||||
etNodeHost.setError(null);
|
||||
nodeInfo.setRpcPort(port);
|
||||
nodeInfo.setName(etNodeName.getEditText().getText().toString().trim());
|
||||
// setName() may trigger reverse DNS
|
||||
Helper.runWithNetwork(new Helper.Action() {
|
||||
@Override
|
||||
public boolean run() {
|
||||
nodeInfo.setName(etNodeName.getEditText().getText().toString().trim());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
nodeInfo.setUsername(etNodeUser.getEditText().getText().toString().trim());
|
||||
nodeInfo.setPassword(etNodePass.getEditText().getText().toString()); // no trim for pw
|
||||
return true;
|
||||
|
@@ -30,7 +30,6 @@ import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.transition.MaterialElevationScale;
|
||||
import com.m2049r.xmrwallet.data.Subaddress;
|
||||
import com.m2049r.xmrwallet.layout.SubaddressInfoAdapter;
|
||||
import com.m2049r.xmrwallet.ledger.LedgerProgressDialog;
|
||||
@@ -117,14 +116,6 @@ public class SubaddressFragment extends Fragment implements SubaddressInfoAdapte
|
||||
managerMode = ((b != null) && (MODE_MANAGER.equals(b.getString(KEY_MODE))));
|
||||
|
||||
View view = inflater.inflate(R.layout.fragment_subaddress, container, false);
|
||||
|
||||
final MaterialElevationScale exitTransition = new MaterialElevationScale(false);
|
||||
exitTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
setExitTransition(exitTransition);
|
||||
final MaterialElevationScale reenterTransition = new MaterialElevationScale(true);
|
||||
reenterTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
setReenterTransition(reenterTransition);
|
||||
|
||||
view.findViewById(R.id.fab).setOnClickListener(this);
|
||||
|
||||
if (managerMode) {
|
||||
@@ -154,11 +145,6 @@ public class SubaddressFragment extends Fragment implements SubaddressInfoAdapte
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
postponeEnterTransition();
|
||||
view.getViewTreeObserver().addOnPreDrawListener(() -> {
|
||||
startPostponedEnterTransition();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
public void loadList() {
|
||||
|
@@ -29,15 +29,15 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.transition.Transition;
|
||||
import androidx.transition.TransitionInflater;
|
||||
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.google.android.material.transition.MaterialContainerTransform;
|
||||
import com.m2049r.xmrwallet.data.Subaddress;
|
||||
import com.m2049r.xmrwallet.layout.TransactionInfoAdapter;
|
||||
import com.m2049r.xmrwallet.model.TransactionInfo;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
import com.m2049r.xmrwallet.util.Helper;
|
||||
import com.m2049r.xmrwallet.util.ThemeHelper;
|
||||
import com.m2049r.xmrwallet.widget.Toolbar;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -102,10 +102,8 @@ public class SubaddressInfoFragment extends Fragment
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
final MaterialContainerTransform transform = new MaterialContainerTransform();
|
||||
transform.setDrawingViewId(R.id.fragment_container);
|
||||
transform.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
transform.setAllContainerColors(ThemeHelper.getThemedColor(getContext(), android.R.attr.colorBackground));
|
||||
Transition transform = TransitionInflater.from(requireContext())
|
||||
.inflateTransition(R.transition.details);
|
||||
setSharedElementEnterTransition(transform);
|
||||
}
|
||||
|
||||
|
@@ -36,9 +36,9 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.transition.Transition;
|
||||
import androidx.transition.TransitionInflater;
|
||||
|
||||
import com.google.android.material.transition.MaterialContainerTransform;
|
||||
import com.google.android.material.transition.MaterialElevationScale;
|
||||
import com.m2049r.xmrwallet.data.Subaddress;
|
||||
import com.m2049r.xmrwallet.data.UserNotes;
|
||||
import com.m2049r.xmrwallet.model.TransactionInfo;
|
||||
@@ -96,13 +96,6 @@ public class TxFragment extends Fragment {
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_tx_info, container, false);
|
||||
|
||||
final MaterialElevationScale exitTransition = new MaterialElevationScale(false);
|
||||
exitTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
setExitTransition(exitTransition);
|
||||
final MaterialElevationScale reenterTransition = new MaterialElevationScale(true);
|
||||
reenterTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
setReenterTransition(reenterTransition);
|
||||
|
||||
cvXmrTo = view.findViewById(R.id.cvXmrTo);
|
||||
tvTxXmrToKey = view.findViewById(R.id.tvTxXmrToKey);
|
||||
tvDestinationBtc = view.findViewById(R.id.tvDestinationBtc);
|
||||
@@ -347,10 +340,8 @@ public class TxFragment extends Fragment {
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
final MaterialContainerTransform transform = new MaterialContainerTransform();
|
||||
transform.setDrawingViewId(R.id.fragment_container);
|
||||
transform.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
transform.setAllContainerColors(ThemeHelper.getThemedColor(getContext(), android.R.attr.colorBackground));
|
||||
Transition transform = TransitionInflater.from(requireContext())
|
||||
.inflateTransition(R.transition.details);
|
||||
setSharedElementEnterTransition(transform);
|
||||
}
|
||||
|
||||
|
@@ -539,7 +539,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
|
||||
@Override
|
||||
public void onSendRequest(View view) {
|
||||
replaceFragmentWithTransition(view, SendFragment.newInstance(uri), null, null);
|
||||
replaceFragment(SendFragment.newInstance(uri), null, null);
|
||||
uri = null; // only use uri once
|
||||
}
|
||||
|
||||
@@ -800,10 +800,6 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
int transition;
|
||||
if (newFragment instanceof TxFragment)
|
||||
transition = R.string.tx_details_transition_name;
|
||||
else if (newFragment instanceof ReceiveFragment)
|
||||
transition = R.string.receive_transition_name;
|
||||
else if (newFragment instanceof SendFragment)
|
||||
transition = R.string.send_transition_name;
|
||||
else if (newFragment instanceof SubaddressInfoFragment)
|
||||
transition = R.string.subaddress_info_transition_name;
|
||||
else
|
||||
@@ -960,7 +956,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||
Bundle b = new Bundle();
|
||||
b.putString("address", address);
|
||||
b.putString("name", getWalletName());
|
||||
replaceFragmentWithTransition(view, new ReceiveFragment(), null, b);
|
||||
replaceFragment(new ReceiveFragment(), null, b);
|
||||
Timber.d("ReceiveFragment placed");
|
||||
}
|
||||
|
||||
|
@@ -43,7 +43,6 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.github.brnunes.swipeablerecyclerview.SwipeableRecyclerViewTouchListener;
|
||||
import com.google.android.material.transition.MaterialElevationScale;
|
||||
import com.m2049r.xmrwallet.layout.TransactionInfoAdapter;
|
||||
import com.m2049r.xmrwallet.model.TransactionInfo;
|
||||
import com.m2049r.xmrwallet.model.Wallet;
|
||||
@@ -204,11 +203,6 @@ public class WalletFragment extends Fragment
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
postponeEnterTransition();
|
||||
view.getViewTreeObserver().addOnPreDrawListener(() -> {
|
||||
startPostponedEnterTransition();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
void showBalance(String balance) {
|
||||
@@ -333,19 +327,9 @@ public class WalletFragment extends Fragment
|
||||
// Callbacks from TransactionInfoAdapter
|
||||
@Override
|
||||
public void onInteraction(final View view, final TransactionInfo infoItem) {
|
||||
final MaterialElevationScale exitTransition = new MaterialElevationScale(false);
|
||||
exitTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
setExitTransition(exitTransition);
|
||||
final MaterialElevationScale reenterTransition = new MaterialElevationScale(true);
|
||||
reenterTransition.setDuration(getResources().getInteger(R.integer.tx_item_transition_duration));
|
||||
setReenterTransition(reenterTransition);
|
||||
|
||||
activityCallback.onTxDetailsRequest(view, infoItem);
|
||||
}
|
||||
|
||||
// called from activity
|
||||
|
||||
|
||||
// if account index has changed scroll to top?
|
||||
private int accountIndex = 0;
|
||||
|
||||
@@ -538,8 +522,6 @@ public class WalletFragment extends Fragment
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setExitTransition(null);
|
||||
setReenterTransition(null);
|
||||
Timber.d("onResume()");
|
||||
activityCallback.setTitle(walletTitle, walletSubtitle);
|
||||
activityCallback.setToolbarButton(Toolbar.BUTTON_NONE);
|
||||
|
@@ -24,6 +24,7 @@ import com.m2049r.xmrwallet.util.RestoreHeight;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@@ -96,8 +97,11 @@ public class WalletManager {
|
||||
if (wallet.getStatus().isOk()) {
|
||||
// (Re-)Estimate restore height based on what we know
|
||||
final long oldHeight = wallet.getRestoreHeight();
|
||||
// Go back 4 days if we don't have a precise restore height
|
||||
Calendar restoreDate = Calendar.getInstance();
|
||||
restoreDate.add(Calendar.DAY_OF_MONTH, -4);
|
||||
final long restoreHeight =
|
||||
(height > -1) ? height : RestoreHeight.getInstance().getHeight(new Date());
|
||||
(height > -1) ? height : RestoreHeight.getInstance().getHeight(restoreDate.getTime());
|
||||
wallet.setRestoreHeight(restoreHeight);
|
||||
Timber.d("Changed Restore Height from %d to %d", oldHeight, wallet.getRestoreHeight());
|
||||
wallet.setPassword(password); // this rewrites the keys file (which contains the restore height)
|
||||
|
@@ -8,17 +8,17 @@
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llNotice"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:orientation="vertical" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPull"
|
||||
android:layout_below="@+id/llNotice"
|
||||
style="@style/MoneroLabel.Heading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/llNotice"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:gravity="center"
|
||||
@@ -52,7 +52,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_margin="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:background="@drawable/gradient_oval"
|
||||
android:elevation="6dp">
|
||||
|
||||
@@ -67,7 +68,7 @@
|
||||
app:borderWidth="0dp"
|
||||
app:elevation="0dp"
|
||||
app:fabSize="normal"
|
||||
app:pressedTranslationZ="0dp" />
|
||||
|
||||
app:pressedTranslationZ="0dp"
|
||||
app:tint="?attr/toolbarTextColor" />
|
||||
</FrameLayout>
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
@@ -3,8 +3,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:transitionName="@string/receive_transition_name">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etDummy"
|
||||
@@ -98,7 +97,6 @@
|
||||
android:backgroundTint="#ffffffff"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
card_view:contentPadding="4dp">
|
||||
|
||||
<TextView
|
||||
@@ -110,8 +108,8 @@
|
||||
android:drawablePadding="4dp"
|
||||
android:text="@string/label_receive_info_gen_qr_code"
|
||||
android:textAlignment="center"
|
||||
android:textSize="16sp"
|
||||
android:textColor="#2D1A2E"
|
||||
android:textSize="16sp"
|
||||
android:visibility="visible"
|
||||
card_view:drawableStartCompat="@drawable/ic_info_outline_black_24dp" />
|
||||
|
||||
@@ -119,7 +117,8 @@
|
||||
android:id="@+id/qrCode"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:adjustViewBounds="true" />
|
||||
android:adjustViewBounds="true"
|
||||
android:src="#fff" />
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<TextView
|
||||
|
@@ -4,8 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:transitionName="@string/send_transition_name">
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llNotice"
|
||||
|
@@ -45,7 +45,7 @@
|
||||
android:id="@+id/rlSweep"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="visible">
|
||||
android:visibility="gone">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivSweep"
|
||||
|
@@ -69,6 +69,7 @@
|
||||
app:borderWidth="0dp"
|
||||
app:elevation="0dp"
|
||||
app:fabSize="normal"
|
||||
app:pressedTranslationZ="0dp" />
|
||||
app:pressedTranslationZ="0dp"
|
||||
app:tint="?attr/toolbarTextColor" />
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
|
@@ -5,8 +5,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="8dp"
|
||||
android:transitionName="@string/subaddress_info_transition_name">
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAddress"
|
||||
@@ -14,6 +13,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/header_top_first"
|
||||
android:transitionName="@string/subaddress_info_transition_name"
|
||||
tools:text="#1: 8AioXCmK...aGivEa7C" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
|
@@ -4,8 +4,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fillViewport="true"
|
||||
android:transitionName="@string/tx_details_transition_name">
|
||||
android:fillViewport="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -33,6 +32,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:selectAllOnFocus="true"
|
||||
android:textIsSelectable="true"
|
||||
android:transitionName="@string/tx_details_transition_name"
|
||||
tools:text="+ 1,092.00229" />
|
||||
|
||||
<TextView
|
||||
|
@@ -177,7 +177,6 @@
|
||||
android:layout_weight="1"
|
||||
android:enabled="false"
|
||||
android:text="@string/label_wallet_receive"
|
||||
android:transitionName="@string/receive_btn_transition_name"
|
||||
app:icon="@drawable/ic_hand" />
|
||||
|
||||
<Button
|
||||
@@ -190,7 +189,6 @@
|
||||
android:layout_weight="1"
|
||||
android:enabled="false"
|
||||
android:text="@string/label_wallet_send"
|
||||
android:transitionName="@string/send_btn_transition_name"
|
||||
app:icon="@drawable/ic_send" />
|
||||
</LinearLayout>
|
||||
|
||||
|
3
app/src/main/res/transition/details.xml
Normal file
3
app/src/main/res/transition/details.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<changeTransform android:duration="@integer/tx_item_transition_duration" />
|
||||
</transitionSet>
|
@@ -290,7 +290,7 @@
|
||||
<string name="menu_language">Idioma</string>
|
||||
<string name="language_system_default">Utilitzar Idioma del Sistema</string>
|
||||
|
||||
<string name="fab_restore_ledger">Restablir desde Ledger Nano S</string>
|
||||
<string name="fab_restore_ledger">Restablir desde Ledger Nano</string>
|
||||
|
||||
<string name="progress_ledger_progress">Comunicant amb Ledger</string>
|
||||
<string name="progress_ledger_confirm">Es requereix confirmació en Ledger!</string>
|
||||
|
@@ -286,7 +286,7 @@
|
||||
<string name="menu_language">Sprache</string>
|
||||
<string name="language_system_default">Benutze Systemsprache</string>
|
||||
|
||||
<string name="fab_restore_ledger">Wallet mit Ledger Nano S wiederherstellen</string>
|
||||
<string name="fab_restore_ledger">Wallet mit Ledger Nano wiederherstellen</string>
|
||||
|
||||
<string name="progress_ledger_progress">Kommunikation mit Ledger</string>
|
||||
<string name="progress_ledger_confirm">Bestätigung auf Ledger benötigt!</string>
|
||||
|
@@ -283,7 +283,7 @@
|
||||
<string name="menu_language">Language</string>
|
||||
<string name="language_system_default">Use System Language</string>
|
||||
|
||||
<string name="fab_restore_ledger">Restore from Ledger Nano S</string>
|
||||
<string name="fab_restore_ledger">Restore from Ledger Nano</string>
|
||||
|
||||
<string name="progress_ledger_progress">Communicating with Ledger</string>
|
||||
<string name="progress_ledger_confirm">Confirmation on Ledger required!</string>
|
||||
|
@@ -290,7 +290,7 @@
|
||||
<string name="menu_language">Lingvo</string>
|
||||
<string name="language_system_default">Uzi la sistemlingvon</string>
|
||||
|
||||
<string name="fab_restore_ledger">Restaŭri de Ledger Nano S</string>
|
||||
<string name="fab_restore_ledger">Restaŭri de Ledger Nano</string>
|
||||
|
||||
<string name="progress_ledger_progress">Komunikante kun Ledger</string>
|
||||
<string name="progress_ledger_confirm">Konfirmo je la Ledger estas postulita!</string>
|
||||
|
@@ -273,7 +273,7 @@
|
||||
<string name="menu_language">Lenguaje</string>
|
||||
<string name="language_system_default">Usar Idioma del Sistema</string>
|
||||
|
||||
<string name="fab_restore_ledger">Restaurar desde Ledger Nano S</string>
|
||||
<string name="fab_restore_ledger">Restaurar desde Ledger Nano</string>
|
||||
|
||||
<string name="progress_ledger_progress">Comunicándose con Ledger</string>
|
||||
<string name="progress_ledger_confirm">¡Confirmación en Ledger requerida!</string>
|
||||
|
@@ -285,7 +285,7 @@
|
||||
<string name="menu_language">Keel</string>
|
||||
<string name="language_system_default">Kasuta süsteemi keelt</string>
|
||||
|
||||
<string name="fab_restore_ledger">Taasta seadmelt Ledger Nano S</string>
|
||||
<string name="fab_restore_ledger">Taasta seadmelt Ledger Nano</string>
|
||||
|
||||
<string name="progress_ledger_progress">Suhtlen seadmega Ledger</string>
|
||||
<string name="progress_ledger_confirm">Seadmelt Ledger on vajalik kinnitus!</string>
|
||||
|
59
app/src/main/res/values-fa/about.xml
Normal file
59
app/src/main/res/values-fa/about.xml
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en">
|
||||
<string name="about_close">بستن</string>
|
||||
<string name="about_whoami">من مونروجو هستم</string>
|
||||
<string name="about_version">
|
||||
نسخهٔ
|
||||
%1$s (%2$d)
|
||||
</string>
|
||||
|
||||
<string name="credits_text"><![CDATA[
|
||||
<b>دست اندرکاران</b>
|
||||
<br/>
|
||||
m2049r, baltsar777, anhdres, keejef,
|
||||
rehrar, EarlOfEgo, ErCiccione et al.
|
||||
<br/><br/>
|
||||
<a href="https://monerujo.app">monerujo.app</a>
|
||||
]]></string>
|
||||
|
||||
<string name="privacy_policy"><![CDATA[
|
||||
<h1>خطمشی رازداری</h1>
|
||||
<p>این صفحه شما را از سیاستهای ما در مورد جمعآوری، استفاده و افشای اطلاعات شخصی که از کاربران برنامهٔ خود (مونروجو به معنای «کیفپول مونرو») دریافت میکنیم مطلع میکند.</p>
|
||||
<p>با استفاده از برنامه، با جمعآوری و استفاده از اطلاعات، مطابق با این سیاست، موافقت میکنید.</p>
|
||||
<h2>دادههای جمعآوری شده</h2>
|
||||
<p>دادههای شخصی هر نوع دادهای است که بتواند یک فرد را شناسایی کند.</p>
|
||||
<p>کلیدها و آدرسهای عمومی مونرو توسط برنامه به صورت داخلی برای پردازش تراکنشها جمعآوری و پردازش میشوند و به شکل رمزگذاری شده به شبکه مونرو منتقل می شوند.</p>
|
||||
<p>سایر اطلاعات شخصی توسط برنامه جمعآوری نمیشوند.</p>
|
||||
<p>
|
||||
اگر از قابلیت اختیاری تبدیل رمزارز استفاده کنید، این برنامه نرخ ارز را از طریق API عمومی coinmarketcap.com دریافت میکند. برای اطلاع از جزئیات نحوهٔ جمعآوری دادههای درخواستهایتان، خطمشی رازداری آنها را در
|
||||
<a href="https://coinmarketcap.com/privacy">coinmarketcap.com/privacy</a>
|
||||
ببینید.
|
||||
</p>
|
||||
<p>
|
||||
اگر از برنامه برای پرداخت به آدرسهای بیتکوین استفاده میکنید، از سرویس SideShift.ai استفاده خواهید کرد. برای جزئیات بیشتر به خطمشی رازداری آنها در
|
||||
<a href="https://sideshift.ai">sideshift.ai</a>
|
||||
مراجعه کنید. مونروجو مقدار و آدرس مقصد بیتکوین را برای آنها ارسال میکند. آدرس IP شما نیز قابل جمعآوری خواهد بود.
|
||||
</p>
|
||||
<h2>دسترسیهای نرمافزار</h2>
|
||||
<ul>
|
||||
<li>اینترنت: اتصال به شبکهٔ مونرو</li>
|
||||
<li>خوانش حافظهٔ خارجی: خواندن فایلهای کیفپول ذخیره شده برروی دستگاه</li>
|
||||
<li>نوشتار حافظهٔ خارجی: نوشتن فایلهای کیفپول ذخیره شده برروی دستگاه</li>
|
||||
<li>قفل بیداری: بیدار نگه داشتن دستگاه در هنگام همگامسازی</li>
|
||||
<li>دوربین: اسکن کدهای کیوآر برای ارسال مونرو</li>
|
||||
</ul>
|
||||
<h2>تغییرات در این خطمشی رازداری</h2>
|
||||
<p>
|
||||
ممکن است هرازچندگاهی این خطمشی رازداری را بهروز کنیم. ما با ارسال خطمشی رازداری جدید در برنامه و وبسایت
|
||||
<a href="https://monerujo.app">(www.monerujo.app)</a>
|
||||
شما را از هرگونه تغییر مطلع خواهیم کرد. به شما توصیه میشود برای هرگونه تغییر، این خطمشی رازداری را به صورت دورهای مرور کنید.
|
||||
</p>
|
||||
<p>آخرین بهروزرسانی این خطمشی رازداری: 10 نوامبر 2017</p>
|
||||
<h2>تماس با ما</h2>
|
||||
<p>
|
||||
اگر در مورد خطمشی رازداری ما یا نحوهٔ جمعآوری و پردازش دادههای خود سؤالی دارید، لطفا به
|
||||
<a href="mailto:privacy@monerujo.io">privacy@monerujo.io</a>
|
||||
ایمیل بزنید.
|
||||
</p>
|
||||
]]></string>
|
||||
</resources>
|
425
app/src/main/res/values-fa/help.xml
Normal file
425
app/src/main/res/values-fa/help.xml
Normal file
File diff suppressed because it is too large
Load Diff
703
app/src/main/res/values-fa/strings.xml
Normal file
703
app/src/main/res/values-fa/strings.xml
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user