Updated on 2026-08-14

This commit is contained in:
Tangem 2018-06-01 15:13:05 +03:00
parent c336d452ab
commit a28e440a73
11 changed files with 183 additions and 136 deletions

Binary file not shown.

View file

@ -10,6 +10,7 @@ import android.support.v7.app.AppCompatActivity;
import com.tangem.presentation.fragment.LoadedWalletFragment;
import com.tangem.wallet.R;
import java.util.Objects;
public class LoadedWalletActivity extends AppCompatActivity {
@ -19,8 +20,7 @@ public class LoadedWalletActivity extends AppCompatActivity {
setContentView(R.layout.activity_loaded_wallet);
MainActivity.commonInit(getApplicationContext());
if( getIntent().getExtras().containsKey(NfcAdapter.EXTRA_TAG) )
{
if (Objects.requireNonNull(getIntent().getExtras()).containsKey(NfcAdapter.EXTRA_TAG)) {
Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
LoadedWalletFragment fragment = (LoadedWalletFragment) (getSupportFragmentManager().findFragmentById(R.id.loaded_wallet_fragment));
@ -37,4 +37,5 @@ public class LoadedWalletActivity extends AppCompatActivity {
setResult(Activity.RESULT_OK, data);
finish();
}
}

View file

@ -15,6 +15,7 @@ import com.tangem.wallet.R;
* status bar and navigation/system bar) with user interaction.
*/
public class LogoActivity extends AppCompatActivity {
public static final String TAG = LogoActivity.class.getSimpleName();
private final Runnable mHideRunnable = new Runnable() {
@Override

View file

@ -72,7 +72,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
// OnCreateNFCDialog onCreateNFCDialog;
public void setOnCardsClean(OnCardsClean onCardsClean) {
this.onCardsClean = onCardsClean;
}
@ -126,7 +125,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
new RootFoundDialog().show(getFragmentManager(), "RootFoundDialog");
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
commonInit(getApplicationContext());
@ -207,7 +205,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
showMenu(fab);
return true;
}
return super.onKeyDown(keycode, e);
}
@ -260,7 +257,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
}
}
}
@Override
@ -281,9 +277,6 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
@ -338,7 +331,7 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
private void showLogoActivity() {
Intent intent = new Intent(getBaseContext(), LogoActivity.class);
intent.putExtra("skipAutoHide", true);
intent.putExtra(LogoActivity.TAG, true);
startActivity(intent);
}
@ -358,10 +351,13 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_main, popup.getMenu());
if (BuildConfig.DEBUG) {
for (int i = 0; i < popup.getMenu().size(); i++)
popup.getMenu().getItem(i).setVisible(true);
popup.getMenu().findItem(R.id.managePIN).setEnabled(true);
popup.getMenu().findItem(R.id.managePIN2).setEnabled(true);
popup.getMenu().findItem(R.id.sendLogs).setVisible(true);
}
popup.setOnMenuItemClickListener(this);
popup.show();
}
@ -402,4 +398,5 @@ public class MainActivity extends AppCompatActivity implements PopupMenu.OnMenuI
}
}
}

View file

@ -164,6 +164,7 @@ public class SavePINActivity extends AppCompatActivity implements FingerprintHel
private enum OnConfirmAction {Save, DeleteEncryptedAndSave, Delete}
OnConfirmAction onConfirmAction;
private void doSavePIN() {
@ -188,8 +189,7 @@ public class SavePINActivity extends AppCompatActivity implements FingerprintHel
focusView.requestFocus();
} else {
if( UsePIN2 )
{
if (UsePIN2) {
if (!testFingerPrintSettings()) {
tvPIN.postDelayed(new Runnable() {
@Override
@ -236,8 +236,7 @@ public class SavePINActivity extends AppCompatActivity implements FingerprintHel
}
private void doDeletePIN() {
if( UsePIN2 )
{
if (UsePIN2) {
if (PINStorage.haveEncryptedPIN2()) {
if (!testFingerPrintSettings()) {
tvPIN.postDelayed(new Runnable() {
@ -292,8 +291,7 @@ public class SavePINActivity extends AppCompatActivity implements FingerprintHel
switch (onConfirmAction) {
case Save:
String textToEncrypt = tvPIN.getText().toString();
if( UsePIN2 )
{
if (UsePIN2) {
PINStorage.saveEncryptedPIN2(cipher, textToEncrypt);
} else {
PINStorage.saveEncryptedPIN(cipher, textToEncrypt);
@ -301,8 +299,7 @@ public class SavePINActivity extends AppCompatActivity implements FingerprintHel
print(R.string.pin_save_success);
break;
case Delete:
if( UsePIN2 )
{
if (UsePIN2) {
PINStorage.deleteEncryptedPIN2();
} else {
PINStorage.deleteEncryptedPIN();
@ -311,8 +308,7 @@ public class SavePINActivity extends AppCompatActivity implements FingerprintHel
tvPIN.setText("");
break;
case DeleteEncryptedAndSave:
if( UsePIN2 )
{
if (UsePIN2) {
PINStorage.deleteEncryptedPIN2();
PINStorage.saveEncryptedPIN2(cipher, tvPIN.getText().toString());
} else {

View file

@ -31,7 +31,6 @@ import static com.tangem.domain.wallet.TangemCard.CountOurTx;
public class CardListAdapter extends RecyclerView.Adapter<CardListAdapter.CardViewHolder> {
public static class CardViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView tvBalance, tvOffline, tvBalanceEquivalent, tvWallet, tvInputs, tvStatusInBlockchain, tvCardID, tvLastInput, lbLastInput, lbLastOutput, tvLastOutput, tvBlockchain;

View file

@ -171,8 +171,7 @@ public class LoadedWalletFragment extends Fragment implements SwipeRefreshLayout
taskRate.execute(rate);
}
else if (mCard.getBlockchain() == Blockchain.Ethereum || mCard.getBlockchain() == Blockchain.EthereumTestNet) {
} else if (mCard.getBlockchain() == Blockchain.Ethereum || mCard.getBlockchain() == Blockchain.EthereumTestNet) {
ETHRequestTask updateETH = new ETHRequestTask(mCard.getBlockchain());
InfuraRequest reqETH = InfuraRequest.GetBalance(mCard.getWallet());
reqETH.setID(67);
@ -450,34 +449,37 @@ public class LoadedWalletFragment extends Fragment implements SwipeRefreshLayout
popup.getMenu().findItem(R.id.action_reset_PIN2).setVisible(mCard.allowSwapPIN2() && !mCard.useDefaultPIN2());
popup.getMenu().findItem(R.id.action_reset_PINs).setVisible(mCard.allowSwapPIN() && mCard.allowSwapPIN2() && !mCard.useDefaultPIN1() && !mCard.useDefaultPIN2());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
popup.setOnMenuItemClickListener(item -> {
int id = item.getItemId();
switch (id) {
case R.id.action_set_PIN1:
doSetPin();
return true;
case R.id.action_reset_PIN1:
doResetPin();
return true;
case R.id.action_set_PIN2:
doSetPin2();
return true;
case R.id.action_reset_PIN2:
doResetPin2();
return true;
case R.id.action_reset_PINs:
doResetPins();
return true;
case R.id.action_purge:
doPurge();
return true;
default:
return false;
}
}
});
popup.show();
}
@ -785,8 +787,7 @@ public class LoadedWalletFragment extends Fragment implements SwipeRefreshLayout
UpdateWalletInfoTask connectTask = new UpdateWalletInfoTask(nodeAddress, nodePort);
connectTask.execute(ElectrumRequest.Broadcast(mCard.getWallet(), tx));
}
else if (mCard.getBlockchain() == Blockchain.BitcoinCash ||mCard.getBlockchain() == Blockchain.BitcoinCashTestNet) {
} else if (mCard.getBlockchain() == Blockchain.BitcoinCash || mCard.getBlockchain() == Blockchain.BitcoinCashTestNet) {
String nodeAddress = engine.GetNode(mCard);
int nodePort = engine.GetNodePort(mCard);

View file

@ -274,8 +274,7 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
ExchangeRequest rate = ExchangeRequest.GetRate(card.getWallet(), "bitcoin", "bitcoin");
taskRate.execute(rate);
}
else if (card.getBlockchain() == Blockchain.BitcoinCashTestNet || card.getBlockchain() == Blockchain.BitcoinCash) {
} else if (card.getBlockchain() == Blockchain.BitcoinCashTestNet || card.getBlockchain() == Blockchain.BitcoinCash) {
SharedData data = new SharedData(SharedData.COUNT_REQUEST);
for (int i = 0; i < data.allRequest; ++i) {
@ -362,7 +361,8 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
int nodePort = engine.GetNodePort(card);
RequestWalletInfoTask task = new RequestWalletInfoTask(nodeAddress, nodePort);
if( mSwipeRefreshLayout!=null ) mSwipeRefreshLayout.setRefreshing(true); //TODO: tmp
if (mSwipeRefreshLayout != null)
mSwipeRefreshLayout.setRefreshing(true); //TODO: tmp
requestTasks.add(task);
task.execute(ElectrumRequest.ListUnspent(card.getWallet()), ElectrumRequest.ListHistory(card.getWallet()));
@ -385,7 +385,8 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
int nodePort = engine.GetNodePort(card);
RequestWalletInfoTask task = new RequestWalletInfoTask(nodeAddress, nodePort);
if( mSwipeRefreshLayout!=null ) mSwipeRefreshLayout.setRefreshing(true); //TODO: tmp
if (mSwipeRefreshLayout != null)
mSwipeRefreshLayout.setRefreshing(true); //TODO: tmp
requestTasks.add(task);
task.execute(ElectrumRequest.ListUnspent(card.getWallet()), ElectrumRequest.ListHistory(card.getWallet()));
@ -393,8 +394,7 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
ExchangeRequest rate = ExchangeRequest.GetRate(card.getWallet(), "bitcoin-cash", "bitcoin-cash");
taskRate.execute(rate);
}
else if (card.getBlockchain() == Blockchain.Token) {
} else if (card.getBlockchain() == Blockchain.Token) {
ETHRequestTask updateETH = new ETHRequestTask(card.getBlockchain());
InfuraRequest reqETH = InfuraRequest.GetTokenBalance(card.getWallet(), engine.GetContractAddress(card), engine.GetTokenDecimals(card));
reqETH.setID(67);
@ -428,23 +428,32 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
@Override
public void onViewCard(Bundle cardInfo) {
if( mSwipeRefreshLayout!=null ) mSwipeRefreshLayout.setRefreshing(false); //TODO: tmp
if (mSwipeRefreshLayout != null)
mSwipeRefreshLayout.setRefreshing(false); //TODO: tmp
String UID = cardInfo.getString("UID");
TangemCard card = new TangemCard(UID);
card.LoadFromBundle(cardInfo.getBundle("Card"));
Intent intent;
if (card.getStatus() == TangemCard.Status.Empty) {
intent = new Intent(getActivity(), EmptyWalletActivity.class);
} else if (card.getStatus() == TangemCard.Status.Loaded) {
// Toast.makeText(getContext(), "1", Toast.LENGTH_SHORT).show();
}
else if (card.getStatus() == TangemCard.Status.Loaded) {
intent = new Intent(getActivity(), LoadedWalletActivity.class);
} else if (card.getStatus() == TangemCard.Status.NotPersonalized || card.getStatus() == TangemCard.Status.Purged) {
// Toast.makeText(getContext(), "2", Toast.LENGTH_SHORT).show();
}
else if (card.getStatus() == TangemCard.Status.NotPersonalized || card.getStatus() == TangemCard.Status.Purged) {
// Toast.makeText(getContext(), "3", Toast.LENGTH_SHORT).show();
return;
} else {
}
else {
intent = new Intent(getActivity(), LoadedWalletActivity.class);
// Toast.makeText(getContext(), "4", Toast.LENGTH_SHORT).show();
}
intent.putExtras(cardInfo);
@ -771,7 +780,8 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
protected void onCancelled() {
super.onCancelled();
requestTasks.remove(this);
if ( mSwipeRefreshLayout!=null && requestTasks.size() == 0) mSwipeRefreshLayout.setRefreshing(false); //TODO: tmp
if (mSwipeRefreshLayout != null && requestTasks.size() == 0)
mSwipeRefreshLayout.setRefreshing(false); //TODO: tmp
}
@ -921,7 +931,8 @@ public class MainFragment extends Fragment implements NfcAdapter.ReaderCallback,
}
}
if ( mSwipeRefreshLayout!=null && requestTasks.size() == 0) mSwipeRefreshLayout.setRefreshing(false); //TODO: tmp
if (mSwipeRefreshLayout != null && requestTasks.size() == 0)
mSwipeRefreshLayout.setRefreshing(false); //TODO: tmp
}
}

View file

@ -1,41 +1,49 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.bitex.Wallet.LoadedWalletActivity">
tools:context="com.tangem.presentation.activity.LoadedWalletActivity">
<item
android:id="@+id/action_set_PIN1"
android:orderInCategory="100"
android:title="Set PIN1"
android:enabled="false"
android:orderInCategory="100"
android:title="@string/set_pin_1"
app:showAsAction="never"/>
<item
android:id="@+id/action_set_PIN2"
android:orderInCategory="100"
android:title="Set PIN2"
android:enabled="false"
android:orderInCategory="200"
android:title="@string/set_pin_2"
app:showAsAction="never"/>
<item
android:id="@+id/action_reset_PIN1"
android:orderInCategory="100"
android:title="Reset PIN1 to default"
android:enabled="false"
android:orderInCategory="300"
android:title="@string/reset_pin_1_to_default"
app:showAsAction="never"/>
<item
android:id="@+id/action_reset_PIN2"
android:orderInCategory="100"
android:title="Reset PIN2 to default"
android:enabled="false"
android:orderInCategory="400"
android:title="@string/reset_pin_2_to_default"
app:showAsAction="never"/>
<item
android:id="@+id/action_reset_PINs"
android:orderInCategory="100"
android:title="Reset PINs to default"
android:enabled="false"
android:orderInCategory="500"
android:title="@string/reset_pins_to_default"
app:showAsAction="never"/>
<item
android:id="@+id/action_purge"
android:orderInCategory="100"
android:title="Erase wallet"
android:enabled="true"
android:orderInCategory="600"
android:title="@string/erase_wallet"
app:showAsAction="never"/>
</menu>

View file

@ -1,10 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Clean up" android:id="@+id/cleanCards"/>
<item android:title="Manage user PIN1..." android:id="@+id/managePIN" android:enabled="false"/>
<item android:title="Manage user PIN2..." android:id="@+id/managePIN2" android:enabled="false"/>
<item android:title="Send logs..." android:id="@+id/sendLogs" android:visible="false"/>
<!--<item android:title="Switch to another blockchain host" android:id="@+id/switchToAnotherBitcoinHost" android:visible="false"/>-->
<item android:title="About..." android:id="@+id/about"/>
<item
android:id="@+id/cleanCards"
android:title="@string/clean_up"/>
<item
android:id="@+id/managePIN"
android:enabled="false"
android:title="@string/manage_user_pin_1"/>
<item
android:id="@+id/managePIN2"
android:enabled="false"
android:title="@string/manage_user_pin_2"/>
<item
android:id="@+id/sendLogs"
android:title="@string/send_logs"
android:visible="false"/>
<!--<item-->
<!--android:id="@+id/switchToAnotherBitcoinHost"-->
<!--android:title="Switch to another blockchain host"-->
<!--android:visible="false"/>-->
<item
android:id="@+id/about"
android:title="@string/about"/>
</menu>

View file

@ -30,6 +30,21 @@
<string name="title_activity_loaded_wallet">LoadedWalletActivity</string>
<string name="title_activity_settings_feature">Settings</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>
<!-- LogoActivity -->
<string name="beta">BETA</string>