package de.devland.masterpassword.ui.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.support.design.widget.FloatingActionButton; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import de.devland.masterpassword.R; import lombok.Setter; /** * Created by deekay on 27/02/15. */ public class SiteCounterView extends LinearLayout implements TextWatcher, View.OnFocusChangeListener { @BindView(R.id.editText_siteCounter) protected EditText counter; @BindView(R.id.plusButton) protected FloatingActionButton plus; @BindView(R.id.minusButton) protected FloatingActionButton minus; @Setter protected int minValue = 1; @Setter protected TextWatcher onChangeListener; public SiteCounterView(Context context) { super(context); init(); } public SiteCounterView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public SiteCounterView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public SiteCounterView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } public void init() { inflate(getContext(), R.layout.view_sitecounter, this); ButterKnife.bind(this); counter.addTextChangedListener(this); counter.setOnFocusChangeListener(this); // this.setOrientation(LinearLayout.HORIZONTAL); // int _4dp = Math.round(Utils.convertDpToPixel(4f, getContext())); // this.setPadding(_4dp, _4dp, _4dp, _4dp); // // minus = new Button(getContext()); // minus.setText("-"); // minus.setBackgroundResource(R.color.accent); // minus.setOnClickListener(this); //// minus.set(10, 10, 10, 10); // LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); // params.setMargins(50,100,150,200); // this.addView(minus, params); // // counter = new EditText(getContext()); // counter.setEllipsize(TextUtils.TruncateAt.START); // counter.setGravity(Gravity.CENTER); // counter.setEms(10); // counter.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED); // counter.addTextChangedListener(this); // counter.setOnFocusChangeListener(this); // LayoutParams counterLayoutParams = new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1); // counterLayoutParams.setMargins(_4dp, 0, _4dp, 0); // this.addView(counter, counterLayoutParams); // // plus = new Button(getContext()); // plus.setText("+"); // plus.setBackgroundResource(R.color.accent); // plus.setOnClickListener(this); // this.addView(plus, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } public int getValue() { try { return Integer.parseInt(counter.getText().toString()); } catch (NumberFormatException e) { return minValue; } } public void setValue(int value) { if (value < minValue) { value = minValue; } counter.setText(String.valueOf(value)); } @OnClick({R.id.plusButton, R.id.minusButton}) public void onClick(View view) { if (view == minus) { setValue(getValue() - 1); } if (view == plus) { setValue(getValue() + 1); } } @Override public void afterTextChanged(Editable editable) { if (editable.length() != 0) { try { int count = Integer.parseInt(editable.toString()); if (count < minValue) { counter.setText(String.valueOf(minValue)); } } catch (NumberFormatException e) { counter.setText(String.valueOf(minValue)); } } if (onChangeListener != null) { onChangeListener.afterTextChanged(editable); } } @Override public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { if (onChangeListener != null) { onChangeListener.beforeTextChanged(charSequence, i, i2, i3); } } @Override public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { if (onChangeListener != null) { onChangeListener.onTextChanged(charSequence, i, i2, i3); } } @Override public void onFocusChange(View view, boolean focus) { if (!focus) { try { Integer.parseInt(counter.getText().toString()); } catch (NumberFormatException e) { counter.setText(String.valueOf(minValue)); } } } }