diff options
author | Budi Kusmiantoro <budi@google.com> | 2014-08-14 20:16:22 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-14 19:41:44 +0000 |
commit | ee70eb2c0fdcd61da0b5fe7fdcbef81ce8496bbd (patch) | |
tree | a65c1c0e302005a3d2cd10ef9797f61da540e714 | |
parent | 75649ef3d8ca217ce93859bb8d60187b3405f4e1 (diff) | |
parent | ad8e88a5d28ba7f5b8dfa63f92b00b3b96ada360 (diff) | |
download | android_packages_apps_ExactCalculator-ee70eb2c0fdcd61da0b5fe7fdcbef81ce8496bbd.tar.gz android_packages_apps_ExactCalculator-ee70eb2c0fdcd61da0b5fe7fdcbef81ce8496bbd.tar.bz2 android_packages_apps_ExactCalculator-ee70eb2c0fdcd61da0b5fe7fdcbef81ce8496bbd.zip |
Merge "Add basic support to handle hardware keyboard" into lmp-dev
-rw-r--r-- | res/layout/display.xml | 1 | ||||
-rw-r--r-- | src/com/android/calculator2/Calculator.java | 61 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorEditText.java | 5 |
3 files changed, 56 insertions, 11 deletions
diff --git a/res/layout/display.xml b/res/layout/display.xml index 0e1d978..066838a 100644 --- a/res/layout/display.xml +++ b/res/layout/display.xml @@ -38,6 +38,7 @@ android:layout_height="wrap_content" android:layout_below="@id/formula" android:inputType="none" + android:focusable="false" android:textColor="@color/display_result_text_color" /> </RelativeLayout>
\ No newline at end of file diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java index ac8c86a..d4f10f0 100644 --- a/src/com/android/calculator2/Calculator.java +++ b/src/com/android/calculator2/Calculator.java @@ -31,7 +31,9 @@ import android.support.v4.view.ViewPager; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; +import android.view.KeyEvent; import android.view.View; +import android.view.View.OnKeyListener; import android.view.View.OnLongClickListener; import android.view.ViewAnimationUtils; import android.view.ViewGroupOverlay; @@ -42,6 +44,8 @@ import android.widget.TextView; import com.android.calculator2.CalculatorEditText.OnTextSizeChangeListener; import com.android.calculator2.CalculatorExpressionEvaluator.EvaluateCallback; +import java.lang.Override; + public class Calculator extends Activity implements OnTextSizeChangeListener, EvaluateCallback, OnLongClickListener { @@ -76,6 +80,26 @@ public class Calculator extends Activity } }; + private final OnKeyListener mFormulaOnKeyListener = new OnKeyListener() { + @Override + public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { + switch (keyCode) { + case KeyEvent.KEYCODE_NUMPAD_ENTER: + case KeyEvent.KEYCODE_ENTER: + if (keyEvent.getAction() == KeyEvent.ACTION_UP) { + mCurrentButton = mEqualButton; + onEquals(); + } + // ignore all other actions + return true; + case KeyEvent.KEYCODE_DEL: + onDelete(); + return true; + } + return false; + } + }; + private final Editable.Factory mFormulaEditableFactory = new Editable.Factory() { @Override public Editable newEditable(CharSequence source) { @@ -93,6 +117,7 @@ public class Calculator extends Activity private CalculatorEditText mResultEditText; private ViewPager mPadViewPager; private View mDeleteButton; + private View mEqualButton; private View mClearButton; private View mCurrentButton; @@ -109,6 +134,11 @@ public class Calculator extends Activity mDeleteButton = findViewById(R.id.del); mClearButton = findViewById(R.id.clr); + mEqualButton = findViewById(R.id.pad_numeric).findViewById(R.id.eq); + if (mEqualButton == null || mEqualButton.getVisibility() != View.VISIBLE) { + mEqualButton = findViewById(R.id.pad_operator).findViewById(R.id.eq); + } + mTokenizer = new CalculatorExpressionTokenizer(this); mEvaluator = new CalculatorExpressionEvaluator(mTokenizer); @@ -121,6 +151,7 @@ public class Calculator extends Activity mFormulaEditText.setEditableFactory(mFormulaEditableFactory); mFormulaEditText.addTextChangedListener(mFormulaTextWatcher); + mFormulaEditText.setOnKeyListener(mFormulaOnKeyListener); mFormulaEditText.setOnTextSizeChangeListener(this); mDeleteButton.setOnLongClickListener(this); } @@ -189,18 +220,10 @@ public class Calculator extends Activity switch (view.getId()) { case R.id.eq: - if (mCurrentState == CalculatorState.INPUT) { - setState(CalculatorState.EVALUATE); - mEvaluator.evaluate(mFormulaEditText.getText(), this); - } + onEquals(); break; case R.id.del: - // Delete works like backspace; remove the last character from the expression. - final Editable formulaText = mFormulaEditText.getEditableText(); - final int formulaLength = formulaText.length(); - if (formulaLength > 0) { - formulaText.delete(formulaLength - 1, formulaLength); - } + onDelete(); break; case R.id.clr: onClear(); @@ -242,6 +265,8 @@ public class Calculator extends Activity // The current expression cannot be evaluated -> return to the input state. setState(CalculatorState.INPUT); } + + mFormulaEditText.requestFocus(); } @Override @@ -270,6 +295,22 @@ public class Calculator extends Activity animatorSet.start(); } + private void onEquals() { + if (mCurrentState == CalculatorState.INPUT) { + setState(CalculatorState.EVALUATE); + mEvaluator.evaluate(mFormulaEditText.getText(), this); + } + } + + private void onDelete() { + // Delete works like backspace; remove the last character from the expression. + final Editable formulaText = mFormulaEditText.getEditableText(); + final int formulaLength = formulaText.length(); + if (formulaLength > 0) { + formulaText.delete(formulaLength - 1, formulaLength); + } + } + private void reveal(View sourceView, int colorRes, AnimatorListener listener) { final View displayView = findViewById(R.id.display); final View decorView = getWindow().getDecorView(); diff --git a/src/com/android/calculator2/CalculatorEditText.java b/src/com/android/calculator2/CalculatorEditText.java index b5ab026..746b6f5 100644 --- a/src/com/android/calculator2/CalculatorEditText.java +++ b/src/com/android/calculator2/CalculatorEditText.java @@ -90,7 +90,10 @@ public class CalculatorEditText extends EditText { a.recycle(); setCustomSelectionActionModeCallback(mNoSelectionActionModeCallback); - setMovementMethod(ScrollingMovementMethod.getInstance()); + + if (isFocusable()) { + setMovementMethod(ScrollingMovementMethod.getInstance()); + } setTextSize(TypedValue.COMPLEX_UNIT_PX, mMaximumTextSize); setMinHeight(getLineHeight() + getCompoundPaddingBottom() + getCompoundPaddingTop()); } |