package com.github.jthuraisamy.mastertap.fragments; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.github.jthuraisamy.mastertap.MainActivity; import com.github.jthuraisamy.mastertap.R; import net.sqlcipher.database.SQLiteException; public class ChangePasswordDialog extends DialogFragment { public static final String TAG = ChangePasswordDialog.class.getSimpleName(); public ChangePasswordDialog() {} public static ChangePasswordDialog create() { return new ChangePasswordDialog(); } @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { final MainActivity ctx = (MainActivity) getActivity(); AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx); // Set title bar. alertDialog.setTitle(R.string.change_password_title); // Set view. LayoutInflater inflater = LayoutInflater.from(ctx); final View view = inflater.inflate(R.layout.change_password_dialog, null); alertDialog.setView(view); // Set OnClickListener for negative button. alertDialog.setNegativeButton(R.string.cancel, null); // Set OnClickListener for positive button as null, then define it in onResume. alertDialog.setPositiveButton(R.string.save, null); return alertDialog.create(); } @Override public void onResume() { super.onResume(); final AlertDialog alertDialog = (AlertDialog) getDialog(); Button saveButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View onClick) { final MainActivity ctx = (MainActivity) getActivity(); EditText passwordInput = (EditText) alertDialog.findViewById(R.id.passwordInput); EditText newPasswordInput = (EditText) alertDialog.findViewById(R.id.newPasswordInput); EditText newPasswordConfirmInput = (EditText) alertDialog.findViewById(R.id.newPasswordConfirmInput); String password = passwordInput.getText().toString(); String newPassword = newPasswordInput.getText().toString(); String newPasswordConfirm = newPasswordConfirmInput.getText().toString(); // Validate current password. try { MainActivity.cardDao.setKey(password); } catch (SQLiteException e) { ctx.vibrator.vibrate(new long[] {0, 125, 125, 125}, -1); ctx.toastMessage(ctx.getString(R.string.invalid_password)); passwordInput.setText(""); return; } // Validate new password. if (!newPassword.equals(newPasswordConfirm)) { ctx.vibrator.vibrate(new long[] {0, 125, 125, 125}, -1); ctx.toastMessage(ctx.getString(R.string.unmatched_passwords)); } else if (newPassword.isEmpty()) { ctx.vibrator.vibrate(new long[] {0, 125, 125, 125}, -1); ctx.toastMessage(ctx.getString(R.string.blank_password)); } else { MainActivity.cardDao.setNewKey(newPassword); ctx.toastMessage(ctx.getString(R.string.password_changed)); dismiss(); } } }); } }