package org.solovyev.android.calculator.variables;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.keyboard.BaseFloatingKeyboard;
import org.solovyev.android.calculator.view.EditTextLongClickEraser;
import javax.annotation.Nonnull;
import java.util.Locale;
import static android.view.HapticFeedbackConstants.*;
public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View.OnClickListener {
final static String ALPHABET = "αβγδεζηθικλμνξοπρστυφχψω";
public GreekFloatingKeyboard(@NonNull User user) {
super(user);
}
public void makeView(boolean landscape) {
LinearLayout rowView = null;
final int columns = getColumnsCount(landscape);
final int rows = getRowsCount(landscape);
for (int i = 0, letter = 0; i < columns * rows; i++) {
final int column = i % columns;
final int row = i / columns;
if (column == 0) {
rowView = makeRow();
}
if (column == columns - 1) {
if (!landscape) {
makeLastColumnPort(rowView, row);
} else {
makeLastColumnLand(rowView, row);
}
} else if (letter < ALPHABET.length()) {
final Button button = addButton(rowView, View.NO_ID, String.valueOf(ALPHABET.charAt(letter)));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
fixCapitalization(button);
}
letter++;
} else {
addButton(rowView, View.NO_ID, "");
}
}
}
private void makeLastColumnLand(@NonNull LinearLayout rowView, int row) {
switch (row) {
case 0:
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor(), user.isVibrateOnKeypress());
break;
case 1:
addButton(rowView, R.id.cpp_kb_button_change_case, "↑");
break;
case 2:
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
break;
case 3:
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
break;
default:
addButton(rowView, View.NO_ID, "");
break;
}
}
private void makeLastColumnPort(@NonNull LinearLayout rowView, int row) {
switch (row) {
case 0:
addButton(rowView, R.id.cpp_kb_button_clear, "C");
break;
case 1:
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor(), user.isVibrateOnKeypress());
break;
case 2:
addButton(rowView, R.id.cpp_kb_button_change_case, "↑");
break;
case 3:
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
break;
case 4:
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
break;
default:
addButton(rowView, View.NO_ID, "");
break;
}
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void fixCapitalization(Button button) {
button.setAllCaps(false);
}
protected void fillButton(@NonNull View button, @IdRes int id) {
super.fillButton(button, id);
button.setOnClickListener(this);
}
public int getRowsCount(boolean landscape) {
return landscape ? 4 : 5;
}
public int getColumnsCount(boolean landscape) {
return landscape ? 7 : 6;
}
@Override
public void onClick(View v) {
if (user.isVibrateOnKeypress()) {
v.performHapticFeedback(KEYBOARD_TAP, FLAG_IGNORE_GLOBAL_SETTING | FLAG_IGNORE_VIEW_SETTING);
}
switch (v.getId()) {
case R.id.cpp_kb_button_close:
user.done();
break;
case R.id.cpp_kb_button_change_case:
changeCase((Button) v);
break;
case R.id.cpp_kb_button_keyboard:
user.showIme();
break;
case R.id.cpp_kb_button_clear:
user.getEditor().setText("");
user.getEditor().setSelection(0);
break;
default:
user.getEditor().append(((TextView) v).getText());
break;
}
user.getEditor().requestFocus();
}
private void changeCase(@NonNull Button button) {
final boolean upperCase = button.getText().equals("↑");
App.processViewsOfType(user.getKeyboard(), Button.class, new App.ViewProcessor<Button>() {
@Override
public void process(@Nonnull Button key) {
final String letter = key.getText().toString();
if (!ALPHABET.contains(letter.toLowerCase(Locale.US))) {
return;
}
if (upperCase) {
key.setText(letter.toUpperCase(Locale.US));
} else {
key.setText(letter.toLowerCase(Locale.US));
}
}
});
if (upperCase) {
button.setText("↓");
} else {
button.setText("↑");
}
}
}