package cy.agorise.crystalwallet.fragments; import android.app.Activity; import android.arch.lifecycle.LiveData; import android.arch.lifecycle.Observer; import android.arch.lifecycle.ViewModelProviders; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.Editable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.andrognito.patternlockview.PatternLockView; import com.andrognito.patternlockview.listener.PatternLockViewListener; import java.util.List; import java.util.Timer; import java.util.TimerTask; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnTextChanged; import cy.agorise.crystalwallet.R; import cy.agorise.crystalwallet.application.CrystalSecurityMonitor; import cy.agorise.crystalwallet.dialogs.material.CrystalDialog; import cy.agorise.crystalwallet.interfaces.OnResponse; import cy.agorise.crystalwallet.models.GeneralSetting; import cy.agorise.crystalwallet.requestmanagers.CryptoNetInfoRequests; import cy.agorise.crystalwallet.util.ChildViewPager; import cy.agorise.crystalwallet.util.PasswordManager; import cy.agorise.crystalwallet.viewmodels.GeneralSettingListViewModel; import cy.agorise.crystalwallet.viewmodels.validators.PinSecurityValidator; import cy.agorise.crystalwallet.viewmodels.validators.UIValidatorListener; import cy.agorise.crystalwallet.viewmodels.validators.validationfields.ValidationField; /** * Created by xd on 1/18/18. */ public class PatternSecurityFragment extends Fragment { @BindView(R.id.patternLockView) PatternLockView patternLockView; @BindView(R.id.tvPatternText) TextView tvPatternText; /* * Contains the ChildViewPager to block the viewpager when the user is using the pattern control * */ private ChildViewPager childViewPager; private PatternLockViewListener actualPatternListener; private String patternEntered; public PatternSecurityFragment() { // Required empty public constructor } public static PatternSecurityFragment newInstance() { PatternSecurityFragment fragment = new PatternSecurityFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.fragment_pattern_security, container, false); ButterKnife.bind(this, v); showNewPatternUI(); return v; } public String patternToString(List pattern){ String patternString = ""; for (PatternLockView.Dot nextDot : pattern){ patternString = patternString+(nextDot.getRow()*3+nextDot.getColumn()); } return patternString; } public void setChildViewPager(ChildViewPager childViewPager) { this.childViewPager = childViewPager; } public void removePatternListener(){ if (actualPatternListener != null){ patternLockView.removePatternLockListener(actualPatternListener); actualPatternListener = null; } } public void showNewPatternUI(){ removePatternListener(); patternLockView.clearPattern(); tvPatternText.setTextColor(Color.WHITE); tvPatternText.setText(getActivity().getResources().getString(R.string.Enter_new_pattern)); actualPatternListener = new PatternLockViewListener() { @Override public void onStarted() { } @Override public void onProgress(List progressPattern) { } @Override public void onComplete(List pattern) { patternEntered = patternToString(pattern); showConfirmPatternUI(); } @Override public void onCleared() { } }; patternLockView.addPatternLockListener(actualPatternListener); } public void showConfirmPatternUI(){ removePatternListener(); patternLockView.clearPattern(); patternLockView.requestFocus(); tvPatternText.setText(getActivity().getResources().getString(R.string.Confirm_new_pattern)); actualPatternListener = new PatternLockViewListener() { @Override public void onStarted() { } @Override public void onProgress(List progressPattern) { } @Override public void onComplete(List pattern) { if (patternEntered.equals(patternToString(pattern))){ savePattern(patternEntered); } else{ resetPattern(); } } @Override public void onCleared() { } }; patternLockView.addPatternLockListener(actualPatternListener); } private void resetPattern(){ /* * Show error * */ tvPatternText.setText(getActivity().getResources().getString(R.string.Incorrect_pattern)); tvPatternText.setTextColor(Color.RED); final Timer t = new Timer(); t.scheduleAtFixedRate(new TimerTask() { @Override public void run() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { t.cancel(); showNewPatternUI(); } }); } }, //Set how long before to start calling the TimerTask (in milliseconds) 1000, //Set the amount of time between each execution (in milliseconds) 1000); } public void savePattern(String pattern){ String patternEncripted = PasswordManager.encriptPassword(pattern); CrystalSecurityMonitor.getInstance(null).setPatternEncrypted(patternEncripted); /*CrystalSecurityMonitor.getInstance(null).callPasswordRequest(this.getActivity(), new OnResponse() { @Override public void onSuccess() { Log.i("onSuccess","onSuccess"); Toast.makeText(getActivity(), "onSuccess", Toast.LENGTH_LONG).show(); } @Override public void onFailed() { Log.i("onFailed","onFailed"); Toast.makeText(getActivity(), "onFailed", Toast.LENGTH_LONG).show(); } });*/ /* * Show success * */ tvPatternText.setText(getActivity().getResources().getString(R.string.Pattern_set_correctly)); tvPatternText.setTextColor(Color.GREEN); final Timer t_ = new Timer(); t_.scheduleAtFixedRate(new TimerTask() { @Override public void run() { getActivity().runOnUiThread(new Runnable() { @Override public void run() { t_.cancel(); showNewPatternUI(); } }); } }, //Set how long before to start calling the TimerTask (in milliseconds) 1000, //Set the amount of time between each execution (in milliseconds) 1000); } }