summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/display.xml2
-rw-r--r--res/layout/pad_advanced.xml111
-rw-r--r--res/layout/pad_advanced_tablet_port.xml127
-rw-r--r--res/layout/pad_numeric.xml44
-rw-r--r--res/layout/pad_operator_one_col.xml27
-rw-r--r--res/layout/pad_operator_two_col.xml33
-rw-r--r--res/values-land/styles.xml9
-rw-r--r--res/values-port/styles.xml7
-rw-r--r--res/values-sw600dp-land/styles.xml7
-rw-r--r--res/values-sw600dp-port/styles.xml7
-rw-r--r--res/values-sw800dp-land/styles.xml7
-rw-r--r--res/values-sw800dp-port/styles.xml7
-rw-r--r--res/values/strings.xml29
-rw-r--r--res/values/styles.xml8
-rw-r--r--src/com/android/calculator2/Calculator.java91
-rw-r--r--src/com/android/calculator2/CalculatorExpr.java5
-rw-r--r--src/com/android/calculator2/CalculatorPadLayout.java126
-rw-r--r--src/com/android/calculator2/Evaluator.java14
-rw-r--r--src/com/android/calculator2/KeyMaps.java79
19 files changed, 401 insertions, 339 deletions
diff --git a/res/layout/display.xml b/res/layout/display.xml
index d50d09f..56b0e6b 100644
--- a/res/layout/display.xml
+++ b/res/layout/display.xml
@@ -29,7 +29,7 @@
android:layout_height="?android:attr/actionBarSize">
<TextView
- android:id="@+id/deg_rad"
+ android:id="@+id/mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
diff --git a/res/layout/pad_advanced.xml b/res/layout/pad_advanced.xml
index aeabdc4..bd2f30a 100644
--- a/res/layout/pad_advanced.xml
+++ b/res/layout/pad_advanced.xml
@@ -15,122 +15,159 @@
limitations under the License.
-->
-<com.android.calculator2.CalculatorPadLayout
+<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pad_advanced"
style="@style/PadLayoutStyle.Advanced"
+ android:rowCount="5"
+ android:columnCount="3"
android:background="@color/pad_advanced_background_color">
<Button
- android:id="@+id/fun_sin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_sin"
- android:onClick="onButtonClick"
- android:text="@string/fun_sin" />
+ android:id="@+id/toggle_inv"
+ style="@style/PadButtonStyle.Advanced.Text"
+ android:layout_row="0"
+ android:layout_column="0"
+ android:contentDescription="@string/desc_inv_off"
+ android:text="@string/inv" />
<Button
- android:id="@+id/fun_cos"
+ android:id="@+id/toggle_mode"
+ style="@style/PadButtonStyle.Advanced.Text"
+ android:layout_row="0"
+ android:layout_column="1"
+ android:contentDescription="@string/desc_switch_deg"
+ android:text="@string/mode_deg" />
+
+ <Button
+ android:id="@+id/op_pct"
style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_cos"
- android:onClick="onButtonClick"
- android:text="@string/fun_cos" />
+ android:layout_row="0"
+ android:layout_column="2"
+ android:contentDescription="@string/desc_op_pct"
+ android:text="@string/op_pct" />
<Button
- android:id="@+id/fun_tan"
+ android:id="@+id/fun_sin"
style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_tan"
- android:onClick="onButtonClick"
- android:text="@string/fun_tan" />
+ android:layout_row="1"
+ android:layout_column="0"
+ android:contentDescription="@string/desc_fun_sin"
+ android:text="@string/fun_sin" />
<Button
android:id="@+id/fun_arcsin"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="0"
android:contentDescription="@string/desc_fun_arcsin"
- android:onClick="onButtonClick"
- android:text="@string/fun_arcsin" />
+ android:text="@string/fun_arcsin"
+ android:visibility="gone" />
+
+ <Button
+ android:id="@+id/fun_cos"
+ style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="1"
+ android:contentDescription="@string/desc_fun_cos"
+ android:text="@string/fun_cos" />
<Button
android:id="@+id/fun_arccos"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="1"
android:contentDescription="@string/desc_fun_arccos"
- android:onClick="onButtonClick"
- android:text="@string/fun_arccos" />
+ android:text="@string/fun_arccos"
+ android:visibility="gone" />
+
+ <Button
+ android:id="@+id/fun_tan"
+ style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="2"
+ android:contentDescription="@string/desc_fun_tan"
+ android:text="@string/fun_tan" />
<Button
android:id="@+id/fun_arctan"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="2"
android:contentDescription="@string/desc_fun_arctan"
- android:onClick="onButtonClick"
- android:text="@string/fun_arctan" />
+ android:text="@string/fun_arctan"
+ android:visibility="gone" />
<Button
android:id="@+id/fun_ln"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="0"
android:contentDescription="@string/desc_fun_ln"
- android:onClick="onButtonClick"
android:text="@string/fun_ln" />
<Button
android:id="@+id/fun_log"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="1"
android:contentDescription="@string/desc_fun_log"
- android:onClick="onButtonClick"
android:text="@string/fun_log" />
<Button
android:id="@+id/op_fact"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="2"
android:contentDescription="@string/desc_op_fact"
- android:onClick="onButtonClick"
android:text="@string/op_fact" />
<Button
android:id="@+id/const_pi"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="3"
+ android:layout_column="0"
android:contentDescription="@string/desc_const_pi"
- android:onClick="onButtonClick"
android:text="@string/const_pi" />
<Button
android:id="@+id/const_e"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="3"
+ android:layout_column="1"
android:contentDescription="@string/desc_const_e"
- android:onClick="onButtonClick"
android:text="@string/const_e" />
<Button
android:id="@+id/op_pow"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="3"
+ android:layout_column="2"
android:contentDescription="@string/desc_op_pow"
- android:onClick="onButtonClick"
android:text="@string/op_pow" />
<Button
android:id="@+id/lparen"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="4"
+ android:layout_column="0"
android:contentDescription="@string/desc_lparen"
- android:onClick="onButtonClick"
android:text="@string/lparen" />
<Button
android:id="@+id/rparen"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="4"
+ android:layout_column="1"
android:contentDescription="@string/desc_rparen"
- android:onClick="onButtonClick"
android:text="@string/rparen" />
<Button
android:id="@+id/op_sqrt"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="4"
+ android:layout_column="2"
android:contentDescription="@string/desc_op_sqrt"
- android:onClick="onButtonClick"
android:text="@string/op_sqrt" />
- <Button
- android:id="@+id/mode_deg_rad"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_mode_rad"
- android:onClick="onButtonClick"
- android:textAllCaps="true" />
-
-</com.android.calculator2.CalculatorPadLayout>
+</GridLayout>
diff --git a/res/layout/pad_advanced_tablet_port.xml b/res/layout/pad_advanced_tablet_port.xml
index 6b9b03f..00b0a70 100644
--- a/res/layout/pad_advanced_tablet_port.xml
+++ b/res/layout/pad_advanced_tablet_port.xml
@@ -15,122 +15,159 @@
limitations under the License.
-->
-<com.android.calculator2.CalculatorPadLayout
+<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pad_advanced"
style="@style/PadLayoutStyle.Advanced"
+ android:rowCount="3"
+ android:columnCount="5"
android:background="@color/pad_advanced_background_color">
<Button
+ android:id="@+id/toggle_inv"
+ style="@style/PadButtonStyle.Advanced.Text"
+ android:layout_row="0"
+ android:layout_column="0"
+ android:contentDescription="@string/desc_inv_off"
+ android:text="@string/inv" />
+
+ <Button
+ android:id="@+id/toggle_mode"
+ style="@style/PadButtonStyle.Advanced.Text"
+ android:layout_row="0"
+ android:layout_column="1"
+ android:contentDescription="@string/desc_switch_deg"
+ android:text="@string/mode_deg" />
+
+ <Button
android:id="@+id/fun_sin"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="0"
+ android:layout_column="2"
android:contentDescription="@string/desc_fun_sin"
- android:onClick="onButtonClick"
android:text="@string/fun_sin" />
<Button
+ android:id="@+id/fun_arcsin"
+ style="@style/PadButtonStyle.Advanced"
+ android:layout_row="0"
+ android:layout_column="2"
+ android:contentDescription="@string/desc_fun_arcsin"
+ android:text="@string/fun_arcsin"
+ android:visibility="gone" />
+
+ <Button
android:id="@+id/fun_cos"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="0"
+ android:layout_column="3"
android:contentDescription="@string/desc_fun_cos"
- android:onClick="onButtonClick"
android:text="@string/fun_cos" />
<Button
+ android:id="@+id/fun_arccos"
+ style="@style/PadButtonStyle.Advanced"
+ android:layout_row="0"
+ android:layout_column="3"
+ android:contentDescription="@string/desc_fun_arccos"
+ android:text="@string/fun_arccos"
+ android:visibility="gone" />
+
+ <Button
android:id="@+id/fun_tan"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="0"
+ android:layout_column="4"
android:contentDescription="@string/desc_fun_tan"
- android:onClick="onButtonClick"
android:text="@string/fun_tan" />
<Button
+ android:id="@+id/fun_arctan"
+ style="@style/PadButtonStyle.Advanced"
+ android:layout_row="0"
+ android:layout_column="4"
+ android:contentDescription="@string/desc_fun_arctan"
+ android:text="@string/fun_arctan"
+ android:visibility="gone" />
+
+ <Button
+ android:id="@+id/op_pct"
+ style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="0"
+ android:contentDescription="@string/desc_op_pct"
+ android:text="@string/op_pct" />
+
+ <Button
android:id="@+id/fun_ln"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="1"
android:contentDescription="@string/desc_fun_ln"
- android:onClick="onButtonClick"
android:text="@string/fun_ln" />
<Button
android:id="@+id/fun_log"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="2"
android:contentDescription="@string/desc_fun_log"
- android:onClick="onButtonClick"
android:text="@string/fun_log" />
<Button
android:id="@+id/op_fact"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="1"
+ android:layout_column="3"
android:contentDescription="@string/desc_op_fact"
- android:onClick="onButtonClick"
android:text="@string/op_fact" />
<Button
- android:id="@+id/fun_arcsin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arcsin"
- android:onClick="onButtonClick"
- android:text="@string/fun_arcsin" />
-
- <Button
- android:id="@+id/fun_arccos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arccos"
- android:onClick="onButtonClick"
- android:text="@string/fun_arccos" />
-
- <Button
- android:id="@+id/fun_arctan"
+ android:id="@+id/op_pow"
style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arctan"
- android:onClick="onButtonClick"
- android:text="@string/fun_arctan" />
+ android:layout_row="1"
+ android:layout_column="4"
+ android:contentDescription="@string/desc_op_pow"
+ android:text="@string/op_pow" />
<Button
android:id="@+id/const_pi"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="0"
android:contentDescription="@string/desc_const_pi"
- android:onClick="onButtonClick"
android:text="@string/const_pi" />
<Button
android:id="@+id/const_e"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="1"
android:contentDescription="@string/desc_const_e"
- android:onClick="onButtonClick"
android:text="@string/const_e" />
<Button
- android:id="@+id/op_pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pow"
- android:onClick="onButtonClick"
- android:text="@string/op_pow" />
-
- <Button
android:id="@+id/lparen"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="2"
android:contentDescription="@string/desc_lparen"
- android:onClick="onButtonClick"
android:text="@string/lparen" />
<Button
android:id="@+id/rparen"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="3"
android:contentDescription="@string/desc_rparen"
- android:onClick="onButtonClick"
android:text="@string/rparen" />
<Button
android:id="@+id/op_sqrt"
style="@style/PadButtonStyle.Advanced"
+ android:layout_row="2"
+ android:layout_column="4"
android:contentDescription="@string/desc_op_sqrt"
- android:onClick="onButtonClick"
android:text="@string/op_sqrt" />
- <Button
- android:id="@+id/mode_deg_rad"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_mode_rad"
- android:onClick="onButtonClick"
- android:textAllCaps="true" />
-
-</com.android.calculator2.CalculatorPadLayout>
+</GridLayout>
diff --git a/res/layout/pad_numeric.xml b/res/layout/pad_numeric.xml
index c03f58b..6e9251b 100644
--- a/res/layout/pad_numeric.xml
+++ b/res/layout/pad_numeric.xml
@@ -15,85 +15,97 @@
limitations under the License.
-->
-<com.android.calculator2.CalculatorPadLayout
+<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pad_numeric"
style="@style/PadLayoutStyle.Numeric"
- android:background="@color/pad_numeric_background_color"
+ android:rowCount="4"
android:columnCount="3"
- android:rowCount="4">
+ android:background="@color/pad_numeric_background_color">
<Button
android:id="@+id/digit_7"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="0"
+ android:layout_column="0"
android:text="@string/digit_7" />
<Button
android:id="@+id/digit_8"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="0"
+ android:layout_column="1"
android:text="@string/digit_8" />
<Button
android:id="@+id/digit_9"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="0"
+ android:layout_column="2"
android:text="@string/digit_9" />
<Button
android:id="@+id/digit_4"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="1"
+ android:layout_column="0"
android:text="@string/digit_4" />
<Button
android:id="@+id/digit_5"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="1"
+ android:layout_column="1"
android:text="@string/digit_5" />
<Button
android:id="@+id/digit_6"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="1"
+ android:layout_column="2"
android:text="@string/digit_6" />
<Button
android:id="@+id/digit_1"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="2"
+ android:layout_column="0"
android:text="@string/digit_1" />
<Button
android:id="@+id/digit_2"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="2"
+ android:layout_column="1"
android:text="@string/digit_2" />
<Button
android:id="@+id/digit_3"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="2"
+ android:layout_column="2"
android:text="@string/digit_3" />
<Button
android:id="@+id/dec_point"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="3"
+ android:layout_column="0"
android:text="@string/dec_point" />
<Button
android:id="@+id/digit_0"
style="@style/PadButtonStyle.Numeric"
- android:onClick="onButtonClick"
+ android:layout_row="3"
+ android:layout_column="1"
android:text="@string/digit_0" />
<Button
android:id="@+id/eq"
style="@style/PadButtonStyle.Numeric.Equals"
+ android:layout_row="3"
+ android:layout_column="2"
android:contentDescription="@string/desc_eq"
- android:onClick="onButtonClick"
android:text="@string/eq" />
-</com.android.calculator2.CalculatorPadLayout>
+</GridLayout>
diff --git a/res/layout/pad_operator_one_col.xml b/res/layout/pad_operator_one_col.xml
index a794f72..1323b2c 100644
--- a/res/layout/pad_operator_one_col.xml
+++ b/res/layout/pad_operator_one_col.xml
@@ -15,55 +15,62 @@
limitations under the License.
-->
-<com.android.calculator2.CalculatorPadLayout
+<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pad_operator"
style="@style/PadLayoutStyle.Operator"
- android:background="@color/pad_operator_background_color"
+ android:rowCount="5"
android:columnCount="1"
- android:rowCount="5">
+ android:background="@color/pad_operator_background_color">
<Button
android:id="@+id/del"
style="@style/PadButtonStyle.Operator.Text"
+ android:layout_row="0"
+ android:layout_column="0"
android:contentDescription="@string/desc_del"
- android:onClick="onButtonClick"
android:text="@string/del" />
<Button
android:id="@+id/clr"
style="@style/PadButtonStyle.Operator.Text"
+ android:layout_row="0"
+ android:layout_column="0"
android:contentDescription="@string/desc_clr"
- android:onClick="onButtonClick"
android:text="@string/clr"
android:visibility="gone" />
+
<Button
android:id="@+id/op_div"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="1"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_div"
- android:onClick="onButtonClick"
android:text="@string/op_div" />
<Button
android:id="@+id/op_mul"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="2"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_mul"
- android:onClick="onButtonClick"
android:text="@string/op_mul" />
<Button
android:id="@+id/op_sub"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="3"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_sub"
- android:onClick="onButtonClick"
android:text="@string/op_sub" />
<Button
android:id="@+id/op_add"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="4"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_add"
- android:onClick="onButtonClick"
android:text="@string/op_add" />
-</com.android.calculator2.CalculatorPadLayout>
+</GridLayout>
diff --git a/res/layout/pad_operator_two_col.xml b/res/layout/pad_operator_two_col.xml
index 6009e89..0d559d1 100644
--- a/res/layout/pad_operator_two_col.xml
+++ b/res/layout/pad_operator_two_col.xml
@@ -15,66 +15,69 @@
limitations under the License.
-->
-<com.android.calculator2.CalculatorPadLayout
+<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pad_operator"
style="@style/PadLayoutStyle.Operator"
- android:background="@color/pad_operator_background_color"
+ android:rowCount="4"
android:columnCount="2"
- android:rowCount="4">
+ android:background="@color/pad_operator_background_color">
<Button
android:id="@+id/op_div"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="0"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_div"
- android:onClick="onButtonClick"
android:text="@string/op_div" />
<Button
android:id="@+id/del"
style="@style/PadButtonStyle.Operator.Text"
+ android:layout_row="0"
+ android:layout_column="1"
android:contentDescription="@string/desc_del"
- android:onClick="onButtonClick"
android:text="@string/del" />
<Button
android:id="@+id/clr"
style="@style/PadButtonStyle.Operator.Text"
+ android:layout_row="0"
+ android:layout_column="1"
android:contentDescription="@string/desc_clr"
- android:onClick="onButtonClick"
android:text="@string/clr"
android:visibility="gone" />
<Button
android:id="@+id/op_mul"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="1"
+ android:layout_column="0"
android:contentDescription="@string/op_mul"
- android:onClick="onButtonClick"
android:text="@string/op_mul" />
- <Space style="@style/PadButtonStyle.Operator" />
-
<Button
android:id="@+id/op_sub"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="2"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_sub"
- android:onClick="onButtonClick"
android:text="@string/op_sub" />
- <Space style="@style/PadButtonStyle.Operator" />
-
<Button
android:id="@+id/op_add"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="3"
+ android:layout_column="0"
android:contentDescription="@string/desc_op_add"
- android:onClick="onButtonClick"
android:text="@string/op_add" />
<Button
android:id="@+id/eq"
style="@style/PadButtonStyle.Operator"
+ android:layout_row="3"
+ android:layout_column="1"
android:contentDescription="@string/desc_eq"
- android:onClick="onButtonClick"
android:text="@string/eq" />
-</com.android.calculator2.CalculatorPadLayout>
+</GridLayout>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
index 828d9ac..bbda604 100644
--- a/res/values-land/styles.xml
+++ b/res/values-land/styles.xml
@@ -44,6 +44,11 @@
<item name="android:textSize">15sp</item>
</style>
+ <style name="PadButtonStyle.Advanced.Text">
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textSize">13sp</item>
+ </style>
+
<style name="PadButtonStyle.Numeric">
<item name="android:layout_margin">4dip</item>
<item name="android:textSize">23sp</item>
@@ -63,7 +68,7 @@
<style name="PadButtonStyle.Operator.Text">
<item name="android:textAllCaps">true</item>
- <item name="android:textSize">15sp</item>
+ <item name="android:textSize">13sp</item>
</style>
<style name="PadLayoutStyle.Advanced">
@@ -73,8 +78,6 @@
<item name="android:paddingBottom">4dip</item>
<item name="android:paddingStart">8dip</item>
<item name="android:paddingEnd">8dip</item>
- <item name="android:columnCount">3</item>
- <item name="android:rowCount">5</item>
</style>
<style name="PadLayoutStyle.Numeric">
diff --git a/res/values-port/styles.xml b/res/values-port/styles.xml
index 3a7ad3e..a3b1867 100644
--- a/res/values-port/styles.xml
+++ b/res/values-port/styles.xml
@@ -43,6 +43,11 @@
<item name="android:textSize">20sp</item>
</style>
+ <style name="PadButtonStyle.Advanced.Text">
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textSize">17sp</item>
+ </style>
+
<style name="PadButtonStyle.Numeric">
<item name="android:layout_margin">4dip</item>
<item name="android:textSize">32sp</item>
@@ -68,8 +73,6 @@
<item name="android:paddingBottom">20dip</item>
<item name="android:paddingStart">20dip</item>
<item name="android:paddingEnd">20dip</item>
- <item name="android:columnCount">3</item>
- <item name="android:rowCount">5</item>
</style>
<style name="PadLayoutStyle.Numeric">
diff --git a/res/values-sw600dp-land/styles.xml b/res/values-sw600dp-land/styles.xml
index e97f2ab..603a392 100644
--- a/res/values-sw600dp-land/styles.xml
+++ b/res/values-sw600dp-land/styles.xml
@@ -41,6 +41,11 @@
<item name="android:textSize">27sp</item>
</style>
+ <style name="PadButtonStyle.Advanced.Text">
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textSize">24sp</item>
+ </style>
+
<style name="PadButtonStyle.Numeric">
<item name="android:layout_margin">6dip</item>
<item name="android:textSize">36sp</item>
@@ -67,8 +72,6 @@
<item name="android:paddingBottom">10dip</item>
<item name="android:paddingStart">18dip</item>
<item name="android:paddingEnd">22dip</item>
- <item name="android:columnCount">3</item>
- <item name="android:rowCount">5</item>
</style>
<style name="PadLayoutStyle.Numeric">
diff --git a/res/values-sw600dp-port/styles.xml b/res/values-sw600dp-port/styles.xml
index 9cd76ce..efb1033 100644
--- a/res/values-sw600dp-port/styles.xml
+++ b/res/values-sw600dp-port/styles.xml
@@ -47,6 +47,11 @@
<item name="android:textSize">27sp</item>
</style>
+ <style name="PadButtonStyle.Advanced.Text">
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textSize">24sp</item>
+ </style>
+
<style name="PadButtonStyle.Numeric">
<item name="android:layout_margin">8dip</item>
<item name="android:textSize">36sp</item>
@@ -76,8 +81,6 @@
<item name="android:paddingBottom">8dip</item>
<item name="android:paddingStart">16dip</item>
<item name="android:paddingEnd">16dip</item>
- <item name="android:columnCount">6</item>
- <item name="android:rowCount">3</item>
</style>
<style name="PadLayoutStyle.Numeric">
diff --git a/res/values-sw800dp-land/styles.xml b/res/values-sw800dp-land/styles.xml
index 7952971..807f568 100644
--- a/res/values-sw800dp-land/styles.xml
+++ b/res/values-sw800dp-land/styles.xml
@@ -43,6 +43,11 @@
<item name="android:textSize">36sp</item>
</style>
+ <style name="PadButtonStyle.Advanced.Text">
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textSize">32sp</item>
+ </style>
+
<style name="PadButtonStyle.Numeric">
<item name="android:layout_margin">6dip</item>
<item name="android:textSize">48sp</item>
@@ -69,8 +74,6 @@
<item name="android:paddingBottom">10dip</item>
<item name="android:paddingStart">18dip</item>
<item name="android:paddingEnd">22dip</item>
- <item name="android:columnCount">3</item>
- <item name="android:rowCount">5</item>
</style>
<style name="PadLayoutStyle.Numeric">
diff --git a/res/values-sw800dp-port/styles.xml b/res/values-sw800dp-port/styles.xml
index bca0b13..8ce7a12 100644
--- a/res/values-sw800dp-port/styles.xml
+++ b/res/values-sw800dp-port/styles.xml
@@ -46,6 +46,11 @@
<item name="android:textSize">36sp</item>
</style>
+ <style name="PadButtonStyle.Advanced.Text">
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textSize">32sp</item>
+ </style>
+
<style name="PadButtonStyle.Numeric">
<item name="android:layout_margin">8dip</item>
<item name="android:textSize">48sp</item>
@@ -75,8 +80,6 @@
<item name="android:paddingBottom">8dip</item>
<item name="android:paddingStart">16dip</item>
<item name="android:paddingEnd">16dip</item>
- <item name="android:columnCount">6</item>
- <item name="android:rowCount">3</item>
</style>
<style name="PadLayoutStyle.Numeric">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1cd7910..3dad1c0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -69,6 +69,8 @@
<string name="op_fact" translatable="false">!</string>
<!-- Multiply operator (e.g. "1 × 2"). [CHAR_LIMIT=1] -->
<string name="op_mul" translatable="false">×</string>
+ <!-- Percent operator (e.g. "25%"). [CHAR_LIMIT=1] -->
+ <string name="op_pct" translatable="false">%</string>
<!-- Power operator (e.g. "1 ^ 2"). [CHAR_LIMIT=1] -->
<string name="op_pow" translatable="false">^</string>
<!-- Square root operator (e.g. "√1"). [CHAR_LIMIT=1] -->
@@ -104,7 +106,8 @@
<string name="clr">clr</string>
<!-- Delete button to remove last entered token. [CHAR_LIMIT=4] -->
<string name="del">del</string>
-
+ <!-- Toggle button to show/hide inverse functions. [CHAR_LIMIT=4] -->
+ <string name="inv" translatable="false">inv</string>
<!-- Content description for 'e' button. [CHAR_LIMIT=NONE] -->
<string name="desc_const_e">Euler\'s number</string>
@@ -144,23 +147,35 @@
<string name="desc_op_fact">factorial</string>
<!-- Content description for '×' button. [CHAR_LIMIT=NONE] -->
<string name="desc_op_mul">times</string>
+ <!-- Content description for '%' button. [CHAR_LIMIT=NONE] -->
+ <string name="desc_op_pct">percent</string>
<!-- Content description for '^' button. [CHAR_LIMIT=NONE] -->
<string name="desc_op_pow">power</string>
<!-- Content description for '√' button. [CHAR_LIMIT=NONE] -->
<string name="desc_op_sqrt">square root</string>
- <!-- Content description for sitch to radian button. [CHAR_LIMIT=NONE] -->
- <string name="desc_mode_rad">switch to radians</string>
- <!-- Content description for switch to degree button. [CHAR_LIMIT=NONE] -->
- <string name="desc_mode_deg">switch to degrees</string>
<!-- Content description for '-' button. [CHAR_LIMIT=NONE] -->
<string name="desc_op_sub">minus</string>
+ <!-- Content description for degree mode. [CHAR_LIMIT=NONE] -->
+ <string name="desc_mode_deg">degree mode</string>
+ <!-- Content description for radian mode. [CHAR_LIMIT=NONE] -->
+ <string name="desc_mode_rad">radian mode</string>
+
+ <!-- Content description for switch to degree button. [CHAR_LIMIT=NONE] -->
+ <string name="desc_switch_deg">switch to degrees</string>
+ <!-- Content description for switch to radian button. [CHAR_LIMIT=NONE] -->
+ <string name="desc_switch_rad">switch to radians</string>
+
+ <!-- Content description for '=' button. [CHAR_LIMIT=NONE] -->
+ <string name="desc_eq">equals</string>
<!-- Content description for "clr" button. [CHAR_LIMIT=NONE] -->
<string name="desc_clr">clear</string>
<!-- Content description for "del" button. [CHAR_LIMIT=NONE] -->
<string name="desc_del">delete</string>
- <!-- Content description for '=' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_eq">equals</string>
+ <!-- Content description for "inv" button to show inverse functions. [CHAR_LIMIT=NONE] -->
+ <string name="desc_inv_off">show inverse functions</string>
+ <!-- Content description for "inv" button to hide inverse functions. [CHAR_LIMIT=NONE] -->
+ <string name="desc_inv_on">hide inverse functions</string>
<!-- Error displayed when expression evaluates to an undefined result. [CHAR_LIMIT=16] -->
<string name="error_nan">Not a number</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index c88391e..ed77ea9 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -43,14 +43,18 @@
</style>
<style name="PadButtonStyle" parent="@android:style/Widget.Material.Light.Button.Borderless">
- <item name="android:layout_width">wrap_content</item>
- <item name="android:layout_height">wrap_content</item>
+ <item name="android:layout_width">0dip</item>
+ <item name="android:layout_height">0dip</item>
+ <item name="android:layout_rowWeight">1</item>
+ <item name="android:layout_columnWeight">1</item>
+ <item name="android:layout_gravity">fill</item>
<item name="android:background">@drawable/pad_button_background</item>
<item name="android:fontFamily">sans-serif-light</item>
<item name="android:gravity">center</item>
<item name="android:includeFontPadding">false</item>
<item name="android:minWidth">0dip</item>
<item name="android:minHeight">0dip</item>
+ <item name="android:onClick">onButtonClick</item>
<item name="android:textAllCaps">false</item>
<item name="android:textColor">@color/pad_button_text_color</item>
</style>
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index e2c006c..0c96958 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -174,7 +174,12 @@ public class Calculator extends Activity
private View mDeleteButton;
private View mClearButton;
private View mEqualButton;
- private TextView mModeButton;
+
+ private TextView mInverseToggle;
+ private TextView mModeToggle;
+
+ private View[] mInvertableButtons;
+ private View[] mInverseButtons;
private View mCurrentButton;
private Animator mCurrentAnimator;
@@ -193,7 +198,7 @@ public class Calculator extends Activity
getActionBar().setDisplayOptions(0);
mDisplayView = findViewById(R.id.display);
- mModeView = (TextView) findViewById(R.id.deg_rad);
+ mModeView = (TextView) findViewById(R.id.mode);
mFormulaText = (CalculatorText) findViewById(R.id.formula);
mResult = (CalculatorResult) findViewById(R.id.result);
@@ -204,7 +209,20 @@ public class Calculator extends Activity
if (mEqualButton == null || mEqualButton.getVisibility() != View.VISIBLE) {
mEqualButton = findViewById(R.id.pad_operator).findViewById(R.id.eq);
}
- mModeButton = (TextView) findViewById(R.id.mode_deg_rad);
+
+ mInverseToggle = (TextView) findViewById(R.id.toggle_inv);
+ mModeToggle = (TextView) findViewById(R.id.toggle_mode);
+
+ mInvertableButtons = new View[] {
+ findViewById(R.id.fun_sin),
+ findViewById(R.id.fun_cos),
+ findViewById(R.id.fun_tan)
+ };
+ mInverseButtons = new View[] {
+ findViewById(R.id.fun_arcsin),
+ findViewById(R.id.fun_arccos),
+ findViewById(R.id.fun_arctan)
+ };
mEvaluator = new Evaluator(this, mResult);
mResult.setEvaluator(mEvaluator);
@@ -232,11 +250,15 @@ public class Calculator extends Activity
mCurrentState = CalculatorState.INPUT;
mEvaluator.clear();
}
+
mFormulaText.setOnKeyListener(mFormulaOnKeyListener);
mFormulaText.setOnTextSizeChangeListener(this);
mFormulaText.setPasteListener(this);
mDeleteButton.setOnLongClickListener(this);
- updateDegreeMode(mEvaluator.getDegreeMode());
+
+ onInverseToggled(mInverseToggle.isSelected());
+ onModeChanged(mEvaluator.getDegreeMode());
+
if (mCurrentState != CalculatorState.INPUT) {
// Just reevaluate.
redisplayFormula();
@@ -344,18 +366,49 @@ public class Calculator extends Activity
}
}
- // Update the top corner degree/radian display and mode button
- // to reflect the indicated current degree mode (true = degrees)
- // TODO: Hide the top corner display until the advanced panel is exposed.
- private void updateDegreeMode(boolean dm) {
- if (dm) {
+ /**
+ * Invoked whenever the inverse button is toggled to update the UI.
+ *
+ * @param showInverse {@code true} if inverse functions should be shown
+ */
+ private void onInverseToggled(boolean showInverse) {
+ if (showInverse) {
+ mInverseToggle.setContentDescription(getString(R.string.desc_inv_on));
+ for (View invertableButton : mInvertableButtons) {
+ invertableButton.setVisibility(View.GONE);
+ }
+ for (View inverseButton : mInverseButtons) {
+ inverseButton.setVisibility(View.VISIBLE);
+ }
+ } else {
+ mInverseToggle.setContentDescription(getString(R.string.desc_inv_off));
+ for (View invertableButton : mInvertableButtons) {
+ invertableButton.setVisibility(View.VISIBLE);
+ }
+ for (View inverseButton : mInverseButtons) {
+ inverseButton.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ /**
+ * Invoked whenever the deg/rad mode may have changed to update the UI.
+ *
+ * @param degreeMode {@code true} if in degree mode
+ */
+ private void onModeChanged(boolean degreeMode) {
+ if (degreeMode) {
mModeView.setText(R.string.mode_deg);
- mModeButton.setText(R.string.mode_rad);
- mModeButton.setContentDescription(getString(R.string.desc_mode_rad));
+ mModeView.setContentDescription(getString(R.string.desc_mode_deg));
+
+ mModeToggle.setText(R.string.mode_rad);
+ mModeToggle.setContentDescription(getString(R.string.desc_switch_rad));
} else {
mModeView.setText(R.string.mode_rad);
- mModeButton.setText(R.string.mode_deg);
- mModeButton.setContentDescription(getString(R.string.desc_mode_deg));
+ mModeView.setContentDescription(getString(R.string.desc_mode_rad));
+
+ mModeToggle.setText(R.string.mode_deg);
+ mModeToggle.setContentDescription(getString(R.string.desc_switch_deg));
}
}
@@ -413,15 +466,21 @@ public class Calculator extends Activity
case R.id.clr:
onClear();
break;
- case R.id.mode_deg_rad:
- boolean mode = !mEvaluator.getDegreeMode();
- updateDegreeMode(mode);
+ case R.id.toggle_inv:
+ final boolean selected = !mInverseToggle.isSelected();
+ mInverseToggle.setSelected(selected);
+ onInverseToggled(selected);
+ break;
+ case R.id.toggle_mode:
+ final boolean mode = !mEvaluator.getDegreeMode();
if (mCurrentState == CalculatorState.RESULT) {
mEvaluator.collapse(); // Capture result evaluated in old mode
redisplayFormula();
}
// In input mode, we reinterpret already entered trig functions.
mEvaluator.setDegreeMode(mode);
+ onModeChanged(mode);
+
setState(CalculatorState.INPUT);
mResult.clear();
if (mEvaluator.getExpr().hasInterestingOps()) {
diff --git a/src/com/android/calculator2/CalculatorExpr.java b/src/com/android/calculator2/CalculatorExpr.java
index 05afb49..e5be4b9 100644
--- a/src/com/android/calculator2/CalculatorExpr.java
+++ b/src/com/android/calculator2/CalculatorExpr.java
@@ -19,8 +19,6 @@ package com.android.calculator2;
import com.hp.creals.CR;
import com.hp.creals.UnaryCRFunction;
-import com.hp.creals.PrecisionOverflowError;
-import com.hp.creals.AbortedError;
import android.content.Context;
import android.util.Log;
@@ -29,7 +27,6 @@ import java.math.BigInteger;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
-import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.IdentityHashMap;
@@ -72,7 +69,7 @@ class CalculatorExpr {
}
@Override
public String toString(Context context) {
- return KeyMaps.toString(mId, context);
+ return KeyMaps.toString(context, mId);
}
@Override
TokenKind kind() { return TokenKind.OPERATOR; }
diff --git a/src/com/android/calculator2/CalculatorPadLayout.java b/src/com/android/calculator2/CalculatorPadLayout.java
deleted file mode 100644
index 3ee6339..0000000
--- a/src/com/android/calculator2/CalculatorPadLayout.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * A layout that places children in an evenly distributed grid based on the specified
- * {@link android.R.attr#columnCount} and {@link android.R.attr#rowCount} attributes.
- */
-public class CalculatorPadLayout extends ViewGroup {
-
- private int mRowCount;
- private int mColumnCount;
-
- public CalculatorPadLayout(Context context) {
- this(context, null);
- }
-
- public CalculatorPadLayout(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public CalculatorPadLayout(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
- final TypedArray a = context.obtainStyledAttributes(attrs,
- new int[] { android.R.attr.rowCount, android.R.attr.columnCount }, defStyle, 0);
- mRowCount = a.getInt(0, 1);
- mColumnCount = a.getInt(1, 1);
-
- a.recycle();
- }
-
- @Override
- public boolean shouldDelayChildPressedState() {
- return false;
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- final int paddingLeft = getPaddingLeft();
- final int paddingRight = getPaddingRight();
- final int paddingTop = getPaddingTop();
- final int paddingBottom = getPaddingBottom();
-
- final boolean isRTL = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
- int columnCount = mColumnCount;
- int columnWidth = (right - left - paddingLeft - paddingRight) / columnCount;
- final int rowHeight = (bottom - top - paddingTop - paddingBottom) / mRowCount;
-
- int rowIndex = 0, columnIndex = 0;
- for (int childIndex = 0; childIndex < getChildCount(); ++childIndex) {
- final View childView = getChildAt(childIndex);
- if (childView.getVisibility() == View.GONE) {
- continue;
- }
-
- final MarginLayoutParams lp = (MarginLayoutParams) childView.getLayoutParams();
-
- final int childTop = paddingTop + lp.topMargin + rowIndex * rowHeight;
- final int childBottom = childTop - lp.topMargin - lp.bottomMargin + rowHeight;
- final int childLeft = paddingLeft + lp.leftMargin +
- (isRTL ? (columnCount - 1) - columnIndex : columnIndex) * columnWidth;
- final int childRight = childLeft - lp.leftMargin - lp.rightMargin + columnWidth;
-
- final int childWidth = childRight - childLeft;
- final int childHeight = childBottom - childTop;
- if (childWidth != childView.getMeasuredWidth() ||
- childHeight != childView.getMeasuredHeight()) {
- childView.measure(
- MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY));
- }
- childView.layout(childLeft, childTop, childRight, childBottom);
-
- columnIndex = (columnIndex + 1) % columnCount;
- if (columnIndex == 0 && rowIndex + 1 < mRowCount) {
- rowIndex++;
- if (rowIndex + 1 == mRowCount) {
- // Distribute the remainder evenly in the last row.
- columnCount = getChildCount() - childIndex - 1;
- columnWidth = (right - left - paddingLeft - paddingRight) / columnCount;
- }
- }
- }
- }
-
- @Override
- public LayoutParams generateLayoutParams(AttributeSet attrs) {
- return new MarginLayoutParams(getContext(), attrs);
- }
-
- @Override
- protected LayoutParams generateDefaultLayoutParams() {
- return new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- }
-
- @Override
- protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
- return new MarginLayoutParams(p);
- }
-
- @Override
- protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
- return p instanceof MarginLayoutParams;
- }
-}
diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java
index 9e0c7da..6362efe 100644
--- a/src/com/android/calculator2/Evaluator.java
+++ b/src/com/android/calculator2/Evaluator.java
@@ -80,33 +80,23 @@ package com.android.calculator2;
import android.app.AlertDialog;
import android.content.DialogInterface;
-import android.content.Context;
-import android.content.res.Resources;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Handler;
-import android.text.TextUtils;
import android.util.Log;
-import android.view.KeyEvent;
-import android.widget.EditText;
+import com.hp.creals.AbortedError;
import com.hp.creals.CR;
import com.hp.creals.PrecisionOverflowError;
-import com.hp.creals.AbortedError;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.math.BigInteger;
import java.text.DateFormat;
-import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
-import java.math.BigInteger;
import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map.Entry;
import java.util.Random;
-import java.util.Set;
import java.util.TimeZone;
class Evaluator {
diff --git a/src/com/android/calculator2/KeyMaps.java b/src/com/android/calculator2/KeyMaps.java
index 9a84612..e3b84e7 100644
--- a/src/com/android/calculator2/KeyMaps.java
+++ b/src/com/android/calculator2/KeyMaps.java
@@ -29,7 +29,7 @@ import java.util.Locale;
/**
* Collection of mapping functions between key ids, characters, internationalized
- * and noninternationalized characters, etc.
+ * and non-internationalized characters, etc.
* <p>
* KeyMap instances are not meaningful; everything here is static.
* All functions are either pure, or are assumed to be called only from a single UI thread.
@@ -39,71 +39,72 @@ public class KeyMaps {
* Map key id to corresponding (internationalized) display string.
* Pure function.
*/
- public static String toString(int id, Context context) {
- Resources res = context.getResources();
+ public static String toString(Context context, int id) {
switch(id) {
case R.id.const_pi:
- return res.getString(R.string.const_pi);
+ return context.getString(R.string.const_pi);
case R.id.const_e:
- return res.getString(R.string.const_e);
+ return context.getString(R.string.const_e);
case R.id.op_sqrt:
- return res.getString(R.string.op_sqrt);
+ return context.getString(R.string.op_sqrt);
case R.id.op_fact:
- return res.getString(R.string.op_fact);
+ return context.getString(R.string.op_fact);
+ case R.id.op_pct:
+ return context.getString(R.string.op_pct);
case R.id.fun_sin:
- return res.getString(R.string.fun_sin) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_sin) + context.getString(R.string.lparen);
case R.id.fun_cos:
- return res.getString(R.string.fun_cos) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_cos) + context.getString(R.string.lparen);
case R.id.fun_tan:
- return res.getString(R.string.fun_tan) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_tan) + context.getString(R.string.lparen);
case R.id.fun_arcsin:
- return res.getString(R.string.fun_arcsin) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_arcsin) + context.getString(R.string.lparen);
case R.id.fun_arccos:
- return res.getString(R.string.fun_arccos) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_arccos) + context.getString(R.string.lparen);
case R.id.fun_arctan:
- return res.getString(R.string.fun_arctan) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_arctan) + context.getString(R.string.lparen);
case R.id.fun_ln:
- return res.getString(R.string.fun_ln) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_ln) + context.getString(R.string.lparen);
case R.id.fun_log:
- return res.getString(R.string.fun_log) + res.getString(R.string.lparen);
+ return context.getString(R.string.fun_log) + context.getString(R.string.lparen);
case R.id.lparen:
- return res.getString(R.string.lparen);
+ return context.getString(R.string.lparen);
case R.id.rparen:
- return res.getString(R.string.rparen);
+ return context.getString(R.string.rparen);
case R.id.op_pow:
- return res.getString(R.string.op_pow);
+ return context.getString(R.string.op_pow);
case R.id.op_mul:
- return res.getString(R.string.op_mul);
+ return context.getString(R.string.op_mul);
case R.id.op_div:
- return res.getString(R.string.op_div);
+ return context.getString(R.string.op_div);
case R.id.op_add:
- return res.getString(R.string.op_add);
+ return context.getString(R.string.op_add);
case R.id.op_sub:
- return res.getString(R.string.op_sub);
+ return context.getString(R.string.op_sub);
case R.id.dec_point:
- return res.getString(R.string.dec_point);
+ return context.getString(R.string.dec_point);
case R.id.digit_0:
- return res.getString(R.string.digit_0);
+ return context.getString(R.string.digit_0);
case R.id.digit_1:
- return res.getString(R.string.digit_1);
+ return context.getString(R.string.digit_1);
case R.id.digit_2:
- return res.getString(R.string.digit_2);
+ return context.getString(R.string.digit_2);
case R.id.digit_3:
- return res.getString(R.string.digit_3);
+ return context.getString(R.string.digit_3);
case R.id.digit_4:
- return res.getString(R.string.digit_4);
+ return context.getString(R.string.digit_4);
case R.id.digit_5:
- return res.getString(R.string.digit_5);
+ return context.getString(R.string.digit_5);
case R.id.digit_6:
- return res.getString(R.string.digit_6);
+ return context.getString(R.string.digit_6);
case R.id.digit_7:
- return res.getString(R.string.digit_7);
+ return context.getString(R.string.digit_7);
case R.id.digit_8:
- return res.getString(R.string.digit_8);
+ return context.getString(R.string.digit_8);
case R.id.digit_9:
- return res.getString(R.string.digit_9);
+ return context.getString(R.string.digit_9);
default:
- return "?oops?";
+ return "";
}
}
@@ -128,7 +129,13 @@ public class KeyMaps {
* Does a button id correspond to a suffix operator?
*/
public static boolean isSuffix(int id) {
- return id == R.id.op_fact;
+ switch (id) {
+ case R.id.op_fact:
+ case R.id.op_pct:
+ return true;
+ default:
+ return false;
+ }
}
public static final int NOT_DIGIT = 10;
@@ -278,6 +285,8 @@ public class KeyMaps {
return R.id.op_pow;
case '!':
return R.id.op_fact;
+ case '%':
+ return R.id.op_pct;
case '(':
return R.id.lparen;
case ')':