package com.venmo.android.pin; import android.view.View; import android.widget.Toast; import com.venmo.android.pin.view.PinputView; import com.venmo.android.pin.view.PinputView.OnCommitListener; class ConfirmPinViewController<T extends PinFragmentImplement> extends BaseViewController<T> { private String mTruthString; ConfirmPinViewController(T f, View v, String truth) { super(f, v); mTruthString = truth; } @Override void initUI() { String confirm = String.format(mContext.getString(R.string.confirm_n_digit_pin), mPinputView.getPinLen()); mHeaderText.setText(confirm); } @Override OnCommitListener provideListener() { return new OnCommitListener() { @Override public void onPinCommit(PinputView view, String submission) { if (submission.equals(mTruthString)) { handleSave(submission); } else { Toast.makeText(mContext, mContext.getString(R.string.pin_mismatch), Toast.LENGTH_SHORT).show(); resetToCreate(); view.showErrorAndClear(); } } }; } private void handleSave(final String submission) { PinSaver saver = getConfig().getPinSaver(); if (saver instanceof AsyncSaver) { getOutAndInAnim(mPinputView, mProgressBar).start(); mHeaderText.setText(R.string.saving_pin); runAsync(new Runnable() { @Override public void run() { try { getConfig().getPinSaver().save(submission); postToMain(new Runnable() { @Override public void run() { onSaveComplete(); } }); } catch (Exception e) { generalErrorAsync(mPinFragment.getString(R.string.async_save_error)); } } }); } else { saver.save(submission); onSaveComplete(); } } private void onSaveComplete() { mPinputView.getText().clear(); mPinFragment.notifyCreated(); } private void resetToCreate() { mPinFragment.setDisplayType(PinDisplayType.CREATE); mPinFragment.setViewController(new CreatePinViewController(mPinFragment, mRootView)); } }