package com.openvehicles.OVMS.ui.utils;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnShowListener;
import android.text.InputType;
import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import com.openvehicles.OVMS.R;
import com.openvehicles.OVMS.ui.validators.ValidationException;
import com.openvehicles.OVMS.ui.validators.Validator;
public final class Ui {
private static final String TAG = "Ui";
public interface OnChangeListener<T> {
public void onAction(T pData);
}
public static void showPinDialog(Context pContext, int pMsgResId, OnChangeListener<String> pListene) {
showPinDialog(pContext, pMsgResId, pMsgResId, pListene);
}
public static void showPinDialog(Context pContext, int pTitleResId, int pButtonResId,
final OnChangeListener<String> pListene) {
showPinDialog(pContext, pTitleResId, pButtonResId, true, pListene);
}
public static void showPinDialog(Context pContext, int pTitleResId, int pButtonResId, boolean isPin,
final OnChangeListener<String> pListener) {
showPinDialog(pContext, pContext.getString(pTitleResId), null, pButtonResId, isPin, pListener);
}
public static void showPinDialog(Context pContext, String pTitle, String pValue, int pButtonResId, boolean isPin,
final OnChangeListener<String> pListener) {
View view = LayoutInflater.from(pContext).inflate(R.layout.dlg_pin, null);
EditText et = (EditText) view.findViewById(R.id.etxt_input_value);
et.setText(pValue);
if (isPin) {
et.setHint(R.string.lb_enter_pin);
} else {
et.setTransformationMethod(null);
}
AlertDialog dialog = new AlertDialog.Builder(pContext)
.setMessage(pTitle)
.setView(view)
.setNegativeButton(R.string.Cancel, null)
.setPositiveButton(pButtonResId, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText etxtPin = (EditText) ((Dialog) dialog).findViewById(R.id.etxt_input_value);
if (pListener != null) pListener.onAction(etxtPin.getText().toString());
}
})
.create();
dialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
EditText et = (EditText)((Dialog) dialog).findViewById(R.id.etxt_input_value);
InputMethodManager imm = (InputMethodManager) et.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
et.selectAll();
}
});
dialog.show();
}
public static void showEditDialog(Context pContext, String pTitle, String pValue, int pButtonResId, boolean isPassvd,
final OnChangeListener<String> pListener) {
View view = LayoutInflater.from(pContext).inflate(R.layout.dlg_edit, null);
EditText et = (EditText) view.findViewById(R.id.etxt_input_value);
et.setText(pValue);
if (isPassvd) {
et.setHint(R.string.lb_enter_passwd);
et.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
et.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
AlertDialog dialog = new AlertDialog.Builder(pContext)
.setMessage(pTitle)
.setView(view)
.setNegativeButton(R.string.Cancel, null)
.setPositiveButton(pButtonResId, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
EditText etxtPin = (EditText) ((Dialog) dialog).findViewById(R.id.etxt_input_value);
if (pListener != null) pListener.onAction(etxtPin.getText().toString());
}
})
.create();
dialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
EditText et = (EditText)((Dialog) dialog).findViewById(R.id.etxt_input_value);
InputMethodManager imm = (InputMethodManager) et.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
et.selectAll();
}
});
dialog.show();
}
public static int getDrawableIdentifier(Context pContext, String pName) {
if (pName == null || pContext == null) return 0;
return pContext.getResources().getIdentifier(pName, "drawable", pContext.getPackageName());
}
public static void setOnClick(View pRootView, int pId, OnClickListener pListener) {
try {
pRootView.findViewById(pId).setOnClickListener(pListener);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
public static void setValue(View pRootView, int pId, String pVal) {
try {
TextView tv = (TextView) pRootView.findViewById(pId);
tv.setText(pVal);
} catch (Exception e) {
Log.e(TAG, "string: " + e);
}
}
public static String getValidValue(View pRootView, int pId, Validator pValidator) throws ValidationException {
String value = null;
EditText et = (EditText) pRootView.findViewById(pId);
value = et.getText().toString();
if (!pValidator.valid(et, value)) {
et.requestFocus();
et.setError(pValidator.getErrorMessage());
throw new ValidationException(pValidator.getErrorMessage());
}
return value;
}
}