Updated on 2026-08-14
This commit is contained in:
parent
fb4b20de61
commit
2b6b129096
19 changed files with 417 additions and 418 deletions
|
|
@ -1,19 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.tangem.wallet">
|
||||
package="com.tangem.wallet">
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.nfc"
|
||||
android:required="true"/>
|
||||
android:required="true" />
|
||||
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.NFC"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
|
||||
<uses-permission android:name="android.permission.CAMERA"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.NFC" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<uses-feature android:name="android.hardware.camera"/>
|
||||
<uses-feature android:name="android.hardware.camera.autofocus"/>
|
||||
<uses-feature android:name="android.hardware.camera" />
|
||||
<uses-feature android:name="android.hardware.camera.autofocus" />
|
||||
|
||||
<application
|
||||
android:name="com.tangem.AppController"
|
||||
|
|
@ -28,16 +28,16 @@
|
|||
android:authorities="@string/log_file_provider_authorities"
|
||||
android:enabled="true"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true"/>
|
||||
android:grantUriPermissions="true" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.LogoActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
|
|
@ -47,85 +47,85 @@
|
|||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data
|
||||
android:host="www.tangem.com"
|
||||
android:scheme="http"/>
|
||||
android:scheme="http" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
|
||||
<action android:name="android.nfc.action.TECH_DISCOVERED" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.nfc.action.TECH_DISCOVERED"
|
||||
android:resource="@xml/nfc_tech_filter"/>
|
||||
android:resource="@xml/nfc_tech_filter" />
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.RequestPINActivity"
|
||||
android:name="com.tangem.presentation.activity.PinRequestActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.EmptyWalletActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.SavePINActivity"
|
||||
android:name="com.tangem.presentation.activity.PinSaveActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.LoadedWalletActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.VerifyCardActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.CreateNewWalletActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.PreparePaymentActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.ConfirmPaymentActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.SignPaymentActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.PurgeActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.SwapPINActivity"
|
||||
android:name="com.tangem.presentation.activity.PinSwapActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.QRScanActivity"
|
||||
android:name="com.tangem.presentation.activity.QrScanActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<activity
|
||||
android:name="com.tangem.presentation.activity.SendTransactionActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
</application>
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import android.security.keystore.KeyProperties;
|
|||
|
||||
import com.tangem.domain.wallet.FingerprintHelper;
|
||||
import com.tangem.domain.wallet.PINStorage;
|
||||
import com.tangem.presentation.activity.RequestPINActivity;
|
||||
import com.tangem.presentation.activity.PinRequestActivity;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
|
@ -26,7 +26,7 @@ import javax.crypto.SecretKey;
|
|||
import javax.crypto.spec.IvParameterSpec;
|
||||
|
||||
public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
||||
private WeakReference<RequestPINActivity> reference;
|
||||
private WeakReference<PinRequestActivity> reference;
|
||||
|
||||
private KeyStore keyStore;
|
||||
private Cipher cipher;
|
||||
|
|
@ -36,9 +36,9 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
FingerprintManager fingerprintManager;
|
||||
FingerprintHelper fingerprintHelper;
|
||||
|
||||
RequestPINActivity activity;
|
||||
PinRequestActivity activity;
|
||||
|
||||
public StartFingerprintReaderTask(RequestPINActivity activity, FingerprintManager fingerprintManager, FingerprintHelper fingerprintHelper) {
|
||||
public StartFingerprintReaderTask(PinRequestActivity activity, FingerprintManager fingerprintManager, FingerprintHelper fingerprintHelper) {
|
||||
reference = new WeakReference<>(activity);
|
||||
this.fingerprintManager = fingerprintManager;
|
||||
this.fingerprintHelper = fingerprintHelper;
|
||||
|
|
@ -64,32 +64,32 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(final Boolean success) {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
onCancelled();
|
||||
|
||||
if (!success) {
|
||||
requestPINActivity.doLog("Authentication failed!");
|
||||
pinRequestActivity.doLog("Authentication failed!");
|
||||
} else {
|
||||
fingerprintHelper.startAuth(fingerprintManager, cryptoObject);
|
||||
requestPINActivity.doLog("Authenticate using fingerprint!");
|
||||
pinRequestActivity.doLog("Authenticate using fingerprint!");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
requestPINActivity.setStartFingerprintReaderTask(null);
|
||||
pinRequestActivity.setStartFingerprintReaderTask(null);
|
||||
}
|
||||
|
||||
private boolean getKeyStore() {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
requestPINActivity.doLog("Getting keystore...");
|
||||
pinRequestActivity.doLog("Getting keystore...");
|
||||
try {
|
||||
keyStore = KeyStore.getInstance(RequestPINActivity.KEYSTORE);
|
||||
keyStore = KeyStore.getInstance(PinRequestActivity.KEYSTORE);
|
||||
keyStore.load(null); // Create empty keystore
|
||||
return true;
|
||||
} catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e) {
|
||||
|
|
@ -101,17 +101,17 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
public boolean createNewKey(boolean forceCreate) {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
requestPINActivity.doLog("Creating new key...");
|
||||
pinRequestActivity.doLog("Creating new key...");
|
||||
try {
|
||||
if (forceCreate)
|
||||
keyStore.deleteEntry(RequestPINActivity.KEY_ALIAS);
|
||||
keyStore.deleteEntry(PinRequestActivity.KEY_ALIAS);
|
||||
|
||||
if (!keyStore.containsAlias(RequestPINActivity.KEY_ALIAS)) {
|
||||
KeyGenerator generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, RequestPINActivity.KEYSTORE);
|
||||
if (!keyStore.containsAlias(PinRequestActivity.KEY_ALIAS)) {
|
||||
KeyGenerator generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, PinRequestActivity.KEYSTORE);
|
||||
|
||||
generator.init(new KeyGenParameterSpec.Builder(RequestPINActivity.KEY_ALIAS,
|
||||
generator.init(new KeyGenParameterSpec.Builder(PinRequestActivity.KEY_ALIAS,
|
||||
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
|
||||
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
|
||||
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
|
||||
|
|
@ -120,9 +120,9 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
);
|
||||
|
||||
generator.generateKey();
|
||||
requestPINActivity.doLog("Key created.");
|
||||
pinRequestActivity.doLog("Key created.");
|
||||
} else
|
||||
requestPINActivity.doLog("Key exists.");
|
||||
pinRequestActivity.doLog("Key exists.");
|
||||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
|
|
@ -133,9 +133,9 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
}
|
||||
|
||||
private boolean getCipher() {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
requestPINActivity.doLog("Getting cipher...");
|
||||
pinRequestActivity.doLog("Getting cipher...");
|
||||
try {
|
||||
cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
|
||||
return true;
|
||||
|
|
@ -148,20 +148,20 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
private boolean initCipher(int mode) {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
requestPINActivity.doLog("Initializing cipher...");
|
||||
pinRequestActivity.doLog("Initializing cipher...");
|
||||
try {
|
||||
keyStore.load(null);
|
||||
SecretKey keyspec = (SecretKey) keyStore.getKey(RequestPINActivity.KEY_ALIAS, null);
|
||||
SecretKey keyspec = (SecretKey) keyStore.getKey(PinRequestActivity.KEY_ALIAS, null);
|
||||
|
||||
if (mode == Cipher.ENCRYPT_MODE) {
|
||||
cipher.init(mode, keyspec);
|
||||
} else {
|
||||
byte[] iv = null;
|
||||
if (requestPINActivity.getMode() == RequestPINActivity.Mode.RequestPIN || activity.getMode() == RequestPINActivity.Mode.RequestNewPIN || activity.getMode() == RequestPINActivity.Mode.ConfirmNewPIN) {
|
||||
if (pinRequestActivity.getMode() == PinRequestActivity.Mode.RequestPIN || activity.getMode() == PinRequestActivity.Mode.RequestNewPIN || activity.getMode() == PinRequestActivity.Mode.ConfirmNewPIN) {
|
||||
iv = PINStorage.loadEncryptedIV();
|
||||
} else if (activity.getMode() == RequestPINActivity.Mode.RequestPIN2 || activity.getMode() == RequestPINActivity.Mode.RequestNewPIN2 || activity.getMode() == RequestPINActivity.Mode.ConfirmNewPIN2) {
|
||||
} else if (activity.getMode() == PinRequestActivity.Mode.RequestPIN2 || activity.getMode() == PinRequestActivity.Mode.RequestNewPIN2 || activity.getMode() == PinRequestActivity.Mode.ConfirmNewPIN2) {
|
||||
iv = PINStorage.loadEncryptedIV2();
|
||||
}
|
||||
IvParameterSpec ivspec = new IvParameterSpec(iv);
|
||||
|
|
@ -181,9 +181,9 @@ public class StartFingerprintReaderTask extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
private boolean initCryptObject() {
|
||||
RequestPINActivity requestPINActivity = reference.get();
|
||||
PinRequestActivity pinRequestActivity = reference.get();
|
||||
|
||||
requestPINActivity.doLog("Initializing crypt object...");
|
||||
pinRequestActivity.doLog("Initializing crypt object...");
|
||||
try {
|
||||
cryptoObject = new FingerprintManager.CryptoObject(cipher);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import android.os.AsyncTask;
|
|||
import android.widget.Toast;
|
||||
|
||||
import com.tangem.domain.wallet.FingerprintHelper;
|
||||
import com.tangem.presentation.activity.SavePINActivity;
|
||||
import com.tangem.presentation.activity.PinSaveActivity;
|
||||
import com.tangem.wallet.R;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
|
@ -12,9 +12,9 @@ import java.lang.ref.WeakReference;
|
|||
import javax.crypto.Cipher;
|
||||
|
||||
public class ConfirmWithFingerprintTask extends AsyncTask<Void, Void, Boolean> {
|
||||
private WeakReference<SavePINActivity> reference;
|
||||
private WeakReference<PinSaveActivity> reference;
|
||||
|
||||
public ConfirmWithFingerprintTask(SavePINActivity context) {
|
||||
public ConfirmWithFingerprintTask(PinSaveActivity context) {
|
||||
reference = new WeakReference<>(context);
|
||||
|
||||
reference.get().setFingerprintHelper(new FingerprintHelper(reference.get()));
|
||||
|
|
@ -22,40 +22,40 @@ public class ConfirmWithFingerprintTask extends AsyncTask<Void, Void, Boolean> {
|
|||
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... params) {
|
||||
SavePINActivity savePINActivity = reference.get();
|
||||
PinSaveActivity pinSaveActivity = reference.get();
|
||||
|
||||
if (!savePINActivity.getKeyStore())
|
||||
if (!pinSaveActivity.getKeyStore())
|
||||
return false;
|
||||
|
||||
if (!savePINActivity.createNewKey(false))
|
||||
if (!pinSaveActivity.createNewKey(false))
|
||||
return false;
|
||||
|
||||
if (!savePINActivity.getCipher())
|
||||
if (!pinSaveActivity.getCipher())
|
||||
return false;
|
||||
|
||||
return savePINActivity.initCipher(Cipher.ENCRYPT_MODE) && savePINActivity.initCryptObject();
|
||||
return pinSaveActivity.initCipher(Cipher.ENCRYPT_MODE) && pinSaveActivity.initCryptObject();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Boolean success) {
|
||||
SavePINActivity savePINActivity = reference.get();
|
||||
PinSaveActivity pinSaveActivity = reference.get();
|
||||
|
||||
onCancelled();
|
||||
|
||||
if (!success) {
|
||||
Toast.makeText(savePINActivity, R.string.pin_save_fail, Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(pinSaveActivity, R.string.pin_save_fail, Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
savePINActivity.getFingerprintHelper().startAuth(savePINActivity.getFingerprintManager(), savePINActivity.getCryptoObject());
|
||||
pinSaveActivity.getFingerprintHelper().startAuth(pinSaveActivity.getFingerprintManager(), pinSaveActivity.getCryptoObject());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
SavePINActivity savePINActivity = reference.get();
|
||||
PinSaveActivity pinSaveActivity = reference.get();
|
||||
|
||||
if (savePINActivity.getDFingerPrintConfirmation() != null) {
|
||||
savePINActivity.getDFingerPrintConfirmation().cancel();
|
||||
if (pinSaveActivity.getDFingerPrintConfirmation() != null) {
|
||||
pinSaveActivity.getDFingerPrintConfirmation().cancel();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -166,8 +166,8 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(baseContext, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(baseContext, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", card!!.uid)
|
||||
intent.putExtra("Card", card!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
|
||||
|
|
@ -241,8 +241,8 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
if (resultCode == SignPaymentActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
|
||||
requestPIN2Count++
|
||||
val intent = Intent(baseContext, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(baseContext, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", card!!.uid)
|
||||
intent.putExtra("Card", card!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
|
||||
|
|
|
|||
|
|
@ -82,8 +82,8 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card
|
|||
|
||||
btnNewWallet.setOnClickListener {
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(baseContext, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(baseContext, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", card!!.uid)
|
||||
intent.putExtra("Card", card!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
|
||||
|
|
@ -123,8 +123,8 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card
|
|||
}
|
||||
if (resultCode == CreateNewWalletActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
|
||||
requestPIN2Count++
|
||||
val intent = Intent(baseContext, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(baseContext, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", card!!.uid)
|
||||
intent.putExtra("Card", card!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2)
|
||||
|
|
|
|||
|
|
@ -397,13 +397,13 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco
|
|||
}
|
||||
|
||||
private fun showSavePinActivity() {
|
||||
val intent = Intent(baseContext, SavePINActivity::class.java)
|
||||
val intent = Intent(baseContext, PinSaveActivity::class.java)
|
||||
intent.putExtra("PIN2", false)
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
private fun showSavePin2Activity() {
|
||||
val intent = Intent(baseContext, SavePINActivity::class.java)
|
||||
val intent = Intent(baseContext, PinSaveActivity::class.java)
|
||||
intent.putExtra("PIN2", true)
|
||||
startActivity(intent)
|
||||
}
|
||||
|
|
@ -424,8 +424,8 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco
|
|||
}
|
||||
|
||||
private fun doEnterPIN() {
|
||||
val intent = Intent(this, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN.toString())
|
||||
val intent = Intent(this, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN.toString())
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_PIN_ACTIVITY)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,11 +25,11 @@ import com.tangem.domain.wallet.FingerprintHelper
|
|||
import com.tangem.domain.wallet.PINStorage
|
||||
import com.tangem.domain.wallet.TangemCard
|
||||
import com.tangem.wallet.R
|
||||
import kotlinx.android.synthetic.main.activity_request_pin.*
|
||||
import kotlinx.android.synthetic.main.activity_pin_request.*
|
||||
import kotlinx.android.synthetic.main.layout_pin_buttons.*
|
||||
import java.io.IOException
|
||||
|
||||
class RequestPINActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, FingerprintHelper.FingerprintHelperListener {
|
||||
class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, FingerprintHelper.FingerprintHelperListener {
|
||||
|
||||
companion object {
|
||||
const val KEY_ALIAS = "pinKey"
|
||||
|
|
@ -51,7 +51,7 @@ class RequestPINActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_request_pin)
|
||||
setContentView(R.layout.activity_pin_request)
|
||||
|
||||
MainActivity.commonInit(applicationContext)
|
||||
|
||||
|
|
@ -246,7 +246,7 @@ class RequestPINActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge
|
|||
if (!allowFingerprint)
|
||||
return
|
||||
|
||||
fingerprintHelper = FingerprintHelper(this@RequestPINActivity)
|
||||
fingerprintHelper = FingerprintHelper(this@PinRequestActivity)
|
||||
startFingerprintReaderTask = StartFingerprintReaderTask(this, fingerprintManager, fingerprintHelper)
|
||||
startFingerprintReaderTask!!.execute(null as Void?)
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ import com.tangem.data.network.task.save_pin.ConfirmWithFingerprintTask
|
|||
import com.tangem.domain.wallet.FingerprintHelper
|
||||
import com.tangem.domain.wallet.PINStorage
|
||||
import com.tangem.wallet.R
|
||||
import kotlinx.android.synthetic.main.activity_save_pin.*
|
||||
import kotlinx.android.synthetic.main.activity_pin_save.*
|
||||
import kotlinx.android.synthetic.main.layout_pin_buttons.*
|
||||
import java.io.IOException
|
||||
import java.security.KeyStore
|
||||
|
|
@ -36,7 +36,7 @@ import javax.crypto.NoSuchPaddingException
|
|||
import javax.crypto.SecretKey
|
||||
import javax.crypto.spec.IvParameterSpec
|
||||
|
||||
class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelperListener {
|
||||
class PinSaveActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelperListener {
|
||||
|
||||
private var confirmWithFingerprintTask: ConfirmWithFingerprintTask? = null
|
||||
private var keyStore: KeyStore? = null
|
||||
|
|
@ -54,7 +54,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_save_pin)
|
||||
setContentView(R.layout.activity_pin_save)
|
||||
|
||||
MainActivity.commonInit(applicationContext)
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
cipher = result.cryptoObject.cipher
|
||||
|
||||
when (onConfirmAction) {
|
||||
SavePINActivity.OnConfirmAction.Save -> {
|
||||
PinSaveActivity.OnConfirmAction.Save -> {
|
||||
val textToEncrypt = tvPin.text.toString()
|
||||
if (usePIN2) {
|
||||
PINStorage.saveEncryptedPIN2(cipher, textToEncrypt)
|
||||
|
|
@ -130,7 +130,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
}
|
||||
}
|
||||
|
||||
SavePINActivity.OnConfirmAction.Delete -> {
|
||||
PinSaveActivity.OnConfirmAction.Delete -> {
|
||||
if (usePIN2) {
|
||||
PINStorage.deleteEncryptedPIN2()
|
||||
} else {
|
||||
|
|
@ -140,7 +140,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
tvPin.text = ""
|
||||
}
|
||||
|
||||
SavePINActivity.OnConfirmAction.DeleteEncryptedAndSave -> if (usePIN2) {
|
||||
PinSaveActivity.OnConfirmAction.DeleteEncryptedAndSave -> if (usePIN2) {
|
||||
PINStorage.deleteEncryptedPIN2()
|
||||
PINStorage.saveEncryptedPIN2(cipher, tvPin.text.toString())
|
||||
} else {
|
||||
|
|
@ -155,7 +155,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
|
||||
fun getKeyStore(): Boolean {
|
||||
try {
|
||||
keyStore = KeyStore.getInstance(RequestPINActivity.KEYSTORE)
|
||||
keyStore = KeyStore.getInstance(PinRequestActivity.KEYSTORE)
|
||||
// create empty keystore
|
||||
keyStore!!.load(null)
|
||||
return true
|
||||
|
|
@ -176,12 +176,12 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
fun createNewKey(forceCreate: Boolean): Boolean {
|
||||
try {
|
||||
if (forceCreate)
|
||||
keyStore!!.deleteEntry(RequestPINActivity.KEY_ALIAS)
|
||||
keyStore!!.deleteEntry(PinRequestActivity.KEY_ALIAS)
|
||||
|
||||
if (!keyStore!!.containsAlias(RequestPINActivity.KEY_ALIAS)) {
|
||||
val generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, RequestPINActivity.KEYSTORE)
|
||||
if (!keyStore!!.containsAlias(PinRequestActivity.KEY_ALIAS)) {
|
||||
val generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, PinRequestActivity.KEYSTORE)
|
||||
|
||||
generator.init(KeyGenParameterSpec.Builder(RequestPINActivity.KEY_ALIAS,
|
||||
generator.init(KeyGenParameterSpec.Builder(PinRequestActivity.KEY_ALIAS,
|
||||
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
|
||||
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
|
||||
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
|
||||
|
|
@ -217,7 +217,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
fun initCipher(mode: Int): Boolean {
|
||||
try {
|
||||
keyStore!!.load(null)
|
||||
val keyspec = keyStore!!.getKey(RequestPINActivity.KEY_ALIAS, null) as SecretKey
|
||||
val keyspec = keyStore!!.getKey(PinRequestActivity.KEY_ALIAS, null) as SecretKey
|
||||
|
||||
if (mode == Cipher.ENCRYPT_MODE) {
|
||||
cipher!!.init(mode, keyspec)
|
||||
|
|
@ -285,7 +285,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
|
||||
onConfirmAction = OnConfirmAction.Save
|
||||
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@SavePINActivity)
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@PinSaveActivity)
|
||||
confirmWithFingerprintTask!!.execute(null as Void?)
|
||||
|
||||
} else {
|
||||
|
|
@ -303,7 +303,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
|
||||
// show a progress spinner, and kick off a background task to perform the user login attempt
|
||||
//showProgress(true);
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@SavePINActivity)
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@PinSaveActivity)
|
||||
confirmWithFingerprintTask!!.execute(null as Void?)
|
||||
} else {
|
||||
PINStorage.savePIN(tvPin.text.toString())
|
||||
|
|
@ -321,7 +321,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
return
|
||||
}
|
||||
onConfirmAction = OnConfirmAction.Delete
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@SavePINActivity)
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@PinSaveActivity)
|
||||
confirmWithFingerprintTask!!.execute(null as Void?)
|
||||
} else {
|
||||
tvPin.text = ""
|
||||
|
|
@ -334,7 +334,7 @@ class SavePINActivity : AppCompatActivity(), FingerprintHelper.FingerprintHelper
|
|||
return
|
||||
}
|
||||
onConfirmAction = OnConfirmAction.Delete
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@SavePINActivity)
|
||||
confirmWithFingerprintTask = ConfirmWithFingerprintTask(this@PinSaveActivity)
|
||||
confirmWithFingerprintTask!!.execute(null as Void?)
|
||||
} else {
|
||||
tvPin.text = ""
|
||||
|
|
@ -20,12 +20,12 @@ import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog
|
|||
import com.tangem.presentation.dialog.WaitSecurityDelayDialog
|
||||
import com.tangem.util.Util
|
||||
import com.tangem.wallet.R
|
||||
import kotlinx.android.synthetic.main.activity_swap_pin.*
|
||||
import kotlinx.android.synthetic.main.activity_pin_swap.*
|
||||
|
||||
class SwapPINActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications {
|
||||
class PinSwapActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications {
|
||||
|
||||
companion object {
|
||||
val TAG: String = SwapPINActivity::class.java.simpleName
|
||||
val TAG: String = PinSwapActivity::class.java.simpleName
|
||||
|
||||
const val RESULT_INVALID_PIN = Activity.RESULT_FIRST_USER
|
||||
}
|
||||
|
|
@ -42,7 +42,7 @@ class SwapPINActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProt
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_swap_pin)
|
||||
setContentView(R.layout.activity_pin_swap)
|
||||
|
||||
MainActivity.commonInit(applicationContext)
|
||||
|
||||
|
|
@ -124,7 +124,7 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
|
||||
ivCamera.setOnClickListener {
|
||||
val intent = Intent(baseContext, QRScanActivity::class.java)
|
||||
val intent = Intent(baseContext, QrScanActivity::class.java)
|
||||
startActivityForResult(intent, REQUEST_CODE_SCAN_QR)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import com.google.zxing.Result
|
|||
|
||||
import me.dm7.barcodescanner.zxing.ZXingScannerView
|
||||
|
||||
class QRScanActivity : AppCompatActivity(), ZXingScannerView.ResultHandler {
|
||||
class QrScanActivity : AppCompatActivity(), ZXingScannerView.ResultHandler {
|
||||
|
||||
private var scannerView: ZXingScannerView? = null
|
||||
|
||||
|
|
@ -247,16 +247,16 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
REQUEST_CODE_ENTER_NEW_PIN -> if (resultCode == Activity.RESULT_OK) {
|
||||
if (data != null) {
|
||||
if (data.extras != null && data.extras!!.containsKey("confirmPIN")) {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN = data.getStringExtra("newPIN")
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
|
||||
} else {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("newPIN", data.getStringExtra("newPIN"))
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.ConfirmNewPIN.toString())
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.ConfirmNewPIN.toString())
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_NEW_PIN)
|
||||
}
|
||||
}
|
||||
|
|
@ -264,16 +264,16 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
REQUEST_CODE_ENTER_NEW_PIN2 -> if (resultCode == Activity.RESULT_OK) {
|
||||
if (data != null) {
|
||||
if (data.extras != null && data.extras!!.containsKey("confirmPIN2")) {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN2 = data.getStringExtra("newPIN2")
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
|
||||
} else {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("newPIN2", data.getStringExtra("newPIN2"))
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.ConfirmNewPIN2.toString())
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.ConfirmNewPIN2.toString())
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_NEW_PIN2)
|
||||
}
|
||||
}
|
||||
|
|
@ -317,8 +317,8 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
}
|
||||
if (resultCode == CreateNewWalletActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
|
||||
requestPIN2Count++
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
|
||||
|
|
@ -356,8 +356,8 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
}
|
||||
if (resultCode == CreateNewWalletActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
|
||||
requestPIN2Count++
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_PURGE)
|
||||
|
|
@ -743,7 +743,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
}
|
||||
|
||||
private fun startSwapPINActivity() {
|
||||
val intent = Intent(context, SwapPINActivity::class.java)
|
||||
val intent = Intent(context, PinSwapActivity::class.java)
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
intent.putExtra("newPIN", newPIN)
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ import com.tangem.domain.wallet.PINStorage
|
|||
import com.tangem.domain.wallet.TangemCard
|
||||
import com.tangem.presentation.activity.CreateNewWalletActivity
|
||||
import com.tangem.presentation.activity.PurgeActivity
|
||||
import com.tangem.presentation.activity.RequestPINActivity
|
||||
import com.tangem.presentation.activity.SwapPINActivity
|
||||
import com.tangem.presentation.activity.PinRequestActivity
|
||||
import com.tangem.presentation.activity.PinSwapActivity
|
||||
import com.tangem.presentation.dialog.PINSwapWarningDialog
|
||||
import com.tangem.wallet.BuildConfig
|
||||
import com.tangem.wallet.R
|
||||
|
|
@ -101,16 +101,16 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
REQUEST_CODE_ENTER_NEW_PIN -> if (resultCode == Activity.RESULT_OK) {
|
||||
if (data != null) {
|
||||
if (data.extras!!.containsKey("confirmPIN")) {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN = data.getStringExtra("newPIN")
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
|
||||
} else {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("newPIN", data.getStringExtra("newPIN"))
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.ConfirmNewPIN.toString())
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.ConfirmNewPIN.toString())
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_NEW_PIN)
|
||||
}
|
||||
}
|
||||
|
|
@ -118,16 +118,16 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
REQUEST_CODE_ENTER_NEW_PIN2 -> if (resultCode == Activity.RESULT_OK) {
|
||||
if (data != null) {
|
||||
if (data.extras!!.containsKey("confirmPIN2")) {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN2 = data.getStringExtra("newPIN2")
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
|
||||
} else {
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("newPIN2", data.getStringExtra("newPIN2"))
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.ConfirmNewPIN2.toString())
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.ConfirmNewPIN2.toString())
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_NEW_PIN2)
|
||||
}
|
||||
}
|
||||
|
|
@ -168,8 +168,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
if (resultCode == CreateNewWalletActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
|
||||
requestPIN2Count++
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
|
||||
|
|
@ -206,8 +206,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
if (resultCode == CreateNewWalletActivity.RESULT_INVALID_PIN && requestPIN2Count < 2) {
|
||||
requestPIN2Count++
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_PURGE)
|
||||
|
|
@ -432,8 +432,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
|
||||
private fun doSetPin() {
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestNewPIN.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestNewPIN.toString())
|
||||
newPIN = ""
|
||||
newPIN2 = ""
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_NEW_PIN)
|
||||
|
|
@ -441,8 +441,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
|
||||
private fun doResetPin() {
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN = PINStorage.getDefaultPIN()
|
||||
|
|
@ -452,8 +452,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
|
||||
private fun doResetPin2() {
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN = ""
|
||||
|
|
@ -463,8 +463,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
|
||||
private fun doResetPins() {
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
newPIN = PINStorage.getDefaultPIN()
|
||||
|
|
@ -474,8 +474,8 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
|
||||
private fun doSetPin2() {
|
||||
requestPIN2Count = 0
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestNewPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestNewPIN2.toString())
|
||||
newPIN = ""
|
||||
newPIN2 = ""
|
||||
startActivityForResult(intent, REQUEST_CODE_ENTER_NEW_PIN2)
|
||||
|
|
@ -491,15 +491,15 @@ class VerifyCard : Fragment(), NfcAdapter.ReaderCallback {
|
|||
return
|
||||
}
|
||||
|
||||
val intent = Intent(context, RequestPINActivity::class.java)
|
||||
intent.putExtra("mode", RequestPINActivity.Mode.RequestPIN2.toString())
|
||||
val intent = Intent(context, PinRequestActivity::class.java)
|
||||
intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString())
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
startActivityForResult(intent, REQUEST_CODE_REQUEST_PIN2_FOR_PURGE)
|
||||
}
|
||||
|
||||
private fun startSwapPINActivity() {
|
||||
val intent = Intent(context, SwapPINActivity::class.java)
|
||||
val intent = Intent(context, PinSwapActivity::class.java)
|
||||
intent.putExtra("UID", mCard!!.uid)
|
||||
intent.putExtra("Card", mCard!!.asBundle)
|
||||
intent.putExtra("newPIN", newPIN)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
tools:context="com.tangem.presentation.activity.RequestPINActivity">
|
||||
tools:context="com.tangem.presentation.activity.PinRequestActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPin"
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
tools:context="com.tangem.presentation.activity.SavePINActivity">
|
||||
tools:context="com.tangem.presentation.activity.PinSaveActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPin"
|
||||
|
|
@ -1,46 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="com.tangem.presentation.activity.PurgeActivity">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/maax"
|
||||
android:text="@string/now_touch_the_banknote_with_id"
|
||||
android:textAlignment="center"
|
||||
android:textSize="@dimen/text_size_medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvCardID"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:fontFamily="@font/maax"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/text_size_large"
|
||||
tools:text="CB02 0000 0002 5000" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/maax"
|
||||
android:text="@string/to_change_pin_codes"
|
||||
android:textAlignment="center"
|
||||
android:textSize="@dimen/text_size_medium" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/layout_progress_horizontal" />
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="com.tangem.presentation.activity.PurgeActivity">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/maax"
|
||||
android:text="@string/now_touch_the_banknote_with_id"
|
||||
android:textAlignment="center"
|
||||
android:textSize="@dimen/text_size_medium" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvCardID"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:fontFamily="@font/maax"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/text_size_large"
|
||||
tools:text="CB02 0000 0002 5000" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/maax"
|
||||
android:text="@string/to_change_pin_codes"
|
||||
android:textAlignment="center"
|
||||
android:textSize="@dimen/text_size_medium" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/layout_progress_horizontal" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -9,4 +9,4 @@
|
|||
android:layout_alignParentBottom="true"
|
||||
android:elevation="1dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
tools:showIn="@layout/activity_swap_pin" />
|
||||
tools:showIn="@layout/activity_pin_swap" />
|
||||
|
|
@ -1,214 +1,214 @@
|
|||
<resources>
|
||||
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="contin">Continue</string>
|
||||
<string name="not_found">Not found</string>
|
||||
<string name="wrong_tag_err">Not ISO tag!</string>
|
||||
<string name="msgCardMustBeLoaded">Card must be loaded first!</string>
|
||||
<string name="tag_lost_err">Tag lost!</string>
|
||||
<string name="dialog_ok">OK</string>
|
||||
<string name="dialog_quit">Quit</string>
|
||||
<string name="nfc_disabled">Enable NFC?</string>
|
||||
<string name="enable_nfc">This app is useless when NFC is disabled. Reader mode depends on it. Hit OK to go to Settings, where you can enable NFC.</string>
|
||||
<string name="cmd_suffix">command</string>
|
||||
<string name="rsp_suffix">response</string>
|
||||
<string name="section_format">Hello World from section: %1$d</string>
|
||||
<string name="fingerprint_authenticate_success">Successfully authenticated!</string>
|
||||
<string name="pin_save_success">Successfully saved!</string>
|
||||
<string name="pin_save_fail">Saving pin failed</string>
|
||||
<string name="error_empty_pin">PIN is empty</string>
|
||||
<string name="error_pin_confirmation_failed">Please enter the PIN for confirmation!</string>
|
||||
<string name="enter_pin_and_use_fingerprint_to_save_it">Enter PIN and save it</string>
|
||||
<string name="enter_pin2_and_use_fingerprint_to_save_it">Enter PIN2 and save it</string>
|
||||
<string name="bcBitcoin">Bitcoin</string>
|
||||
<string name="bcEtherium">Etherium</string>
|
||||
<array name="blockchains">
|
||||
<item>@string/bcBitcoin</item>
|
||||
<item>@string/bcEtherium</item>
|
||||
</array>
|
||||
<string name="title_activity_settings_feature">Settings</string>
|
||||
<string name="balance">Balance</string>
|
||||
<string name="verified_offline">verified offline</string>
|
||||
<string name="blockchain">Blockchain</string>
|
||||
<string name="last_withdrawal">Last withdrawal</string>
|
||||
<string name="try_to_scan_again">Try to scan again</string>
|
||||
<string name="cannot_erase_wallet_with_non_zero_balance">Cannot erase wallet with non-zero balance</string>
|
||||
<string name="send_payment">Send payment</string>
|
||||
<string name="from_banknote">From banknote</string>
|
||||
<string name="with_balance">with balance</string>
|
||||
<string name="send_to_wallet">Send to wallet</string>
|
||||
<string name="amount">Amount</string>
|
||||
<string name="including_fee">(including fee)</string>
|
||||
<string name="m_btc">mBTC</string>
|
||||
<string name="scan_again_to_verify_the_card">Scan again to verify the card</string>
|
||||
<string name="smart_cash_ag">Smart Cash AG</string>
|
||||
<string name="wallet">Wallet</string>
|
||||
<string name="need_attach_card_again">Scan again to verify the card</string>
|
||||
<string name="reading">READING…</string>
|
||||
<string name="verifying">VERIFYING…</string>
|
||||
|
||||
<!-- dialogs -->
|
||||
<string name="device_is_rooted">Your Android device is rooted. Security at risk!</string>
|
||||
<string name="got_it">Got it</string>
|
||||
<string name="warning">Warning</string>
|
||||
<string name="security_delay">Security delay</string>
|
||||
<string name="the_nfc_adapter_length_apdu">The NFC adapter of the device does not support extended length APDU, it\'s possible that some functions will not work!</string>
|
||||
<string name="your_money_is_at_risk">Your money is at risk!</string>
|
||||
<string name="this_banknote_has_enforced_security_delay">This banknote has enforced security delay</string>
|
||||
<string name="please_hold_banknote">Please hold the banknote firmly\n until the operation is completed…</string>
|
||||
<string name="you_may_be_required_to_repeat">You may be required to repeat this operation a few times depending on the NFC performance of your smartphone.\n This is made for safety of your funds.</string>
|
||||
|
||||
<!-- menu main -->
|
||||
<string name="clean_up">Clean up</string>
|
||||
<string name="manage_user_pin_1">Manage user PIN1…</string>
|
||||
<string name="manage_user_pin_2">Manage user PIN2…</string>
|
||||
<string name="send_logs">Send logs…</string>
|
||||
<string name="about">About…</string>
|
||||
|
||||
<!-- menu loaded wallet -->
|
||||
<string name="set_pin_1">Set PIN1</string>
|
||||
<string name="set_pin_2">Set PIN2</string>
|
||||
<string name="reset_pin_1_to_default">Reset PIN1 to default</string>
|
||||
<string name="reset_pin_2_to_default">Reset PIN2 to default</string>
|
||||
<string name="reset_pins_to_default">Reset PINs to default</string>
|
||||
<string name="erase_wallet">Erase wallet</string>
|
||||
|
||||
<!-- MainActivity -->
|
||||
<string name="tap_tangem_card">Tap Tangem card with your smartphone</string>
|
||||
<string name="scan_banknote">Scan a banknote with your \n %1$s \n as shown above</string>
|
||||
<string name="phone">phone</string>
|
||||
<string name="last_unspent">Last unspent</string>
|
||||
<string name="erased_wallet">Wallet was erased</string>
|
||||
<string name="not_personalized">Not personalized</string>
|
||||
|
||||
<!-- LoadedWalletActivity, LoadedWallet -->
|
||||
<string name="wallet_empty">The wallet is empty</string>
|
||||
<string name="no_compatible_wallet">No compatible wallet installed</string>
|
||||
<string name="not_enough_funds">Not enough funds for transaction fee (gas)!</string>
|
||||
<string name="please_wait_while_previous">Please wait while previous transaction is confirmed in blockchain</string>
|
||||
<string name="please_wait_for_confirmation">Could not obtain all inputs. Swipe down to refresh.</string>
|
||||
<string name="card_has_no_remaining_signature">Card has no remaining signature!</string>
|
||||
<string name="explore_in_blockchain">EXPLORE</string>
|
||||
<string name="swipe_down_to_refresh_data">Swipe down to refresh data</string>
|
||||
<string name="message">Message!</string>
|
||||
<string name="error">Error!</string>
|
||||
<string name="send">SEND</string>
|
||||
<string name="if_you_forget">If you forget your new PIN you will lose your money forever!</string>
|
||||
<string name="if_you_use_default">If you use default PIN someone can steal your money!</string>
|
||||
<string name="cannot_obtain_data_from_blockchain">Cannot obtain data from blockchain</string>
|
||||
<string name="sending_cached_transaction">Sending cached transaction…</string>
|
||||
<string name="not_implemented">NOT IMPLEMENTED</string>
|
||||
<string name="this_banknote_protected_default_PIN1_code">This banknote is protected by default PIN1 code</string>
|
||||
<string name="this_banknote_protected_user_PIN1_code">This banknote is protected by user\'s PIN1 code</string>
|
||||
<string name="this_banknote_protected_default_PIN2_code">This banknote is protected by default PIN2 code</string>
|
||||
<string name="this_banknote_protected_user_PIN2_code">This banknote is protected by user\'s PIN2 code</string>
|
||||
<string name="unlocked_banknote_only_development_use">Unlocked banknote, only for development use</string>
|
||||
<string name="this_banknote_will_enforce">This banknote will enforce %.0f seconds security delay for all operations requiring PIN2 code</string>
|
||||
<string name="share_wallet_address_with">Share wallet address with:</string>
|
||||
<string name="copied_clipboard">Copied to clipboard</string>
|
||||
<string name="extract">EXTRACT</string>
|
||||
<string name="load">LOAD</string>
|
||||
<string name="explore">EXPLORE</string>
|
||||
<string name="copy">COPY</string>
|
||||
<string name="details">DETAILS</string>
|
||||
<string name="new_scan">NEW SCAN</string>
|
||||
|
||||
<!-- LogoActivity -->
|
||||
<string name="beta">BETA</string>
|
||||
|
||||
<!-- CreateNewWalletActivity, PurgeActivity, SignPaymentActivity -->
|
||||
<string name="now_touch_the_banknote_with_id">Now touch the banknote with ID</string>
|
||||
<string name="to_create_the_wallet">to create the wallet</string>
|
||||
<string name="to_erase_the_wallet">to erase the wallet</string>
|
||||
<string name="to_sign_the_payment">to sign the payment</string>
|
||||
<string name="to_change_pin_codes">to change PIN/PIN2 codes</string>
|
||||
<string name="by_tapping_the_card">By tapping the card, you will permanently remove the blockchain wallet. Ensure there will be no further incoming transactions</string>
|
||||
<string name="cannot_erase_wallet">Cannot erase wallet. Make sure you enter correct PIN2!</string>
|
||||
|
||||
<!-- PreparePaymentActivity -->
|
||||
<string name="enter_wallet_address">enter wallet address</string>
|
||||
<string name="enter_amount">enter amount</string>
|
||||
<string name="verify">Verify</string>
|
||||
|
||||
<!-- RequestPINActivity -->
|
||||
<string name="enter_new_pin_or_use_fingerprint_scanner">Enter new PIN or use fingerprint scanner</string>
|
||||
<string name="enter_new_pin">Enter new PIN</string>
|
||||
<string name="enter_pin_or_use_fingerprint_scanner">Enter PIN or use fingerprint scanner</string>
|
||||
<string name="enter_pin_2_or_use_fingerprint_scanner">Enter PIN2 or use fingerprint scanner</string>
|
||||
<string name="confirm_new_pin">Confirm new PIN</string>
|
||||
<string name="confirm_new_pin_2">Confirm new PIN2</string>
|
||||
<string name="enter_pin">Enter PIN</string>
|
||||
<string name="enter_pin_2">Enter PIN2</string>
|
||||
<string name="enter_new_pin_2_or_use_fingerprint_scanner">Enter new PIN2 or use fingerprint scanner</string>
|
||||
<string name="enter_new_pin_2">Enter new PIN2</string>
|
||||
|
||||
<!-- SendTransactionActivity -->
|
||||
<string name="please_wait">Please wait while the payment is sent…</string>
|
||||
<string name="transaction_has_been_successfully_signed">Transaction has been successfully signed and sent to blockchain node. Wallet balance will be updated in a while</string>
|
||||
<string name="try_again_failed_to_send_transaction">Try again. Failed to send transaction (%1$s)</string>
|
||||
|
||||
<!-- PreparePaymentActivity -->
|
||||
<string name="not_enough_funds_on_your_card">Not enough funds on your card</string>
|
||||
<string name="unknown_amount_format">Unknown amount format</string>
|
||||
<string name="incorrect_destination_wallet_address">Incorrect destination wallet address</string>
|
||||
<string name="destination_wallet_address_equal_source_address">Destination wallet address equal source address</string>
|
||||
|
||||
<!-- ConfirmPaymentActivity -->
|
||||
<string name="target_wallet_address">target wallet address</string>
|
||||
<string name="payment_amount">payment amount</string>
|
||||
<string name="fee">Fee</string>
|
||||
<string name="send_1">Send</string>
|
||||
<string name="minimal">Minimal</string>
|
||||
<string name="normal">Normal</string>
|
||||
<string name="priority">Priority</string>
|
||||
<string name="the_obtained_data_is_outdated_try_again">The obtained data is outdated! Try again</string>
|
||||
<string name="cannot_reach_current_active_blockchain_node_try_again">Cannot reach current active blockchain node. Try again</string>
|
||||
<string name="cannot_check_balance_no_connection_with_blockchain_nodes">Cannot check balance! No connection with blockchain nodes</string>
|
||||
<string name="the_wallet_is_empty">The wallet is empty</string>
|
||||
<string name="please_wait_for_confirmation_of_incoming_transaction">Please wait for confirmation of incoming transaction</string>
|
||||
<string name="fee_exceeds_payment_amount_enter_correct_value_and_repeat_sending">Fee exceeds payment amount. Enter correct value and repeat sending.</string>
|
||||
<string name="pin_2_is_required_to_sign_the_payment">PIN2 is required to sign the payment</string>
|
||||
|
||||
<!-- EmptyWalletActivity -->
|
||||
<string name="wallet_has_not_been_yet_created">Wallet hasn\'t been yet created</string>
|
||||
<string name="create_wallet">Create Wallet</string>
|
||||
|
||||
<!-- VerifyCardActivity -->
|
||||
<string name="card_id">Card ID</string>
|
||||
<string name="signing_method">Signing method</string>
|
||||
<string name="this_card_is">This card is</string>
|
||||
<string name="signed_transactions">Signed transactions</string>
|
||||
<string name="remaining_signatures">Remaining signatures</string>
|
||||
<string name="time_of_last_signing">Time of last signing</string>
|
||||
<string name="features">Features</string>
|
||||
<string name="manufacturer">Manufacturer</string>
|
||||
<string name="card_identity">Card identity</string>
|
||||
<string name="attested">Attested</string>
|
||||
<string name="not_confirmed">Not confirmed</string>
|
||||
<string name="reusable">Reusable</string>
|
||||
<string name="none">None</string>
|
||||
<string name="last_one">Last one!</string>
|
||||
<string name="unlimited">Unlimited</string>
|
||||
<string name="one_off_banknote">One-off banknote</string>
|
||||
<string name="firmware">Firmware</string>
|
||||
<string name="registration_date">Registration date</string>
|
||||
<string name="possession_proved">Possession proved</string>
|
||||
<string name="possession_not_proved">Possession NOT proved</string>
|
||||
<string name="not_available">not available</string>
|
||||
<string name="issuer">Issuer</string>
|
||||
<string name="private_key">Private key</string>
|
||||
<string name="validation_node">Validation node</string>
|
||||
<string name="issuer_data">Issuer Data</string>
|
||||
<string name="unspents">Unspents</string>
|
||||
|
||||
<!-- SavePINActivity -->
|
||||
<string name="save">Save</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="protect_with_fingerprint">Protect with fingerprint</string>
|
||||
<string name="touch_fingerprint_scanner_to_confirm">Touch fingerprint scanner to confirm</string>
|
||||
<string name="user_has_not_enabled_lock_screen">User hasn\'t enabled Lock Screen</string>
|
||||
<string name="user_has_not_granted_permission_to_use_fingerprint">User hasn\'t granted permission to use Fingerprint</string>
|
||||
<string name="user_has_not_registered_any_fingerprints">User hasn\'t registered any fingerprints</string>
|
||||
|
||||
<resources>
|
||||
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="contin">Continue</string>
|
||||
<string name="not_found">Not found</string>
|
||||
<string name="wrong_tag_err">Not ISO tag!</string>
|
||||
<string name="msgCardMustBeLoaded">Card must be loaded first!</string>
|
||||
<string name="tag_lost_err">Tag lost!</string>
|
||||
<string name="dialog_ok">OK</string>
|
||||
<string name="dialog_quit">Quit</string>
|
||||
<string name="nfc_disabled">Enable NFC?</string>
|
||||
<string name="enable_nfc">This app is useless when NFC is disabled. Reader mode depends on it. Hit OK to go to Settings, where you can enable NFC.</string>
|
||||
<string name="cmd_suffix">command</string>
|
||||
<string name="rsp_suffix">response</string>
|
||||
<string name="section_format">Hello World from section: %1$d</string>
|
||||
<string name="fingerprint_authenticate_success">Successfully authenticated!</string>
|
||||
<string name="pin_save_success">Successfully saved!</string>
|
||||
<string name="pin_save_fail">Saving pin failed</string>
|
||||
<string name="error_empty_pin">PIN is empty</string>
|
||||
<string name="error_pin_confirmation_failed">Please enter the PIN for confirmation!</string>
|
||||
<string name="enter_pin_and_use_fingerprint_to_save_it">Enter PIN and save it</string>
|
||||
<string name="enter_pin2_and_use_fingerprint_to_save_it">Enter PIN2 and save it</string>
|
||||
<string name="bcBitcoin">Bitcoin</string>
|
||||
<string name="bcEtherium">Etherium</string>
|
||||
<array name="blockchains">
|
||||
<item>@string/bcBitcoin</item>
|
||||
<item>@string/bcEtherium</item>
|
||||
</array>
|
||||
<string name="title_activity_settings_feature">Settings</string>
|
||||
<string name="balance">Balance</string>
|
||||
<string name="verified_offline">verified offline</string>
|
||||
<string name="blockchain">Blockchain</string>
|
||||
<string name="last_withdrawal">Last withdrawal</string>
|
||||
<string name="try_to_scan_again">Try to scan again</string>
|
||||
<string name="cannot_erase_wallet_with_non_zero_balance">Cannot erase wallet with non-zero balance</string>
|
||||
<string name="send_payment">Send payment</string>
|
||||
<string name="from_banknote">From banknote</string>
|
||||
<string name="with_balance">with balance</string>
|
||||
<string name="send_to_wallet">Send to wallet</string>
|
||||
<string name="amount">Amount</string>
|
||||
<string name="including_fee">(including fee)</string>
|
||||
<string name="m_btc">mBTC</string>
|
||||
<string name="scan_again_to_verify_the_card">Scan again to verify the card</string>
|
||||
<string name="smart_cash_ag">Smart Cash AG</string>
|
||||
<string name="wallet">Wallet</string>
|
||||
<string name="need_attach_card_again">Scan again to verify the card</string>
|
||||
<string name="reading">READING…</string>
|
||||
<string name="verifying">VERIFYING…</string>
|
||||
|
||||
<!-- dialogs -->
|
||||
<string name="device_is_rooted">Your Android device is rooted. Security at risk!</string>
|
||||
<string name="got_it">Got it</string>
|
||||
<string name="warning">Warning</string>
|
||||
<string name="security_delay">Security delay</string>
|
||||
<string name="the_nfc_adapter_length_apdu">The NFC adapter of the device does not support extended length APDU, it\'s possible that some functions will not work!</string>
|
||||
<string name="your_money_is_at_risk">Your money is at risk!</string>
|
||||
<string name="this_banknote_has_enforced_security_delay">This banknote has enforced security delay</string>
|
||||
<string name="please_hold_banknote">Please hold the banknote firmly\n until the operation is completed…</string>
|
||||
<string name="you_may_be_required_to_repeat">You may be required to repeat this operation a few times depending on the NFC performance of your smartphone.\n This is made for safety of your funds.</string>
|
||||
|
||||
<!-- menu main -->
|
||||
<string name="clean_up">Clean up</string>
|
||||
<string name="manage_user_pin_1">Manage user PIN1…</string>
|
||||
<string name="manage_user_pin_2">Manage user PIN2…</string>
|
||||
<string name="send_logs">Send logs…</string>
|
||||
<string name="about">About…</string>
|
||||
|
||||
<!-- menu loaded wallet -->
|
||||
<string name="set_pin_1">Set PIN1</string>
|
||||
<string name="set_pin_2">Set PIN2</string>
|
||||
<string name="reset_pin_1_to_default">Reset PIN1 to default</string>
|
||||
<string name="reset_pin_2_to_default">Reset PIN2 to default</string>
|
||||
<string name="reset_pins_to_default">Reset PINs to default</string>
|
||||
<string name="erase_wallet">Erase wallet</string>
|
||||
|
||||
<!-- MainActivity -->
|
||||
<string name="tap_tangem_card">Tap Tangem card with your smartphone</string>
|
||||
<string name="scan_banknote">Scan a banknote with your \n %1$s \n as shown above</string>
|
||||
<string name="phone">phone</string>
|
||||
<string name="last_unspent">Last unspent</string>
|
||||
<string name="erased_wallet">Wallet was erased</string>
|
||||
<string name="not_personalized">Not personalized</string>
|
||||
|
||||
<!-- LoadedWalletActivity, LoadedWallet -->
|
||||
<string name="wallet_empty">The wallet is empty</string>
|
||||
<string name="no_compatible_wallet">No compatible wallet installed</string>
|
||||
<string name="not_enough_funds">Not enough funds for transaction fee (gas)!</string>
|
||||
<string name="please_wait_while_previous">Please wait while previous transaction is confirmed in blockchain</string>
|
||||
<string name="please_wait_for_confirmation">Could not obtain all inputs. Swipe down to refresh.</string>
|
||||
<string name="card_has_no_remaining_signature">Card has no remaining signature!</string>
|
||||
<string name="explore_in_blockchain">EXPLORE</string>
|
||||
<string name="swipe_down_to_refresh_data">Swipe down to refresh data</string>
|
||||
<string name="message">Message!</string>
|
||||
<string name="error">Error!</string>
|
||||
<string name="send">SEND</string>
|
||||
<string name="if_you_forget">If you forget your new PIN you will lose your money forever!</string>
|
||||
<string name="if_you_use_default">If you use default PIN someone can steal your money!</string>
|
||||
<string name="cannot_obtain_data_from_blockchain">Cannot obtain data from blockchain</string>
|
||||
<string name="sending_cached_transaction">Sending cached transaction…</string>
|
||||
<string name="not_implemented">NOT IMPLEMENTED</string>
|
||||
<string name="this_banknote_protected_default_PIN1_code">This banknote is protected by default PIN1 code</string>
|
||||
<string name="this_banknote_protected_user_PIN1_code">This banknote is protected by user\'s PIN1 code</string>
|
||||
<string name="this_banknote_protected_default_PIN2_code">This banknote is protected by default PIN2 code</string>
|
||||
<string name="this_banknote_protected_user_PIN2_code">This banknote is protected by user\'s PIN2 code</string>
|
||||
<string name="unlocked_banknote_only_development_use">Unlocked banknote, only for development use</string>
|
||||
<string name="this_banknote_will_enforce">This banknote will enforce %.0f seconds security delay for all operations requiring PIN2 code</string>
|
||||
<string name="share_wallet_address_with">Share wallet address with:</string>
|
||||
<string name="copied_clipboard">Copied to clipboard</string>
|
||||
<string name="extract">EXTRACT</string>
|
||||
<string name="load">LOAD</string>
|
||||
<string name="explore">EXPLORE</string>
|
||||
<string name="copy">COPY</string>
|
||||
<string name="details">DETAILS</string>
|
||||
<string name="new_scan">NEW SCAN</string>
|
||||
|
||||
<!-- LogoActivity -->
|
||||
<string name="beta">BETA</string>
|
||||
|
||||
<!-- CreateNewWalletActivity, PurgeActivity, SignPaymentActivity -->
|
||||
<string name="now_touch_the_banknote_with_id">Now touch the banknote with ID</string>
|
||||
<string name="to_create_the_wallet">to create the wallet</string>
|
||||
<string name="to_erase_the_wallet">to erase the wallet</string>
|
||||
<string name="to_sign_the_payment">to sign the payment</string>
|
||||
<string name="to_change_pin_codes">to change PIN/PIN2 codes</string>
|
||||
<string name="by_tapping_the_card">By tapping the card, you will permanently remove the blockchain wallet. Ensure there will be no further incoming transactions</string>
|
||||
<string name="cannot_erase_wallet">Cannot erase wallet. Make sure you enter correct PIN2!</string>
|
||||
|
||||
<!-- PreparePaymentActivity -->
|
||||
<string name="enter_wallet_address">enter wallet address</string>
|
||||
<string name="enter_amount">enter amount</string>
|
||||
<string name="verify">Verify</string>
|
||||
|
||||
<!-- PinRequestActivity -->
|
||||
<string name="enter_new_pin_or_use_fingerprint_scanner">Enter new PIN or use fingerprint scanner</string>
|
||||
<string name="enter_new_pin">Enter new PIN</string>
|
||||
<string name="enter_pin_or_use_fingerprint_scanner">Enter PIN or use fingerprint scanner</string>
|
||||
<string name="enter_pin_2_or_use_fingerprint_scanner">Enter PIN2 or use fingerprint scanner</string>
|
||||
<string name="confirm_new_pin">Confirm new PIN</string>
|
||||
<string name="confirm_new_pin_2">Confirm new PIN2</string>
|
||||
<string name="enter_pin">Enter PIN</string>
|
||||
<string name="enter_pin_2">Enter PIN2</string>
|
||||
<string name="enter_new_pin_2_or_use_fingerprint_scanner">Enter new PIN2 or use fingerprint scanner</string>
|
||||
<string name="enter_new_pin_2">Enter new PIN2</string>
|
||||
|
||||
<!-- SendTransactionActivity -->
|
||||
<string name="please_wait">Please wait while the payment is sent…</string>
|
||||
<string name="transaction_has_been_successfully_signed">Transaction has been successfully signed and sent to blockchain node. Wallet balance will be updated in a while</string>
|
||||
<string name="try_again_failed_to_send_transaction">Try again. Failed to send transaction (%1$s)</string>
|
||||
|
||||
<!-- PreparePaymentActivity -->
|
||||
<string name="not_enough_funds_on_your_card">Not enough funds on your card</string>
|
||||
<string name="unknown_amount_format">Unknown amount format</string>
|
||||
<string name="incorrect_destination_wallet_address">Incorrect destination wallet address</string>
|
||||
<string name="destination_wallet_address_equal_source_address">Destination wallet address equal source address</string>
|
||||
|
||||
<!-- ConfirmPaymentActivity -->
|
||||
<string name="target_wallet_address">target wallet address</string>
|
||||
<string name="payment_amount">payment amount</string>
|
||||
<string name="fee">Fee</string>
|
||||
<string name="send_1">Send</string>
|
||||
<string name="minimal">Minimal</string>
|
||||
<string name="normal">Normal</string>
|
||||
<string name="priority">Priority</string>
|
||||
<string name="the_obtained_data_is_outdated_try_again">The obtained data is outdated! Try again</string>
|
||||
<string name="cannot_reach_current_active_blockchain_node_try_again">Cannot reach current active blockchain node. Try again</string>
|
||||
<string name="cannot_check_balance_no_connection_with_blockchain_nodes">Cannot check balance! No connection with blockchain nodes</string>
|
||||
<string name="the_wallet_is_empty">The wallet is empty</string>
|
||||
<string name="please_wait_for_confirmation_of_incoming_transaction">Please wait for confirmation of incoming transaction</string>
|
||||
<string name="fee_exceeds_payment_amount_enter_correct_value_and_repeat_sending">Fee exceeds payment amount. Enter correct value and repeat sending.</string>
|
||||
<string name="pin_2_is_required_to_sign_the_payment">PIN2 is required to sign the payment</string>
|
||||
|
||||
<!-- EmptyWalletActivity -->
|
||||
<string name="wallet_has_not_been_yet_created">Wallet hasn\'t been yet created</string>
|
||||
<string name="create_wallet">Create Wallet</string>
|
||||
|
||||
<!-- VerifyCardActivity -->
|
||||
<string name="card_id">Card ID</string>
|
||||
<string name="signing_method">Signing method</string>
|
||||
<string name="this_card_is">This card is</string>
|
||||
<string name="signed_transactions">Signed transactions</string>
|
||||
<string name="remaining_signatures">Remaining signatures</string>
|
||||
<string name="time_of_last_signing">Time of last signing</string>
|
||||
<string name="features">Features</string>
|
||||
<string name="manufacturer">Manufacturer</string>
|
||||
<string name="card_identity">Card identity</string>
|
||||
<string name="attested">Attested</string>
|
||||
<string name="not_confirmed">Not confirmed</string>
|
||||
<string name="reusable">Reusable</string>
|
||||
<string name="none">None</string>
|
||||
<string name="last_one">Last one!</string>
|
||||
<string name="unlimited">Unlimited</string>
|
||||
<string name="one_off_banknote">One-off banknote</string>
|
||||
<string name="firmware">Firmware</string>
|
||||
<string name="registration_date">Registration date</string>
|
||||
<string name="possession_proved">Possession proved</string>
|
||||
<string name="possession_not_proved">Possession NOT proved</string>
|
||||
<string name="not_available">not available</string>
|
||||
<string name="issuer">Issuer</string>
|
||||
<string name="private_key">Private key</string>
|
||||
<string name="validation_node">Validation node</string>
|
||||
<string name="issuer_data">Issuer Data</string>
|
||||
<string name="unspents">Unspents</string>
|
||||
|
||||
<!-- PinSaveActivity -->
|
||||
<string name="save">Save</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="protect_with_fingerprint">Protect with fingerprint</string>
|
||||
<string name="touch_fingerprint_scanner_to_confirm">Touch fingerprint scanner to confirm</string>
|
||||
<string name="user_has_not_enabled_lock_screen">User hasn\'t enabled Lock Screen</string>
|
||||
<string name="user_has_not_granted_permission_to_use_fingerprint">User hasn\'t granted permission to use Fingerprint</string>
|
||||
<string name="user_has_not_registered_any_fingerprints">User hasn\'t registered any fingerprints</string>
|
||||
|
||||
</resources>
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
buildscript {
|
||||
|
||||
ext.kotlin_version = '1.2.60'
|
||||
repositories {
|
||||
google()
|
||||
|
|
@ -20,4 +19,4 @@ allprojects {
|
|||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue