package at.favre.lib.securesharedpreferences; import android.content.Intent; import androidx.databinding.DataBindingUtil; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.view.View; import at.favre.lib.armadillo.Armadillo; import at.favre.lib.armadillo.ArmadilloSharedPreferences; import at.favre.lib.armadillo.SecureSharedPreferenceCryptoException; import at.favre.lib.securesharedpreferences.databinding.ActivityChangePasswordBinding; import static at.favre.lib.securesharedpreferences.MainActivity.PREF_NAME; import static at.favre.lib.securesharedpreferences.MainActivity.SECRET; import static at.favre.lib.securesharedpreferences.Utils.showToast; // TODO do expensive calls in a background thread public class ChangePasswordActivity extends AppCompatActivity { private ActivityChangePasswordBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_change_password); getSupportActionBar().setTitle("Change Password"); } public void onChangePasswordClicked(View view) { if (binding.currentPassword.getText() == null) { binding.currentPasswordLayout.setError("Enter current password"); return; } else if (binding.newPassword.getText() == null) { binding.newPassword.setError("Enter new password"); return; } // Get current pass char[] currentPassword = new char[binding.currentPassword.length()]; binding.currentPassword.getText().getChars(0, binding.currentPassword.length(), currentPassword, 0); // Init Armadillo ArmadilloSharedPreferences armadillo = Armadillo.create(this, PREF_NAME) .encryptionFingerprint(this, SECRET) .password(currentPassword) .supportVerifyPassword(true) .build(); if (!armadillo.isValidPassword()) { binding.currentPasswordLayout.setError("Incorrect password!"); return; } // Get new pass char[] newPassword = new char[binding.newPassword.length()]; binding.newPassword.getText().getChars(0, binding.newPassword.length(), newPassword, 0); // Change pass try { armadillo.changePassword(newPassword); showToast(this, "Password successfully changed!"); openMainActivity(); } catch (SecureSharedPreferenceCryptoException ex) { binding.currentPasswordLayout.setError("Incorrect password!"); } } private void openMainActivity() { Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); } }