Add E button to EditVariableFragment

This commit is contained in:
serso 2016-04-10 23:26:55 +02:00
parent 858f3f32b2
commit 13e7a5f9fe
6 changed files with 59 additions and 25 deletions

View File

@ -22,14 +22,11 @@
package org.solovyev.android.calculator; package org.solovyev.android.calculator;
import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.ContextMenu; import android.view.ContextMenu;
import org.solovyev.android.Check; import org.solovyev.android.Check;
import org.solovyev.android.calculator.view.EditTextCompat; import org.solovyev.android.calculator.view.EditTextCompat;
import org.solovyev.android.views.Adjuster; import org.solovyev.android.views.Adjuster;
@ -58,12 +55,6 @@ public class EditorView extends EditTextCompat {
init(); init();
} }
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public EditorView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() { private void init() {
if (!App.isFloatingCalculator(getContext())) { if (!App.isFloatingCalculator(getContext())) {
Adjuster.adjustText(this, 0.22f, Adjuster.adjustText(this, 0.22f,

View File

@ -34,6 +34,9 @@ import android.support.design.widget.TextInputLayout;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.InputFilter;
import android.text.SpannableStringBuilder;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -45,10 +48,11 @@ import android.widget.PopupWindow;
import butterknife.Bind; import butterknife.Bind;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import dagger.Lazy; import dagger.Lazy;
import jscl.JsclMathEngine;
import jscl.math.function.IConstant; import jscl.math.function.IConstant;
import midpcalc.Real;
import org.solovyev.android.Check; import org.solovyev.android.Check;
import org.solovyev.android.calculator.*; import org.solovyev.android.calculator.*;
import org.solovyev.android.calculator.RemovalConfirmationDialog;
import org.solovyev.android.calculator.functions.FunctionsRegistry; import org.solovyev.android.calculator.functions.FunctionsRegistry;
import org.solovyev.android.calculator.keyboard.FloatingKeyboard; import org.solovyev.android.calculator.keyboard.FloatingKeyboard;
import org.solovyev.android.calculator.keyboard.FloatingKeyboardWindow; import org.solovyev.android.calculator.keyboard.FloatingKeyboardWindow;
@ -87,6 +91,8 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
TextInputLayout valueLabel; TextInputLayout valueLabel;
@Bind(R.id.variable_value) @Bind(R.id.variable_value)
EditText valueView; EditText valueView;
@Bind(R.id.variable_exponent_button)
Button exponentButton;
@Bind(R.id.variable_description) @Bind(R.id.variable_description)
EditText descriptionView; EditText descriptionView;
@Inject @Inject
@ -304,6 +310,13 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
nameView.setOnFocusChangeListener(this); nameView.setOnFocusChangeListener(this);
nameView.setOnKeyListener(this); nameView.setOnKeyListener(this);
valueView.setOnFocusChangeListener(this); valueView.setOnFocusChangeListener(this);
valueView.setEditableFactory(new Editable.Factory() {
@Override
public Editable newEditable(CharSequence source) {
return new NoFiltersEditable(source);
}
});
exponentButton.setOnClickListener(this);
descriptionView.setOnFocusChangeListener(this); descriptionView.setOnFocusChangeListener(this);
keyboardButton.setOnClickListener(this); keyboardButton.setOnClickListener(this);
@ -352,6 +365,11 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
showKeyboard(); showKeyboard();
} }
break; break;
case R.id.variable_exponent_button:
final int start = Math.max(valueView.getSelectionStart(), 0);
final int end = Math.max(valueView.getSelectionEnd(), 0);
valueView.getText().replace(Math.min(start, end), Math.max(start, end), "E", 0, 1);
break;
default: default:
super.onClick(v); super.onClick(v);
break; break;
@ -379,6 +397,17 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
keyboardWindow.show(new GreekFloatingKeyboard(keyboardUser), getDialog()); keyboardWindow.show(new GreekFloatingKeyboard(keyboardUser), getDialog());
} }
private static class NoFiltersEditable extends SpannableStringBuilder {
public NoFiltersEditable(CharSequence source) {
super(source);
}
@Override
public void setFilters(InputFilter[] filters) {
// we don't want filters as we want to support numbers in scientific notation
}
}
private class KeyboardUser implements FloatingKeyboard.User { private class KeyboardUser implements FloatingKeyboard.User {
@NonNull @NonNull
@Override @Override

View File

@ -1,8 +1,8 @@
package org.solovyev.android.calculator.view; package org.solovyev.android.calculator.view;
import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.support.design.widget.TextInputEditText;
import android.text.InputType; import android.text.InputType;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
@ -12,7 +12,7 @@ import org.solovyev.android.Check;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.lang.reflect.Method; import java.lang.reflect.Method;
public class EditTextCompat extends EditText { public class EditTextCompat extends TextInputEditText {
@Nullable @Nullable
private static Method setShowSoftInputOnFocusMethod; private static Method setShowSoftInputOnFocusMethod;
@ -30,11 +30,6 @@ public class EditTextCompat extends EditText {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
} }
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public EditTextCompat(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void dontShowSoftInputOnFocusCompat() { public void dontShowSoftInputOnFocusCompat() {
setShowSoftInputOnFocusCompat(false); setShowSoftInputOnFocusCompat(false);
} }

View File

@ -65,12 +65,16 @@
tools:ignore="UnusedAttribute" /> tools:ignore="UnusedAttribute" />
</FrameLayout> </FrameLayout>
<FrameLayout
a:layout_width="match_parent"
a:layout_height="wrap_content">
<android.support.design.widget.TextInputLayout <android.support.design.widget.TextInputLayout
a:id="@+id/variable_value_label" a:id="@+id/variable_value_label"
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"> a:layout_height="wrap_content">
<org.solovyev.android.calculator.view.EditTextCompat <EditText
a:id="@+id/variable_value" a:id="@+id/variable_value"
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content" a:layout_height="wrap_content"
@ -78,6 +82,20 @@
a:inputType="numberDecimal|numberSigned" /> a:inputType="numberDecimal|numberSigned" />
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
<Button
a:id="@+id/variable_exponent_button"
a:layout_width="wrap_content"
a:layout_height="wrap_content"
a:layout_gravity="end|top"
a:background="?attr/selectableItemBackgroundBorderless"
a:minWidth="0dp"
a:padding="@dimen/cpp_image_button_padding"
a:text="@string/cpp_exponent"
a:textAllCaps="false"
a:textAppearance="?android:attr/textAppearanceSmall"
tools:ignore="UnusedAttribute" />
</FrameLayout>
<android.support.design.widget.TextInputLayout <android.support.design.widget.TextInputLayout
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_height="wrap_content"> a:layout_height="wrap_content">

View File

@ -14,6 +14,8 @@
<string name="dimensions_y_min" translatable="false">Y min</string> <string name="dimensions_y_min" translatable="false">Y min</string>
<string name="dimensions_y_max" translatable="false">Y max</string> <string name="dimensions_y_max" translatable="false">Y max</string>
<string name="cpp_function_body" translatable="false">f(x, y)</string> <string name="cpp_function_body" translatable="false">f(x, y)</string>
<string name="cpp_show_greek_keyboard" translatable="false">αβγ</string>
<string name="cpp_exponent" translatable="false">E</string>
<string-array name="cpp_prefs_precisions" translatable="false"> <string-array name="cpp_prefs_precisions" translatable="false">
<item>0</item> <item>0</item>
<item>1</item> <item>1</item>

View File

@ -115,7 +115,6 @@
several devices.\n\n several devices.\n\n
By clicking \'Continue\' button you will be redirected to the Google Play app to make the payment.</string> By clicking \'Continue\' button you will be redirected to the Google Play app to make the payment.</string>
<string name="cpp_purchase_title">Purchase</string> <string name="cpp_purchase_title">Purchase</string>
<string name="cpp_show_greek_keyboard" translatable="false">αβγ</string>
<string name="cpp_clear_history_title">Clear history?</string> <string name="cpp_clear_history_title">Clear history?</string>
<string name="cpp_clear_history_message">All history will be cleared.</string> <string name="cpp_clear_history_message">All history will be cleared.</string>
<string name="cpp_clear_history">Clear</string> <string name="cpp_clear_history">Clear</string>