Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 89d05999 authored by Hans Boehm's avatar Hans Boehm Committed by Android (Google) Code Review
Browse files

Merge "Improve copy/paste handling, minor instant result fixes" into mnc-dev

parents 0474b1ea 1176f23d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@
    <!-- Text color for the result in the calculator display. -->
    <color name="display_result_text_color">#6C000000</color>

    <!-- Lighter color for exponent while scrolling. -->
    <color name="display_result_exponent_text_color">#40000000</color>

    <!-- Background color for the numeric pad. -->
    <color name="pad_numeric_background_color">#434343</color>

+22 −7
Original line number Diff line number Diff line
@@ -122,6 +122,7 @@ public class Calculator extends Activity
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
            if (keyEvent.getAction() != KeyEvent.ACTION_UP) return true;
            stopActionMode();
            switch (keyCode) {
                case KeyEvent.KEYCODE_NUMPAD_ENTER:
                case KeyEvent.KEYCODE_ENTER:
@@ -311,15 +312,28 @@ public class Calculator extends Activity
        }
    }

    // Stop any active ActionMode.  Return true if there was one.
    private boolean stopActionMode() {
        if (mResult.stopActionMode()) {
            return true;
        }
        if (mFormulaText.stopActionMode()) {
            return true;
        }
        return false;
    }

    @Override
    public void onBackPressed() {
        if (mPadViewPager == null || mPadViewPager.getCurrentItem() == 0) {
        if (!stopActionMode()) {
            if (mPadViewPager != null && mPadViewPager.getCurrentItem() != 0) {
                // Select the previous pad.
                mPadViewPager.setCurrentItem(mPadViewPager.getCurrentItem() - 1);
            } else {
                // If the user is currently looking at the first pad (or the pad is not paged),
                // allow the system to handle the Back button.
                super.onBackPressed();
        } else {
            // Otherwise, select the previous pad.
            mPadViewPager.setCurrentItem(mPadViewPager.getCurrentItem() - 1);
            }
        }
    }

@@ -380,6 +394,7 @@ public class Calculator extends Activity

    public void onButtonClick(View view) {
        mCurrentButton = view;
        stopActionMode();

        // Always cancel in-progress evaluation.
        // If we were waiting for the result, do nothing else.
+22 −5
Original line number Diff line number Diff line
@@ -28,8 +28,8 @@ import android.net.Uri;
import android.widget.TextView;
import android.widget.OverScroller;
import android.text.Editable;
import android.text.Spanned;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;
import android.util.Log;
@@ -90,6 +90,8 @@ public class CalculatorResult extends TextView {
                            // the difference is not noticeable.
    private static final int MAX_WIDTH = 100;
                            // Maximum number of digits displayed
    private ActionMode mActionMode;
    private final ForegroundColorSpan mExponentColorSpan;

    public CalculatorResult(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -107,6 +109,7 @@ public class CalculatorResult extends TextView {
                        mCurrentPos = mScroller.getFinalX();
                    }
                    mScroller.forceFinished(true);
                    stopActionMode();
                    CalculatorResult.this.cancelLongPress();
                    // Ignore scrolls of error string, etc.
                    if (!mScrollable) return true;
@@ -124,6 +127,7 @@ public class CalculatorResult extends TextView {
                        mCurrentPos = mScroller.getFinalX();
                    }
                    mScroller.forceFinished(true);
                    stopActionMode();
                    CalculatorResult.this.cancelLongPress();
                    if (!mScrollable) return true;
                    int duration = (int)(e2.getEventTime() - e1.getEventTime());
@@ -135,13 +139,17 @@ public class CalculatorResult extends TextView {
                }
                @Override
                public void onLongPress(MotionEvent e) {
                    startActionMode(mCopyActionModeCallback,
                    if (mValid) {
                        mActionMode = startActionMode(mCopyActionModeCallback,
                                ActionMode.TYPE_FLOATING);
                    }
                }
            });
        setOnTouchListener(mTouchListener);
        setHorizontallyScrolling(false);  // do it ourselves
        setCursorVisible(false);
        mExponentColorSpan = new ForegroundColorSpan(
                context.getColor(R.color.display_result_exponent_text_color));

        // Copy ActionMode is triggered explicitly, not through
        // setCustomSelectionActionModeCallback.
@@ -364,6 +372,7 @@ public class CalculatorResult extends TextView {

    void clear() {
        mValid = false;
        mScrollable = false;
        setText("");
    }

@@ -376,8 +385,7 @@ public class CalculatorResult extends TextView {
        if (epos > 0 && result.indexOf('.') == -1) {
          // Gray out exponent if used as position indicator
            SpannableString formattedResult = new SpannableString(result);
            formattedResult.setSpan(new ForegroundColorSpan(Color.LTGRAY),
                                    epos, result.length(),
            formattedResult.setSpan(mExponentColorSpan, epos, result.length(),
                                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            setText(formattedResult);
        } else {
@@ -432,9 +440,18 @@ public class CalculatorResult extends TextView {

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            mActionMode = null;
        }
    };

    public boolean stopActionMode() {
        if (mActionMode != null) {
            mActionMode.finish();
            return true;
        }
        return false;
    }

    private void setPrimaryClip(ClipData clip) {
        ClipboardManager clipboard = (ClipboardManager) getContext().
                getSystemService(Context.CLIPBOARD_SERVICE);
+11 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.widget.TextView;

public class CalculatorText extends TextView implements View.OnLongClickListener{

    private ActionMode mActionMode;

    private final ActionMode.Callback mPasteActionModeCallback =
            new ActionMode.Callback() {
@@ -76,6 +77,7 @@ public class CalculatorText extends TextView implements View.OnLongClickListener

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            mActionMode = null;
        }

        @Override
@@ -149,7 +151,7 @@ public class CalculatorText extends TextView implements View.OnLongClickListener

    @Override
    public boolean onLongClick(View v) {
        startActionMode(mPasteActionModeCallback, ActionMode.TYPE_FLOATING);
        mActionMode = startActionMode(mPasteActionModeCallback, ActionMode.TYPE_FLOATING);
        return true;
    }

@@ -229,6 +231,14 @@ public class CalculatorText extends TextView implements View.OnLongClickListener
        return super.getCompoundPaddingBottom() - Math.min(getPaddingBottom(), fontMetrics.descent);
    }

    public boolean stopActionMode() {
        if (mActionMode != null) {
            mActionMode.finish();
            return true;
        }
        return false;
    }

    public interface OnTextSizeChangeListener {
        void onTextSizeChanged(TextView textView, float oldSize);
    }
+1 −0
Original line number Diff line number Diff line
@@ -752,6 +752,7 @@ class Evaluator {
    }

    void restoreInstanceState(DataInput in) {
        mChangedValue = true;
        try {
            CalculatorExpr.initExprInput();
            mDegreeMode = in.readBoolean();