package de.vanmar.android.yarrn.components; import android.content.Context; import android.content.res.TypedArray; import android.text.Editable; import android.util.AttributeSet; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.TextView; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EViewGroup; import org.androidannotations.annotations.ViewById; import de.vanmar.android.yarrn.R; /** * Created by Kolja on 23.01.14. */ @EViewGroup(R.layout.view_edit_text) public class ViewEditText extends RelativeLayout { private final String titleText; private final String bodyText; private final int inputType; private final int ems; @ViewById(R.id.title) TextView title; @ViewById(R.id.editText) EditText editText; @ViewById(R.id.viewText) TextView viewText; @ViewById(R.id.toggleButton) ImageButton toggleButton; private boolean isEditMode = false; private OnSaveListener onSaveListener; public interface OnSaveListener { void onSave(ViewEditText view, Editable text); } public ViewEditText(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ViewEditText_); try { titleText = a.getString(R.styleable.ViewEditText__titleText); bodyText = a.getString(R.styleable.ViewEditText__bodyText); this.inputType = a.getInt(R.styleable.ViewEditText__android_inputType, 0); this.ems = a.getInt(R.styleable.ViewEditText__android_ems, 10); } finally { a.recycle(); } } @AfterViews public void afterViews() { applyEditMode(); toggleButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isEditMode) { doSave(); } isEditMode = !isEditMode; applyEditMode(); } }); applyStyling(); } public void setEditable(boolean editable) { toggleButton.setVisibility(editable ? VISIBLE : GONE); if (!editable) { isEditMode = false; applyEditMode(); } } public void setOnSaveListener(OnSaveListener listener) { this.onSaveListener = listener; } private void doSave() { viewText.setText(editText.getText()); if (onSaveListener != null) { onSaveListener.onSave(this, editText.getText()); } } private void applyStyling() { setBodyText(bodyText); setTitleText(titleText); editText.setInputType(inputType); editText.setEms(ems); viewText.setEms(ems); } private void applyEditMode() { editText.setVisibility(isEditMode ? VISIBLE : GONE); viewText.setVisibility(!isEditMode ? VISIBLE : GONE); toggleButton.setBackgroundResource(isEditMode ? R.drawable.save : R.drawable.edit); } public boolean isEditMode() { return isEditMode; } public void setTitleText(String titleText) { title.setText(titleText); } public void setBodyText(String bodyText) { editText.setText(bodyText); viewText.setText(bodyText); } public CharSequence getBodyText() { return viewText.getText(); } }