package org.solovyev.android.calculator.keyboard;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.view.EditTextCompat;
import org.solovyev.android.calculator.view.EditTextLongClickEraser;
import org.solovyev.android.views.dragbutton.*;
import static org.solovyev.android.views.dragbutton.DragDirection.left;
public class FloatingNumberKeyboard extends BaseFloatingKeyboard {
@NonNull
private final ButtonHandler buttonHandler = new ButtonHandler();
private final DirectionDragListener dragListener;
public FloatingNumberKeyboard(@NonNull User user) {
super(user);
dragListener = new DirectionDragListener(user.getContext()) {
@Override
protected boolean onDrag(@NonNull View view, @NonNull DragEvent event, @NonNull DragDirection direction) {
if (!Drag.hasDirectionText(view, direction)) {
return false;
}
insertText(((DirectionDragView) view).getText(direction).getValue());
return true;
}
};
}
@Override
public int getRowsCount(boolean landscape) {
return 4;
}
@Override
public int getColumnsCount(boolean landscape) {
return 4;
}
@Override
public void makeView(boolean landscape) {
LinearLayout row = makeRow();
addButton(row, 0, "7");
addButton(row, 0, "8");
addButton(row, 0, "9");
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor(), user.isVibrateOnKeypress());
row = makeRow();
addButton(row, 0, "4").setText(left, "A");
addButton(row, 0, "5").setText(left, "B");
addButton(row, 0, "6").setText(left, "C");
addButton(row, R.id.cpp_kb_button_clear, "C");
row = makeRow();
addButton(row, 0, "1").setText(left, "D");
addButton(row, 0, "2").setText(left, "E");
addButton(row, 0, "3").setText(left, "F");
addButton(row, 0, "E");
row = makeRow();
addButton(row, 0, "-");
addButton(row, 0, "0");
addButton(row, 0, ".");
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
}
@Override
protected void fillButton(@NonNull View button, @IdRes int id) {
super.fillButton(button, id);
button.setOnClickListener(buttonHandler);
}
@NonNull
@Override
protected DirectionDragButton makeButton(@IdRes int id, @NonNull String text) {
final DirectionDragButton button = super.makeButton(id, text);
button.setOnDragListener(dragListener);
return button;
}
private void insertText(CharSequence text) {
EditTextCompat.insert(text, getUser().getEditor());
}
private class ButtonHandler implements View.OnClickListener {
@Override
public void onClick(View v) {
final EditText editor = getUser().getEditor();
switch (v.getId()) {
case R.id.cpp_kb_button_clear:
editor.setText("");
return;
case R.id.cpp_kb_button_close:
getUser().done();
return;
}
if (v instanceof TextView) {
insertText(((TextView) v).getText());
}
}
}
}