492 lines
21 KiB
Java
492 lines
21 KiB
Java
package monnethic.mobile.settings;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.AsyncTask;
|
|
import android.support.v7.app.AppCompatActivity;
|
|
import com.example.monnthic.monnethicmobile.R;
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
import android.view.WindowManager;
|
|
import android.view.inputmethod.InputMethodManager;
|
|
import android.widget.AdapterView;
|
|
import android.widget.ArrayAdapter;
|
|
import android.widget.Button;
|
|
import android.widget.CompoundButton;
|
|
import android.widget.EditText;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.RelativeLayout;
|
|
import android.widget.Spinner;
|
|
import android.widget.Switch;
|
|
import android.widget.Toast;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import monnethic.mobile.homepage.InputController;
|
|
import monnethic.mobile.restApi.SessionApiHandler;
|
|
import monnethic.mobile.restApi.SettingsApiHandler;
|
|
import monnethic.mobile.restApi.WalletApiHandler;
|
|
import monnethic.mobile.wallet.Wallet;
|
|
|
|
public class SettingsActivity extends AppCompatActivity {
|
|
private Context context = SettingsActivity.this;
|
|
private ArrayList<Wallet> userWallets;
|
|
private String user_hash;
|
|
private String user_email;
|
|
private String user_password;
|
|
private String session_id;
|
|
|
|
private EditText currentPassword;
|
|
private EditText newPassword;
|
|
private EditText confirmedNewPassword;
|
|
private Button buttonConfirm;
|
|
private Button buttonCancel;
|
|
private Switch enableDeleteWallet;
|
|
private Switch enableChangePassword;
|
|
private Spinner walletToDelete;
|
|
private Spinner walletToTransfer;
|
|
private EditText confirmWalletToDelete;
|
|
private LinearLayout l1;
|
|
private LinearLayout l2;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.activity_settings);
|
|
|
|
Intent intent = getIntent();
|
|
user_hash = intent.getStringExtra("USER_HASH");
|
|
user_email = intent.getStringExtra("USER_EMAIL");
|
|
user_password = intent.getStringExtra("USER_PWD");
|
|
session_id = intent.getStringExtra("SESSION_ID");
|
|
try{
|
|
userWallets = (ArrayList<Wallet>) intent.getSerializableExtra("data");
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
userWallets=null;
|
|
}
|
|
initView();
|
|
}
|
|
|
|
private void initView(){
|
|
l1 = (LinearLayout) findViewById(R.id.l1);
|
|
l2 = (LinearLayout) findViewById(R.id.l2);
|
|
currentPassword = findViewById(R.id.currentPwd);
|
|
newPassword = findViewById(R.id.newPwd1);
|
|
confirmedNewPassword = findViewById(R.id.newPwd2);
|
|
currentPassword.setEnabled(false);
|
|
newPassword.setEnabled(false);
|
|
confirmedNewPassword.setEnabled(false);
|
|
|
|
walletToDelete = findViewById(R.id.spinnerWalletToDelete);
|
|
walletToTransfer = findViewById(R.id.spinnerWalletToMoveFund);
|
|
confirmWalletToDelete = findViewById(R.id.editTextConfirmDeleteWallet);
|
|
walletToTransfer.setEnabled(false);
|
|
confirmWalletToDelete.setEnabled(false);
|
|
walletToDelete.setEnabled(false);
|
|
|
|
enableChangePassword = findViewById(R.id.switchChangePassword);
|
|
enableChangePassword.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
|
|
if(enableChangePassword.isChecked()){
|
|
l1.setBackgroundResource(R.color.zxing_transparent);
|
|
currentPassword.setEnabled(true);
|
|
newPassword.setEnabled(true);
|
|
confirmedNewPassword.setEnabled(true);
|
|
}else{
|
|
l1.setBackgroundResource(R.color.darker_gray);
|
|
currentPassword.setEnabled(false);
|
|
newPassword.setEnabled(false);
|
|
confirmedNewPassword.setEnabled(false);
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
if(!userWallets.isEmpty()){
|
|
List<String> listOptions = new ArrayList<>();
|
|
for(Wallet w : userWallets){
|
|
listOptions.add(w.getType());
|
|
}
|
|
ArrayAdapter<String> adapterOptions = new ArrayAdapter<>(SettingsActivity.this,android.R.layout.simple_spinner_dropdown_item,listOptions);
|
|
adapterOptions.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
|
walletToDelete.setAdapter(adapterOptions);
|
|
walletToTransfer.setAdapter(adapterOptions);
|
|
|
|
if(userWallets.size()>1 && walletToDelete.getSelectedItemId()==walletToTransfer.getSelectedItemId()){
|
|
walletToTransfer.setSelection((int) walletToDelete.getSelectedItemId()+1);
|
|
}
|
|
}
|
|
|
|
walletToDelete.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
|
@Override
|
|
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
|
|
if(userWallets.size()>1 && walletToTransfer.getSelectedItemId()==(int)l){
|
|
if(walletToTransfer.getSelectedItemId()+1==userWallets.size()){
|
|
walletToTransfer.setSelection(0);
|
|
}else{
|
|
walletToTransfer.setSelection((int) walletToDelete.getSelectedItemId()+1);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onNothingSelected(AdapterView<?> adapterView) {
|
|
|
|
}
|
|
});
|
|
|
|
enableDeleteWallet = findViewById(R.id.switchDeleteWallet);
|
|
enableDeleteWallet.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
|
|
if(userWallets.size()<=1){
|
|
Toast.makeText(SettingsActivity.this,"You can't delete a wallet with one or less wallet",Toast.LENGTH_LONG).show();
|
|
enableDeleteWallet.setChecked(false);
|
|
}else{
|
|
if(enableDeleteWallet.isChecked()){
|
|
l2.setBackgroundResource(R.color.zxing_transparent);
|
|
walletToTransfer.setEnabled(true);
|
|
confirmWalletToDelete.setEnabled(true);
|
|
walletToDelete.setEnabled(true);
|
|
}else{
|
|
l2.setBackgroundResource(R.color.darker_gray);
|
|
walletToTransfer.setEnabled(false);
|
|
confirmWalletToDelete.setEnabled(false);
|
|
walletToDelete.setEnabled(false);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
buttonConfirm = findViewById(R.id.buttonConfirmSettings);
|
|
buttonConfirm.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
if(!enableDeleteWallet.isChecked() && !enableChangePassword.isChecked()){
|
|
Intent intent = new Intent();
|
|
intent.putExtra("new_password",user_password);
|
|
setResult(1,intent);
|
|
finish();
|
|
}
|
|
else if (!enableDeleteWallet.isChecked() && enableChangePassword.isChecked()){
|
|
InputMethodManager inputMethodManager = (InputMethodManager) SettingsActivity.this.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
|
inputMethodManager.hideSoftInputFromWindow(SettingsActivity.this.getCurrentFocus().getWindowToken(),0);
|
|
changePwd();
|
|
}
|
|
else if (enableDeleteWallet.isChecked() && !enableChangePassword.isChecked()){
|
|
InputMethodManager inputMethodManager = (InputMethodManager) SettingsActivity.this.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
|
inputMethodManager.hideSoftInputFromWindow(SettingsActivity.this.getCurrentFocus().getWindowToken(),0);
|
|
deleteWallet();
|
|
}
|
|
else {
|
|
InputMethodManager inputMethodManager = (InputMethodManager) SettingsActivity.this.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
|
inputMethodManager.hideSoftInputFromWindow(SettingsActivity.this.getCurrentFocus().getWindowToken(),0);
|
|
changePwdAndDeleteWallet();
|
|
}
|
|
}
|
|
});
|
|
buttonCancel = findViewById(R.id.buttonCancelSettings);
|
|
buttonCancel.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
Intent intent3 = new Intent();
|
|
intent3.putExtra("new_password",user_password);
|
|
setResult(1,intent3);
|
|
finish();
|
|
}
|
|
});
|
|
}
|
|
|
|
private void changePwd(){
|
|
if(checkInputEmptyPassword()){
|
|
if(currentPassword.getText().toString().equals(user_password)){
|
|
String[] p = {user_email,user_password,newPassword.getText().toString()};
|
|
new changeUserPasswordTask().execute(p);
|
|
}else{
|
|
Toast.makeText(SettingsActivity.this,"Current password don't match actual password",Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void deleteWallet(){
|
|
if(checkInputEmptyWallet()){
|
|
String[] p = {user_email,user_hash,user_password,
|
|
userWallets.get((int) walletToDelete.getSelectedItemId()).getWallet_hash(),
|
|
userWallets.get((int) walletToTransfer.getSelectedItemId()).getWallet_hash()};
|
|
new deleteWalletTask().execute(p);
|
|
}
|
|
}
|
|
|
|
private void changePwdAndDeleteWallet(){
|
|
if(checkInputEmptyPassword()){
|
|
if(!currentPassword.getText().toString().equals(user_password)){
|
|
Toast.makeText(SettingsActivity.this,"Current password don't match actual password",Toast.LENGTH_SHORT).show();
|
|
}else{
|
|
if(checkInputEmptyWallet()){
|
|
String[] p = {user_email,user_password,newPassword.getText().toString(),user_hash,
|
|
userWallets.get((int) walletToDelete.getSelectedItemId()).getWallet_hash(),
|
|
userWallets.get((int) walletToTransfer.getSelectedItemId()).getWallet_hash()};
|
|
new updatePwdAndDeleteWalletTask().execute(p);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private boolean checkInputEmptyPassword(){
|
|
if(InputController.isEmptyEdit(currentPassword)){
|
|
Toast.makeText(this, "You didn't enter current password", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
} else if(InputController.isEmptyEdit(newPassword)){
|
|
Toast.makeText(this, "You didn't enter new password", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
} else if(InputController.isEmptyEdit(confirmedNewPassword)){
|
|
Toast.makeText(this, "You didn't enter confirmation password", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
} else {
|
|
if(!InputController.passwordValidator(newPassword.getText().toString())){
|
|
Toast.makeText(this, "Password must contains 6 to 20 characters, one lowercase, one uppercase and one digit", Toast.LENGTH_LONG).show();
|
|
return false;
|
|
} else if (!(newPassword.getText().toString().equals(confirmedNewPassword.getText().toString()))) {
|
|
Toast.makeText(this, "New Password don't match Confirmation Password", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
} else{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private boolean checkInputEmptyWallet(){
|
|
if(InputController.isEmptyEdit(confirmWalletToDelete)){
|
|
Toast.makeText(this, "You didn't confirm wallet deletion", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
}else{
|
|
if(!confirmWalletToDelete.getText().toString().equals(userWallets.get((int) walletToDelete.getSelectedItemId()).getType())){
|
|
Toast.makeText(this, "Confirmation wallet don't match wallet to delete", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
} else if(walletToDelete.getSelectedItemId()==walletToTransfer.getSelectedItemId()) {
|
|
Toast.makeText(this, "Delete wallet and Wallet to transfer fund can't be the same", Toast.LENGTH_SHORT).show();
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//AsyncTask to change userPassword
|
|
private class changeUserPasswordTask extends AsyncTask<String,String,String> {
|
|
RelativeLayout progress = findViewById(R.id.progressLayout);
|
|
@Override
|
|
protected void onPreExecute() {
|
|
super.onPreExecute();
|
|
currentPassword.setEnabled(false);
|
|
newPassword.setEnabled(false);
|
|
confirmedNewPassword.setEnabled(false);
|
|
walletToTransfer.setEnabled(false);
|
|
confirmWalletToDelete.setEnabled(false);
|
|
walletToDelete.setEnabled(false);
|
|
buttonCancel.setEnabled(false);
|
|
buttonConfirm.setEnabled(false);
|
|
enableChangePassword.setEnabled(false);
|
|
enableDeleteWallet.setEnabled(false);
|
|
|
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
|
|
progress.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
@Override
|
|
protected String doInBackground(String... params) {
|
|
try{
|
|
SettingsApiHandler settingsApiHandler = new SettingsApiHandler();
|
|
return settingsApiHandler.updatePassword(params);
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onPostExecute(String v) {
|
|
if(Boolean.parseBoolean(v)){
|
|
Toast.makeText(SettingsActivity.this,"Password updated",Toast.LENGTH_SHORT).show();
|
|
Intent intent = new Intent();
|
|
intent.putExtra("new_password",newPassword.getText().toString());
|
|
setResult(1,intent);
|
|
finish();
|
|
}else{
|
|
Toast.makeText(SettingsActivity.this,"An error occured",Toast.LENGTH_SHORT).show();
|
|
|
|
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
|
|
progress.setVisibility(View.GONE);
|
|
|
|
currentPassword.setEnabled(true);
|
|
newPassword.setEnabled(true);
|
|
confirmedNewPassword.setEnabled(true);
|
|
buttonCancel.setEnabled(true);
|
|
buttonConfirm.setEnabled(true);
|
|
enableChangePassword.setEnabled(true);
|
|
enableChangePassword.setChecked(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
private class deleteWalletTask extends AsyncTask<String,String,String> {
|
|
RelativeLayout progress = findViewById(R.id.progressLayout);
|
|
|
|
@Override
|
|
protected void onPreExecute() {
|
|
super.onPreExecute();
|
|
currentPassword.setEnabled(false);
|
|
newPassword.setEnabled(false);
|
|
confirmedNewPassword.setEnabled(false);
|
|
walletToTransfer.setEnabled(false);
|
|
confirmWalletToDelete.setEnabled(false);
|
|
walletToDelete.setEnabled(false);
|
|
buttonCancel.setEnabled(false);
|
|
buttonConfirm.setEnabled(false);
|
|
enableChangePassword.setEnabled(false);
|
|
enableDeleteWallet.setEnabled(false);
|
|
|
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
|
|
progress.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
@Override
|
|
protected String doInBackground(String... params) {
|
|
try{
|
|
WalletApiHandler walletApiHandler = new WalletApiHandler();
|
|
return walletApiHandler.deleteWallet(params);
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onPostExecute(String v) {
|
|
if(Boolean.parseBoolean(v)){
|
|
Toast.makeText(SettingsActivity.this,"Wallet has been deleted",Toast.LENGTH_SHORT).show();
|
|
Intent intent = new Intent();
|
|
intent.putExtra("new_password",user_password);
|
|
setResult(1,intent);
|
|
finish();
|
|
}else{
|
|
Toast.makeText(SettingsActivity.this,"An error occured",Toast.LENGTH_SHORT).show();
|
|
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
|
|
progress.setVisibility(View.GONE);
|
|
|
|
walletToDelete.setEnabled(true);
|
|
walletToTransfer.setEnabled(true);
|
|
confirmWalletToDelete.setEnabled(true);
|
|
buttonCancel.setEnabled(true);
|
|
buttonConfirm.setEnabled(true);
|
|
enableDeleteWallet.setEnabled(true);
|
|
enableDeleteWallet.setChecked(false);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
private class updatePwdAndDeleteWalletTask extends AsyncTask<String,String,String>{
|
|
RelativeLayout progress = findViewById(R.id.progressLayout);
|
|
|
|
@Override
|
|
protected void onPreExecute() {
|
|
super.onPreExecute();
|
|
currentPassword.setEnabled(false);
|
|
newPassword.setEnabled(false);
|
|
confirmedNewPassword.setEnabled(false);
|
|
walletToTransfer.setEnabled(false);
|
|
confirmWalletToDelete.setEnabled(false);
|
|
walletToDelete.setEnabled(false);
|
|
buttonCancel.setEnabled(false);
|
|
buttonConfirm.setEnabled(false);
|
|
enableChangePassword.setEnabled(false);
|
|
enableDeleteWallet.setEnabled(false);
|
|
|
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
|
|
progress.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
@Override
|
|
protected String doInBackground(String... params) {
|
|
try{
|
|
SettingsApiHandler settingsApiHandler = new SettingsApiHandler();
|
|
WalletApiHandler walletApiHandler = new WalletApiHandler();
|
|
if(Boolean.parseBoolean(settingsApiHandler.updatePassword(new String[]{params[0],params[1],params[2]}))){
|
|
if(Boolean.parseBoolean(walletApiHandler.deleteWallet(new String[]{params[0],params[3],params[2],params[4],params[5]}))){
|
|
return "true";
|
|
}
|
|
}
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
return "false";
|
|
}
|
|
|
|
@Override
|
|
protected void onPostExecute(String v) {
|
|
if(Boolean.parseBoolean(v)){
|
|
Toast.makeText(SettingsActivity.this,"Password updated & Wallet deleted",Toast.LENGTH_SHORT).show();
|
|
Intent intent = new Intent();
|
|
intent.putExtra("new_password",newPassword.getText().toString());
|
|
setResult(1,intent);
|
|
finish();
|
|
}else{
|
|
Toast.makeText(SettingsActivity.this,"An error occured",Toast.LENGTH_SHORT).show();
|
|
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
|
|
progress.setVisibility(View.GONE);
|
|
|
|
currentPassword.setEnabled(true);
|
|
newPassword.setEnabled(true);
|
|
confirmedNewPassword.setEnabled(true);
|
|
buttonCancel.setEnabled(true);
|
|
buttonConfirm.setEnabled(true);
|
|
enableChangePassword.setEnabled(true);
|
|
enableChangePassword.setChecked(false);
|
|
|
|
walletToDelete.setEnabled(true);
|
|
walletToTransfer.setEnabled(true);
|
|
confirmWalletToDelete.setEnabled(true);
|
|
buttonCancel.setEnabled(true);
|
|
buttonConfirm.setEnabled(true);
|
|
enableDeleteWallet.setEnabled(true);
|
|
enableDeleteWallet.setChecked(false);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed() {
|
|
Intent intent = new Intent();
|
|
intent.putExtra("new_password",user_password);
|
|
setResult(1,intent);
|
|
super.onBackPressed();
|
|
}
|
|
|
|
@Override
|
|
protected void onStop() {
|
|
super.onStop(); // Always call the superclass method first
|
|
new EndSessionTask().execute(session_id);
|
|
|
|
}
|
|
|
|
private class EndSessionTask extends AsyncTask<String,Void,Void> {
|
|
@Override
|
|
protected Void doInBackground(String... strings) {
|
|
try{
|
|
SessionApiHandler sessionApiHandler = new SessionApiHandler();
|
|
sessionApiHandler.endSession(strings[0]);
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|