am 5c85e48a: (-s ours) Import revised translations.  DO NOT MERGE

* commit '5c85e48a713ec70ebce65ebf1a3622035992f8c3':
  Import revised translations.  DO NOT MERGE
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3b33cea..236eadd 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -4,9 +4,10 @@
 
     <original-package android:name="com.android.calculator2" />
 
-    <application android:label="@string/app_name" android:icon="@drawable/icon">
+    <application android:label="@string/app_name" android:icon="@mipmap/ic_launcher_calculator">
         <activity android:name="Calculator" 
-                  android:theme="@android:style/Theme.Black.NoTitleBar">
+                  android:theme="@android:style/Theme.Holo.NoActionBar"
+                  android:windowSoftInputMode="stateAlwaysHidden">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
diff --git a/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..d13386a
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..77a0e7d
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..763c538
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..328fe16
--- /dev/null
+++ b/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/icon.png b/res/drawable-hdpi/icon.png
deleted file mode 100644
index ac1c045..0000000
--- a/res/drawable-hdpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..1534d99
--- /dev/null
+++ b/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..9fed21e
--- /dev/null
+++ b/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..eded173
--- /dev/null
+++ b/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..e6a1dce
--- /dev/null
+++ b/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/icon.png b/res/drawable-mdpi/icon.png
deleted file mode 100644
index c574bd3..0000000
--- a/res/drawable-mdpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/calc_clear_symbol.png b/res/drawable-xlarge-hdpi/calc_clear_symbol.png
new file mode 100644
index 0000000..8ffc30e
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/calc_clear_symbol.png
Binary files differ
diff --git a/res/drawable-xlarge-hdpi/calculator_input_field.9.png b/res/drawable-xlarge-hdpi/calculator_input_field.9.png
new file mode 100644
index 0000000..555873c
--- /dev/null
+++ b/res/drawable-xlarge-hdpi/calculator_input_field.9.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/calc_clear_symbol.png b/res/drawable-xlarge-mdpi/calc_clear_symbol.png
new file mode 100644
index 0000000..60dfecc
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/calc_clear_symbol.png
Binary files differ
diff --git a/res/drawable-xlarge-mdpi/calculator_input_field.9.png b/res/drawable-xlarge-mdpi/calculator_input_field.9.png
new file mode 100644
index 0000000..679d4c8
--- /dev/null
+++ b/res/drawable-xlarge-mdpi/calculator_input_field.9.png
Binary files differ
diff --git a/res/drawable/btn_digit.xml b/res/drawable/btn_digit.xml
new file mode 100644
index 0000000..2f91721
--- /dev/null
+++ b/res/drawable/btn_digit.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<selector
+    xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item
+        android:state_pressed="true"
+        android:drawable="@drawable/btn_keyboard_key_light_pressed_holo" />
+    <item
+        android:drawable="@drawable/btn_keyboard_key_light_normal_holo" />
+</selector>
diff --git a/res/drawable/btn_function.xml b/res/drawable/btn_function.xml
new file mode 100644
index 0000000..25a3e66
--- /dev/null
+++ b/res/drawable/btn_function.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<selector
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_pressed="true"
+        android:drawable="@drawable/btn_keyboard_key_dark_pressed_holo" />
+    <item
+        android:drawable="@drawable/btn_keyboard_key_dark_normal_holo" />
+</selector>
diff --git a/res/layout-land/main.xml b/res/layout-land/main.xml
index b38e961..42682be 100644
--- a/res/layout-land/main.xml
+++ b/res/layout-land/main.xml
@@ -34,24 +34,38 @@
                  android:layout_width="0dp"
                  android:layout_weight="5"
                  android:layout_height="match_parent"
-                 >
+                 maxDigits="12">
 
                 <EditText style="@style/display_style" />                
                 <EditText style="@style/display_style" />
                 
             </com.android.calculator2.CalculatorDisplay>
 
-        <com.android.calculator2.ColorButton
-             android:id="@+id/del"
-             android:text="@string/clear"
-             android:layout_width="0dp"
-             android:layout_weight="1"
-             android:layout_height="match_parent"
-             android:textColor="#ffffffff"
-             android:layout_marginRight="0dp"
-             android:textSize="15dp"
-             style="@style/button_style"
-             />
+        <FrameLayout
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="match_parent">
+            <!-- marginRight has to be 0 to catch border-touch -->
+            <com.android.calculator2.ColorButton
+                 android:id="@+id/clear"
+                 android:text="@string/clear"
+                 android:layout_width="match_parent"
+                 android:layout_height="match_parent"
+                 android:layout_marginRight="0dp"
+                 android:textSize="15dp"
+                 style="@style/button_style"
+                 />
+            <!-- marginRight has to be 0 to catch border-touch -->
+            <com.android.calculator2.ColorButton
+                 android:id="@+id/del"
+                 android:text="@string/del"
+                 android:layout_width="match_parent"
+                 android:layout_height="match_parent"
+                 android:layout_marginRight="0dp"
+                 android:textSize="15dp"
+                 style="@style/button_style"
+                 />
+        </FrameLayout>
     </LinearLayout>
 
     <com.android.calculator2.PanelSwitcher
diff --git a/res/layout-port/main.xml b/res/layout-port/main.xml
index 75317dd..eea3ef8 100644
--- a/res/layout-port/main.xml
+++ b/res/layout-port/main.xml
@@ -29,6 +29,7 @@
                  android:layout_width="match_parent"
                  android:layout_height="0dp"
                  android:layout_weight="1"
+                 maxDigits="8"
                  >
 
                 <EditText style="@style/display_style" />
@@ -63,18 +64,33 @@
                 android:layout_height="match_parent"
                 android:layout_weight="3"
                 />
-                        
+
+        <FrameLayout
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="match_parent">
             <!-- marginRight has to be 0 to catch border-touch -->
             <com.android.calculator2.ColorButton
-                 android:id="@+id/del"
+                 android:id="@+id/clear"
                  android:text="@string/clear"
-                 android:layout_width="0dp"
-                 android:layout_weight="1"
+                 android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:layout_marginRight="0dp"
                  android:textSize="15dp"
                  style="@style/button_style"
                  />
+            <!-- marginRight has to be 0 to catch border-touch -->
+            <com.android.calculator2.ColorButton
+                 android:id="@+id/del"
+                 android:text="@string/del"
+                 android:layout_width="match_parent"
+                 android:layout_height="match_parent"
+                 android:layout_marginRight="0dp"
+                 android:textSize="15dp"
+                 style="@style/button_style"
+                 />
+        </FrameLayout>
+
 	</LinearLayout>
 
         <LinearLayout
diff --git a/res/layout-xlarge-land/main.xml b/res/layout-xlarge-land/main.xml
new file mode 100644
index 0000000..9e21630
--- /dev/null
+++ b/res/layout-xlarge-land/main.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2011, 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.
+ */
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#ff000000"
+    android:paddingLeft="48dip"
+    android:paddingRight="48dip"
+    android:paddingTop="48dip"
+    android:paddingBottom="48dip">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:layout_marginBottom="48dip"
+        android:background="@drawable/calculator_input_field">
+
+        <com.android.calculator2.CalculatorDisplay
+            android:id="@+id/display"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="match_parent"
+            maxDigits="14"
+            >
+
+            <com.android.calculator2.CalculatorEditText
+                style="@style/display_style" />
+            <com.android.calculator2.CalculatorEditText
+                style="@style/display_style" />
+
+        </com.android.calculator2.CalculatorDisplay>
+
+        <FrameLayout
+            android:layout_width="160dip"
+            android:layout_height="match_parent">
+            <Button
+                android:id="@+id/clear"
+                android:text="@string/clear"
+                style="@style/btn_clear"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingLeft="5dip"
+                android:paddingRight="5dip" />
+            <ImageButton
+                android:id="@+id/del"
+                android:src="@drawable/calc_clear_symbol"
+                style="@style/btn_clear"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingLeft="5dip"
+                android:paddingRight="5dip" />
+        </FrameLayout>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dip"
+        android:layout_weight="4"
+        android:orientation="horizontal">
+
+        <LinearLayout
+            android:layout_width="0dip"
+            android:layout_height="match_parent"
+            android:layout_weight="2"
+            android:orientation="vertical"
+            android:layout_marginRight="64dip">
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/sin"
+                    android:text="@string/sin"
+                    style="@style/btn_function_cell_style" />
+                <Button
+                    android:id="@+id/ln"
+                    android:text="@string/ln"
+                    style="@style/btn_function_cell_style" />
+            </LinearLayout>
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/cos"
+                    android:text="@string/cos"
+                    style="@style/btn_function_cell_style" />
+                <Button
+                    android:id="@+id/lg"
+                    android:text="@string/lg"
+                    style="@style/btn_function_cell_style" />
+            </LinearLayout>
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/tan"
+                    android:text="@string/tan"
+                    style="@style/btn_function_cell_style" />
+                <Button
+                    android:id="@+id/e"
+                    android:text="@string/e"
+                    style="@style/btn_function_cell_style" />
+            </LinearLayout>
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/pi"
+                    android:text="@string/pi"
+                    style="@style/btn_function_cell_style" />
+                <Button
+                    android:id="@+id/power"
+                    android:text="@string/power"
+                    style="@style/btn_function_cell_style" />
+            </LinearLayout>
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/factorial"
+                    android:text="@string/factorial"
+                    style="@style/btn_function_cell_style" />
+                <Button
+                    android:id="@+id/sqrt"
+                    android:text="@string/sqrt"
+                    style="@style/btn_function_cell_style" />
+            </LinearLayout>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="0dip"
+            android:layout_height="match_parent"
+            android:layout_weight="5"
+            android:orientation="vertical">
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/digit7"
+                    android:text="@string/digit7"
+                    style="@style/btn_digit_cell_style" />
+                <Button
+                    android:id="@+id/digit8"
+                    android:text="@string/digit8"
+                    style="@style/btn_digit_cell_style" />
+                <Button
+                    android:id="@+id/digit9"
+                    android:text="@string/digit9"
+                    style="@style/btn_digit_cell_style" />
+                <Button
+                    android:id="@+id/div"
+                    android:text="@string/div"
+                    style="@style/btn_operation_cell_style" />
+                <Button
+                    android:id="@+id/leftParen"
+                    android:text="@string/leftParen"
+                    style="@style/btn_operation_cell_style" />
+            </LinearLayout>
+            <LinearLayout
+                style="@style/btn_row_style">
+                <Button
+                    android:id="@+id/digit4"
+                    android:text="@string/digit4"
+                    style="@style/btn_digit_cell_style" />
+                <Button
+                    android:id="@+id/digit5"
+                    android:text="@string/digit5"
+                    style="@style/btn_digit_cell_style" />
+                <Button
+                    android:id="@+id/digit6"
+                    android:text="@string/digit6"
+                    style="@style/btn_digit_cell_style" />
+                <Button
+                    android:id="@+id/mul"
+                    android:text="@string/mul"
+                    style="@style/btn_operation_cell_style" />
+                <Button
+                    android:id="@+id/rightParen"
+                    android:text="@string/rightParen"
+                    style="@style/btn_operation_cell_style" />
+            </LinearLayout>
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="0dip"
+                android:layout_weight="2"
+                android:orientation="horizontal">
+                <LinearLayout
+                    android:layout_width="0dip"
+                    android:layout_height="match_parent"
+                    android:layout_weight="4"
+                    android:orientation="vertical">
+                    <LinearLayout
+                        style="@style/btn_row_style">
+                        <Button
+                            android:id="@+id/digit1"
+                            android:text="@string/digit1"
+                            style="@style/btn_digit_cell_style" />
+                        <Button
+                            android:id="@+id/digit2"
+                            android:text="@string/digit2"
+                            style="@style/btn_digit_cell_style" />
+                        <Button
+                            android:id="@+id/digit3"
+                            android:text="@string/digit3"
+                            style="@style/btn_digit_cell_style" />
+                        <Button
+                            android:id="@+id/minus"
+                            android:text="@string/minus"
+                            style="@style/btn_operation_cell_style" />
+                    </LinearLayout>
+                    <LinearLayout
+                        style="@style/btn_row_style">
+                        <Button
+                            android:id="@+id/digit0"
+                            android:text="@string/digit0"
+                            style="@style/btn_digit_cell_style"
+                            android:layout_weight="2" />
+                        <Button
+                            android:id="@+id/dot"
+                            android:text="@string/dot"
+                            style="@style/btn_digit_cell_style" />
+                        <Button
+                            android:id="@+id/plus"
+                            android:text="@string/plus"
+                            style="@style/btn_operation_cell_style" />
+                    </LinearLayout>
+                </LinearLayout>
+                <Button
+                    android:id="@+id/equal"
+                    android:text="@string/equal"
+                    style="@style/btn_operation_cell_style" />
+            </LinearLayout>
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
diff --git a/res/layout-xlarge/main.xml b/res/layout-xlarge/main.xml
new file mode 100644
index 0000000..e4ba64b
--- /dev/null
+++ b/res/layout-xlarge/main.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2011, 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.
+ */
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#ff000000"
+    android:paddingLeft="32dip"
+    android:paddingRight="32dip"
+    android:paddingTop="64dip"
+    android:paddingBottom="64dip">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:layout_marginBottom="72dip"
+        android:background="@drawable/calculator_input_field">
+
+        <com.android.calculator2.CalculatorDisplay
+            android:id="@+id/display"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="match_parent"
+            maxDigits="12"
+            >
+
+            <com.android.calculator2.CalculatorEditText
+                style="@style/display_style" />
+            <com.android.calculator2.CalculatorEditText
+                style="@style/display_style" />
+
+        </com.android.calculator2.CalculatorDisplay>
+
+        <FrameLayout
+            android:layout_width="160dip"
+            android:layout_height="match_parent">
+            <Button
+                android:id="@+id/clear"
+                android:text="@string/clear"
+                style="@style/btn_clear"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingLeft="5dip"
+                android:paddingRight="5dip" />
+            <ImageButton
+                android:id="@+id/del"
+                android:src="@drawable/calc_clear_symbol"
+                style="@style/btn_clear"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:paddingLeft="5dip"
+                android:paddingRight="5dip" />
+        </FrameLayout>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dip"
+        android:layout_weight="2"
+        android:orientation="vertical"
+        android:layout_marginBottom="72dip">
+
+        <LinearLayout
+            style="@style/btn_row_style">
+            <Button
+                android:id="@+id/sin"
+                android:text="@string/sin"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/cos"
+                android:text="@string/cos"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/tan"
+                android:text="@string/tan"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/pi"
+                android:text="@string/pi"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/factorial"
+                android:text="@string/factorial"
+                style="@style/btn_function_cell_style" />
+        </LinearLayout>
+        <LinearLayout
+            style="@style/btn_row_style">
+            <Button
+                android:id="@+id/ln"
+                android:text="@string/ln"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/lg"
+                android:text="@string/lg"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/e"
+                android:text="@string/e"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/power"
+                android:text="@string/power"
+                style="@style/btn_function_cell_style" />
+            <Button
+                android:id="@+id/sqrt"
+                android:text="@string/sqrt"
+                style="@style/btn_function_cell_style" />
+        </LinearLayout>
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dip"
+        android:layout_weight="5"
+        android:orientation="vertical">
+        <LinearLayout
+            style="@style/btn_row_style">
+            <Button
+                android:id="@+id/digit7"
+                android:text="@string/digit7"
+                style="@style/btn_digit_cell_style" />
+            <Button
+                android:id="@+id/digit8"
+                android:text="@string/digit8"
+                style="@style/btn_digit_cell_style" />
+            <Button
+                android:id="@+id/digit9"
+                android:text="@string/digit9"
+                style="@style/btn_digit_cell_style" />
+            <Button
+                android:id="@+id/div"
+                android:text="@string/div"
+                style="@style/btn_operation_cell_style" />
+            <Button
+                android:id="@+id/leftParen"
+                android:text="@string/leftParen"
+                style="@style/btn_operation_cell_style" />
+        </LinearLayout>
+        <LinearLayout
+            style="@style/btn_row_style">
+            <Button
+                android:id="@+id/digit4"
+                android:text="@string/digit4"
+                style="@style/btn_digit_cell_style" />
+            <Button
+                android:id="@+id/digit5"
+                android:text="@string/digit5"
+                style="@style/btn_digit_cell_style" />
+            <Button
+                android:id="@+id/digit6"
+                android:text="@string/digit6"
+                style="@style/btn_digit_cell_style" />
+            <Button
+                android:id="@+id/mul"
+                android:text="@string/mul"
+                style="@style/btn_operation_cell_style" />
+            <Button
+                android:id="@+id/rightParen"
+                android:text="@string/rightParen"
+                style="@style/btn_operation_cell_style" />
+        </LinearLayout>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="0dip"
+            android:layout_weight="2"
+            android:orientation="horizontal">
+            <LinearLayout
+                android:layout_width="0dip"
+                android:layout_height="match_parent"
+                android:layout_weight="4"
+                android:orientation="vertical">
+                <LinearLayout
+                    style="@style/btn_row_style">
+                    <Button
+                        android:id="@+id/digit1"
+                        android:text="@string/digit1"
+                        style="@style/btn_digit_cell_style" />
+                    <Button
+                        android:id="@+id/digit2"
+                        android:text="@string/digit2"
+                        style="@style/btn_digit_cell_style" />
+                    <Button
+                        android:id="@+id/digit3"
+                        android:text="@string/digit3"
+                        style="@style/btn_digit_cell_style" />
+                    <Button
+                        android:id="@+id/minus"
+                        android:text="@string/minus"
+                        style="@style/btn_operation_cell_style" />
+                </LinearLayout>
+                <LinearLayout
+                    style="@style/btn_row_style">
+                    <Button
+                        android:id="@+id/digit0"
+                        android:text="@string/digit0"
+                        style="@style/btn_digit_cell_style"
+                        android:layout_weight="2" />
+                    <Button
+                        android:id="@+id/dot"
+                        android:text="@string/dot"
+                        style="@style/btn_digit_cell_style" />
+                    <Button
+                        android:id="@+id/plus"
+                        android:text="@string/plus"
+                        style="@style/btn_operation_cell_style" />
+                </LinearLayout>
+            </LinearLayout>
+            <Button
+                android:id="@+id/equal"
+                android:text="@string/equal"
+                style="@style/btn_operation_cell_style" />
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
diff --git a/res/mipmap-hdpi/ic_launcher_calculator.png b/res/mipmap-hdpi/ic_launcher_calculator.png
new file mode 100644
index 0000000..00d334a
--- /dev/null
+++ b/res/mipmap-hdpi/ic_launcher_calculator.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_calculator.png b/res/mipmap-mdpi/ic_launcher_calculator.png
new file mode 100644
index 0000000..fde519a
--- /dev/null
+++ b/res/mipmap-mdpi/ic_launcher_calculator.png
Binary files differ
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7d6d70d..c63c243 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"حذف"</string>
-    <string name="clear" msgid="895929542545793094">"محو"</string>
+    <string name="clear" msgid="8103610981407459768">"محو"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"اللوحة الأساسية"</string>
     <string name="advanced" msgid="7122495413742976492">"اللوحة المتقدمة"</string>
     <string name="clear_history" msgid="8458043980601165012">"محو السجل"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"تم نسخ النص"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 95d7657..1ce7bb9 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ИЗТРИВАНЕ"</string>
-    <string name="clear" msgid="895929542545793094">"ИЗЧИСТВАНЕ"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Основен панел"</string>
     <string name="advanced" msgid="7122495413742976492">"Разширен панел"</string>
     <string name="clear_history" msgid="8458043980601165012">"Изчистване на историята"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Текстът е копиран"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 09f9fa5..86d119f 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"SUPRIMEIX"</string>
-    <string name="clear" msgid="895929542545793094">"ESBORRA"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Tauler bàsic"</string>
     <string name="advanced" msgid="7122495413742976492">"Tauler avançat"</string>
     <string name="clear_history" msgid="8458043980601165012">"Esborra l\'historial"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Text copiat"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index ef68c53..06d6faa 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"SMAZAT"</string>
-    <string name="clear" msgid="895929542545793094">"VYMAZAT"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Základní funkce"</string>
     <string name="advanced" msgid="7122495413742976492">"Pokročilé funkce"</string>
     <string name="clear_history" msgid="8458043980601165012">"Vymazat historii"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Text zkopírován"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index f8b7417..8ee4df6 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"SLET"</string>
-    <string name="clear" msgid="895929542545793094">"RYD"</string>
+    <string name="clear" msgid="8103610981407459768">"RYD"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Grundlæggende panel"</string>
     <string name="advanced" msgid="7122495413742976492">"Avanceret panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"Ryd oversigt"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Kopieret tekst"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index c0a8c1d..c7286f3 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"Entfernen"</string>
-    <string name="clear" msgid="895929542545793094">"C"</string>
+    <string name="clear" msgid="8103610981407459768">"Entf."</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Grundfunktionen"</string>
     <string name="advanced" msgid="7122495413742976492">"Erweiterte Funktionen"</string>
     <string name="clear_history" msgid="8458043980601165012">"Verlauf löschen"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Text kopiert"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 3245b12..bc01dc0 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"DELETE"</string>
-    <string name="clear" msgid="895929542545793094">"CLEAR"</string>
+    <string name="clear" msgid="8103610981407459768">"ΔΙΑΓΡ."</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Πίνακας βασικών πράξεων"</string>
     <string name="advanced" msgid="7122495413742976492">"Πίνακας σύνθετων συναρτήσεων"</string>
     <string name="clear_history" msgid="8458043980601165012">"Εκκαθάριση ιστορικού"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Το κείμενο αντιγράφηκε"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index af91650..805e73c 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"DELETE"</string>
-    <string name="clear" msgid="895929542545793094">"CLEAR"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Basic panel"</string>
     <string name="advanced" msgid="7122495413742976492">"Advanced panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"Clear history"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Text copied"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 7bd2fc9..11b83c4 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ELIMINAR"</string>
-    <string name="clear" msgid="895929542545793094">"BORRAR"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sen"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Panel básico"</string>
     <string name="advanced" msgid="7122495413742976492">"Panel avanzado"</string>
     <string name="clear_history" msgid="8458043980601165012">"Borrar historial"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Texto copiado"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 7d5fb95..fe464cc 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ELIMINAR"</string>
-    <string name="clear" msgid="895929542545793094">"BORRAR"</string>
+    <string name="clear" msgid="8103610981407459768">"BORRAR"</string>
     <string name="sin" msgid="6793866152659175277">"sen"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Panel de funciones básicas"</string>
     <string name="advanced" msgid="7122495413742976492">"Panel de funciones avanzadas"</string>
     <string name="clear_history" msgid="8458043980601165012">"Borrar historial"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Se ha copiado el texto."</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 33e4029..eb8e2fc 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"حذف"</string>
-    <string name="clear" msgid="895929542545793094">"پاک کردن"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"برنزه"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"پانل اصلی"</string>
     <string name="advanced" msgid="7122495413742976492">"پانل پیشرفته"</string>
     <string name="clear_history" msgid="8458043980601165012">"پاک کردن سابقه"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"متن کپی شده"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 46c1c2b..8eadcdf 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"POISTA"</string>
-    <string name="clear" msgid="895929542545793094">"TYHJENNÄ"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Perustoiminnot"</string>
     <string name="advanced" msgid="7122495413742976492">"Lisätoiminnot"</string>
     <string name="clear_history" msgid="8458043980601165012">"Tyhjennä historia"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Teksti kopioitu"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 1d53bbf..92bc9de 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"SUPPRIMER"</string>
-    <string name="clear" msgid="895929542545793094">"EFF."</string>
+    <string name="clear" msgid="8103610981407459768">"EFF."</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Panneau de base"</string>
     <string name="advanced" msgid="7122495413742976492">"Fonctions avancées"</string>
     <string name="clear_history" msgid="8458043980601165012">"Effacer l\'historique"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Texte copié"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 73f44b2..253ce5c 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"IZBRIŠI"</string>
-    <string name="clear" msgid="895929542545793094">"OČISTI"</string>
+    <string name="clear" msgid="8103610981407459768">"Briši"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Ploča Osnovno"</string>
     <string name="advanced" msgid="7122495413742976492">"Ploča Napredno"</string>
     <string name="clear_history" msgid="8458043980601165012">"Izbriši povijest"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Tekst kopiran"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 723042c..05ae74b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"TÖRLÉS"</string>
-    <string name="clear" msgid="895929542545793094">"MINDENT TÖRÖL"</string>
+    <string name="clear" msgid="8103610981407459768">"Törlés"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Alappanel"</string>
     <string name="advanced" msgid="7122495413742976492">"Speciális panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"Előzmények törlése"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Másolt szöveg"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 36303fd..2c70699 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"DELETE"</string>
-    <string name="clear" msgid="895929542545793094">"CLEAR"</string>
+    <string name="clear" msgid="8103610981407459768">"HAPUS"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Panel dasar"</string>
     <string name="advanced" msgid="7122495413742976492">"Panel lanjutan"</string>
     <string name="clear_history" msgid="8458043980601165012">"Hapus riwayat"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Teks disalin"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index ff5da74..98291c4 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ELIMINA"</string>
-    <string name="clear" msgid="895929542545793094">"CANC"</string>
+    <string name="clear" msgid="8103610981407459768">"CANC"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Pannello base"</string>
     <string name="advanced" msgid="7122495413742976492">"Pannello avanzato"</string>
     <string name="clear_history" msgid="8458043980601165012">"Cancella cronologia"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Testo copiato"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 2a4996b..fb1493d 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"מחק"</string>
-    <string name="clear" msgid="895929542545793094">"נקה"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"חלונית בסיסית"</string>
     <string name="advanced" msgid="7122495413742976492">"חלונית \'מתקדם\'"</string>
     <string name="clear_history" msgid="8458043980601165012">"נקה היסטוריה"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"טקסט שהועתק"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 4882d6b..cec99e5 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"削除"</string>
-    <string name="clear" msgid="895929542545793094">"CLEAR"</string>
+    <string name="clear" msgid="8103610981407459768">"消去"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"標準機能"</string>
     <string name="advanced" msgid="7122495413742976492">"関数機能"</string>
     <string name="clear_history" msgid="8458043980601165012">"履歴消去"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"テキストをコピーしました"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 1ade1fd..173dcb8 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"삭제"</string>
-    <string name="clear" msgid="895929542545793094">"지우기"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"기본 패널"</string>
     <string name="advanced" msgid="7122495413742976492">"고급 패널"</string>
     <string name="clear_history" msgid="8458043980601165012">"기록 지우기"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"텍스트 복사됨"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 6e9197f..001ffea 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"IŠTRINTI"</string>
-    <string name="clear" msgid="895929542545793094">"IŠVALYTI"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Pagrindinis skydelis"</string>
     <string name="advanced" msgid="7122495413742976492">"Išplėstinis skydelis"</string>
     <string name="clear_history" msgid="8458043980601165012">"Išvalyti istoriją"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Tekstas nukopijuotas"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 0c6a27b..3b5a722 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"DZĒST"</string>
-    <string name="clear" msgid="895929542545793094">"NOTĪRĪT"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Pamata panelis"</string>
     <string name="advanced" msgid="7122495413742976492">"Izvērsts panelis"</string>
     <string name="clear_history" msgid="8458043980601165012">"Notīrīt vēsturi"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Teksts ir nokopēts."</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 969fe6f..607b16e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"SLETT"</string>
-    <string name="clear" msgid="895929542545793094">"RYDD"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Grunnleggende panel"</string>
     <string name="advanced" msgid="7122495413742976492">"Avansert panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"Tøm logg"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Tekst kopiert"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index fc6bfb0..ac11fca 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"VERWIJDEREN"</string>
-    <string name="clear" msgid="895929542545793094">"WISSEN"</string>
+    <string name="clear" msgid="8103610981407459768">"WISSEN"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Basis"</string>
     <string name="advanced" msgid="7122495413742976492">"Geavanceerd"</string>
     <string name="clear_history" msgid="8458043980601165012">"Geschiedenis wissen"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Tekst gekopieerd"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index bac7970..2f35256 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"USUŃ"</string>
-    <string name="clear" msgid="895929542545793094">"USUŃ"</string>
+    <string name="clear" msgid="8103610981407459768">"CZYŚĆ"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tg"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Panel podstawowy"</string>
     <string name="advanced" msgid="7122495413742976492">"Panel zaawansowany"</string>
     <string name="clear_history" msgid="8458043980601165012">"Wyczyść historię"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Tekst skopiowany"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index a339625..0d48269 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ELIMINAR"</string>
-    <string name="clear" msgid="895929542545793094">"LIMPAR"</string>
+    <string name="clear" msgid="8103610981407459768">"LIMPAR"</string>
     <string name="sin" msgid="6793866152659175277">"sen"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Painel básico"</string>
     <string name="advanced" msgid="7122495413742976492">"Painel avançado"</string>
     <string name="clear_history" msgid="8458043980601165012">"Limpar histórico"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Texto copiado"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 227ff99..c98af2c 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"EXCLUIR"</string>
-    <string name="clear" msgid="895929542545793094">"LIMPAR"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Painel básico"</string>
     <string name="advanced" msgid="7122495413742976492">"Painel avançado"</string>
     <string name="clear_history" msgid="8458043980601165012">"Limpar histórico"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Texto copiado"</string>
 </resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 9ccd664..3e5ea0e 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"C"</string>
-    <string name="clear" msgid="895929542545793094">"AC"</string>
+    <!-- outdated translation 895929542545793094 -->     <string name="clear" msgid="8103610981407459768">"AC"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,6 @@
     <string name="basic" msgid="7691469861698059753">"Funcziuns da basa"</string>
     <string name="advanced" msgid="7122495413742976492">"Funcziuns avanzadas"</string>
     <string name="clear_history" msgid="8458043980601165012">"Stizzar la cronologia"</string>
+    <!-- no translation found for text_copied_toast (8283471249866321961) -->
+    <skip />
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index f473eb4..4bc1c0f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ŞTERGEŢI"</string>
-    <string name="clear" msgid="895929542545793094">"GOLIŢI"</string>
+    <string name="clear" msgid="8103610981407459768">"ŞTERGE"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tg"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Panou de bază"</string>
     <string name="advanced" msgid="7122495413742976492">"Panou avansat"</string>
     <string name="clear_history" msgid="8458043980601165012">"Ştergeţi istoricul"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Text copiat"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 8d9807e..910248b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"Удалить"</string>
-    <string name="clear" msgid="895929542545793094">"СБРОС"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Основная панель"</string>
     <string name="advanced" msgid="7122495413742976492">"Дополнительная панель"</string>
     <string name="clear_history" msgid="8458043980601165012">"Очистить историю"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Текст скопирован"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7d7bed3..568c484 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ODSTRÁNIŤ"</string>
-    <string name="clear" msgid="895929542545793094">"VYMAZAŤ"</string>
+    <string name="clear" msgid="8103610981407459768">"Vymaz."</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Základné funkcie"</string>
     <string name="advanced" msgid="7122495413742976492">"Rozšírené funkcie"</string>
     <string name="clear_history" msgid="8458043980601165012">"Vymazať históriu"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Text bol skopírovaný"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 63a8621..5e6c0b7 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"IZBRIŠI"</string>
-    <string name="clear" msgid="895929542545793094">"POČISTI"</string>
+    <string name="clear" msgid="8103610981407459768">"IZBRIS"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Osnovna plošča"</string>
     <string name="advanced" msgid="7122495413742976492">"Plošča z dodatnimi nastavitvami"</string>
     <string name="clear_history" msgid="8458043980601165012">"Počisti zgodovino"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Besedilo kopirano"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 922be6a..2c73f98 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ИЗБРИШИ"</string>
-    <string name="clear" msgid="895929542545793094">"ОБРИШИ"</string>
+    <string name="clear" msgid="8103610981407459768">"ОБРИШИ"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Основна табла"</string>
     <string name="advanced" msgid="7122495413742976492">"Напредна табла"</string>
     <string name="clear_history" msgid="8458043980601165012">"Обриши историју"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Текст је копиран"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 26126a4..490c675 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"RADERA"</string>
-    <string name="clear" msgid="895929542545793094">"RENSA"</string>
+    <string name="clear" msgid="8103610981407459768">"Rensa"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Standardpanel"</string>
     <string name="advanced" msgid="7122495413742976492">"Avancerad panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"Rensa historik"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Texten har kopierats"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 33fa2a0..5774351 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"DELETE"</string>
-    <string name="clear" msgid="895929542545793094">"ล้าง"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"แผงควบคุมพื้นฐาน"</string>
     <string name="advanced" msgid="7122495413742976492">"แผงควบคุมขั้นสูง"</string>
     <string name="clear_history" msgid="8458043980601165012">"ล้างประวัติ"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"คัดลอกข้อความแล้ว"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 6d9a08f..c1bfcf4 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"TANGGALIN"</string>
-    <string name="clear" msgid="895929542545793094">"I-CLEAR"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Pangunahing panel"</string>
     <string name="advanced" msgid="7122495413742976492">"Advanced na panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"I-clear ang kasaysayan"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Kinopya ang teksto"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index f984904..3edd987 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"SİL"</string>
-    <string name="clear" msgid="895929542545793094">"TEMİZLE"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Ana panel"</string>
     <string name="advanced" msgid="7122495413742976492">"Gelişmiş panel"</string>
     <string name="clear_history" msgid="8458043980601165012">"Geçmişi temizle"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Metin kopyalandı"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 5c5cdb7..aaba7dc 100755
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"ВИДАЛИТИ"</string>
-    <string name="clear" msgid="895929542545793094">"ОЧИСТИТИ"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tg"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Основна панель"</string>
     <string name="advanced" msgid="7122495413742976492">"Розширена панель"</string>
     <string name="clear_history" msgid="8458043980601165012">"Очистити історію"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Текст скопійовано"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 7ada2c7..3606b1f 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"XOÁ"</string>
-    <string name="clear" msgid="895929542545793094">"XOÁ"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"Bảng điều khiển cơ bản"</string>
     <string name="advanced" msgid="7122495413742976492">"Bảng điều khiển nâng cao"</string>
     <string name="clear_history" msgid="8458043980601165012">"Xoá lịch sử"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"Đã sao chép văn bản"</string>
 </resources>
diff --git a/res/values-xlarge/styles.xml b/res/values-xlarge/styles.xml
new file mode 100644
index 0000000..9dd6b4e
--- /dev/null
+++ b/res/values-xlarge/styles.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+<resources>
+    <dimen name="btn_digit_text_size">64sp</dimen>
+    <dimen name="btn_operation_text_size">64sp</dimen>
+    <dimen name="btn_function_text_size">32sp</dimen>
+    <dimen name="btn_clear_text_size">48sp</dimen>
+    <dimen name="display_text_size">72sp</dimen>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index f96ef78..eee4624 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"删除"</string>
-    <string name="clear" msgid="895929542545793094">"清除"</string>
+    <string name="clear" msgid="8103610981407459768">"清除"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"基本面板"</string>
     <string name="advanced" msgid="7122495413742976492">"高级面板"</string>
     <string name="clear_history" msgid="8458043980601165012">"清除历史记录"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"文本已复制"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 439c209..8b09b24 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -29,7 +29,7 @@
     <string name="digit8" msgid="3134686906411558886">"8"</string>
     <string name="digit9" msgid="765379157698748031">"9"</string>
     <string name="del" msgid="6248896117422989693">"刪除"</string>
-    <string name="clear" msgid="895929542545793094">"清除"</string>
+    <string name="clear" msgid="8103610981407459768">"CLR"</string>
     <string name="sin" msgid="6793866152659175277">"sin"</string>
     <string name="cos" msgid="6901841853098114414">"cos"</string>
     <string name="tan" msgid="7957459816738554960">"tan"</string>
@@ -41,4 +41,5 @@
     <string name="basic" msgid="7691469861698059753">"基本面板"</string>
     <string name="advanced" msgid="7122495413742976492">"進階面板"</string>
     <string name="clear_history" msgid="8458043980601165012">"清除記錄"</string>
+    <string name="text_copied_toast" msgid="8283471249866321961">"文字已複製"</string>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 76807d5..6d64e7c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -41,8 +41,8 @@
     <string name="digit9">9</string>
     <!-- Button name on screen to delete the last entered digit or operator -->
     <string name="del">DELETE</string>
-    <!-- Button name on screen to clear the entire calculation field -->
-    <string name="clear">CLEAR</string>
+    <!-- Button name on screen to clear the entire calculation field. [CHAR LIMIT=6] -->
+    <string name="clear">CLR</string>
     <!-- Do not translate. Unicode division sign; don't translate. Displayed as button on screen. -->
     <string name="div">\u00f7</string>
     <!-- Do not translate. Unicode multiplication sign; don't translate. Displayed as button on screen. -->
@@ -88,4 +88,6 @@
     <string name="advanced">Advanced panel</string>
     <!-- Menu item text to clear the calculation history. -->
     <string name="clear_history">Clear history</string>
+    <!-- Toast shown when text is copied to the clipboard. -->
+    <string name="text_copied_toast">Text copied</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 9eac97d..b41cb07 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -1,5 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2007 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.
+-->
 <resources>
+    <dimen name="btn_digit_text_size">40sp</dimen>
+    <dimen name="btn_operation_text_size">40sp</dimen>
+    <dimen name="btn_function_text_size">30sp</dimen>
+    <dimen name="btn_clear_text_size">30sp</dimen>
+    <dimen name="display_text_size">30sp</dimen>
+
     <style name="button_style">
        <item name="android:textSize">40dp</item>
        <item name="android:layout_width">match_parent</item>
@@ -19,7 +39,8 @@
     </style>
 
     <style name="display_style">
-       <item name="android:textSize">40dp</item>
+       <item name="android:textSize">@dimen/display_text_size</item>
+       <item name="android:inputType">text</item>
        <item name="android:gravity">right|center_vertical</item>
        <item name="android:textColor">#ffffff</item>
        <item name="android:maxLines">1</item>
@@ -29,4 +50,40 @@
        <item name="android:layout_height">match_parent</item>
        <item name="android:padding">8dp</item>
     </style>
+
+    <style name="btn_row_style">
+       <item name="android:layout_width">match_parent</item>
+       <item name="android:layout_height">0dip</item>
+       <item name="android:layout_weight">1</item>
+       <item name="android:orientation">horizontal</item>
+    </style>
+
+    <style name="btn_function_cell_style">
+       <item name="android:layout_width">0dip</item>
+       <item name="android:layout_weight">1</item>
+       <item name="android:layout_height">match_parent</item>
+       <item name="android:background">@drawable/btn_function</item>
+       <item name="android:textSize">@dimen/btn_function_text_size</item>
+    </style>
+
+    <style name="btn_operation_cell_style">
+       <item name="android:layout_width">0dip</item>
+       <item name="android:layout_weight">1</item>
+       <item name="android:layout_height">match_parent</item>
+       <item name="android:background">@drawable/btn_function</item>
+       <item name="android:textSize">@dimen/btn_operation_text_size</item>
+    </style>
+
+    <style name="btn_digit_cell_style">
+       <item name="android:layout_width">0dip</item>
+       <item name="android:layout_weight">1</item>
+       <item name="android:layout_height">match_parent</item>
+       <item name="android:background">@drawable/btn_digit</item>
+       <item name="android:textSize">@dimen/btn_digit_text_size</item>
+    </style>
+
+    <style name="btn_clear">
+       <item name="android:background">?android:attr/selectableItemBackground</item>
+       <item name="android:textSize">@dimen/btn_clear_text_size</item>
+    </style>
 </resources>
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index 768a317..c7227fa 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -18,31 +18,27 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.util.Log;
 import android.util.Config;
-import android.util.TypedValue;
-import android.view.Display;
+import android.util.Log;
+import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.KeyEvent;
-import android.widget.Button;
-import android.widget.TextView;
 
-public class Calculator extends Activity {
+public class Calculator extends Activity implements PanelSwitcher.Listener, Logic.Listener {
     EventListener mListener = new EventListener();
     private CalculatorDisplay mDisplay;
     private Persist mPersist;
     private History mHistory;
     private Logic mLogic;
     private PanelSwitcher mPanelSwitcher;
+    private View mClearButton;
+    private View mBackspaceButton;
 
     private static final int CMD_CLEAR_HISTORY  = 1;
     private static final int CMD_BASIC_PANEL    = 2;
     private static final int CMD_ADVANCED_PANEL = 3;
 
-    private static final int HVGA_WIDTH_PIXELS  = 320;
-
     static final int BASIC_PANEL    = 0;
     static final int ADVANCED_PANEL = 1;
 
@@ -58,59 +54,116 @@
         setContentView(R.layout.main);
 
         mPersist = new Persist(this);
+        mPersist.load();
+
         mHistory = mPersist.history;
 
         mDisplay = (CalculatorDisplay) findViewById(R.id.display);
 
-        mLogic = new Logic(this, mHistory, mDisplay, (Button) findViewById(R.id.equal));
+        mClearButton = findViewById(R.id.clear);
+        mClearButton.setOnClickListener(mListener);
+        mClearButton.setOnLongClickListener(mListener);
+
+        mBackspaceButton = findViewById(R.id.del);
+        mBackspaceButton.setOnClickListener(mListener);
+        mBackspaceButton.setOnLongClickListener(mListener);
+
+        mLogic = new Logic(this, mHistory, mDisplay);
+        mLogic.setListener(this);
+
+        mLogic.setDeleteMode(mPersist.getDeleteMode());
+        mLogic.setLineLength(mDisplay.getMaxDigits());
+
         HistoryAdapter historyAdapter = new HistoryAdapter(this, mHistory, mLogic);
         mHistory.setObserver(historyAdapter);
 
         mPanelSwitcher = (PanelSwitcher) findViewById(R.id.panelswitch);
-        mPanelSwitcher.setCurrentIndex(state==null ? 0 : state.getInt(STATE_CURRENT_VIEW, 0));
+        if (mPanelSwitcher != null) {
+            mPanelSwitcher.setCurrentIndex(state==null ? 0 : state.getInt(STATE_CURRENT_VIEW, 0));
+            mPanelSwitcher.setListener(this);
+        }
 
         mListener.setHandler(mLogic, mPanelSwitcher);
-
         mDisplay.setOnKeyListener(mListener);
 
-        View view;
-        if ((view = findViewById(R.id.del)) != null) {
-//            view.setOnClickListener(mListener);
-            view.setOnLongClickListener(mListener);
+        setOnClickListener(R.id.digit0);
+        setOnClickListener(R.id.digit1);
+        setOnClickListener(R.id.digit2);
+        setOnClickListener(R.id.digit3);
+        setOnClickListener(R.id.digit4);
+        setOnClickListener(R.id.digit5);
+        setOnClickListener(R.id.digit6);
+        setOnClickListener(R.id.digit7);
+        setOnClickListener(R.id.digit8);
+        setOnClickListener(R.id.digit9);
+        setOnClickListener(R.id.dot);
+
+        setOnClickListener(R.id.plus);
+        setOnClickListener(R.id.minus);
+        setOnClickListener(R.id.div);
+        setOnClickListener(R.id.mul);
+        setOnClickListener(R.id.leftParen);
+        setOnClickListener(R.id.rightParen);
+        setOnClickListener(R.id.equal);
+
+        setOnClickListener(R.id.sin);
+        setOnClickListener(R.id.ln);
+        setOnClickListener(R.id.cos);
+        setOnClickListener(R.id.lg);
+        setOnClickListener(R.id.tan);
+        setOnClickListener(R.id.e);
+        setOnClickListener(R.id.pi);
+        setOnClickListener(R.id.power);
+        setOnClickListener(R.id.factorial);
+        setOnClickListener(R.id.sqrt);
+
+        mLogic.resumeWithHistory();
+        updateDeleteMode();
+    }
+
+    private void updateDeleteMode() {
+        if (mLogic.getDeleteMode() == Logic.DELETE_MODE_BACKSPACE) {
+            mClearButton.setVisibility(View.GONE);
+            mBackspaceButton.setVisibility(View.VISIBLE);
+        } else {
+            mClearButton.setVisibility(View.VISIBLE);
+            mBackspaceButton.setVisibility(View.GONE);
         }
-        /*
-        if ((view = findViewById(R.id.clear)) != null) {
-            view.setOnClickListener(mListener);
-        }
-        */
+    }
+
+    private void setOnClickListener(int id) {
+        findViewById(id).setOnClickListener(mListener);
     }
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
         MenuItem item;
-        
+
         item = menu.add(0, CMD_CLEAR_HISTORY, 0, R.string.clear_history);
+        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
         item.setIcon(R.drawable.clear_history);
-        
+
         item = menu.add(0, CMD_ADVANCED_PANEL, 0, R.string.advanced);
+        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
         item.setIcon(R.drawable.advanced);
-        
+
         item = menu.add(0, CMD_BASIC_PANEL, 0, R.string.basic);
+        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
         item.setIcon(R.drawable.simple);
 
         return true;
     }
-    
+
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         super.onPrepareOptionsMenu(menu);
-        menu.findItem(CMD_BASIC_PANEL).setVisible(mPanelSwitcher != null && 
+        menu.findItem(CMD_BASIC_PANEL).setVisible(mPanelSwitcher != null &&
                           mPanelSwitcher.getCurrentIndex() == ADVANCED_PANEL);
-        
-        menu.findItem(CMD_ADVANCED_PANEL).setVisible(mPanelSwitcher != null && 
+
+        menu.findItem(CMD_ADVANCED_PANEL).setVisible(mPanelSwitcher != null &&
                           mPanelSwitcher.getCurrentIndex() == BASIC_PANEL);
-        
+
         return true;
     }
 
@@ -122,14 +175,14 @@
             break;
 
         case CMD_BASIC_PANEL:
-            if (mPanelSwitcher != null && 
+            if (mPanelSwitcher != null &&
                 mPanelSwitcher.getCurrentIndex() == ADVANCED_PANEL) {
                 mPanelSwitcher.moveRight();
             }
             break;
 
         case CMD_ADVANCED_PANEL:
-            if (mPanelSwitcher != null && 
+            if (mPanelSwitcher != null &&
                 mPanelSwitcher.getCurrentIndex() == BASIC_PANEL) {
                 mPanelSwitcher.moveLeft();
             }
@@ -141,20 +194,23 @@
     @Override
     protected void onSaveInstanceState(Bundle state) {
         super.onSaveInstanceState(state);
-        state.putInt(STATE_CURRENT_VIEW, mPanelSwitcher.getCurrentIndex());
+        if (mPanelSwitcher != null) {
+            state.putInt(STATE_CURRENT_VIEW, mPanelSwitcher.getCurrentIndex());
+        }
     }
 
     @Override
     public void onPause() {
         super.onPause();
         mLogic.updateHistory();
+        mPersist.setDeleteMode(mLogic.getDeleteMode());
         mPersist.save();
     }
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
-        if (keyCode == KeyEvent.KEYCODE_BACK 
-            && mPanelSwitcher.getCurrentIndex() == ADVANCED_PANEL) {
+        if (keyCode == KeyEvent.KEYCODE_BACK
+            && mPanelSwitcher != null && mPanelSwitcher.getCurrentIndex() == ADVANCED_PANEL) {
             mPanelSwitcher.moveRight();
             return true;
         } else {
@@ -168,16 +224,13 @@
         }
     }
 
-    /**
-     * The font sizes in the layout files are specified for a HVGA display.
-     * Adjust the font sizes accordingly if we are running on a different
-     * display.
-     */
-    public void adjustFontSize(TextView view) {
-        float fontPixelSize = view.getTextSize();
-        Display display = getWindowManager().getDefaultDisplay();
-        int h = Math.min(display.getWidth(), display.getHeight());
-        float ratio = (float)h/HVGA_WIDTH_PIXELS;
-        view.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontPixelSize*ratio);
+    @Override
+    public void onChange() {
+        invalidateOptionsMenu();
+    }
+
+    @Override
+    public void onDeleteModeChange() {
+        updateDeleteMode();
     }
 }
diff --git a/src/com/android/calculator2/CalculatorDisplay.java b/src/com/android/calculator2/CalculatorDisplay.java
index 130446e..3b48e1d 100644
--- a/src/com/android/calculator2/CalculatorDisplay.java
+++ b/src/com/android/calculator2/CalculatorDisplay.java
@@ -17,66 +17,47 @@
 package com.android.calculator2;
 
 import android.content.Context;
+import android.graphics.Rect;
 import android.text.Editable;
 import android.text.Spanned;
 import android.text.method.NumberKeyListener;
 import android.util.AttributeSet;
 import android.view.animation.TranslateAnimation;
-import android.text.InputType;
+import android.view.inputmethod.EditorInfo;
 import android.widget.EditText;
-import android.widget.TextView;
 import android.widget.ViewSwitcher;
-import android.graphics.Rect;
-import android.graphics.Paint;
 
 /**
  * Provides vertical scrolling for the input/result EditText.
  */
 class CalculatorDisplay extends ViewSwitcher {
+
+    private static final String ATTR_MAX_DIGITS = "maxDigits";
+    private static final int DEFAULT_MAX_DIGITS = 10;
+
     // only these chars are accepted from keyboard
-    private static final char[] ACCEPTED_CHARS = 
+    private static final char[] ACCEPTED_CHARS =
         "0123456789.+-*/\u2212\u00d7\u00f7()!%^".toCharArray();
 
     private static final int ANIM_DURATION = 500;
+
     enum Scroll { UP, DOWN, NONE }
-    
+
     TranslateAnimation inAnimUp;
     TranslateAnimation outAnimUp;
     TranslateAnimation inAnimDown;
     TranslateAnimation outAnimDown;
 
     private Logic mLogic;
-    private boolean mComputedLineLength = false;
-    
+    private int mMaxDigits = DEFAULT_MAX_DIGITS;
+
     public CalculatorDisplay(Context context, AttributeSet attrs) {
         super(context, attrs);
-    }
-    
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        Calculator calc = (Calculator) getContext();
-        calc.adjustFontSize((TextView)getChildAt(0));
-        calc.adjustFontSize((TextView)getChildAt(1));
+        mMaxDigits = attrs.getAttributeIntValue(null, ATTR_MAX_DIGITS, DEFAULT_MAX_DIGITS);
     }
 
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (!mComputedLineLength) {
-            mLogic.setLineLength(getNumberFittingDigits((TextView) getCurrentView()));
-            mComputedLineLength = true;
-        }
-    }
-
-    // compute the maximum number of digits that fit in the
-    // calculator display without scrolling.
-    private int getNumberFittingDigits(TextView display) {
-        int available = display.getWidth()
-            - display.getTotalPaddingLeft() - display.getTotalPaddingRight();
-        Paint paint = display.getPaint();
-        float digitWidth = paint.measureText("2222222222") / 10f;
-        return (int) (available / digitWidth);
+    public int getMaxDigits() {
+        return mMaxDigits;
     }
 
     protected void setLogic(Logic logic) {
@@ -84,14 +65,15 @@
         NumberKeyListener calculatorKeyListener =
             new NumberKeyListener() {
                 public int getInputType() {
-                    // Don't display soft keyboard.
-                    return InputType.TYPE_NULL;
+                    return EditorInfo.TYPE_CLASS_TEXT;
                 }
-            
+
+                @Override
                 protected char[] getAcceptedChars() {
                     return ACCEPTED_CHARS;
                 }
 
+                @Override
                 public CharSequence filter(CharSequence source, int start, int end,
                                            Spanned dest, int dstart, int dend) {
                     /* the EditText should still accept letters (eg. 'sin')
@@ -107,6 +89,7 @@
             text.setBackgroundDrawable(null);
             text.setEditableFactory(factory);
             text.setKeyListener(calculatorKeyListener);
+            text.setSingleLine();
         }
     }
 
@@ -138,45 +121,40 @@
     EditText getEditText() {
         return (EditText) getCurrentView();
     }
-        
+
     Editable getText() {
         EditText text = (EditText) getCurrentView();
         return text.getText();
     }
-    
+
     void setText(CharSequence text, Scroll dir) {
         if (getText().length() == 0) {
             dir = Scroll.NONE;
         }
-        
+
         if (dir == Scroll.UP) {
             setInAnimation(inAnimUp);
-            setOutAnimation(outAnimUp);            
+            setOutAnimation(outAnimUp);
         } else if (dir == Scroll.DOWN) {
             setInAnimation(inAnimDown);
-            setOutAnimation(outAnimDown);            
+            setOutAnimation(outAnimDown);
         } else { // Scroll.NONE
             setInAnimation(null);
             setOutAnimation(null);
         }
-        
+
         EditText editText = (EditText) getNextView();
         editText.setText(text);
         //Calculator.log("selection to " + text.length() + "; " + text);
         editText.setSelection(text.length());
         showNext();
     }
-    
-    void setSelection(int i) {
-        EditText text = (EditText) getCurrentView();
-        text.setSelection(i);
-    }
-    
+
     int getSelectionStart() {
         EditText text = (EditText) getCurrentView();
         return text.getSelectionStart();
     }
-    
+
     @Override
     protected void onFocusChanged(boolean gain, int direction, Rect prev) {
         //Calculator.log("focus " + gain + "; " + direction + "; " + prev);
diff --git a/src/com/android/calculator2/CalculatorEditText.java b/src/com/android/calculator2/CalculatorEditText.java
new file mode 100644
index 0000000..a61ad95
--- /dev/null
+++ b/src/com/android/calculator2/CalculatorEditText.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2010 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.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.graphics.Rect;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.ActionMode;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.Toast;
+
+public class CalculatorEditText extends EditText {
+
+    public CalculatorEditText(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setCustomSelectionActionModeCallback(new NoTextSelectionMode());
+    }
+
+    @Override
+    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
+        super.onFocusChanged(focused, direction, previouslyFocusedRect);
+
+        InputMethodManager imm = ((InputMethodManager) getContext().
+                getSystemService(Context.INPUT_METHOD_SERVICE));
+        if (imm != null && imm.isActive(this)) {
+            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (event.getActionMasked() == MotionEvent.ACTION_UP) {
+            // Hack to prevent keyboard and insertion handle from showing.
+            cancelLongPress();
+        }
+        return super.onTouchEvent(event);
+    }
+
+    @Override
+    public boolean performLongClick() {
+        final Editable text = getText();
+        if (TextUtils.isEmpty(text)) {
+            return false;
+        }
+
+        copyContent();
+        return true;
+    }
+
+    private void copyContent() {
+        final Editable text = getText();
+        setSelection(0, text.length());
+        ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(
+                Context.CLIPBOARD_SERVICE);
+        clipboard.setPrimaryClip(ClipData.newPlainText(null, text));
+        Toast.makeText(getContext(), R.string.text_copied_toast, Toast.LENGTH_SHORT).show();
+    }
+
+    class NoTextSelectionMode implements ActionMode.Callback {
+        @Override
+        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+            return false;
+        }
+
+        @Override
+        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+            copyContent();
+            // Make the selection highlight blink
+            postDelayed(new Runnable() {
+                public void run() {
+                    setSelection(getSelectionEnd());
+                }
+            }, 200);
+            // Prevents the selection action mode on double tap.
+            return false;
+        }
+
+        @Override
+        public void onDestroyActionMode(ActionMode mode) {}
+
+        @Override
+        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+            return false;
+        }
+    }
+}
diff --git a/src/com/android/calculator2/ColorButton.java b/src/com/android/calculator2/ColorButton.java
index c95ea8b..8aa9204 100644
--- a/src/com/android/calculator2/ColorButton.java
+++ b/src/com/android/calculator2/ColorButton.java
@@ -34,13 +34,13 @@
     int CLICK_FEEDBACK_COLOR;
     static final int CLICK_FEEDBACK_INTERVAL = 10;
     static final int CLICK_FEEDBACK_DURATION = 350;
-    
+
     float mTextX;
     float mTextY;
     long mAnimStart;
     OnClickListener mListener;
     Paint mFeedbackPaint;
-    
+
     public ColorButton(Context context, AttributeSet attrs) {
         super(context, attrs);
         Calculator calc = (Calculator) context;
@@ -61,14 +61,12 @@
         mFeedbackPaint.setStyle(Style.STROKE);
         mFeedbackPaint.setStrokeWidth(2);
         getPaint().setColor(res.getColor(R.color.button_text));
-        
-        mAnimStart = -1;
 
-        calc.adjustFontSize(this);
+        mAnimStart = -1;
     }
 
 
-    @Override 
+    @Override
     public void onSizeChanged(int w, int h, int oldW, int oldH) {
         measureText();
     }
@@ -96,7 +94,7 @@
     public void onDraw(Canvas canvas) {
         if (mAnimStart != -1) {
             int animDuration = (int) (System.currentTimeMillis() - mAnimStart);
-            
+
             if (animDuration >= CLICK_FEEDBACK_DURATION) {
                 mAnimStart = -1;
             } else {
@@ -106,16 +104,16 @@
         } else if (isPressed()) {
             drawMagicFlame(0, canvas);
         }
-        
+
         CharSequence text = getText();
         canvas.drawText(text, 0, text.length(), mTextX, mTextY, getPaint());
     }
 
     public void animateClickFeedback() {
         mAnimStart = System.currentTimeMillis();
-        invalidate();        
-    } 
-    
+        invalidate();
+    }
+
     @Override
     public boolean onTouchEvent(MotionEvent event) {
         boolean result = super.onTouchEvent(event);
diff --git a/src/com/android/calculator2/EventListener.java b/src/com/android/calculator2/EventListener.java
index 42f356c..78f3bab 100644
--- a/src/com/android/calculator2/EventListener.java
+++ b/src/com/android/calculator2/EventListener.java
@@ -20,18 +20,18 @@
 import android.view.KeyEvent;
 import android.widget.Button;
 
-class EventListener implements View.OnKeyListener, 
-                               View.OnClickListener, 
+class EventListener implements View.OnKeyListener,
+                               View.OnClickListener,
                                View.OnLongClickListener {
     Logic mHandler;
     PanelSwitcher mPanelSwitcher;
-    
+
     void setHandler(Logic handler, PanelSwitcher panelSwitcher) {
         mHandler = handler;
         mPanelSwitcher = panelSwitcher;
     }
-    
-    //@Override
+
+    @Override
     public void onClick(View view) {
         int id = view.getId();
         switch (id) {
@@ -39,15 +39,13 @@
             mHandler.onDelete();
             break;
 
-        case R.id.equal:
-            mHandler.onEnter();
-            break;
-
-            /*
         case R.id.clear:
             mHandler.onClear();
             break;
-            */
+
+        case R.id.equal:
+            mHandler.onEnter();
+            break;
 
         default:
             if (view instanceof Button) {
@@ -57,15 +55,15 @@
                     text += '(';
                 }
                 mHandler.insert(text);
-                if (mPanelSwitcher != null && 
+                if (mPanelSwitcher != null &&
                     mPanelSwitcher.getCurrentIndex() == Calculator.ADVANCED_PANEL) {
                     mPanelSwitcher.moveRight();
-                }                    
+                }
             }
         }
     }
 
-    //@Override
+    @Override
     public boolean onLongClick(View view) {
         int id = view.getId();
         if (id == R.id.del) {
@@ -74,13 +72,11 @@
         }
         return false;
     }
-    
-    private static final char[] EQUAL = {'='};
 
-    //@Override
+    @Override
     public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
         int action = keyEvent.getAction();
-        
+
         if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT ||
             keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
             boolean eat = mHandler.eatHorizontalMove(keyCode == KeyEvent.KEYCODE_DPAD_LEFT);
@@ -93,8 +89,8 @@
         }
 
         //Calculator.log("KEY " + keyCode + "; " + action);
-        
-        if (keyEvent.getMatch(EQUAL, keyEvent.getMetaState()) == '=') {
+
+        if (keyEvent.getUnicodeChar() == '=') {
             if (action == KeyEvent.ACTION_UP) {
                 mHandler.onEnter();
             }
@@ -108,7 +104,7 @@
             return false;
         }
 
-        /* 
+        /*
            We should act on KeyEvent.ACTION_DOWN, but strangely
            sometimes the DOWN event isn't received, only the UP.
            So the workaround is to act on UP...
@@ -116,17 +112,17 @@
          */
 
         if (action == KeyEvent.ACTION_UP) {
-            switch (keyCode) {                
+            switch (keyCode) {
             case KeyEvent.KEYCODE_ENTER:
             case KeyEvent.KEYCODE_DPAD_CENTER:
                 mHandler.onEnter();
                 break;
-                
+
             case KeyEvent.KEYCODE_DPAD_UP:
                 mHandler.onUp();
                 break;
 
-            case KeyEvent.KEYCODE_DPAD_DOWN:            
+            case KeyEvent.KEYCODE_DPAD_DOWN:
                 mHandler.onDown();
                 break;
             }
diff --git a/src/com/android/calculator2/Logic.java b/src/com/android/calculator2/Logic.java
index 0e8c19f..92cfa6a 100644
--- a/src/com/android/calculator2/Logic.java
+++ b/src/com/android/calculator2/Logic.java
@@ -16,8 +16,9 @@
 
 package com.android.calculator2;
 
+import com.android.calculator2.CalculatorDisplay.Scroll;
+
 import android.view.KeyEvent;
-import android.widget.Button;
 import android.widget.EditText;
 import android.content.Context;
 
@@ -35,22 +36,48 @@
 
     private static final String INFINITY_UNICODE = "\u221e";
 
+    public static final String MARKER_EVALUATE_ON_RESUME = "?";
+
     // the two strings below are the result of Double.toString() for Infinity & NaN
     // they are not output to the user and don't require internationalization
-    private static final String INFINITY = "Infinity"; 
+    private static final String INFINITY = "Infinity";
     private static final String NAN      = "NaN";
 
     static final char MINUS = '\u2212';
 
     private final String mErrorString;
 
-    Logic(Context context, History history, CalculatorDisplay display, Button equalButton) {
+    public final static int DELETE_MODE_BACKSPACE = 0;
+    public final static int DELETE_MODE_CLEAR = 1;
+
+    private int mDeleteMode = DELETE_MODE_BACKSPACE;
+
+    public interface Listener {
+        void onDeleteModeChange();
+    }
+
+    private Listener mListener;
+
+    Logic(Context context, History history, CalculatorDisplay display) {
         mErrorString = context.getResources().getString(R.string.error);
         mHistory = history;
         mDisplay = display;
         mDisplay.setLogic(this);
+    }
 
-        clearWithHistory(false);
+    public void setListener(Listener listener) {
+        this.mListener = listener;
+    }
+
+    public void setDeleteMode(int mode) {
+        if (mDeleteMode != mode) {
+            mDeleteMode = mode;
+            mListener.onDeleteModeChange();
+        }
+    }
+
+    public int getDeleteMode() {
+        return mDeleteMode;
     }
 
     void setLineLength(int nDigits) {
@@ -60,7 +87,7 @@
     boolean eatHorizontalMove(boolean toLeft) {
         EditText editText = mDisplay.getEditText();
         int cursorPos = editText.getSelectionStart();
-        return toLeft ? cursorPos == 0 : cursorPos >= editText.length(); 
+        return toLeft ? cursorPos == 0 : cursorPos >= editText.length();
     }
 
     private String getText() {
@@ -69,17 +96,27 @@
 
     void insert(String delta) {
         mDisplay.insert(delta);
+        setDeleteMode(DELETE_MODE_BACKSPACE);
     }
 
-    private void setText(CharSequence text) {
-        mDisplay.setText(text, CalculatorDisplay.Scroll.UP);
+    public void resumeWithHistory() {
+        clearWithHistory(false);
     }
 
     private void clearWithHistory(boolean scroll) {
-        mDisplay.setText(mHistory.getText(), 
-                         scroll ? CalculatorDisplay.Scroll.UP : CalculatorDisplay.Scroll.NONE);
-        mResult = "";
-        mIsError = false;
+        String text = mHistory.getText();
+        if (MARKER_EVALUATE_ON_RESUME.equals(text)) {
+            if (!mHistory.moveToPrevious()) {
+                text = "";
+            }
+            text = mHistory.getText();
+            evaluateAndShowResult(text, CalculatorDisplay.Scroll.NONE);
+        } else {
+            mResult = "";
+            mDisplay.setText(
+                    text, scroll ? CalculatorDisplay.Scroll.UP : CalculatorDisplay.Scroll.NONE);
+            mIsError = false;
+        }
     }
 
     private void clear(boolean scroll) {
@@ -91,12 +128,14 @@
         mResult = "";
         mIsError = false;
         updateHistory();
+
+        setDeleteMode(DELETE_MODE_BACKSPACE);
     }
 
     boolean acceptInsert(String delta) {
         String text = getText();
         return !mIsError &&
-            (!mResult.equals(text) || 
+            (!mResult.equals(text) ||
              isOperator(delta) ||
              mDisplay.getSelectionStart() != text.length());
     }
@@ -111,28 +150,31 @@
     }
 
     void onClear() {
-        clear(false);
+        clear(mDeleteMode == DELETE_MODE_CLEAR);
     }
 
     void onEnter() {
-        String text = getText();
-        if (text.equals(mResult)) {
-            clearWithHistory(false); //clear after an Enter on result
+        if (mDeleteMode == DELETE_MODE_CLEAR) {
+            clearWithHistory(false); // clear after an Enter on result
         } else {
-            mHistory.enter(text);
-            try {
-                mResult = evaluate(text);
-            } catch (SyntaxException e) {
-                mIsError = true;
-                mResult = mErrorString;
+            evaluateAndShowResult(getText(), CalculatorDisplay.Scroll.UP);
+        }
+    }
+
+    public void evaluateAndShowResult(String text, Scroll scroll) {
+        try {
+            String result = evaluate(text);
+            if (!text.equals(result)) {
+                mHistory.enter(text);
+                mResult = result;
+                mDisplay.setText(mResult, scroll);
+                setDeleteMode(DELETE_MODE_CLEAR);
             }
-            if (text.equals(mResult)) {
-                //no need to show result, it is exactly what the user entered
-                clearWithHistory(true);
-            } else {
-                setText(mResult);
-                //mEqualButton.setText(mEnterString);
-            }
+        } catch (SyntaxException e) {
+            mIsError = true;
+            mResult = mErrorString;
+            mDisplay.setText(mResult, scroll);
+            setDeleteMode(DELETE_MODE_CLEAR);
         }
     }
 
@@ -157,7 +199,12 @@
     }
 
     void updateHistory() {
-        mHistory.update(getText());
+        String text = getText();
+        if (text.equals(mResult)) {
+            mHistory.update(MARKER_EVALUATE_ON_RESUME);
+        } else {
+            mHistory.update(getText());
+        }
     }
 
     private static final int ROUND_DIGITS = 1;
@@ -173,12 +220,62 @@
             --size;
         }
 
-        String result = Util.doubleToString(mSymbols.eval(input), mLineLength, ROUND_DIGITS);
+        double value = mSymbols.eval(input);
+
+        String result = "";
+        for (int precision = mLineLength; precision > 6; precision--) {
+            result = tryFormattingWithPrecision(value, precision);
+            if (result.length() <= mLineLength) {
+                break;
+            }
+        }
+        return result.replace('-', MINUS).replace(INFINITY, INFINITY_UNICODE);
+    }
+
+    private String tryFormattingWithPrecision(double value, int precision) {
+        // The standard scientific formatter is basically what we need. We will
+        // start with what it produces and then massage it a bit.
+        String result = String.format("%" + mLineLength + "." + precision + "g", value);
         if (result.equals(NAN)) { // treat NaN as Error
             mIsError = true;
             return mErrorString;
         }
-        return result.replace('-', MINUS).replace(INFINITY, INFINITY_UNICODE);
+        String mantissa = result;
+        String exponent = null;
+        int e = result.indexOf('e');
+        if (e != -1) {
+            mantissa = result.substring(0, e);
+
+            // Strip "+" and unnecessary 0's from the exponent
+            exponent = result.substring(e + 1);
+            if (exponent.startsWith("+")) {
+                exponent = exponent.substring(1);
+            }
+            exponent = String.valueOf(Integer.parseInt(exponent));
+        } else {
+            mantissa = result;
+        }
+
+        int period = mantissa.indexOf('.');
+        if (period == -1) {
+            period = mantissa.indexOf(',');
+        }
+        if (period != -1) {
+            // Strip trailing 0's
+            while (mantissa.length() > 0 && mantissa.endsWith("0")) {
+                mantissa = mantissa.substring(0, mantissa.length() - 1);
+            }
+            if (mantissa.length() == period + 1) {
+                mantissa = mantissa.substring(0, mantissa.length() - 1);
+            }
+        }
+
+        if (exponent != null) {
+            result = mantissa + 'e' + exponent;
+        } else {
+            result = mantissa;
+        }
+        return result;
     }
 
     static boolean isOperator(String text) {
diff --git a/src/com/android/calculator2/PanelSwitcher.java b/src/com/android/calculator2/PanelSwitcher.java
index cc62848..6e64259 100644
--- a/src/com/android/calculator2/PanelSwitcher.java
+++ b/src/com/android/calculator2/PanelSwitcher.java
@@ -16,15 +16,18 @@
 
 package com.android.calculator2;
 
-import android.view.animation.TranslateAnimation;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.GestureDetector;
-import android.widget.FrameLayout;
 import android.content.Context;
 import android.util.AttributeSet;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.TranslateAnimation;
+import android.widget.FrameLayout;
 
-class PanelSwitcher extends FrameLayout {
+class PanelSwitcher extends FrameLayout implements AnimationListener {
     private static final int MAJOR_MOVE = 60;
     private static final int ANIM_DURATION = 400;
 
@@ -43,10 +46,17 @@
     private static final int RIGHT = 2;
     private int mPreviousMove;
 
+    public interface Listener {
+        void onChange();
+    }
+
+    private Listener mListener;
+
     public PanelSwitcher(Context context, AttributeSet attrs) {
         super(context, attrs);
         mCurrentView = 0;
         mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
+                @Override
                 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                                        float velocityY) {
                     int dx = (int) (e2.getX() - e1.getX());
@@ -67,9 +77,17 @@
             });
     }
 
+    public void setListener(Listener listener) {
+        this.mListener = listener;
+    }
+
     void setCurrentIndex(int current) {
+        boolean changed = mCurrentView != current;
         mCurrentView = current;
         updateCurrentView();
+        if (changed && mListener != null) {
+            mListener.onChange();
+        }
     }
 
     private void updateCurrentView() {
@@ -78,12 +96,14 @@
         }
     }
 
-    @Override 
+    @Override
     public void onSizeChanged(int w, int h, int oldW, int oldH) {
         mWidth = w;
         inLeft   = new TranslateAnimation(mWidth, 0, 0, 0);
-        outLeft  = new TranslateAnimation(0, -mWidth, 0, 0);        
+        inLeft.setAnimationListener(this);
+        outLeft  = new TranslateAnimation(0, -mWidth, 0, 0);
         inRight  = new TranslateAnimation(-mWidth, 0, 0, 0);
+        inRight.setAnimationListener(this);
         outRight = new TranslateAnimation(0, mWidth, 0, 0);
 
         inLeft.setDuration(ANIM_DURATION);
@@ -92,6 +112,7 @@
         outRight.setDuration(ANIM_DURATION);
     }
 
+    @Override
     protected void onFinishInflate() {
         int count = getChildCount();
         mChildren = new View[count];
@@ -141,4 +162,19 @@
     int getCurrentIndex() {
         return mCurrentView;
     }
+
+    @Override
+    public void onAnimationRepeat(Animation animation) {
+    }
+
+    @Override
+    public void onAnimationStart(Animation animation) {
+    }
+
+    @Override
+    public void onAnimationEnd(Animation animation) {
+        if (mListener != null) {
+            mListener.onChange();
+        }
+    }
 }
diff --git a/src/com/android/calculator2/Persist.java b/src/com/android/calculator2/Persist.java
index 454f10b..208faed 100644
--- a/src/com/android/calculator2/Persist.java
+++ b/src/com/android/calculator2/Persist.java
@@ -28,23 +28,33 @@
 import android.content.Context;
 
 class Persist {
-    private static final int LAST_VERSION = 1;
+    private static final int LAST_VERSION = 2;
     private static final String FILE_NAME = "calculator.data";
     private Context mContext;
 
     History history = new History();
+    private int mDeleteMode;
 
     Persist(Context context) {
         this.mContext = context;
-        load();
     }
 
-    private void load() {
+    public void setDeleteMode(int mode) {
+        mDeleteMode = mode;
+    }
+
+    public int getDeleteMode() {
+        return mDeleteMode;
+    }
+
+    public void load() {
         try {
             InputStream is = new BufferedInputStream(mContext.openFileInput(FILE_NAME), 8192);
             DataInputStream in = new DataInputStream(is);
             int version = in.readInt();
-            if (version > LAST_VERSION) {
+            if (version > 1) {
+                mDeleteMode = in.readInt();
+            } else if (version > LAST_VERSION) {
                 throw new IOException("data version " + version + "; expected " + LAST_VERSION);
             }
             history = new History(version, in);
@@ -56,15 +66,16 @@
         }
     }
 
-    void save() {
+    public void save() {
         try {
             OutputStream os = new BufferedOutputStream(mContext.openFileOutput(FILE_NAME, 0), 8192);
             DataOutputStream out = new DataOutputStream(os);
             out.writeInt(LAST_VERSION);
+            out.writeInt(mDeleteMode);
             history.write(out);
             out.close();
         } catch (IOException e) {
             Calculator.log("" + e);
-        } 
+        }
     }
 }