Add E button to EditVariableFragment
This commit is contained in:
		@@ -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,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,18 +65,36 @@
 | 
				
			|||||||
                tools:ignore="UnusedAttribute" />
 | 
					                tools:ignore="UnusedAttribute" />
 | 
				
			||||||
        </FrameLayout>
 | 
					        </FrameLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <android.support.design.widget.TextInputLayout
 | 
					        <FrameLayout
 | 
				
			||||||
            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
 | 
					            <android.support.design.widget.TextInputLayout
 | 
				
			||||||
                a:id="@+id/variable_value"
 | 
					                a:id="@+id/variable_value_label"
 | 
				
			||||||
                a:layout_width="match_parent"
 | 
					                a:layout_width="match_parent"
 | 
				
			||||||
 | 
					                a:layout_height="wrap_content">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <EditText
 | 
				
			||||||
 | 
					                    a:id="@+id/variable_value"
 | 
				
			||||||
 | 
					                    a:layout_width="match_parent"
 | 
				
			||||||
 | 
					                    a:layout_height="wrap_content"
 | 
				
			||||||
 | 
					                    a:hint="@string/c_var_value"
 | 
				
			||||||
 | 
					                    a:inputType="numberDecimal|numberSigned" />
 | 
				
			||||||
 | 
					            </android.support.design.widget.TextInputLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <Button
 | 
				
			||||||
 | 
					                a:id="@+id/variable_exponent_button"
 | 
				
			||||||
 | 
					                a:layout_width="wrap_content"
 | 
				
			||||||
                a:layout_height="wrap_content"
 | 
					                a:layout_height="wrap_content"
 | 
				
			||||||
                a:hint="@string/c_var_value"
 | 
					                a:layout_gravity="end|top"
 | 
				
			||||||
                a:inputType="numberDecimal|numberSigned" />
 | 
					                a:background="?attr/selectableItemBackgroundBorderless"
 | 
				
			||||||
        </android.support.design.widget.TextInputLayout>
 | 
					                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"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user