package com.maxiee.heartbeat.ui;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;
import com.eftimoff.patternview.PatternView;
import com.maxiee.heartbeat.R;
import com.maxiee.heartbeat.ui.common.BaseActivity;
/**
* Created by maxiee on 15-7-29.
*/
public class PatternActivity extends BaseActivity{
public final static String ACTION = "action";
public final static int SET = 0;
public final static int VERIFY = 1;
public final static int MODIFY = 2; // verify then set
public final static int CANCEL = 3; // verify then clear
public final static int ERROR = -1;
private final static int SET_1_STAGE = 10;
private final static int SET_2_STAGE = 11;
private final static int CANCEL_1_STAGE = 20;
private final static int MODIFY_1_STAGE = 30;
private final static int MODIFY_2_STAGE = 31;
private final static int MODIFY_3_STAGE = 32;
private final static int VERIFY_1_STAGE = 40;
private SharedPreferences mPrefs;
private PatternView mPatternView;
private TextView mTvPatternHint;
private int mCurrentStatus;
private String mPattern;
private String mPatternBak;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pattern);
mTvPatternHint = (TextView) findViewById(R.id.pattern_hint);
mPatternView = (PatternView) findViewById(R.id.pattern);
mPatternView.setOnPatternDetectedListener(new PatternDetected());
mPrefs = getSharedPreferences("hb", Context.MODE_PRIVATE);
Intent i = getIntent();
int action = i.getIntExtra(ACTION, ERROR);
switch (action) {
case SET:
setStageOne();
break;
case CANCEL:
cancelStageOne();
break;
case MODIFY:
modifyStageOne();
break;
case VERIFY:
mTvPatternHint.setText(getString(R.string.input_pattern));
mCurrentStatus = VERIFY_1_STAGE;
break;
}
}
private void setStageOne() {
mTvPatternHint.setText(getString(R.string.input_pattern));
mCurrentStatus = SET_1_STAGE;
}
private void setStageTwo() {
mTvPatternHint.setText(getString(R.string.verify_pattern));
mCurrentStatus = SET_2_STAGE;
mPatternBak = mPattern;
}
private void cancelStageOne() {
mTvPatternHint.setText(getString(R.string.input_pattern));
mCurrentStatus = CANCEL_1_STAGE;
}
private void cancelFinished() {
if (verifyPattern(mPattern, getSPPattern())) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("pattern", "");
editor.apply();
finish();
} else {
mTvPatternHint.setText(R.string.input_pattern_error);
}
}
private void modifyStageOne() {
mTvPatternHint.setText(getString(R.string.input_pattern));
mCurrentStatus = MODIFY_1_STAGE;
}
private void modifyStageTwo() {
if (mCurrentStatus == MODIFY_1_STAGE) {
if (verifyPattern(mPattern, getSPPattern())) {
mTvPatternHint.setText(getString(R.string.input_new_pattern));
mCurrentStatus = MODIFY_2_STAGE;
} else {
mTvPatternHint.setText(R.string.input_pattern_error);
}
} else if (mCurrentStatus == MODIFY_3_STAGE) {
mTvPatternHint.setText(getString(R.string.input_new_pattern));
mCurrentStatus = MODIFY_2_STAGE;
}
}
private void modifyStageThree() {
mTvPatternHint.setText(getString(R.string.verify_pattern));
mCurrentStatus = MODIFY_3_STAGE;
mPatternBak = mPattern;
}
private void setFinished() {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("pattern", mPattern);
editor.apply();
finish();
}
private boolean verifyPattern(String pattern1, String pattern2) {
return (pattern1.equals(pattern2));
}
private String getSPPattern() {
return mPrefs.getString("pattern", "");
}
private class PatternDetected implements PatternView.OnPatternDetectedListener {
@Override
public void onPatternDetected() {
mPattern = mPatternView.getPatternString();
mPatternView.clearPattern();
if (mCurrentStatus == SET_1_STAGE) {
setStageTwo();
} else if (mCurrentStatus == SET_2_STAGE) {
if (verifyPattern(mPattern, mPatternBak)) {
setFinished();
} else {
setStageOne();
}
} else if (mCurrentStatus == CANCEL_1_STAGE) {
cancelFinished();
} else if (mCurrentStatus == MODIFY_1_STAGE) {
modifyStageTwo(); // 密码验证成功,准备设置新密码
} else if (mCurrentStatus == MODIFY_2_STAGE) {
modifyStageThree(); // 输入新密码
} else if (mCurrentStatus == MODIFY_3_STAGE) {
if (verifyPattern(mPattern, mPatternBak)) {
setFinished();
} else {
modifyStageTwo();
}
} else if (mCurrentStatus == VERIFY_1_STAGE) {
if (verifyPattern(mPattern, getSPPattern())) {
Intent i = new Intent(PatternActivity.this, MainActivity.class);
startActivity(i);
finish();
} else {
mTvPatternHint.setText(R.string.input_pattern_error);
}
}
}
}
}