app-mobile/app/src/main/java/monnethic/mobile/settings/SettingsActivity.java
2019-06-14 15:46:45 +02:00

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;
}
}
}