/*
* Copyright (c) 2015 Jonas Kalderstam.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nononsenseapps.notepad.ui.common;
import android.content.SharedPreferences;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
import com.nononsenseapps.notepad.R;
import com.nononsenseapps.notepad.databinding.FragmentDialogPasswordBinding;
public class DialogPassword extends DialogFragment {
PasswordConfirmedListener listener = null;
private FragmentDialogPasswordBinding binding;
public void setListener(final PasswordConfirmedListener listener) {
this.listener = listener;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(getActivity());
final String currentPassword = settings.getString(
DialogPasswordSettings.KEY_PASSWORD, "");
if (currentPassword.isEmpty()) {
getDialog().setTitle(R.string.enter_new_password);
}
else {
getDialog().setTitle(R.string.password_required);
}
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_dialog_password, container, true);
return binding.getRoot();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
showField();
}
public void showField() {
final SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(getActivity());
final String currentPassword = settings.getString(
DialogPasswordSettings.KEY_PASSWORD, "");
if (currentPassword.isEmpty()) {
binding.passwordVerificationField.setVisibility(View.VISIBLE);
}
else {
binding.passwordVerificationField.setVisibility(View.GONE);
}
binding.passwordField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
binding.buttons.dialogYes.setEnabled(s.length() > 0);
}
});
binding.buttons.dialogNo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
binding.buttons.dialogYes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
confirm();
}
});
}
void confirm() {
final SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(getActivity());
final String currentPassword = settings.getString(DialogPasswordSettings.KEY_PASSWORD,
"");
final String enteredPassword = binding.passwordField.getText().toString();
final String verifiedPassword = binding.passwordVerificationField.getText()
.toString();
if (currentPassword.isEmpty()) {
setPassword(enteredPassword, verifiedPassword);
}
else {
// We want to return true or false, user has entered correct
// password
checkPassword(enteredPassword, currentPassword);
}
}
private void checkPassword(final String enteredPassword,
final String currentPassword) {
if (currentPassword.equals(enteredPassword)) {
if (listener != null) {
listener.onPasswordConfirmed();
}
dismiss();
}
else {
Animation shake = AnimationUtils.loadAnimation(getActivity(),
R.anim.shake);
binding.passwordField.startAnimation(shake);
Toast.makeText(getActivity(), getText(R.string.password_incorrect),
Toast.LENGTH_SHORT).show();
}
}
private void setPassword(final String pass1, final String pass2) {
if (pass1 != null && !pass1.isEmpty() && pass1.equals(pass2)) {
PreferenceManager.getDefaultSharedPreferences(getActivity()).edit()
.putString(DialogPasswordSettings.KEY_PASSWORD, pass1).commit();
if (listener != null) {
listener.onPasswordConfirmed();
}
dismiss();
}
else {
Animation shake = AnimationUtils.loadAnimation(getActivity(),
R.anim.shake);
binding.passwordVerificationField.startAnimation(shake);
Toast.makeText(getActivity(),
getText(R.string.passwords_dont_match), Toast.LENGTH_SHORT)
.show();
}
}
public interface PasswordConfirmedListener {
void onPasswordConfirmed();
}
}