Add E button to EditVariableFragment
This commit is contained in:
		@@ -22,14 +22,11 @@
 | 
			
		||||
 | 
			
		||||
package org.solovyev.android.calculator;
 | 
			
		||||
 | 
			
		||||
import android.annotation.TargetApi;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.text.Editable;
 | 
			
		||||
import android.text.TextWatcher;
 | 
			
		||||
import android.util.AttributeSet;
 | 
			
		||||
import android.view.ContextMenu;
 | 
			
		||||
 | 
			
		||||
import org.solovyev.android.Check;
 | 
			
		||||
import org.solovyev.android.calculator.view.EditTextCompat;
 | 
			
		||||
import org.solovyev.android.views.Adjuster;
 | 
			
		||||
@@ -58,12 +55,6 @@ public class EditorView extends EditTextCompat {
 | 
			
		||||
        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() {
 | 
			
		||||
        if (!App.isFloatingCalculator(getContext())) {
 | 
			
		||||
            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.FragmentManager;
 | 
			
		||||
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.LayoutInflater;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
@@ -45,10 +48,11 @@ import android.widget.PopupWindow;
 | 
			
		||||
import butterknife.Bind;
 | 
			
		||||
import butterknife.ButterKnife;
 | 
			
		||||
import dagger.Lazy;
 | 
			
		||||
import jscl.JsclMathEngine;
 | 
			
		||||
import jscl.math.function.IConstant;
 | 
			
		||||
import midpcalc.Real;
 | 
			
		||||
import org.solovyev.android.Check;
 | 
			
		||||
import org.solovyev.android.calculator.*;
 | 
			
		||||
import org.solovyev.android.calculator.RemovalConfirmationDialog;
 | 
			
		||||
import org.solovyev.android.calculator.functions.FunctionsRegistry;
 | 
			
		||||
import org.solovyev.android.calculator.keyboard.FloatingKeyboard;
 | 
			
		||||
import org.solovyev.android.calculator.keyboard.FloatingKeyboardWindow;
 | 
			
		||||
@@ -87,6 +91,8 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
 | 
			
		||||
    TextInputLayout valueLabel;
 | 
			
		||||
    @Bind(R.id.variable_value)
 | 
			
		||||
    EditText valueView;
 | 
			
		||||
    @Bind(R.id.variable_exponent_button)
 | 
			
		||||
    Button exponentButton;
 | 
			
		||||
    @Bind(R.id.variable_description)
 | 
			
		||||
    EditText descriptionView;
 | 
			
		||||
    @Inject
 | 
			
		||||
@@ -304,6 +310,13 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
 | 
			
		||||
        nameView.setOnFocusChangeListener(this);
 | 
			
		||||
        nameView.setOnKeyListener(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);
 | 
			
		||||
        keyboardButton.setOnClickListener(this);
 | 
			
		||||
 | 
			
		||||
@@ -352,6 +365,11 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
 | 
			
		||||
                    showKeyboard();
 | 
			
		||||
                }
 | 
			
		||||
                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:
 | 
			
		||||
                super.onClick(v);
 | 
			
		||||
                break;
 | 
			
		||||
@@ -379,6 +397,17 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF
 | 
			
		||||
        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 {
 | 
			
		||||
        @NonNull
 | 
			
		||||
        @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
package org.solovyev.android.calculator.view;
 | 
			
		||||
 | 
			
		||||
import android.annotation.TargetApi;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.support.design.widget.TextInputEditText;
 | 
			
		||||
import android.text.InputType;
 | 
			
		||||
import android.util.AttributeSet;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
@@ -12,7 +12,7 @@ import org.solovyev.android.Check;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
import java.lang.reflect.Method;
 | 
			
		||||
 | 
			
		||||
public class EditTextCompat extends EditText {
 | 
			
		||||
public class EditTextCompat extends TextInputEditText {
 | 
			
		||||
 | 
			
		||||
    @Nullable
 | 
			
		||||
    private static Method setShowSoftInputOnFocusMethod;
 | 
			
		||||
@@ -30,11 +30,6 @@ public class EditTextCompat extends EditText {
 | 
			
		||||
        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() {
 | 
			
		||||
        setShowSoftInputOnFocusCompat(false);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -65,18 +65,36 @@
 | 
			
		||||
                tools:ignore="UnusedAttribute" />
 | 
			
		||||
        </FrameLayout>
 | 
			
		||||
 | 
			
		||||
        <android.support.design.widget.TextInputLayout
 | 
			
		||||
            a:id="@+id/variable_value_label"
 | 
			
		||||
        <FrameLayout
 | 
			
		||||
            a:layout_width="match_parent"
 | 
			
		||||
            a:layout_height="wrap_content">
 | 
			
		||||
 | 
			
		||||
            <org.solovyev.android.calculator.view.EditTextCompat
 | 
			
		||||
                a:id="@+id/variable_value"
 | 
			
		||||
            <android.support.design.widget.TextInputLayout
 | 
			
		||||
                a:id="@+id/variable_value_label"
 | 
			
		||||
                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:hint="@string/c_var_value"
 | 
			
		||||
                a:inputType="numberDecimal|numberSigned" />
 | 
			
		||||
        </android.support.design.widget.TextInputLayout>
 | 
			
		||||
                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
 | 
			
		||||
            a:layout_width="match_parent"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,8 @@
 | 
			
		||||
    <string name="dimensions_y_min" translatable="false">Y min</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_show_greek_keyboard" translatable="false">αβγ</string>
 | 
			
		||||
    <string name="cpp_exponent" translatable="false">E</string>
 | 
			
		||||
    <string-array name="cpp_prefs_precisions" translatable="false">
 | 
			
		||||
        <item>0</item>
 | 
			
		||||
        <item>1</item>
 | 
			
		||||
 
 | 
			
		||||
@@ -115,7 +115,6 @@
 | 
			
		||||
		several devices.\n\n
 | 
			
		||||
		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_show_greek_keyboard" translatable="false">αβγ</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">Clear</string>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user