-When the PIN is being entered the user should press a button to confirm the pin

-When the PIN is being entered use question dialog to confirm the save PIN
-When the PIN is correcto typed and match correctly enable the ok button
This commit is contained in:
dtvv 2018-10-14 01:57:41 -05:00
parent 3d9d57d0fa
commit 013a3b841f
3 changed files with 92 additions and 7 deletions

View file

@ -8,17 +8,25 @@ import android.text.Editable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnTextChanged; import butterknife.OnTextChanged;
import cy.agorise.crystalwallet.R; import cy.agorise.crystalwallet.R;
import cy.agorise.crystalwallet.application.CrystalSecurityMonitor; import cy.agorise.crystalwallet.application.CrystalSecurityMonitor;
import cy.agorise.crystalwallet.dialogs.material.DialogMaterial;
import cy.agorise.crystalwallet.dialogs.material.NegativeResponse;
import cy.agorise.crystalwallet.dialogs.material.PositiveResponse;
import cy.agorise.crystalwallet.dialogs.material.QuestionDialog;
import cy.agorise.crystalwallet.models.GeneralSetting; import cy.agorise.crystalwallet.models.GeneralSetting;
import cy.agorise.crystalwallet.util.PasswordManager; import cy.agorise.crystalwallet.util.PasswordManager;
import cy.agorise.crystalwallet.viewmodels.GeneralSettingListViewModel; import cy.agorise.crystalwallet.viewmodels.GeneralSettingListViewModel;
@ -42,6 +50,14 @@ public class PinSecurityFragment extends Fragment implements UIValidatorListener
@BindView(R.id.tvConfirmPinError) @BindView(R.id.tvConfirmPinError)
TextView tvConfirmPinError; TextView tvConfirmPinError;
@BindView(R.id.btnOK)
Button btnOK;
/*
* Flag to check if validation of fields is correct
* */
private boolean valid = false;
GeneralSettingListViewModel generalSettingListViewModel; GeneralSettingListViewModel generalSettingListViewModel;
GeneralSetting passwordGeneralSetting; GeneralSetting passwordGeneralSetting;
PinSecurityValidator pinSecurityValidator; PinSecurityValidator pinSecurityValidator;
@ -64,6 +80,11 @@ public class PinSecurityFragment extends Fragment implements UIValidatorListener
View v = inflater.inflate(R.layout.fragment_pin_security, container, false); View v = inflater.inflate(R.layout.fragment_pin_security, container, false);
ButterKnife.bind(this, v); ButterKnife.bind(this, v);
/*
* Initially not enabled til it passes validations
* */
btnOK.setEnabled(false);
generalSettingListViewModel = ViewModelProviders.of(this).get(GeneralSettingListViewModel.class); generalSettingListViewModel = ViewModelProviders.of(this).get(GeneralSettingListViewModel.class);
LiveData<List<GeneralSetting>> generalSettingsLiveData = generalSettingListViewModel.getGeneralSettingList(); LiveData<List<GeneralSetting>> generalSettingsLiveData = generalSettingListViewModel.getGeneralSettingList();
@ -73,6 +94,35 @@ public class PinSecurityFragment extends Fragment implements UIValidatorListener
return v; return v;
} }
@OnClick(R.id.btnOK)
void okClic(final View view) {
/*
* Only can continue if the fields are correctly validated
* */
if(valid){
/*
* Question if continue or not
* */
final QuestionDialog questionDialog = new QuestionDialog(getActivity());
questionDialog.setText(getActivity().getString(R.string.question_continue));
questionDialog.setOnNegative(new NegativeResponse() {
@Override
public void onNegative(@NotNull DialogMaterial dialogMaterial) {
}
});
questionDialog.setOnPositive(new PositiveResponse() {
@Override
public void onPositive() {
savePassword();
}
});
questionDialog.show();
}
}
@OnTextChanged(value = R.id.etNewPin, @OnTextChanged(value = R.id.etNewPin,
callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
void afterNewPinChanged(Editable editable) { void afterNewPinChanged(Editable editable) {
@ -108,21 +158,34 @@ public class PinSecurityFragment extends Fragment implements UIValidatorListener
} }
if (pinSecurityValidator.isValid()){ if (pinSecurityValidator.isValid()){
CharSequence text = "Your password has been sucessfully changed!"; //savePassword();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(getContext(), text, duration); //Now is valid
toast.show(); valid = true;
savePassword(etNewPin.getText().toString()); /*
* Enable ok button to continue
* */
btnOK.setEnabled(true);
clearFields();
} }
} }
}); });
} }
private void savePassword(){
CharSequence text = "Your password has been sucessfully changed!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(getContext(), text, duration);
toast.show();
savePassword(etNewPin.getText().toString());
clearFields();
}
public void savePassword(String password) { public void savePassword(String password) {
String passwordEncripted = PasswordManager.encriptPassword(password); String passwordEncripted = PasswordManager.encriptPassword(password);
CrystalSecurityMonitor.getInstance(null).setPasswordSecurity(passwordEncripted); CrystalSecurityMonitor.getInstance(null).setPasswordSecurity(passwordEncripted);
@ -131,6 +194,15 @@ public class PinSecurityFragment extends Fragment implements UIValidatorListener
@Override @Override
public void onValidationFailed(final ValidationField field) { public void onValidationFailed(final ValidationField field) {
//Still false
valid = false;
/*
* Disable til it passes validations
* */
btnOK.setEnabled(false);
this.getActivity().runOnUiThread(new Runnable() { this.getActivity().runOnUiThread(new Runnable() {
@Override @Override

View file

@ -36,4 +36,15 @@
android:textColor="@color/red" android:textColor="@color/red"
android:layout_below="@+id/etConfirmPin" /> android:layout_below="@+id/etConfirmPin" />
<Button
android:id="@+id/btnOK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/WhiteButton"
android:text="@string/ok"
android:layout_below="@+id/etConfirmPin"
android:layout_marginTop="5dp"
android:textColor="@color/black"
android:layout_centerHorizontal="true"/>
</RelativeLayout> </RelativeLayout>

View file

@ -369,6 +369,8 @@
<string name="permission_denied_camera">Permission Denied. You cannot use the QR camera. Please allow this permission in App Settings.</string> <string name="permission_denied_camera">Permission Denied. You cannot use the QR camera. Please allow this permission in App Settings.</string>
<string name="permission_granted_camera">Great!! Now you can use the QR camera.</string> <string name="permission_granted_camera">Great!! Now you can use the QR camera.</string>
<string name="question_continue">¿Are you sure to continue?</string>
<string name="select">"Select</string> <string name="select">"Select</string>
<string name="are_you_sure">"Are you sure?</string> <string name="are_you_sure">"Are you sure?</string>
<string name="is_already_added">is already added</string> <string name="is_already_added">is already added</string>