package org.openlmis.core.view.widget;
import android.app.Dialog;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.openlmis.core.R;
import org.openlmis.core.view.fragment.BaseDialogFragment;
import lombok.Getter;
import lombok.Setter;
import roboguice.inject.InjectView;
public class SignatureDialog extends BaseDialogFragment {
@Getter
@Setter
DialogDelegate delegate;
private View contentView;
@InjectView(R.id.btn_cancel)
public TextView btnCancel;
@InjectView(R.id.btn_done)
public Button btnSign;
@InjectView(R.id.et_signature)
public EditText etSignature;
@InjectView(R.id.ly_signature)
public TextInputLayout lySignature;
@InjectView(R.id.tv_signature_title)
public TextView tvSignatureTitle;
@Override
public void onDestroyView() {
if (getDialog() != null && getRetainInstance()) {
getDialog().setDismissMessage(null);
}
super.onDestroyView();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
contentView = inflater.inflate(R.layout.dialog_inventory_signature, container, false);
return contentView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initUI();
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
setDialogAttributes();
}
private void initUI() {
Bundle arguments = getArguments();
if (arguments != null) {
tvSignatureTitle.setText(arguments.getString("title"));
}
SingleClickButtonListener singleClickButtonListener = getSingleClickButtonListener();
btnCancel.setOnClickListener(singleClickButtonListener);
btnSign.setOnClickListener(singleClickButtonListener);
}
private void setDialogAttributes() {
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.copyFrom(getDialog().getWindow().getAttributes());
params.width = (int) (getDialog().getContext().getResources().getDisplayMetrics().widthPixels * 0.8);
getDialog().getWindow().setAttributes(params);
}
protected boolean checkSignature(String signature) {
return signature.length() >= 2 && signature.length() <= 5 && signature.matches("\\D+");
}
public SingleClickButtonListener getSingleClickButtonListener() {
return new SingleClickButtonListener() {
@Override
public void onSingleClick(View v) {
switch (v.getId()) {
case R.id.btn_done:
onDone();
break;
case R.id.btn_cancel:
onCancel();
break;
default:
break;
}
}
};
}
private void onDone() {
if (!hasDelegate()) {
return;
}
String signature = etSignature.getText().toString().trim();
if (checkSignature(signature)) {
btnSign.setEnabled(false);
btnCancel.setEnabled(false);
delegate.onSign(signature);
dismiss();
} else {
lySignature.setError(getString(R.string.hint_signature_error_message));
}
}
private void onCancel() {
dismiss();
if (hasDelegate()) {
delegate.onCancel();
}
}
private boolean hasDelegate() {
return delegate != null;
}
public static abstract class DialogDelegate {
public void onCancel() {
}
public abstract void onSign(String sign);
}
public static Bundle getBundleToMe(String title) {
Bundle bundle = new Bundle();
bundle.putString("title", title);
return bundle;
}
public void show(
FragmentManager manager) {
super.show(manager, "signature_dialog");
}
}