Keyboard styles

This commit is contained in:
serso
2016-02-07 20:18:37 +01:00
parent 30eed6af8c
commit 47075b0c10
153 changed files with 225 additions and 118 deletions

View File

@@ -71,7 +71,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
final int parametersCount = parameterNames.size();
LinearLayout row = makeRow();
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
addButton(row, 0, parametersCount > 0 ? parameterNames.get(0) : "x");
addButton(row, 0, "7");
addButton(row, 0, "8");
@@ -88,7 +88,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
addButton(row, 0, "6");
addOperationButton(row, R.id.cpp_kb_button_divide, "/").setText("%", up).setText("sqrt", down);
addOperationButton(row, R.id.cpp_kb_button_minus, "");
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
row = makeRow();
@@ -98,8 +98,8 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
addButton(row, 0, "2");
addButton(row, 0, "3");
addButton(row, 0, "0").setText("00", up).setText("000", down);
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_white_24dp);
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_grey300_24dp);
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
}
private void makeViewPort() {
@@ -115,7 +115,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
addButton(row, 0, "5");
addButton(row, 0, "6");
addOperationButton(row, R.id.cpp_kb_button_divide, "/").setText("%", up).setText("sqrt", down);
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
row = makeRow();
@@ -123,14 +123,14 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
addButton(row, 0, "2");
addButton(row, 0, "3");
addOperationButton(row, R.id.cpp_kb_button_plus, "+");
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_white_24dp);
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_grey300_24dp);
row = makeRow();
addButton(row, R.id.cpp_kb_button_brackets, "( )").setText("(", up).setText(")", down);
addButton(row, 0, "0").setText("00", up).setText("000", down);
addButton(row, 0, ".").setText(",", up);
addOperationButton(row, R.id.cpp_kb_button_minus, "");
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
row = makeRow();
final int parametersCount = parameterNames.size();
@@ -138,7 +138,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
addButton(row, 0, parametersCount > 1 ? parameterNames.get(1) : "y");
addButton(row, R.id.cpp_kb_button_functions, "f");
addButton(row, R.id.cpp_kb_button_constants, "π");
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
}
public int getRowsCount(boolean landscape) {

View File

@@ -10,10 +10,12 @@ import android.support.annotation.Nullable;
import android.util.TypedValue;
import android.view.HapticFeedbackConstants;
import android.view.View;
import android.widget.ImageView;
import org.solovyev.android.Views;
import org.solovyev.android.calculator.*;
import org.solovyev.android.calculator.buttons.CppSpecialButton;
import org.solovyev.android.calculator.view.ScreenMetrics;
import org.solovyev.android.views.Adjuster;
import org.solovyev.android.views.dragbutton.DirectionDragButton;
import org.solovyev.android.views.dragbutton.DragDirection;
import org.solovyev.android.views.dragbutton.SimpleDragListener;
@@ -28,6 +30,9 @@ import static org.solovyev.android.calculator.Preferences.Gui.Layout.simple_mobi
public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPreferenceChangeListener, SimpleDragListener.DragProcessor, View.OnClickListener {
protected static final float TEXT_SCALE = 0.6f;
protected static final float IMAGE_SCALE = 0.6f;
@NonNull
protected final SimpleDragListener listener;
@Inject
@@ -59,6 +64,18 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer
textSize = layout.optimized ? 0 : calculateTextSize();
}
protected final void prepareButton(@Nullable ImageView button) {
prepareButton(button, IMAGE_SCALE);
}
protected final void prepareButton(@Nullable ImageView button, float scale) {
if (button == null) {
return;
}
prepareButton((View) button);
Adjuster.adjustImage(button, scale);
}
protected final void prepareButton(@Nullable View button) {
if (button == null) {
return;
@@ -76,6 +93,7 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer
if (textSize > 0) {
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
}
Adjuster.adjustText(button, TEXT_SCALE);
}
protected final void hideText(@Nullable DirectionDragButton button, @Nonnull DragDirection... directions) {

View File

@@ -16,6 +16,7 @@ import android.widget.ImageButton;
import butterknife.Bind;
import butterknife.ButterKnife;
import jscl.NumeralBase;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.*;
import org.solovyev.android.calculator.buttons.CppSpecialButton;
import org.solovyev.android.calculator.view.EditorLongClickEraser;
@@ -62,8 +63,10 @@ public class PartialKeyboardUi extends BaseKeyboardUi {
prepareButton(leftButton);
prepareButton(equalsButton);
prepareButton(clearButton);
prepareButton(eraseButton);
if (eraseButton != null) {
Check.isTrue(IMAGE_SCALE == 0.6f);
// backspace button is too big, scale it more
prepareButton(eraseButton, 0.5f);
EditorLongClickEraser.attachTo(eraseButton);
}
if (isSimpleLayout()) {

View File

@@ -56,17 +56,17 @@ public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View.
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);
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
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);
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
break;
case 3:
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
break;
default:
addButton(rowView, View.NO_ID, "");
@@ -80,17 +80,17 @@ public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View.
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);
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
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);
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
break;
case 4:
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
break;
default:
addButton(rowView, View.NO_ID, "");

View File

@@ -0,0 +1,109 @@
package org.solovyev.android.views;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;
import static android.graphics.Matrix.MSCALE_Y;
public class Adjuster {
private static final float[] MATRIX = new float[9];
public static void adjustText(@NonNull final TextView view, final float percentage) {
ViewTreeObserver treeObserver = getTreeObserver(view);
if (treeObserver == null) {
return;
}
treeObserver.addOnPreDrawListener(new TextViewAdjuster(view, percentage));
}
@Nullable
private static ViewTreeObserver getTreeObserver(@NonNull View view) {
final ViewTreeObserver treeObserver = view.getViewTreeObserver();
if (treeObserver == null) {
return null;
}
if (!treeObserver.isAlive()) {
return null;
}
return treeObserver;
}
public static void adjustImage(@NonNull final ImageView view, final float percentage) {
ViewTreeObserver treeObserver = getTreeObserver(view);
if (treeObserver == null) {
return;
}
treeObserver.addOnPreDrawListener(new ImageViewAdjuster(view, percentage));
}
private static class TextViewAdjuster implements ViewTreeObserver.OnPreDrawListener {
@NonNull
private final TextView view;
private final float percentage;
public TextViewAdjuster(@NonNull TextView view, float percentage) {
this.view = view;
this.percentage = percentage;
}
@Override
public boolean onPreDraw() {
// assume that the view properties are constant
final ViewTreeObserver treeObserver = getTreeObserver(view);
if (treeObserver != null) {
treeObserver.removeOnPreDrawListener(this);
}
final int height = view.getHeight();
final float oldTextSize = Math.round(view.getTextSize());
final float newTextSize = Math.round(height * percentage);
if (oldTextSize == newTextSize) {
return true;
}
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, newTextSize);
return false;
}
}
private static class ImageViewAdjuster implements ViewTreeObserver.OnPreDrawListener {
@NonNull
private final ImageView view;
private final float percentage;
public ImageViewAdjuster(@NonNull ImageView view, float percentage) {
this.view = view;
this.percentage = percentage;
}
@Override
public boolean onPreDraw() {
// assume that the view properties are constant
final ViewTreeObserver treeObserver = getTreeObserver(view);
if (treeObserver != null) {
treeObserver.removeOnPreDrawListener(this);
}
final Drawable d = view.getDrawable();
if (d == null) {
return true;
}
final int height = view.getHeight();
view.getImageMatrix().getValues(MATRIX);
final int oldImageHeight = Math.round(d.getIntrinsicHeight() * MATRIX[MSCALE_Y]);
final int newImageHeight = Math.round(height * percentage);
if (oldImageHeight == newImageHeight) {
return true;
}
final int newPaddings = Math.max(0, height - newImageHeight) / 2;
view.setPadding(0, newPaddings, 0, newPaddings);
return false;
}
}
}