diff options
-rw-r--r-- | res/layout/display.xml | 2 | ||||
-rw-r--r-- | res/layout/pad_advanced.xml | 111 | ||||
-rw-r--r-- | res/layout/pad_advanced_tablet_port.xml | 127 | ||||
-rw-r--r-- | res/layout/pad_numeric.xml | 44 | ||||
-rw-r--r-- | res/layout/pad_operator_one_col.xml | 27 | ||||
-rw-r--r-- | res/layout/pad_operator_two_col.xml | 33 | ||||
-rw-r--r-- | res/values-land/styles.xml | 9 | ||||
-rw-r--r-- | res/values-port/styles.xml | 7 | ||||
-rw-r--r-- | res/values-sw600dp-land/styles.xml | 7 | ||||
-rw-r--r-- | res/values-sw600dp-port/styles.xml | 7 | ||||
-rw-r--r-- | res/values-sw800dp-land/styles.xml | 7 | ||||
-rw-r--r-- | res/values-sw800dp-port/styles.xml | 7 | ||||
-rw-r--r-- | res/values/strings.xml | 29 | ||||
-rw-r--r-- | res/values/styles.xml | 8 | ||||
-rw-r--r-- | src/com/android/calculator2/Calculator.java | 91 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorExpr.java | 5 | ||||
-rw-r--r-- | src/com/android/calculator2/CalculatorPadLayout.java | 126 | ||||
-rw-r--r-- | src/com/android/calculator2/Evaluator.java | 14 | ||||
-rw-r--r-- | src/com/android/calculator2/KeyMaps.java | 79 |
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 ')': |