package im.actor.sdk.controllers.auth;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.drawable.StateListDrawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import im.actor.sdk.ActorSDK;
import im.actor.sdk.R;
import im.actor.sdk.util.Fonts;
import im.actor.sdk.util.KeyboardHelper;
import im.actor.sdk.view.SelectorFactory;
public class ValidateCodeFragment extends BaseAuthFragment {
public static final String AUTH_TYPE_EMAIL = "auth_type_email";
public static final String AUTH_TYPE_PHONE = "auth_type_phone";
public static final String AUTH_TYPE_SIGN = "auth_type_is_sign";
String authType;
private EditText codeEnterEditText;
private KeyboardHelper keyboardHelper;
boolean isSign = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
authType = getArguments().getString("authType");
isSign = getArguments().getBoolean(AUTH_TYPE_SIGN);
keyboardHelper = new KeyboardHelper(getActivity());
View v = inflater.inflate(R.layout.fragment_validate_code, container, false);
v.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor());
TextView buttonConfirm = (TextView) v.findViewById(R.id.button_confirm_sms_code_text);
buttonConfirm.setTypeface(Fonts.medium());
buttonConfirm.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryInvColor());
StateListDrawable states = SelectorFactory.get(ActorSDK.sharedActor().style.getMainColor(), getActivity());
buttonConfirm.setBackgroundDrawable(states);
((TextView) v.findViewById(R.id.button_edit_phone)).setTypeface(Fonts.medium());
((TextView) v.findViewById(R.id.button_edit_phone)).setTextColor(ActorSDK.sharedActor().style.getMainColor());
TextView sendHint = (TextView) v.findViewById(R.id.sendHint);
sendHint.setTextColor(ActorSDK.sharedActor().style.getTextSecondaryColor());
String authId = getArguments().getString("authId", "");
if (authType.equals(AUTH_TYPE_PHONE)) {
String phoneNumber = "+" + authId;
try {
Phonenumber.PhoneNumber number = PhoneNumberUtil.getInstance().parse(phoneNumber, null);
phoneNumber = PhoneNumberUtil.getInstance().format(number, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL);
} catch (NumberParseException e) {
e.printStackTrace();
}
sendHint.setText(
Html.fromHtml(getString(R.string.auth_code_phone_hint).replace("{0}", "<b>" + phoneNumber + "</b>"))
);
} else if (authType.equals(AUTH_TYPE_EMAIL)) {
sendHint.setText(
Html.fromHtml(getString(R.string.auth_code_email_hint).replace("{0}", "<b>" + authId + "</b>"))
);
}
codeEnterEditText = (EditText) v.findViewById(R.id.et_sms_code_enter);
codeEnterEditText.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor());
codeEnterEditText.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) {
// if (s.length() == 6) {
// sendCode();
// }
}
@Override
public void afterTextChanged(Editable s) {
}
});
codeEnterEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
sendCode();
return true;
}
return false;
}
});
codeEnterEditText.setText(((AuthActivity) getActivity()).getCurrentCode());
onClick(v, R.id.button_confirm_sms_code, new View.OnClickListener() {
@Override
public void onClick(View v) {
sendCode();
}
});
Button editAuth = (Button) v.findViewById(R.id.button_edit_phone);
if (authType.equals(AUTH_TYPE_EMAIL)) {
editAuth.setText(getString(R.string.auth_code_wrong_email));
}
onClick(v, R.id.button_edit_phone, new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(getActivity())
.setMessage(authType.equals(AUTH_TYPE_EMAIL) ? R.string.auth_code_email_change : R.string.auth_code_phone_change)
.setPositiveButton(R.string.auth_code_change_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (isSign) {
startSignIn();
} else {
if (authType.equals(AUTH_TYPE_EMAIL)) {
switchToEmail();
} else if (authType.equals(AUTH_TYPE_PHONE)) {
switchToPhone();
}
}
}
})
.setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show()
.setCanceledOnTouchOutside(true);
}
});
v.findViewById(R.id.divider).setBackgroundColor(style.getDividerColor());
return v;
}
private void sendCode() {
String text = codeEnterEditText.getText().toString().trim();
if (text.length() > 0) {
validateCode(text);
}
}
@Override
public void onResume() {
super.onResume();
setTitle(R.string.auth_code_title);
keyboardHelper.setImeVisibility(codeEnterEditText, true);
focus(codeEnterEditText);
}
@Override
public void onPause() {
super.onPause();
}
}