Advertisement
zholmes

zTrader Cryptography

Apr 19th, 2014
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.44 KB | None | 0 0
  1. package co.bandicoot.ztrader;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import android.app.ActionBar;
  6. import android.app.Activity;
  7. import android.app.AlertDialog;
  8. import android.content.Context;
  9. import android.content.DialogInterface;
  10. import android.content.Intent;
  11. import android.content.pm.PackageManager;
  12. import android.content.pm.PackageManager.NameNotFoundException;
  13. import android.net.Uri;
  14. import android.os.Bundle;
  15. import android.text.Editable;
  16. import android.text.TextWatcher;
  17. import android.view.KeyEvent;
  18. import android.view.View;
  19. import android.view.inputmethod.EditorInfo;
  20. import android.view.inputmethod.InputMethodManager;
  21. import android.widget.Button;
  22. import android.widget.EditText;
  23. import android.widget.ImageButton;
  24. import android.widget.RelativeLayout;
  25. import android.widget.TextView;
  26. import android.widget.TextView.OnEditorActionListener;
  27. import android.widget.Toast;
  28.  
  29. public class CreateKeyActivity extends Activity {
  30.  
  31.     private static final int REQUEST_API_QR_CODE = 0;
  32.     private static final int REQUEST_SECRET_QR_CODE = 1;
  33.  
  34.     Button cancelButton, encryptButton;
  35.     ImageButton scanApiButton, scanSecretButton;
  36.     EditText apiEditText, secretEditText, userIdEditText, passwordEditText;
  37.     RelativeLayout secretLayout;
  38.     int exchange;
  39.  
  40.     @Override
  41.     protected void onCreate(Bundle savedInstanceState) {
  42.         super.onCreate(savedInstanceState);
  43.         setContentView(R.layout.activity_create_key);
  44.         exchange = getIntent().getIntExtra("exchange", 0);
  45.  
  46.         ActionBar actionBar = getActionBar();
  47.         actionBar.setIcon(R.drawable.ic_action_accounts_light);
  48.         actionBar.setDisplayHomeAsUpEnabled(true);
  49.         actionBar.setTitle(ExchangeService.getName(exchange));
  50.  
  51.         scanApiButton = (ImageButton) findViewById(R.id.scanApiButton);
  52.         scanSecretButton = (ImageButton) findViewById(R.id.scanSecretButton);
  53.         cancelButton = (Button) findViewById(R.id.cancelButton);
  54.         encryptButton = (Button) findViewById(R.id.encryptButton);
  55.         apiEditText = (EditText) findViewById(R.id.apiEditText);
  56.         secretEditText = (EditText) findViewById(R.id.secretEditText);
  57.         passwordEditText = (EditText) findViewById(R.id.passwordEditText);
  58.         userIdEditText = (EditText) findViewById(R.id.userIdEditText);
  59.         secretLayout = (RelativeLayout) findViewById(R.id.secretLayout);
  60.  
  61.         if (exchange == ExchangeService.BITSTAMP) {
  62.             userIdEditText.setVisibility(View.VISIBLE);
  63.         } else if (exchange == ExchangeService.JUSTCOIN) {
  64.             secretLayout.setVisibility(View.GONE);
  65.         }
  66.  
  67.         if (exchange == ExchangeService.CRYPTSY) {
  68.             apiEditText.setHint(getText(R.string.public_key));
  69.             secretEditText.setHint(getText(R.string.private_key));
  70.         } else {
  71.             apiEditText.setHint(getText(R.string.api_key));
  72.             secretEditText.setHint(getText(R.string.secret));
  73.         }
  74.  
  75.         passwordEditText.addTextChangedListener(new TextWatcher() {
  76.  
  77.             @Override
  78.             public void afterTextChanged(Editable arg0) {
  79.                 if (passwordEditText.getText().toString().length() > 7) {
  80.                     encryptButton.setEnabled(true);
  81.                     passwordEditText.setImeActionLabel(getText(R.string.encrypt), EditorInfo.IME_ACTION_DONE);
  82.                 } else {
  83.                     encryptButton.setEnabled(false);
  84.                     passwordEditText.setImeActionLabel(getText(R.string.done), EditorInfo.IME_ACTION_DONE);
  85.                 }
  86.             }
  87.  
  88.             @Override
  89.             public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
  90.  
  91.             }
  92.  
  93.             @Override
  94.             public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
  95.  
  96.             }
  97.  
  98.         });
  99.  
  100.         passwordEditText.setOnEditorActionListener(new OnEditorActionListener() {
  101.  
  102.             @Override
  103.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  104.                 if (arg1 == EditorInfo.IME_ACTION_DONE && apiEditText.getText().length() > 0
  105.                         && secretEditText.getText().length() > 0) {
  106.                     encrypt(null);
  107.                 } else {
  108.                     ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
  109.                             .hideSoftInputFromWindow(CreateKeyActivity.this.getCurrentFocus()
  110.                                     .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
  111.                 }
  112.                 return true;
  113.             }
  114.         });
  115.  
  116.         scanApiButton.setOnClickListener(new View.OnClickListener() {
  117.             @Override
  118.             public void onClick(View v) {
  119.                 if (isPackageInstalled("com.google.zxing.client.android")) {
  120.                     if (isCameraAvailable()) {
  121.                         Intent intent = new Intent("com.google.zxing.client.android.SCAN");
  122.                         intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
  123.                         intent.putExtra("SAVE_HISTORY", false);
  124.                         startActivityForResult(intent, REQUEST_API_QR_CODE);
  125.                     } else {
  126.                         Toast.makeText(CreateKeyActivity.this, getText(R.string.camera_unavailable),
  127.                                 Toast.LENGTH_SHORT).show();
  128.                     }
  129.                 } else {
  130.                     showSendToMarketDialog();
  131.                 }
  132.             }
  133.         });
  134.  
  135.         scanSecretButton.setOnClickListener(new View.OnClickListener() {
  136.             @Override
  137.             public void onClick(View v) {
  138.                 if (isPackageInstalled("com.google.zxing.client.android")) {
  139.                     if (isCameraAvailable()) {
  140.                         Intent intent = new Intent("com.google.zxing.client.android.SCAN");
  141.                         intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
  142.                         intent.putExtra("SAVE_HISTORY", false);
  143.                         startActivityForResult(intent, REQUEST_SECRET_QR_CODE);
  144.                     } else {
  145.                         Toast.makeText(CreateKeyActivity.this, getText(R.string.camera_unavailable),
  146.                                 Toast.LENGTH_SHORT).show();
  147.                     }
  148.                 } else {
  149.                     showSendToMarketDialog();
  150.                 }
  151.             }
  152.         });
  153.  
  154.         cancelButton.setOnClickListener(new View.OnClickListener() {
  155.             @Override
  156.             public void onClick(View v) {
  157.                 setResult(RESULT_CANCELED, null);
  158.                 finish();
  159.             }
  160.         });
  161.     }
  162.  
  163.     @Override
  164.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  165.        
  166.         super.onActivityResult(requestCode, resultCode, data);
  167.         if (requestCode == REQUEST_API_QR_CODE) {
  168.             if (resultCode == RESULT_OK) {
  169.                 String contents = data.getStringExtra("SCAN_RESULT");
  170.                 if (contents != null) {
  171.                     apiEditText.setText(contents);
  172.                 }
  173.             }
  174.         } else if (requestCode == REQUEST_SECRET_QR_CODE) {
  175.             if (resultCode == RESULT_OK) {
  176.                 String contents = data.getStringExtra("SCAN_RESULT");
  177.                 if (contents != null) {
  178.                     secretEditText.setText(contents);
  179.                 }
  180.             }
  181.         }
  182.        
  183.     }
  184.  
  185.     public void encrypt(View v) {
  186.        
  187.         try {
  188.            
  189.             Intent returnIntent = new Intent();
  190.             returnIntent.putExtra("exchange", exchange);
  191.  
  192.             HashMap<Integer, ExchangeData> exchangeContainer = Utils
  193.                     .getExchangeContainer(getApplicationContext());
  194.             String encryptedApi = EncodeDecodeAES.encrypt(passwordEditText.getText().toString(), apiEditText
  195.                     .getText().toString());
  196.             exchangeContainer.get(exchange).setEncryptedApi(encryptedApi);
  197.  
  198.             if (secretLayout.getVisibility() == View.VISIBLE) {
  199.                 String encryptedSecret = EncodeDecodeAES.encrypt(passwordEditText.getText().toString(),
  200.                         secretEditText.getText().toString());
  201.                 exchangeContainer.get(exchange).setEncryptedSecret(encryptedSecret);
  202.             }
  203.  
  204.             if (userIdEditText.getVisibility() == View.VISIBLE) {
  205.                 String encryptedUserId = EncodeDecodeAES.encrypt(passwordEditText.getText().toString(),
  206.                         userIdEditText.getText().toString());
  207.                 exchangeContainer.get(exchange).setEncryptedUserId(encryptedUserId);
  208.             }
  209.  
  210.             Utils.saveExchangeContainer(getApplicationContext(), exchangeContainer);
  211.  
  212.             setResult(RESULT_OK, returnIntent);
  213.             finish();
  214.         } catch (Exception e) {
  215.             Toast.makeText(
  216.                     CreateKeyActivity.this,
  217.                     getText(R.string.encryption_failed) + " " + e.getClass().getName() + ": "
  218.                             + e.getMessage(), Toast.LENGTH_LONG).show();
  219.             e.printStackTrace();
  220.         }
  221.  
  222.     }
  223.  
  224.     private boolean isCameraAvailable() {
  225.        
  226.         PackageManager pm = getPackageManager();
  227.         return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
  228.        
  229.     }
  230.  
  231.     private boolean isPackageInstalled(String packagename) {
  232.        
  233.         PackageManager pm = getPackageManager();
  234.         try {
  235.             pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
  236.             return true;
  237.         } catch (NameNotFoundException e) {
  238.             return false;
  239.         }
  240.        
  241.     }
  242.  
  243.     private void showSendToMarketDialog() {
  244.        
  245.         new AlertDialog.Builder(this).setTitle(getText(R.string.scanner_required))
  246.                 .setMessage(getText(R.string.zxing_msg))
  247.                 .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
  248.                     @Override
  249.                     public void onClick(DialogInterface arg0, int arg1) {
  250.                         Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android");
  251.                         Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
  252.                         startActivity(marketIntent);
  253.                     }
  254.                 }).setNegativeButton(android.R.string.no, null).create().show();
  255.        
  256.     }
  257.    
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement