summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Klaassen <justinklaassen@google.com>2018-12-18 11:56:53 -0800
committerJustin Klaassen <justinklaassen@google.com>2019-02-08 10:51:48 -0800
commit8caf6b4a41d462a403c47046ff1399c758613644 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent7265aa3a922a7e7c0389dae4b26cca562aa777a6 (diff)
downloadExactCalculator-8caf6b4a41d462a403c47046ff1399c758613644.tar.gz
ExactCalculator is no longer a supported module. If you wish to see the historical source code please check out a prior release branch. Bug: 120905067 Test: lunch aosp_arm64 && make -j8 Merged-In: I2990bccfff3ecd058200e00cc470e6f575460b0c Change-Id: I944e99431092d7d6c3f03164d107f5bf8cde908a
-rw-r--r--.gitignore11
-rw-r--r--Android.mk38
-rw-r--r--AndroidManifest.xml51
-rw-r--r--CleanSpec.mk49
-rw-r--r--MODULE_LICENSE_APACHE20
-rw-r--r--NOTICE200
-rw-r--r--OWNERS5
-rw-r--r--assets/licenses.html31
-rw-r--r--docs/arithmetic-overview.html271
-rw-r--r--docs/implementation-overview.html51
-rw-r--r--proguard.flags58
-rw-r--r--res/drawable/ic_history_grey600_48dp.xml29
-rw-r--r--res/drawable/pad_button_advanced_background.xml19
-rw-r--r--res/drawable/pad_button_background.xml19
-rw-r--r--res/drawable/pad_button_inverse_background.xml38
-rw-r--r--res/layout/activity_calculator_land.xml40
-rw-r--r--res/layout/activity_calculator_main.xml34
-rw-r--r--res/layout/activity_calculator_port.xml46
-rw-r--r--res/layout/activity_calculator_tablet_port.xml38
-rw-r--r--res/layout/dialog_message.xml26
-rw-r--r--res/layout/display_one_line.xml70
-rw-r--r--res/layout/display_two_line.xml56
-rw-r--r--res/layout/empty_history_view.xml31
-rw-r--r--res/layout/fragment_history.xml50
-rw-r--r--res/layout/history_item.xml74
-rw-r--r--res/layout/pad_advanced_3x5.xml208
-rw-r--r--res/layout/pad_advanced_4x4.xml208
-rw-r--r--res/layout/pad_advanced_5x3.xml208
-rw-r--r--res/layout/pad_numeric.xml112
-rw-r--r--res/layout/pad_operator_one_col.xml77
-rw-r--r--res/layout/pad_operator_two_col.xml84
-rw-r--r--res/layout/toolbar.xml33
-rw-r--r--res/menu/activity_calculator.xml33
-rw-r--r--res/menu/fragment_history.xml23
-rw-r--r--res/menu/menu_formula.xml28
-rw-r--r--res/menu/menu_result.xml38
-rw-r--r--res/mipmap-hdpi/ic_launcher_calculator.pngbin4104 -> 0 bytes
-rw-r--r--res/mipmap-mdpi/ic_launcher_calculator.pngbin2314 -> 0 bytes
-rw-r--r--res/mipmap-xhdpi/ic_launcher_calculator.pngbin6310 -> 0 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_launcher_calculator.pngbin10733 -> 0 bytes
-rw-r--r--res/mipmap-xxxhdpi/ic_launcher_calculator.pngbin15367 -> 0 bytes
-rw-r--r--res/values-af/strings.xml87
-rw-r--r--res/values-am/strings.xml87
-rw-r--r--res/values-ar/strings.xml87
-rw-r--r--res/values-az/strings.xml87
-rw-r--r--res/values-b+sr+Latn/strings.xml87
-rw-r--r--res/values-be/strings.xml87
-rw-r--r--res/values-bg/strings.xml87
-rw-r--r--res/values-bn/strings.xml87
-rw-r--r--res/values-bs/strings.xml87
-rw-r--r--res/values-ca/strings.xml87
-rw-r--r--res/values-cs/strings.xml87
-rw-r--r--res/values-da/strings.xml87
-rw-r--r--res/values-de/strings.xml87
-rw-r--r--res/values-el/strings.xml87
-rw-r--r--res/values-en-rAU/strings.xml87
-rw-r--r--res/values-en-rCA/strings.xml87
-rw-r--r--res/values-en-rGB/strings.xml87
-rw-r--r--res/values-en-rIN/strings.xml87
-rw-r--r--res/values-en-rXC/strings.xml87
-rw-r--r--res/values-es-rUS/strings.xml87
-rw-r--r--res/values-es/strings.xml87
-rw-r--r--res/values-et/strings.xml87
-rw-r--r--res/values-eu/strings.xml87
-rw-r--r--res/values-fa/strings.xml87
-rw-r--r--res/values-fi/strings.xml87
-rw-r--r--res/values-fr-rCA/strings.xml87
-rw-r--r--res/values-fr/strings.xml87
-rw-r--r--res/values-gl/strings.xml87
-rw-r--r--res/values-gu/strings.xml87
-rw-r--r--res/values-hi/strings.xml87
-rw-r--r--res/values-hr/strings.xml87
-rw-r--r--res/values-hu/strings.xml87
-rw-r--r--res/values-hy/strings.xml87
-rw-r--r--res/values-in/strings.xml87
-rw-r--r--res/values-is/strings.xml87
-rw-r--r--res/values-it/strings.xml87
-rw-r--r--res/values-iw/strings.xml87
-rw-r--r--res/values-ja/strings.xml87
-rw-r--r--res/values-ka/strings.xml87
-rw-r--r--res/values-kk/strings.xml87
-rw-r--r--res/values-km/strings.xml87
-rw-r--r--res/values-kn/strings.xml87
-rw-r--r--res/values-ko/strings.xml87
-rw-r--r--res/values-ky/strings.xml87
-rw-r--r--res/values-lo/strings.xml87
-rw-r--r--res/values-lt/strings.xml87
-rw-r--r--res/values-lv/strings.xml87
-rw-r--r--res/values-mk/strings.xml87
-rw-r--r--res/values-ml/strings.xml87
-rw-r--r--res/values-mn/strings.xml87
-rw-r--r--res/values-mr/strings.xml87
-rw-r--r--res/values-ms/strings.xml87
-rw-r--r--res/values-my/strings.xml87
-rw-r--r--res/values-nb/strings.xml87
-rw-r--r--res/values-ne/strings.xml87
-rw-r--r--res/values-nl/strings.xml87
-rw-r--r--res/values-pa/strings.xml87
-rw-r--r--res/values-pl/strings.xml87
-rw-r--r--res/values-pt-rBR/strings.xml87
-rw-r--r--res/values-pt-rPT/strings.xml87
-rw-r--r--res/values-pt/strings.xml87
-rw-r--r--res/values-ro/strings.xml87
-rw-r--r--res/values-ru/strings.xml87
-rw-r--r--res/values-si/strings.xml87
-rw-r--r--res/values-sk/strings.xml87
-rw-r--r--res/values-sl/strings.xml87
-rw-r--r--res/values-sq/strings.xml87
-rw-r--r--res/values-sr/strings.xml87
-rw-r--r--res/values-sv/strings.xml87
-rw-r--r--res/values-sw/strings.xml87
-rw-r--r--res/values-ta/strings.xml87
-rw-r--r--res/values-te/strings.xml87
-rw-r--r--res/values-th/strings.xml87
-rw-r--r--res/values-tl/strings.xml87
-rw-r--r--res/values-tr/strings.xml87
-rwxr-xr-xres/values-uk/strings.xml87
-rw-r--r--res/values-ur/strings.xml87
-rw-r--r--res/values-uz/strings.xml87
-rw-r--r--res/values-vi/strings.xml87
-rw-r--r--res/values-w230dp-h275dp/dimens.xml34
-rw-r--r--res/values-w230dp-h275dp/layout.xml23
-rw-r--r--res/values-w230dp-h275dp/styles.xml74
-rw-r--r--res/values-w230dp-h375dp/dimens.xml34
-rw-r--r--res/values-w230dp-h375dp/layout.xml23
-rw-r--r--res/values-w230dp-h375dp/styles.xml74
-rw-r--r--res/values-w230dp-h475dp-port/dimens.xml34
-rw-r--r--res/values-w230dp-h475dp-port/layout.xml23
-rw-r--r--res/values-w230dp-h475dp-port/styles.xml74
-rw-r--r--res/values-w375dp-h220dp/dimens.xml34
-rw-r--r--res/values-w375dp-h220dp/layout.xml23
-rw-r--r--res/values-w375dp-h220dp/styles.xml74
-rw-r--r--res/values-w375dp-h275dp/dimens.xml34
-rw-r--r--res/values-w375dp-h275dp/layout.xml23
-rw-r--r--res/values-w375dp-h275dp/styles.xml74
-rw-r--r--res/values-w375dp-h375dp/dimens.xml34
-rw-r--r--res/values-w375dp-h375dp/layout.xml23
-rw-r--r--res/values-w375dp-h375dp/styles.xml74
-rw-r--r--res/values-w375dp-h500dp-port/dimens.xml34
-rw-r--r--res/values-w375dp-h500dp-port/layout.xml23
-rw-r--r--res/values-w375dp-h500dp-port/styles.xml74
-rw-r--r--res/values-w375dp-h768dp-port/dimens.xml34
-rw-r--r--res/values-w375dp-h768dp-port/layout.xml23
-rw-r--r--res/values-w375dp-h768dp-port/styles.xml75
-rw-r--r--res/values-w520dp-h220dp-land/dimens.xml34
-rw-r--r--res/values-w520dp-h220dp-land/layout.xml23
-rw-r--r--res/values-w520dp-h220dp-land/styles.xml75
-rw-r--r--res/values-w520dp-h275dp-land/dimens.xml34
-rw-r--r--res/values-w520dp-h275dp-land/layout.xml23
-rw-r--r--res/values-w520dp-h275dp-land/styles.xml75
-rw-r--r--res/values-w520dp-h375dp-land/dimens.xml34
-rw-r--r--res/values-w520dp-h375dp-land/layout.xml23
-rw-r--r--res/values-w520dp-h375dp-land/styles.xml75
-rw-r--r--res/values-w520dp-h500dp-land/dimens.xml34
-rw-r--r--res/values-w520dp-h500dp-land/layout.xml23
-rw-r--r--res/values-w520dp-h500dp-land/styles.xml75
-rw-r--r--res/values-w520dp-h768dp-land/dimens.xml34
-rw-r--r--res/values-w520dp-h768dp-land/layout.xml23
-rw-r--r--res/values-w520dp-h768dp-land/styles.xml75
-rw-r--r--res/values-w520dp-h768dp-port/dimens.xml34
-rw-r--r--res/values-w520dp-h768dp-port/layout.xml23
-rw-r--r--res/values-w520dp-h768dp-port/styles.xml75
-rw-r--r--res/values-zh-rCN/strings.xml87
-rw-r--r--res/values-zh-rHK/strings.xml87
-rw-r--r--res/values-zh-rTW/strings.xml87
-rw-r--r--res/values-zu/strings.xml87
-rw-r--r--res/values/attr.xml26
-rw-r--r--res/values/color.xml68
-rw-r--r--res/values/dimens.xml44
-rw-r--r--res/values/layout.xml23
-rw-r--r--res/values/strings.xml318
-rw-r--r--res/values/styles.xml136
-rw-r--r--res/values/themes.xml39
-rw-r--r--src/com/android/calculator2/AlertDialogFragment.java134
-rw-r--r--src/com/android/calculator2/AlignedTextView.java76
-rw-r--r--src/com/android/calculator2/BoundedRational.java564
-rw-r--r--src/com/android/calculator2/Calculator.java1538
-rw-r--r--src/com/android/calculator2/CalculatorDisplay.java202
-rw-r--r--src/com/android/calculator2/CalculatorExpr.java1118
-rw-r--r--src/com/android/calculator2/CalculatorFormula.java392
-rw-r--r--src/com/android/calculator2/CalculatorPadViewPager.java252
-rw-r--r--src/com/android/calculator2/CalculatorResult.java1180
-rw-r--r--src/com/android/calculator2/CalculatorScrollView.java83
-rw-r--r--src/com/android/calculator2/DragController.java482
-rw-r--r--src/com/android/calculator2/DragLayout.java357
-rw-r--r--src/com/android/calculator2/Evaluator.java1963
-rw-r--r--src/com/android/calculator2/ExpressionDB.java619
-rw-r--r--src/com/android/calculator2/HistoryAdapter.java222
-rw-r--r--src/com/android/calculator2/HistoryFragment.java243
-rw-r--r--src/com/android/calculator2/HistoryItem.java67
-rw-r--r--src/com/android/calculator2/KeyMaps.java683
-rw-r--r--src/com/android/calculator2/Licenses.java30
-rw-r--r--src/com/android/calculator2/StringUtils.java94
-rw-r--r--src/com/android/calculator2/UnifiedReal.java1285
194 files changed, 0 insertions, 23687 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index b0f1df6..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.gradle
-.idea
-bin
-build
-gen
-local.properties
-*.DS_Store
-*~
-*.swp
-*.swo
-*.iml
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index e4796b9..0000000
--- a/Android.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (C) 2008 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.
-#
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_USE_AAPT2 := true
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-
-LOCAL_PACKAGE_NAME := ExactCalculator
-LOCAL_OVERRIDES_PACKAGES := Calculator
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-LOCAL_STATIC_JAVA_LIBRARIES := cr
-LOCAL_STATIC_ANDROID_LIBRARIES += androidx.legacy_legacy-support-v4
-LOCAL_STATIC_ANDROID_LIBRARIES += androidx.gridlayout_gridlayout
-LOCAL_STATIC_ANDROID_LIBRARIES += androidx.recyclerview_recyclerview
-
-include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
deleted file mode 100644
index a7675b1..0000000
--- a/AndroidManifest.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<manifest
- xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.calculator2">
-
- <application
- android:allowBackup="false"
- android:icon="@mipmap/ic_launcher_calculator"
- android:label="@string/app_name"
- android:supportsRtl="true">
-
- <activity
- android:name=".Calculator"
- android:label="@string/app_name"
- android:launchMode="singleTask"
- android:theme="@style/Theme.Calculator">
- <layout
- android:minHeight="220dp"
- android:minWidth="230dp" />
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="android.intent.category.APP_CALCULATOR" />
- </intent-filter>
- </activity>
-
- <activity
- android:name=".Licenses"
- android:launchMode="singleTop"
- android:parentActivityName=".Calculator"
- android:theme="@style/Theme.Licenses" />
-
- </application>
-</manifest>
diff --git a/CleanSpec.mk b/CleanSpec.mk
deleted file mode 100644
index b84e1b6..0000000
--- a/CleanSpec.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-# 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.
-#
-
-# If you don't need to do a full clean build but would like to touch
-# a file or delete some intermediate files, add a clean step to the end
-# of the list. These steps will only be run once, if they haven't been
-# run before.
-#
-# E.g.:
-# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
-# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
-#
-# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
-# files that are missing or have been moved.
-#
-# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
-# Use $(OUT_DIR) to refer to the "out" directory.
-#
-# If you need to re-do something that's already mentioned, just copy
-# the command and add it to the bottom of the list. E.g., if a change
-# that you made last week required touching a file and a change you
-# made today requires touching the same file, just copy the old
-# touch step and add it to the end of the list.
-#
-# ************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
-# ************************************************
-
-# For example:
-#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
-#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
-#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
-#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
-
-# ************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
-# ************************************************
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index 396ecc6..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,200 +0,0 @@
- Calculator is
- Copyright (c) 2005-2008, 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.
-
- 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.
-
- Arity : Arithmetic Engine for Java is
- Copyright (c) Mihai Preda
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
-
- 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.
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/OWNERS b/OWNERS
deleted file mode 100644
index 564e73d..0000000
--- a/OWNERS
+++ /dev/null
@@ -1,5 +0,0 @@
-# Default code reviewers picked from top 3 or more developers.
-# Please update this list if you find better candidates.
-hboehm@google.com
-dwillemsen@google.com
-justinklaassen@google.com
diff --git a/assets/licenses.html b/assets/licenses.html
deleted file mode 100644
index 4583bf7..0000000
--- a/assets/licenses.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<html>
-<head>
-<meta name="viewport" content="width=device-width">
-<style> body { font-family: sans-serif; } pre { background-color: #eeeeee; padding: 1em; white-space: pre-wrap; word-wrap: break-word; } </style>
-</head>
-<body>
-<h3>Notices for files:</h3>
-<ul>
-<li>CRCalc</li>
-</ul>
-<pre>
-Copyright (c) 1999, Silicon Graphics, Inc. -- ALL RIGHTS RESERVED
-
-Permission is granted free of charge to copy, modify, use and distribute this software provided you include the entirety of this notice in all copies made.
-
-THIS SOFTWARE IS PROVIDED ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE SUBJECT SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. SGI ASSUMES NO RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, SGI ASSUMES NO COST OR LIABILITY FOR ANY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY SUBJECT SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL SGI BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER WITH RESPECT TO THE SOFTWARE INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SGI SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY RESULTING FROM SGI's NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-These license terms shall be governed by and construed in accordance with the laws of the United States and the State of California as applied to agreements entered into and to be performed entirely within California between California residents. Any litigation relating to these license terms shall be subject to the exclusive jurisdiction of the Federal Courts of the Northern District of California (or, absent subject matter jurisdiction in such courts, the courts of the State of California), with venue lying exclusively in Santa Clara County, California.
-
-Copyright (c) 2001-2004, Hewlett-Packard Development Company, L.P.
-
-Permission is granted free of charge to copy, modify, use and distribute this software provided you include the entirety of this notice in all copies made.
-
-THIS SOFTWARE IS PROVIDED ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE SUBJECT SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. HEWLETT-PACKARD ASSUMES NO RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, HEWLETT-PACKARD ASSUMES NO COST OR LIABILITY FOR ANY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY SUBJECT SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING, WITHOUT LIMITATION, NEGLIGENCE OR STRICT LIABILITY), CONTRACT, OR OTHERWISE, SHALL HEWLETT-PACKARD BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER WITH RESPECT TO THE SOFTWARE INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOSS OF DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF HEWLETT-PACKARD SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY RESULTING FROM HEWLETT-PACKARD's NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-</pre>
-</body>
-</html>
diff --git a/docs/arithmetic-overview.html b/docs/arithmetic-overview.html
deleted file mode 100644
index 68dd24e..0000000
--- a/docs/arithmetic-overview.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Calculator Arithmetic Overview</title>
-<meta charset="UTF-8">
-<style>
-#toc {
- width:300px;
- border:1px solid #ccc;
- background-color:#efefef;
- float:right;
-}
-.display {
- color:#666666;
- background-color:#f3f3f3;
-}
-</style>
-</head>
-<body onload="init();">
-<div id="toc"></div>
-<h1>Arithmetic in the Android M Calculator</h1>
-<p>Most conventional calculators, both the specialized hardware and software varieties, represent
-numbers using fairly conventional machine floating point arithmetic. Each number is stored as an
-exponent, identifying the position of the decimal point, together with the first 10 to 20
-significant digits of the number. For example, 1/300 might be stored as
-0.333333333333x10<sup>-2</sup>, i.e. as an exponent of -2, together with the 12 most significant
-digits. This is similar, and sometimes identical to, computer arithmetic used to solve large
-scale scientific problems.</p> <p>This kind of arithmetic works well most of the time, but can
-sometimes produce completely incorrect results. For example, the trigonometric tangent (tan) and
-arctangent (tan<sup>-1</sup>) functions are defined so that tan(tan<sup>-1</sup>(<i>x</i>)) should
-always be <i>x</i>. But on most calculators we have tried, tan(tan<sup>-1</sup>(10<sup>20</sup>))
-is off by at least a factor of 1000. A value around 10<sup>16</sup> or 10<sup>17</sup> is quite
-popular, which unfortunately doesn't make it correct. The underlying problem is that
-tan<sup>-1</sup>(10<sup>17</sup>) and tan<sup>-1</sup>(10<sup>20</sup>) are so close that
-conventional representations don't distinguish them. (They're both 89.9999… degrees with at least
-fifteen 9s beyond the decimal point.) But the tiny difference between them results in a huge
-difference when the tangent function is applied to the result.</p>
-
-<p>Similarly, it may be puzzling to a high school student that while the textbook claims that for
-any <i>x</i>, sin(<i>x</i>) + sin(<i>x</i>+π) = 0, their calculator says that sin(10<sup>15</sup>)
-+ sin(10<sup>15</sup>+π) = <span class="display">-0.00839670971</span>. (Thanks to floating point
-standardization, multiple on-line calculators agree on that entirely bogus value!)</p>
-
-<p>We know that the instantaneous rate of change of a function f, its derivative, can be
-approximated at a point <i>x</i> by computing (<i>f</i>(<i>x</i> + <i>h</i>) - <i>f</i>(<i>x</i>))
-/ <i>h</i>, for very small <i>h</i>. Yet, if you try this in a conventional calculator with
-<i>h</i> = 10<sup>-20</sup> or smaller, you are unlikely to get a useful answer.</p>
-
-<p>In general these problems occur when computations amplify tiny errors, a problem referred to as
-numerical instability. This doesn't happen very often, but as in the above examples, it may
-require some insight to understand when it can and can't happen.</p>
-
-<p>In large scale scientific computations, hardware floating point computations are essential
-since they are the only reasonable way modern computer hardware can produce answers with
-sufficient speed. Experts must be careful to structure computations to avoid such problems. But
-for "computing in the small" problems, like those solved on desk calculators, we can do much
-better!</p>
-
-<h2>Producing accurate answers</h2>
-<p>The Android M Calculator uses a different kind of computer arithmetic. Rather than computing a
-fixed number of digits for each intermediate result, the computation is much more goal directed.
-The user would like to see only correct digits on the display, which we take to mean that the
-displayed answer should always be off by less than one in the last displayed digit. The
-computation is thus performed to whatever precision is required to achieve that.</p>
-
-<p>Let's say we want to compute π+⅓, and the calculator display has 10 digits. We'd compute both π
-and ⅓ to 11 digits each, add them, and round the result to 10 digits. Since π and ⅓ were accurate
-to within 1 in the 11<sup>th</sup> digit, and rounding adds an error of at most 5 in the
-11<sup>th</sup> digit, the result is guaranteed accurate to less than 1 in the 10<sup>th</sup>
-digit, which was our goal.</p>
-
-<p>This is of course an oversimplification of the real implementation. Operations other than
-addition do get appreciably more complicated. Multiplication, for example, requires that we
-approximate one argument in order to determine how much precision we need for the other argument.
-The tangent function requires very high precision for arguments near 90 degrees to produce
-meaningful answers. And so on. And we really use binary rather than decimal arithmetic.
-Nonetheless the above addition method is a good illustration of the approach.</p>
-
-<p>Since we have to be able to produce answers to arbitrary precision, we can also let the user
-specify how much precision she wants, and use that as our goal. In the Android M Calculator, the
-user specifies the requested precision by scrolling the result. As the result is being scrolled,
-the calculator reevaluates it to the newly requested precision. In some cases, the algorithm for
-computing the new higher precision result takes advantage of the old, less accurate result. In
-other cases, it basically starts from scratch. Fortunately modern devices and the Android runtime
-are fast enough that the recomputation delay rarely becomes visible.</p>
-
-<h2>Design Decisions and challenges</h2>
-<p>This form of evaluate-on-demand arithmetic has occasionally been used before, and we use a
-refinement of a previously developed open source package in our implementation. However, the
-scrolling interface, together with the practicailities of a usable general purpose calculator,
-presented some new challenges. These drove a number of not-always-obvious design decisions which
-briefly describe here.</p>
-
-<h3>Indicating position</h3>
-<p>We would like the user to be able to see at a glance which part of the result is currently
-being displayed.</p>
-
-<p>Conventional calculators solve the vaguely similar problem of displaying very large or very
-small numbers by using scientific notation: They display an exponent in addition to the most
-significant digits, analogously to the internal representation they use. We solve that problem in
-exactly the same way, in spite of our different internal representation. If the user enters
-"1÷3⨉10^20", computing ⅓ times 10 to the 20th power, the result may be displayed as <span
-class="display">3.3333333333E19</span>, indicating that the result is approximately 3.3333333333
-times 10<sup>19</sup>. In this version of scientific notation, the decimal point is always
-displayed immediately to the right of the most significant digit, and the exponent indicates where
-it really belongs.</p>
-
-<p>Once the decimal point is scrolled off the display, this style of scientific notation is not
-helpful; it essentially tells us where the decimal point is relative to the most significant
-digit, but the most significant digit is no longer visible. We address this by switching to a
-different variant of scientific notation, in which we interpret the displayed digits as a whole
-number, with an implied decimal point on the right. Instead of displaying <span
-class="display">3.3333333333E19</span>, we hypothetically could display <span
-class="display">33333333333E9</span> or 33333333333 times 10<sup>9</sup>. In fact, we use this
-format only when the normal scientific notation decimal point would not be visible. If we had
-scrolled the above result 2 digits to the left, we would in fact be seeing <span
-ass="display">...33333333333E7</span>. This tells us that the displayed result is very close to a
-whole number ending in 33333333333 times 10<sup>7</sup>. Effectively the <span
-class="display">E7</span> is telling us that the last displayed digit corresponds to the ten
-millions position. In this form, the exponent does tell us the current position in the result.
-The two forms are easily distinguishable by the presence or absence of a decimal point, and the
-ellipsis character at the beginning.</p>
-
-<h3>Rounding vs. scrolling</h3>
-<p>Normally we expect calculators to try to round to the nearest displayable result. If the
-actual computed result were 0.66666666666667, and we could only display 10 digits, we would expect
-a result display of, for example <span class="display">0.666666667</span>, rather than <span
-class="display">0.666666666</span>. For us, this would have the disadvantage that when we
-scrolled the result left to see more digits, the "7" on the right would change to a "6". That
-would be mildly unfortunate. It would be somewhat worse that if the actual result were exactly
-0.99999999999, and we could only display 10 characters at a time, we would see an initial display
-of <span class="display">1.00000000</span>. As we scroll to see more digits, we would
-successively see <span class="display">...000000E-6</span>, then <span
-class="display">...000000E-7</span>, and so on until we get to <span
-class="display">...00000E-10</span>, but then suddenly <span class="display">...99999E-11</span>.
-If we scroll back, the screen would again show zeroes. We decided this would be excessively
-confusing, and thus do not round.</p>
-
-<p>It is still possible for previously displayed digits to change as we're scrolling. But we
-always compute a number of digits more than we actually need, so this is exceedingly unlikely.</p>
-
-<p>Since our goal is an error of strictly less than one in the last displayed digit, we will
-never, for example, display an answer of exactly 2 as <span class="display">1.9999999999</span>.
-That would involve an error of exactly one in the last place, which is too much for us.</p> <p>It
-turns out that there is exactly one case in which the display switches between 9s and 0s: A long
-but finite sequence of 9s (more than 20) in the true result can initially be displayed as a larger
-number ending in 0s. As we scroll, the 0s turn into 9s. When we immediately scroll back, the
-number remains displayed as 9s, since the calculator caches the best known result (though not
-currently across restarts or screen rotations).</p>
-
-<p>We prevent 9s from turning into 0s during scrolling. If we generate a result ending in 9s, our
-error bound implies that the true result is strictly less (in absolute value) than the value
-(ending in 0s) we would get by incrementing the last displayed digit. Thus we can never be forced
-back to generating zeros and will always continue to generate 9s.</p>
-
-<h3>Coping with mathematical limits</h3>
-<p>Internally the calculator essentially represents a number as a program for computing however
-many digits we happen to need. This representation has many nice properties, like never resulting
-in the display of incorrect results. It has one inherent weakness: We provably cannot compute
-precisely whether two numbers are equal. We can compute more and more digits of both numbers, and
-if they ever differ by more than one in the last computed digit, we know they are <i>not</i>
-equal. But if the two numbers were in fact the same, this process will go on forever.</p>
-
-<p>This is still better than machine floating point arithmetic, though machine floating point
-better obscures the problem. With machine floating point arithmetic, two computations that should
-mathematically have given the same answer, may give us substantially different answers, and two
-computations that should have given us different answers may easily produce the same one. We
-can indeed determine whether the floating representations are equal, but this tells us little
-about equality of the true mathematical answers.</p>
-
-<p>The undecidability of equality creates some interesting issues. If we divide a number by
-<i>x</i>, the calculator will compute more and more digits of <i>x</i> until it finds some nonzero
-ones. If <i>x</i> was in fact exactly zero, this process will continue forever.</p> <p>We deal
-with this problem using two complementary techniques:</p>
-
-<ol>
-<li>We always run numeric computations in the background, where they won't interfere with user
-interactions, just in case they take a long time. If they do take a really long time, we time
-them out and inform the user that the computation has been aborted. This is unlikely to happen by
-accident, unless the user entered an ill-defined mathematical expression, like a division by
-zero.</li>
-<li>As we will see below, in many cases we use an additional number representation that does allow
-us to determine that a number is exactly zero. Although this easily handles most cases, it is not
-foolproof. If the user enters "1÷0" we immediately detect the division by zero. If the user
-enters "1÷(π−π)" we time out. (We might choose to explicitly recognize such simple cases in the
-future. But this would always remain a heuristic.)</li>
-</ol>
-
-<h3>Zeros further than the eye can see</h3>
-<p>Prototypes of the M calculator, like mathematicians, treated all real numbers as infinite
-objects, with infinitely many digits to scroll through. If the actual computation happened to be
-2−1, the result was initially displayed as <span class="display">1.00000000</span>, and the user
-could keep scrolling through as many thousands of zeroes to the right of that as he desired.
-Although mathematically sound, this proved unpopular for several good reasons, the first one
-probably more serious than the others:</p>
-
-<ol>
-<li>If we computed $1.23 + $7.89, the result would show up as <span
-class="display">9.1200000000</span> or the like, which is unexpected and harder to read quickly
-than <span class="display">9.12</span>.</li>
-<li>Many users consider the result of 2-1 to be a finite number, and find it confusing to be able
-to scroll through lots of zeros on the right.</li>
-<li>Since the calculator couldn't ever tell that a number wasn't going to be scrolled, it couldn't
-treat any result as short enough to allow the use of a larger font.</li>
-</ol>
-
-<p>As a result, the calculator now also tries to compute the result as an exact fraction whenever
-that is easily possible. It is then easy to tell from the fraction whether a number has a finite
-decimal expansion. If it does, we prevent scrolling past that point, and may use the fact that
-the result has a short representation to increase the font size. Results displayed in a larger
-font are not scrollable. We no longer display any zeros for non-zero results unless there is
-either a nonzero or a displayed decimal point to the right. The fact that a result is not
-scrollable tells the user that the result, as displayed, is exact. This is fallible in the other
-direction. For example, we do not compute a rational representation for π−π, and hence it is
-still possible to scroll through as many zeros of that result as you like.</p>
-
-<p>This underlying fractional representation of the result is also used to detect, for example,
-division by zero without a timeout.</p>
-
-<p>Since we calculate the fractional result when we can in any case, it is also now available to
-the user through the overflow menu.</p>
-
-<h2>More details</h2>
-<p>The underlying evaluate-on-demand arithmetic package is described in H. Boehm, "The
-Constructive Reals as a Java Library'', Special issue on practical development of exact real
-number computation, <i>Journal of Logic and Algebraic Programming 64</i>, 1, July 2005, pp. 3-11.
-(Also at <a href="http://www.hpl.hp.com/techreports/2004/HPL-2004-70.html">http://www.hpl.hp.com/techreports/2004/HPL-2004-70.html</a>)</p>
-
-<p>Our version has been slightly refined. Notably it calculates inverse trigonometric functions
-directly instead of using a generic "inverse" function. This is less elegant, but significantly
-improves performance.</p>
-
-</body>
-</html>
-<script type="text/javascript">
-function generateTOC (rootNode, startLevel) {
- var lastLevel = 0;
- startLevel = startLevel || 2;
- var html = "<ul>";
-
- for (var i = 0; i < rootNode.childNodes.length; ++i) {
- var node = rootNode.childNodes[i];
- if (!node.tagName || !/H[1-6]/.test(node.tagName)) {
- continue;
- }
- var level = +node.tagName.substr(1);
- if (level < startLevel) { continue; }
- var name = node.innerText;
- if (node.children.length) { name = node.childNodes[0].innerText; }
- if (!name) { continue; }
- var hashable = name.replace(/[.\s\']/g, "-");
- node.id = hashable;
- if (level > lastLevel) {
- html += "";
- } else if (level < lastLevel) {
- html += (new Array(lastLevel - level + 2)).join("</ul></li>");
- } else {
- html += "</ul></li>";
- }
- html += "<li><a class='lvl"+level+"' href='#" + hashable + "'>" + name + "</a><ul>";
- lastLevel = level;
- }
-
- html += "</ul>";
- return html;
-}
-
-function init() {
- document.getElementById("toc").innerHTML = generateTOC(document.body);
-}
-</script>
diff --git a/docs/implementation-overview.html b/docs/implementation-overview.html
deleted file mode 100644
index a06e73b..0000000
--- a/docs/implementation-overview.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Calculator Implementation Overview</title>
-<meta charset="UTF-8">
-</head>
-<h1>M Calculator Implementation Overview</h1>
-<p>Although the appearance of the calculator has changed little from Lollipop, and some of the UI
-code is indeed the same, the rest of the code has changed substantially. Unsurprisingly,
-<b>Calculator.java</b> implements the main UI. The other major parts of the implementation
-are:</p>
-
-<p><b>CR.java</b> in <b>external/crcalc</b> provides the underlying demand-driven ("constructive
-real") arithmetic implementation. Numbers are represented primarily as objects with a method that
-can compute arbitrarily precise approximations. The actual arithmetic performed by these methods
-is based on Java's <tt>java.util.BigInteger</tt> arithmetic, with appropriate implicit
-scaling.</p>
-
-<p><b>BoundedRational.java</b> is a rational arithmetic package that is used to provide finite
-exact answers in "easy" cases. It is used primarily to determine when an approximation provided
-by CR.java is actually exact. This is used in turn both to limit the length of displayed results
-and scrolling, as well as to identify errors such as division by zero, that would otherwise result
-in timeouts during computations. It is in some sense not needed to produce correct results, but
-it significantly improves the usability of the calculator. It is also used for the "display as
-fraction" option in the overflow menu.</p>
-
-<p><b>CalculatorExpr.java</b> implements calculator arithmetic expressions. It supports editing,
-saving, restoring, and evaluation of expressions. Evaluation produces a constructive real (CR)
-and possibly a BoundedRational result. Unlike the "arity" library used in earlier versions, the
-underlying expression is represented as a sequence of "tokens", many of which are represented by
-Button ids, not as a character string.</p>
-
-<p><b>Evaluator.java</b> implements much of the actual calculator logic, particularly background
-expression evaluation. Expression evaluation here includes both using CalculatorExpr.java to
-evaluate the expression, and then invoking the resulting CR value to actually produce finite
-approximations and convert them to decimal. Two types of expression evaluation are supported:
-(1) Initial evaluation of the expression and producing an initial decimal approximation, and (2)
-reevaluation to higher precision. (1) is invoked directly from the Calculator UI, while (2) is
-invoked from the calculator display, commonly in response to scrolling. When the display requests
-a result, a "result" is immediately returned, though it may contains blank placeholders. The
-display is then notified when the real result becomes available.</p>
-
-<p><b>CalculatorText.java</b> is the TextView subclass used to display the formula.</p>
-
-<p><b>CalculatorResult.java</b> is the TextView subclass used to display the result. It handles
-result formatting, scrolling, etc. After the user hits "=", the CalculatorResult widget moves
-into the top position, replacing the formula display. Currently it remains in that position until
-the formula is again modified.</p>
-</body>
-</html>
-
diff --git a/proguard.flags b/proguard.flags
deleted file mode 100644
index 0fa387a..0000000
--- a/proguard.flags
+++ /dev/null
@@ -1,58 +0,0 @@
-# This is a configuration file for ProGuard based on "proguard-android.txt".
-# http://proguard.sourceforge.net/index.html#manual/usage.html
-
--dontusemixedcaseclassnames
--dontskipnonpubliclibraryclasses
--verbose
-
-# Optimization is turned off by default. Dex does not like code run
-# through the ProGuard optimize and preverify steps (and performs some
-# of these optimizations on its own).
--dontoptimize
--dontpreverify
-
--keepattributes *Annotation*
--keep public class com.google.vending.licensing.ILicensingService
--keep public class com.android.vending.licensing.ILicensingService
-
-# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
--keepclasseswithmembernames class * {
- native <methods>;
-}
-
-# Keep setters in Views so that animations can still work.
-# see http://proguard.sourceforge.net/manual/examples.html#beans
--keepclassmembers public class * extends android.view.View {
- void set*(***);
- *** get*();
-}
-
-# Keep methods in Activity that could be used in the XML attribute onClick.
--keepclassmembers class * extends android.app.Activity {
- public void *(android.view.View);
-}
-
-# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
--keepclassmembers enum * {
- public static **[] values();
- public static ** valueOf(java.lang.String);
-}
-
--keep class * implements android.os.Parcelable {
- public static final android.os.Parcelable$Creator *;
-}
-
--keepclassmembers class **.R$* {
- public static <fields>;
-}
-
-# The support library contains references to newer platform versions.
-# Don't warn about those in case this app is linking against an older
-# platform version. We know about them, and they are safe.
--dontwarn android.support.**
-
-# Some small BoundedRational methods like equals() are not used by the
-# calculator, but crucial for testing.
--keepclassmembers class com.android.calculator2.BoundedRational { *; }
-# Need CR comparison operators for testing.
--keepclassmembers class com.hp.creals.CR { *; }
diff --git a/res/drawable/ic_history_grey600_48dp.xml b/res/drawable/ic_history_grey600_48dp.xml
deleted file mode 100644
index 65103fc..0000000
--- a/res/drawable/ic_history_grey600_48dp.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-<vector
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:height="24dp"
- android:width="24dp"
- android:viewportHeight="48.0"
- android:viewportWidth="48.0">
- <path
- android:fillColor="#757575"
- android:pathData="M25.99,6C16.04,6 8,14.06 8,24H2l7.79,7.79 0.14,0.29L18,24h-6c0,-7.73
- 6.27,-14 14,-14s14,6.27 14,14 -6.27,14 -14,14c-3.87,0 -7.36,-1.58
- -9.89,-4.11l-2.83,2.83C16.53,39.98 21.02,42 25.99,42 35.94,42 44,33.94 44,24S35.94,6
- 25.99,6zM24,16v10l8.56,5.08L34,28.65l-7,-4.15V16h-3z" />
-</vector> \ No newline at end of file
diff --git a/res/drawable/pad_button_advanced_background.xml b/res/drawable/pad_button_advanced_background.xml
deleted file mode 100644
index 9cf0de9..0000000
--- a/res/drawable/pad_button_advanced_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/pad_button_advanced_ripple_color" /> \ No newline at end of file
diff --git a/res/drawable/pad_button_background.xml b/res/drawable/pad_button_background.xml
deleted file mode 100644
index b4861d0..0000000
--- a/res/drawable/pad_button_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/pad_button_ripple_color" /> \ No newline at end of file
diff --git a/res/drawable/pad_button_inverse_background.xml b/res/drawable/pad_button_inverse_background.xml
deleted file mode 100644
index ff0b2ae..0000000
--- a/res/drawable/pad_button_inverse_background.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
- -->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/pad_button_advanced_ripple_color">
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <corners android:radius="4dip" />
- <solid android:color="@android:color/white" />
- </shape>
- </item>
- <item>
- <selector
- android:enterFadeDuration="@android:integer/config_longAnimTime"
- android:exitFadeDuration="@android:integer/config_longAnimTime">
- <item android:state_selected="true">
- <shape android:shape="rectangle">
- <corners android:radius="4dip" />
- <solid android:color="@color/pad_button_advanced_ripple_color" />
- </shape>
- </item>
- </selector>
- </item>
-</ripple>
diff --git a/res/layout/activity_calculator_land.xml b/res/layout/activity_calculator_land.xml
deleted file mode 100644
index a19cd86..0000000
--- a/res/layout/activity_calculator_land.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <include
- layout="@layout/display"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1">
-
- <include layout="@layout/pad_numeric" />
- <include layout="@layout/pad_operator" />
- <include layout="@layout/pad_advanced" />
-
- </LinearLayout>
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/activity_calculator_main.xml b/res/layout/activity_calculator_main.xml
deleted file mode 100644
index 2e9d62d..0000000
--- a/res/layout/activity_calculator_main.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-
-<com.android.calculator2.DragLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/drag_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <include
- android:id="@+id/main_calculator"
- layout="@layout/activity_calculator" />
-
- <FrameLayout
- android:id="@+id/history_frame"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:visibility="invisible" />
-
-</com.android.calculator2.DragLayout>
diff --git a/res/layout/activity_calculator_port.xml b/res/layout/activity_calculator_port.xml
deleted file mode 100644
index 30aaf00..0000000
--- a/res/layout/activity_calculator_port.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <include layout="@layout/display" />
-
- <com.android.calculator2.CalculatorPadViewPager
- android:id="@+id/pad_pager"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:overScrollMode="never">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <include layout="@layout/pad_numeric" />
- <include layout="@layout/pad_operator" />
-
- </LinearLayout>
-
- <include layout="@layout/pad_advanced" />
-
- </com.android.calculator2.CalculatorPadViewPager>
-
-</LinearLayout>
diff --git a/res/layout/activity_calculator_tablet_port.xml b/res/layout/activity_calculator_tablet_port.xml
deleted file mode 100644
index 9eab3af..0000000
--- a/res/layout/activity_calculator_tablet_port.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <include layout="@layout/display" />
-
- <include layout="@layout/pad_advanced" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="500">
-
- <include layout="@layout/pad_numeric"/>
- <include layout="@layout/pad_operator" />
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout/dialog_message.xml b/res/layout/dialog_message.xml
deleted file mode 100644
index 233849e..0000000
--- a/res/layout/dialog_message.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
- -->
-
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/message"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="20dip"
- android:ellipsize="none"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textIsSelectable="true" />
diff --git a/res/layout/display_one_line.xml b/res/layout/display_one_line.xml
deleted file mode 100644
index 11760fb..0000000
--- a/res/layout/display_one_line.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-
-<com.android.calculator2.CalculatorDisplay
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/display"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/display_background_color"
- android:clipChildren="false"
- android:elevation="4dip"
- android:orientation="vertical">
-
- <include layout="@layout/toolbar" />
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <com.android.calculator2.CalculatorScrollView
- android:id="@+id/formula_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:overScrollMode="never"
- android:scrollbars="none">
-
- <com.android.calculator2.CalculatorFormula
- android:id="@+id/formula"
- style="@style/DisplayTextStyle.Formula"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="bottom|end"
- android:ellipsize="none"
- android:gravity="bottom|end"
- android:longClickable="true"
- android:singleLine="true"
- android:textColor="@color/display_formula_text_color"
- android:textIsSelectable="false" />
-
- </com.android.calculator2.CalculatorScrollView>
-
- <com.android.calculator2.CalculatorResult
- android:id="@+id/result"
- style="@style/DisplayTextStyle.Result"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:bufferType="spannable"
- android:singleLine="true"
- android:textColor="@color/display_result_text_color"
- android:visibility="invisible" />
-
- </FrameLayout>
-
-</com.android.calculator2.CalculatorDisplay>
diff --git a/res/layout/display_two_line.xml b/res/layout/display_two_line.xml
deleted file mode 100644
index 3f7338d..0000000
--- a/res/layout/display_two_line.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<com.android.calculator2.CalculatorDisplay
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/display"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/display_background_color"
- android:elevation="4dip"
- android:orientation="vertical">
-
- <include layout="@layout/toolbar" />
-
- <com.android.calculator2.CalculatorScrollView
- android:id="@+id/formula_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:overScrollMode="never"
- android:scrollbars="none">
-
- <com.android.calculator2.CalculatorFormula
- android:id="@+id/formula"
- style="@style/DisplayTextStyle.Formula"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:ellipsize="none"
- android:maxLines="1"
- android:textColor="@color/display_formula_text_color" />
-
- </com.android.calculator2.CalculatorScrollView>
-
- <com.android.calculator2.CalculatorResult
- android:id="@+id/result"
- style="@style/DisplayTextStyle.Result"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:bufferType="spannable"
- android:singleLine="true"
- android:textColor="@color/display_result_text_color" />
-
-</com.android.calculator2.CalculatorDisplay>
diff --git a/res/layout/empty_history_view.xml b/res/layout/empty_history_view.xml
deleted file mode 100644
index 7814b52..0000000
--- a/res/layout/empty_history_view.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/empty_history_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:drawableTop="@drawable/ic_history_grey600_48dp"
- android:text="@string/no_history"
- android:textSize="20sp" />
-
-</FrameLayout> \ No newline at end of file
diff --git a/res/layout/fragment_history.xml b/res/layout/fragment_history.xml
deleted file mode 100644
index c3c5b62..0000000
--- a/res/layout/fragment_history.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false"
- android:orientation="vertical">
-
- <Toolbar
- android:id="@+id/history_toolbar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?android:attr/colorPrimary"
- android:elevation="4dip"
- android:minHeight="?android:attr/actionBarSize"
- android:navigationContentDescription="@string/desc_navigate_up"
- android:navigationIcon="?android:attr/homeAsUpIndicator"
- android:popupTheme="@android:style/ThemeOverlay.Material.Light"
- android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"
- android:title="@string/title_history" />
-
- <androidx.recyclerview.widget.RecyclerView
- android:id="@+id/history_recycler_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/display_background_color"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:paddingBottom="@dimen/history_divider_padding"
- android:visibility="invisible"
- app:layoutManager="LinearLayoutManager"
- app:reverseLayout="true" />
-
-</LinearLayout>
diff --git a/res/layout/history_item.xml b/res/layout/history_item.xml
deleted file mode 100644
index cf8b6c0..0000000
--- a/res/layout/history_item.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="@dimen/history_divider_padding"
- android:clipChildren="false"
- android:clipToPadding="false"
- android:importantForAccessibility="no"
- android:orientation="vertical">
-
- <View
- android:id="@+id/history_divider"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/history_divider_padding"
- android:layout_marginBottom="@dimen/history_divider_padding"
- android:background="?android:attr/listDivider"
- android:importantForAccessibility="no" />
-
- <TextView
- android:id="@+id/history_date"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:fontFamily="sans-serif-medium"
- android:paddingStart="@dimen/result_padding_start"
- android:paddingEnd="@dimen/result_padding_end"
- android:text="@string/title_current_expression"
- android:textColor="?android:attr/colorAccent"
- android:textSize="14dp" />
-
- <com.android.calculator2.CalculatorScrollView
- android:id="@+id/history_formula_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:overScrollMode="never"
- android:scrollbars="none">
-
- <com.android.calculator2.AlignedTextView
- android:id="@+id/history_formula"
- style="@style/HistoryItemTextStyle"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:ellipsize="none"
- android:textColor="@color/display_formula_text_color" />
-
- </com.android.calculator2.CalculatorScrollView>
-
- <com.android.calculator2.CalculatorResult
- android:id="@+id/history_result"
- style="@style/HistoryItemTextStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:bufferType="spannable"
- android:maxLines="1"
- android:textColor="@color/display_result_text_color" />
-
-</LinearLayout>
diff --git a/res/layout/pad_advanced_3x5.xml b/res/layout/pad_advanced_3x5.xml
deleted file mode 100644
index cf38fe6..0000000
--- a/res/layout/pad_advanced_3x5.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
- -->
-
-<androidx.gridlayout.widget.GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/pad_advanced"
- style="@style/PadLayoutStyle.Advanced"
- android:background="@color/pad_advanced_background_color"
- app:rowCount="5"
- app:columnCount="3">
-
- <Button
- android:id="@+id/toggle_inv"
- style="@style/PadButtonStyle.Advanced.Text"
- android:background="@drawable/pad_button_inverse_background"
- android:contentDescription="@string/desc_inv_off"
- android:text="@string/inv"
- app:layout_row="0"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/toggle_mode"
- style="@style/PadButtonStyle.Advanced.Text"
- android:contentDescription="@string/desc_switch_deg"
- android:text="@string/mode_deg"
- app:layout_row="0"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_pct"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pct"
- android:text="@string/op_pct"
- app:layout_row="0"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_sin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_sin"
- android:text="@string/fun_sin"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_arcsin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arcsin"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arcsin"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_cos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_cos"
- android:text="@string/fun_cos"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_arccos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arccos"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arccos"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_tan"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_tan"
- android:text="@string/fun_tan"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_arctan"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arctan"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arctan"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_ln"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_ln"
- android:text="@string/fun_ln"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_exp"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_exp"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_exp"
- android:visibility="gone"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_log"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_log"
- android:text="@string/fun_log"
- app:layout_row="2"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_10pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_10pow"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_10pow"
- android:visibility="gone"
- app:layout_row="2"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_fact"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_fact"
- android:text="@string/op_fact"
- app:layout_row="2"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/const_pi"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_const_pi"
- android:text="@string/const_pi"
- app:layout_row="3"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/const_e"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_const_e"
- android:text="@string/const_e"
- app:layout_row="3"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pow"
- android:text="@string/op_pow"
- app:layout_row="3"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/lparen"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_lparen"
- android:text="@string/lparen"
- app:layout_row="4"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/rparen"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_rparen"
- android:text="@string/rparen"
- app:layout_row="4"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_sqrt"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_sqrt"
- android:text="@string/op_sqrt"
- app:layout_row="4"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/op_sqr"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_sqr"
- android:fontFamily="sans-serif-medium"
- android:text="@string/op_sqr"
- android:visibility="gone"
- app:layout_row="4"
- app:layout_column="2" />
-
-</androidx.gridlayout.widget.GridLayout>
diff --git a/res/layout/pad_advanced_4x4.xml b/res/layout/pad_advanced_4x4.xml
deleted file mode 100644
index dd5a792..0000000
--- a/res/layout/pad_advanced_4x4.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-
-<androidx.gridlayout.widget.GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/pad_advanced"
- style="@style/PadLayoutStyle.Advanced"
- android:background="@color/pad_advanced_background_color"
- app:rowCount="4"
- app:columnCount="4">
-
- <Button
- android:id="@+id/toggle_inv"
- style="@style/PadButtonStyle.Advanced.Text"
- android:background="@drawable/pad_button_inverse_background"
- android:contentDescription="@string/desc_inv_off"
- android:text="@string/inv"
- app:layout_row="0"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/toggle_mode"
- style="@style/PadButtonStyle.Advanced.Text"
- android:contentDescription="@string/desc_switch_deg"
- android:text="@string/mode_deg"
- app:layout_row="0"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_pct"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pct"
- android:text="@string/op_pct"
- app:layout_row="0"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_sin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_sin"
- android:text="@string/fun_sin"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_arcsin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arcsin"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arcsin"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_cos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_cos"
- android:text="@string/fun_cos"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_arccos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arccos"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arccos"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_tan"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_tan"
- android:text="@string/fun_tan"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_arctan"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arctan"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arctan"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/const_pi"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_const_pi"
- android:text="@string/const_pi"
- app:layout_row="1"
- app:layout_column="3" />
-
- <Button
- android:id="@+id/fun_ln"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_ln"
- android:text="@string/fun_ln"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_exp"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_exp"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_exp"
- android:visibility="gone"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_log"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_log"
- android:text="@string/fun_log"
- app:layout_row="2"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_10pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_10pow"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_10pow"
- android:visibility="gone"
- app:layout_row="2"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_fact"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_fact"
- android:text="@string/op_fact"
- app:layout_row="2"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/const_e"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_const_e"
- android:text="@string/const_e"
- app:layout_row="2"
- app:layout_column="3" />
-
- <Button
- android:id="@+id/lparen"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_lparen"
- android:text="@string/lparen"
- app:layout_row="3"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/rparen"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_rparen"
- android:text="@string/rparen"
- app:layout_row="3"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_sqrt"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_sqrt"
- android:text="@string/op_sqrt"
- app:layout_row="3"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/op_sqr"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_sqr"
- android:fontFamily="sans-serif-medium"
- android:text="@string/op_sqr"
- android:visibility="gone"
- app:layout_row="3"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/op_pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pow"
- android:text="@string/op_pow"
- app:layout_row="3"
- app:layout_column="3" />
-
-</androidx.gridlayout.widget.GridLayout>
diff --git a/res/layout/pad_advanced_5x3.xml b/res/layout/pad_advanced_5x3.xml
deleted file mode 100644
index 21ed723..0000000
--- a/res/layout/pad_advanced_5x3.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
- -->
-
-<androidx.gridlayout.widget.GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/pad_advanced"
- style="@style/PadLayoutStyle.Advanced"
- android:background="@color/pad_advanced_background_color"
- app:rowCount="3"
- app:columnCount="5">
-
- <Button
- android:id="@+id/toggle_inv"
- style="@style/PadButtonStyle.Advanced.Text"
- android:background="@drawable/pad_button_inverse_background"
- android:contentDescription="@string/desc_inv_off"
- android:text="@string/inv"
- app:layout_row="0"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/toggle_mode"
- style="@style/PadButtonStyle.Advanced.Text"
- android:contentDescription="@string/desc_switch_deg"
- android:text="@string/mode_deg"
- app:layout_row="0"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_sin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_sin"
- android:text="@string/fun_sin"
- app:layout_row="0"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_arcsin"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arcsin"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arcsin"
- android:visibility="gone"
- app:layout_row="0"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_cos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_cos"
- android:text="@string/fun_cos"
- app:layout_row="0"
- app:layout_column="3" />
-
- <Button
- android:id="@+id/fun_arccos"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arccos"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arccos"
- android:visibility="gone"
- app:layout_row="0"
- app:layout_column="3" />
-
- <Button
- android:id="@+id/fun_tan"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_tan"
- android:text="@string/fun_tan"
- app:layout_row="0"
- app:layout_column="4" />
-
- <Button
- android:id="@+id/fun_arctan"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_arctan"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_arctan"
- android:visibility="gone"
- app:layout_row="0"
- app:layout_column="4" />
-
- <Button
- android:id="@+id/op_pct"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pct"
- android:text="@string/op_pct"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/fun_ln"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_ln"
- android:text="@string/fun_ln"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_exp"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_exp"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_exp"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/fun_log"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_log"
- android:text="@string/fun_log"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/fun_10pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_fun_10pow"
- android:fontFamily="sans-serif-medium"
- android:text="@string/fun_10pow"
- android:visibility="gone"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/op_fact"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_fact"
- android:text="@string/op_fact"
- app:layout_row="1"
- app:layout_column="3" />
-
- <Button
- android:id="@+id/op_pow"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_pow"
- android:text="@string/op_pow"
- app:layout_row="1"
- app:layout_column="4" />
-
- <Button
- android:id="@+id/const_pi"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_const_pi"
- android:text="@string/const_pi"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/const_e"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_const_e"
- android:text="@string/const_e"
- app:layout_row="2"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/lparen"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_lparen"
- android:text="@string/lparen"
- app:layout_row="2"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/rparen"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_rparen"
- android:text="@string/rparen"
- app:layout_row="2"
- app:layout_column="3" />
-
- <Button
- android:id="@+id/op_sqrt"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_sqrt"
- android:text="@string/op_sqrt"
- app:layout_row="2"
- app:layout_column="4" />
-
- <Button
- android:id="@+id/op_sqr"
- style="@style/PadButtonStyle.Advanced"
- android:contentDescription="@string/desc_op_sqr"
- android:fontFamily="sans-serif-medium"
- android:text="@string/op_sqr"
- android:visibility="gone"
- app:layout_row="2"
- app:layout_column="4" />
-
-</androidx.gridlayout.widget.GridLayout>
diff --git a/res/layout/pad_numeric.xml b/res/layout/pad_numeric.xml
deleted file mode 100644
index 5810984..0000000
--- a/res/layout/pad_numeric.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<androidx.gridlayout.widget.GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/pad_numeric"
- style="@style/PadLayoutStyle.Numeric"
- android:background="@color/pad_numeric_background_color"
- app:rowCount="4"
- app:columnCount="3">
-
- <Button
- android:id="@+id/digit_7"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_7"
- app:layout_row="0"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/digit_8"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_8"
- app:layout_row="0"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/digit_9"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_9"
- app:layout_row="0"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/digit_4"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_4"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/digit_5"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_5"
- app:layout_row="1"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/digit_6"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_6"
- app:layout_row="1"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/digit_1"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_1"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/digit_2"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_2"
- app:layout_row="2"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/digit_3"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_3"
- app:layout_row="2"
- app:layout_column="2" />
-
- <Button
- android:id="@+id/dec_point"
- style="@style/PadButtonStyle.Numeric"
- android:contentDescription="@string/desc_dec_point"
- app:layout_row="3"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/digit_0"
- style="@style/PadButtonStyle.Numeric"
- android:text="@string/digit_0"
- app:layout_row="3"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/eq"
- style="@style/PadButtonStyle.Numeric.Equals"
- android:contentDescription="@string/desc_eq"
- android:text="@string/eq"
- app:layout_row="3"
- app:layout_column="2" />
-
-</androidx.gridlayout.widget.GridLayout>
diff --git a/res/layout/pad_operator_one_col.xml b/res/layout/pad_operator_one_col.xml
deleted file mode 100644
index 3484972..0000000
--- a/res/layout/pad_operator_one_col.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<androidx.gridlayout.widget.GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/pad_operator"
- style="@style/PadLayoutStyle.Operator"
- android:background="@color/pad_operator_background_color"
- app:rowCount="5"
- app:columnCount="1">
-
- <Button
- android:id="@+id/del"
- style="@style/PadButtonStyle.Operator.Text"
- android:contentDescription="@string/desc_del"
- android:text="@string/del"
- app:layout_row="0"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/clr"
- style="@style/PadButtonStyle.Operator.Text"
- android:contentDescription="@string/desc_clr"
- android:text="@string/clr"
- android:visibility="gone"
- app:layout_row="0"
- app:layout_column="0" />
-
-
- <Button
- android:id="@+id/op_div"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_div"
- android:text="@string/op_div"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/op_mul"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_mul"
- android:text="@string/op_mul"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/op_sub"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_sub"
- android:text="@string/op_sub"
- app:layout_row="3"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/op_add"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_add"
- android:text="@string/op_add"
- app:layout_row="4"
- app:layout_column="0" />
-
-</androidx.gridlayout.widget.GridLayout>
diff --git a/res/layout/pad_operator_two_col.xml b/res/layout/pad_operator_two_col.xml
deleted file mode 100644
index b819162..0000000
--- a/res/layout/pad_operator_two_col.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<androidx.gridlayout.widget.GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/pad_operator"
- style="@style/PadLayoutStyle.Operator"
- android:background="@color/pad_operator_background_color"
- app:rowCount="4"
- app:columnCount="2">
-
- <Button
- android:id="@+id/op_div"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_div"
- android:text="@string/op_div"
- app:layout_row="0"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/del"
- style="@style/PadButtonStyle.Operator.Text"
- android:contentDescription="@string/desc_del"
- android:text="@string/del"
- app:layout_row="0"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/clr"
- style="@style/PadButtonStyle.Operator.Text"
- android:contentDescription="@string/desc_clr"
- android:text="@string/clr"
- android:visibility="gone"
- app:layout_row="0"
- app:layout_column="1" />
-
- <Button
- android:id="@+id/op_mul"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/op_mul"
- android:text="@string/op_mul"
- app:layout_row="1"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/op_sub"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_sub"
- android:text="@string/op_sub"
- app:layout_row="2"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/op_add"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_op_add"
- android:text="@string/op_add"
- app:layout_row="3"
- app:layout_column="0" />
-
- <Button
- android:id="@+id/eq"
- style="@style/PadButtonStyle.Operator"
- android:contentDescription="@string/desc_eq"
- android:text="@string/eq"
- app:layout_row="3"
- app:layout_column="1" />
-
-</androidx.gridlayout.widget.GridLayout>
diff --git a/res/layout/toolbar.xml b/res/layout/toolbar.xml
deleted file mode 100644
index 56f05b6..0000000
--- a/res/layout/toolbar.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-
-<Toolbar
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:layout_gravity="top">
-
- <TextView
- android:id="@+id/mode"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:fontFamily="sans-serif-medium"
- android:textAllCaps="true"
- android:textSize="16sp" />
-
-</Toolbar> \ No newline at end of file
diff --git a/res/menu/activity_calculator.xml b/res/menu/activity_calculator.xml
deleted file mode 100644
index d0c5659..0000000
--- a/res/menu/activity_calculator.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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.
- -->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item
- android:id="@+id/menu_history"
- android:title="@string/menu_history" />
-
- <item android:id="@+id/menu_leading"
- android:title="@string/menu_leading" />
-
- <item android:id="@+id/menu_fraction"
- android:title="@string/menu_fraction" />
-
- <item android:id="@+id/menu_licenses"
- android:title="@string/menu_licenses" />
-
-</menu>
diff --git a/res/menu/fragment_history.xml b/res/menu/fragment_history.xml
deleted file mode 100644
index 8c9f1d6..0000000
--- a/res/menu/fragment_history.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
- -->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item
- android:id="@+id/menu_clear_history"
- android:title="@string/menu_clear_history" />
-
-</menu> \ No newline at end of file
diff --git a/res/menu/menu_formula.xml b/res/menu/menu_formula.xml
deleted file mode 100644
index 8882c8a..0000000
--- a/res/menu/menu_formula.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
- */
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item android:id="@+id/memory_recall"
- android:title="@string/memory_recall"/>
-
- <item android:id="@+id/menu_paste"
- android:title="@android:string/paste"/>
-
-</menu>
diff --git a/res/menu/menu_result.xml b/res/menu/menu_result.xml
deleted file mode 100644
index 15e76cd..0000000
--- a/res/menu/menu_result.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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.
- */
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item
- android:id="@+id/memory_store"
- android:title="@string/memory_store" />
-
- <item
- android:id="@+id/memory_add"
- android:title="@string/memory_add" />
-
- <item
- android:id="@+id/memory_subtract"
- android:title="@string/memory_subtract" />
-
- <item
- android:id="@+id/menu_copy"
- android:title="@android:string/copy" />
-
-</menu> \ No newline at end of file
diff --git a/res/mipmap-hdpi/ic_launcher_calculator.png b/res/mipmap-hdpi/ic_launcher_calculator.png
deleted file mode 100644
index e50e87e..0000000
--- a/res/mipmap-hdpi/ic_launcher_calculator.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_calculator.png b/res/mipmap-mdpi/ic_launcher_calculator.png
deleted file mode 100644
index 2fcdc67..0000000
--- a/res/mipmap-mdpi/ic_launcher_calculator.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_calculator.png b/res/mipmap-xhdpi/ic_launcher_calculator.png
deleted file mode 100644
index 67993fc..0000000
--- a/res/mipmap-xhdpi/ic_launcher_calculator.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_launcher_calculator.png b/res/mipmap-xxhdpi/ic_launcher_calculator.png
deleted file mode 100644
index 71387a9..0000000
--- a/res/mipmap-xxhdpi/ic_launcher_calculator.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_launcher_calculator.png b/res/mipmap-xxxhdpi/ic_launcher_calculator.png
deleted file mode 100644
index 9d61dc4..0000000
--- a/res/mipmap-xxxhdpi/ic_launcher_calculator.png
+++ /dev/null
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
deleted file mode 100644
index 670f840..0000000
--- a/res/values-af/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Sakrekenaar"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"uitgevee"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler-nommer"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punt"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"beginhakie"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"eindhakie"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natuurlike logaritme"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"omgekeerde kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"omgekeerde sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"omgekeerde tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"tien tot die mag"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponentfunksie"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kwadraat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"deel"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriaal"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"vermenigvuldig"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"persent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"tot die mag"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"vierkantswortel"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"grademodus"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"straalhoekmodus"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"skakel oor na grade"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"skakel oor na straalhoeke"</string>
- <string name="desc_eq" msgid="3349320880874699285">"is gelyk aan"</string>
- <string name="desc_clr" msgid="737502124268890797">"maak skoon"</string>
- <string name="desc_del" msgid="7879515781929311432">"vee uit"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"wys omgekeerde funksies"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"versteek omgekeerde funksies"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Geen formule nie"</string>
- <string name="desc_result" msgid="1794073190203126821">"Geen resultaat nie"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Getalle en basiese handelinge"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Gevorderde handelinge"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nie getal nie"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Swak uitdrukking"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Gestaak"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Oneindig?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Kan nie deur 0 deel nie"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teks is gekopieer"</string>
- <string name="cancelled" msgid="2207323593183640994">"Berekening is gekanselleer."</string>
- <string name="timeout" msgid="5461892570729418573">"Waarde is dalk oneindig of ongedefinieer."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Gebruik langer uitteltye"</string>
- <string name="dismiss" msgid="7872443888515066216">"Maak toe"</string>
- <string name="exact" msgid="2597237880041789948">"(presies)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 in laaste syfer)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Antwoord met leidende syfers"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Antwoord as breuk"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Oopbronlisensies"</string>
- <string name="menu_history" msgid="9006222701220105452">"Geskiedenis"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Vee uit"</string>
- <string name="title_history" msgid="7820912156315181539">"Geskiedenis"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigeer op"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Uitgetel"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Vee geskiedenis en berging uit?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Huidige uitdrukking"</string>
- <string name="no_history" msgid="4331262030447527188">"Geen geskiedenis nie"</string>
-</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
deleted file mode 100644
index 87e844b..0000000
--- a/res/values-am/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ማስያ"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"ዲግ"</string>
- <string name="mode_rad" msgid="1434228830085760996">"ራዲ"</string>
- <string name="clr" msgid="6730945431543327337">"አጽዳ"</string>
- <string name="cleared" msgid="3952521190281880880">"ጸድቷል"</string>
- <string name="del" msgid="5878069000864178910">"ሰርዝ"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"የዩለር ቁጥር"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"ፓይ"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ነጥብ"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"የግራ ቅንፍ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"የቀኝ ቅንፍ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"ኮሳይን"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ተፈጥሯዊ ሎጋሪዝም"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ሎጋሪዝም"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ሳይን"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ታንጀት"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"ግልብጥ ኮሳይን"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ግልብጥ ሳይን"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"ግልብጥ ታንጀንት"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"አስር በዚህ ኃይል ተባዝቶ፦"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"አርቢ ቅን ተዛምዶ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ዳግም ርቢ"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"ሲደመር"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ሲካፈል"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ብዜት"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"አባዛ"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"መቶኛ"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ርቢ"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ዳግም ዘር"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ሲቀነስ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"የዲግሪ ሁነታ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"የራዲያን ሁነታ"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ወደ ዲግሪ ቀይር"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ወደ ራዲያኖች ቀይር"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ይሆናል"</string>
- <string name="desc_clr" msgid="737502124268890797">"አጽዳ"</string>
- <string name="desc_del" msgid="7879515781929311432">"ሰርዝ"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"የተገላቢጦሽ ተግባሮችን አሳይ"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"የተገላቢጦሽ ተግባሮችን ደብቅ"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ምንም ቀመር የለም"</string>
- <string name="desc_result" msgid="1794073190203126821">"ምንም ውጤት የለም"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"ቁጥሮች እና መሠረታዊ ክወናዎች"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"የላቁ ክወናዎች"</string>
- <string name="error_nan" msgid="5674077944929888710">"ቁጥር አይደለም"</string>
- <string name="error_syntax" msgid="4786987111228645602">"መጥፎ የሒሳብ ሐረግ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ተቋርጧል"</string>
- <string name="error_overflow" msgid="7800547394563434764">"የትየለሌ?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"በ0 ማካፈል አይቻልም"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ፅሁፍ ተቀድቷል"</string>
- <string name="cancelled" msgid="2207323593183640994">"ማስላት ተሰርዟል።"</string>
- <string name="timeout" msgid="5461892570729418573">"እሴቱ የትየሌለ ወይም ያልተገለጸ ሊሆን ይችላል።"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ረጅም የመጠበቂያ ጊዜ ይጠቀሙ"</string>
- <string name="dismiss" msgid="7872443888515066216">"አሰናብት"</string>
- <string name="exact" msgid="2597237880041789948">"(ትክክለኛ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 በመጨረሻው አኃዝ ውስጥ)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"በሚመሩ አኃዞች መልስ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"እንደ ክፍልፋይ መልስ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"የክፍት ምንጭ ፍቃዶች"</string>
- <string name="menu_history" msgid="9006222701220105452">"ታሪክ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"አጽዳ"</string>
- <string name="title_history" msgid="7820912156315181539">"ታሪክ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ወደ ላይ ያስሱ"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"ጊዜ አልቋል"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ታሪክ እና ማህደረ ትውስታ ይጽዳ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"የአሁኑ አገላለጽ"</string>
- <string name="no_history" msgid="4331262030447527188">"ምንም ታሪክ የለም"</string>
-</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
deleted file mode 100644
index 6a23081..0000000
--- a/res/values-ar/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"الآلة الحاسبة"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"محو"</string>
- <string name="cleared" msgid="3952521190281880880">"تم المحو"</string>
- <string name="del" msgid="5878069000864178910">"حذف"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"رقم أويلر"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"باي"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"نقطة"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"قوس أيسر"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"قوس أيمن"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"جيب التمام"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"اللوغاريتم الطبيعي"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"لوغاريتم"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"جيب الزاوية"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ظل الزاوية"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"معكوس جيب التمام"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"معكوس جيب الزاوية"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"معكوس ظل الزاوية"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"رفع رقم عشرة إلى القوة الجبرية لـ"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"دالة أسية"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"تربيعي"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"جمع"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"قسمة"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"العامل"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ضرب"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"النسبة المئوية"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"الطاقة"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"جذر تربيعي"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"طرح"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"وضع الدرجة"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"وضع الراديان"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"التبديل إلى الدرجات"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"التبديل إلى الراديان"</string>
- <string name="desc_eq" msgid="3349320880874699285">"يساوي"</string>
- <string name="desc_clr" msgid="737502124268890797">"محو"</string>
- <string name="desc_del" msgid="7879515781929311432">"حذف"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"عرض الدالات العكسية"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"إخفاء الدالات العكسية"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ليست هناك صيغة"</string>
- <string name="desc_result" msgid="1794073190203126821">"ليست هناك أي نتائج"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"الأرقام والعمليات الأساسية"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"العمليات المتقدمة"</string>
- <string name="error_nan" msgid="5674077944929888710">"ليس رقمًا"</string>
- <string name="error_syntax" msgid="4786987111228645602">"صيغة سيئة"</string>
- <string name="error_aborted" msgid="3402238176316342537">"تم الإلغاء"</string>
- <string name="error_overflow" msgid="7800547394563434764">"غير محدد؟"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"لا يمكن القسمة على ۰"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"تم نسخ النص"</string>
- <string name="cancelled" msgid="2207323593183640994">"تم إلغاء العملية الحسابية."</string>
- <string name="timeout" msgid="5461892570729418573">"قد تكون القيمة لانهائية أو غير محدَّدة."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"استخدام مهلات أطول"</string>
- <string name="dismiss" msgid="7872443888515066216">"تجاهل"</string>
- <string name="exact" msgid="2597237880041789948">"(بالضبط)"</string>
- <string name="approximate" msgid="7117143366610670836">"(± 1 في الرقم الأخير)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"الإجابة بالأرقام الأولى"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"الإجابة بالكسر"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"تراخيص البرامج المفتوحة المصدر"</string>
- <string name="menu_history" msgid="9006222701220105452">"السجلّ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"محو"</string>
- <string name="title_history" msgid="7820912156315181539">"السجلّ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"التنقل إلى أعلى"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"انتهت المهلة"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"هل تريد محو السجلّ والذاكرة؟"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"التعبير الحالي"</string>
- <string name="no_history" msgid="4331262030447527188">"ليس هناك سجل"</string>
-</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
deleted file mode 100644
index 12fb7c3..0000000
--- a/res/values-az/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulyator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"dər"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"təmizlənib"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler nömrəsi"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"nöqtə"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"sol mötərizə"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"sağ mötərizə"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"təbii loqaritm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"loqaritm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"tərs kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"tərs sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tərs tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"on üstü"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"əmsal funksiyası"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kvadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"böl"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"çoxaltma"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"faiz"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"güc"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadrat kök"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"dərəcə rejimi"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian rejimi"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"dərəcəyə keçid"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"radiana keçid"</string>
- <string name="desc_eq" msgid="3349320880874699285">"bərabərlik"</string>
- <string name="desc_clr" msgid="737502124268890797">"təmizləyin"</string>
- <string name="desc_del" msgid="7879515781929311432">"silin"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"əks funksiyaları göstərin"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"əks funksiyaları gizlədin"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Düstur yoxdur"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nəticə yoxdur"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Nömrələr və əsas əməliyyatlar"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Qabaqcıl əməliyyatlar"</string>
- <string name="error_nan" msgid="5674077944929888710">"Rəqəm deyil"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Yalnış ifadə"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Ləğv edilib"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Sonsuzluq?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0-a bölmək olmaz"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Mətn kopyalandı"</string>
- <string name="cancelled" msgid="2207323593183640994">"Hesablama ləğv edildi."</string>
- <string name="timeout" msgid="5461892570729418573">"Dəyər sonsuz və ya təyin olunmamış ola bilər."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Daha uzun taymaut istifadə edin"</string>
- <string name="dismiss" msgid="7872443888515066216">"Rədd edin"</string>
- <string name="exact" msgid="2597237880041789948">"(dəqiq)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 son rəqəmdə)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Aparıcı rəqəmlər ilə cavablandırın"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Kəsr kimi cavab verin"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Açıq mənbə lisenziyaları"</string>
- <string name="menu_history" msgid="9006222701220105452">"Tarixçə"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Təmizləyin"</string>
- <string name="title_history" msgid="7820912156315181539">"Tarixçə"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Yuxarı gedin"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Zaman aşımı"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Tarixçə və yaddaş təmizlənsin?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Cari İfadə"</string>
- <string name="no_history" msgid="4331262030447527188">"Tarixçə Yoxdur"</string>
-</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 540f7d6..0000000
--- a/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"obrisano"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Ojlerov broj"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"zarez"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"otvorena zagrada"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"zatvorena zagrada"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"prirodni logaritam"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritam"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkus kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkus sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkus tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"deset na stepen"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponencijalna funkcija"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"na kvadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"deljenje"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorijel"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"pomnoži"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procenat"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"stepen"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratni koren"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"režim stepeni"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"režim radijana"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"prebaci u stepene"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"prebaci u radijane"</string>
- <string name="desc_eq" msgid="3349320880874699285">"jednako"</string>
- <string name="desc_clr" msgid="737502124268890797">"obriši"</string>
- <string name="desc_del" msgid="7879515781929311432">"izbriši"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"prikaži inverzne funkcije"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"sakrij inverzne funkcije"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nema formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nema rezultata"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Brojevi i osnovne operacije"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Napredne operacije"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nije broj"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Neispravan izraz"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Otkazano je"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Beskonačno?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nema deljenja nulom"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekst je kopiran"</string>
- <string name="cancelled" msgid="2207323593183640994">"Izračunavanje je otkazano."</string>
- <string name="timeout" msgid="5461892570729418573">"Vrednost je možda beskonačna ili nedefinisana."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Koristi duža vremena čekanja"</string>
- <string name="dismiss" msgid="7872443888515066216">"Odbaci"</string>
- <string name="exact" msgid="2597237880041789948">"(tačno)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 za poslednju cifru)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Rezultat sa brojevima na početku"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Rezultat kao razlomak"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licence otvorenog koda"</string>
- <string name="menu_history" msgid="9006222701220105452">"Istorija"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Obriši"</string>
- <string name="title_history" msgid="7820912156315181539">"Istorija"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Kretanje nagore"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Vreme čekanja"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Brišete istoriju i memoriju?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Aktuelni izraz"</string>
- <string name="no_history" msgid="4331262030447527188">"Nema istorije"</string>
-</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
deleted file mode 100644
index 86ae6c0..0000000
--- a/res/values-be/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калькулятар"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"град"</string>
- <string name="mode_rad" msgid="1434228830085760996">"рад"</string>
- <string name="clr" msgid="6730945431543327337">"ачыс"</string>
- <string name="cleared" msgid="3952521190281880880">"ачышчана"</string>
- <string name="del" msgid="5878069000864178910">"выд."</string>
- <string name="desc_const_e" msgid="1889187337970539507">"лік Эйлера"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"пі"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"коска"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"левая дужка"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"правая дужка"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косінус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"натуральны лагарыфм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"лагарыфм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"сінус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"арккосінус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"арксінус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"арктангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"дзесяць у ступені"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"паказнікавая функцыя (экспанента)"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"у квадраце"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"складанне"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"дзяленне"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"фактарыял"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"множанне"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"працэнт"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ступень"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"квадратны корань"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"адніманне"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"рэжым градусаў"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"рэжым радыянаў"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"пераключыцца на градусы"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"пераключыцца на радыяны"</string>
- <string name="desc_eq" msgid="3349320880874699285">"роўна"</string>
- <string name="desc_clr" msgid="737502124268890797">"ачысціць"</string>
- <string name="desc_del" msgid="7879515781929311432">"выдаліць"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"паказаць адваротныя функцыі"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"схаваць адваротныя функцыі"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Няма формулы"</string>
- <string name="desc_result" msgid="1794073190203126821">"Рэзультатаў няма"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Лічбы і асноўныя аперацыі"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Дадатковыя аперацыі"</string>
- <string name="error_nan" msgid="5674077944929888710">"Не з\'яўляецца лікам"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Няправільны выраз"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Спынена"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Бясконца?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Нельга дзяліць на 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Тэкст скапіраваны"</string>
- <string name="cancelled" msgid="2207323593183640994">"Разлік скасаваны."</string>
- <string name="timeout" msgid="5461892570729418573">"Значэнне можа быць бясконцым або нявызначаным."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Больш доўгі час чакання"</string>
- <string name="dismiss" msgid="7872443888515066216">"Адхіліць"</string>
- <string name="exact" msgid="2597237880041789948">"(дакладны)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 у апошняй лічбе)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Адказ з першымі лічбамі"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Адказ у выглядзе дробу"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Ліцэнзіі ПЗ з адкрытым зыходным кодам"</string>
- <string name="menu_history" msgid="9006222701220105452">"Гісторыя"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Ачысціць"</string>
- <string name="title_history" msgid="7820912156315181539">"Гісторыя"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Перайсці ўверх"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Час чакання выйшаў"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Ачысціць гісторыю і памяць?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Бягучы выраз"</string>
- <string name="no_history" msgid="4331262030447527188">"Няма гісторыі"</string>
-</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
deleted file mode 100644
index c055afd..0000000
--- a/res/values-bg/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калкулатор"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"изчистено"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Неперово число"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"пи"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"точка"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"лява кръгла скоба"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"дясна кръгла скоба"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"естествен логаритъм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логаритъм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"обратен косинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"обратен синус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"обратен тангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"десет на степен"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"експоненциална функция"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"на квадрат"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"плюс"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"деление"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факториел"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"умножение"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"процент"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"степен"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"корен квадратен"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"минус"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"режим за градуси"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"режим за радиани"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"превключване към градуси"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"превключване към радиани"</string>
- <string name="desc_eq" msgid="3349320880874699285">"равно"</string>
- <string name="desc_clr" msgid="737502124268890797">"изчистване"</string>
- <string name="desc_del" msgid="7879515781929311432">"изтриване"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"показване на обратните функции"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"скриване на обратните функции"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Няма формула"</string>
- <string name="desc_result" msgid="1794073190203126821">"Няма резултат"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Цифри и основни действия"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Разширени действия"</string>
- <string name="error_nan" msgid="5674077944929888710">"Не е число"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Неправилен израз"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Прекратено"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Безкрайно ли е?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"На 0 не се дели"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текстът е копиран"</string>
- <string name="cancelled" msgid="2207323593183640994">"Изчислението е анулирано."</string>
- <string name="timeout" msgid="5461892570729418573">"Стойността може да е безкрайна или неопределена."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Ползване на по-дълго време за изчакване"</string>
- <string name="dismiss" msgid="7872443888515066216">"Отхвърляне"</string>
- <string name="exact" msgid="2597237880041789948">"(точно)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 в последната цифра)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Отг. с първите цифри"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Отг. като дроб"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Лицензи за отворен код"</string>
- <string name="menu_history" msgid="9006222701220105452">"История"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Изчистване"</string>
- <string name="title_history" msgid="7820912156315181539">"История"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Придвижване нагоре"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Време за изчакване"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Изчистване на историята и паметта?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Текущ израз"</string>
- <string name="no_history" msgid="4331262030447527188">"Няма история"</string>
-</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
deleted file mode 100644
index 1387b25..0000000
--- a/res/values-bn/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ক্যালকুলেটর"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"সাফ করা হয়েছে"</string>
- <string name="del" msgid="5878069000864178910">"সাফ"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"ইউলার সংখ্যা"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"পাই"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"পয়েন্ট"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"বাঁ লঘুবন্ধনী"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"ডান লঘুবন্ধনী"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"কোসাইন"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"স্বাভাবিক লগারিদম"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"লগারিদম"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"সাইন"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ট্যানজেন্ট"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"বিপরীত কোসাইন"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"বিপরীত সাইন"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"বিপরীত ট্যানজেন্ট"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"দশ গুণ শক্তি"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ব্যাখ্যামূলক ক্রিয়াকলাপ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ছক"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"যোগ চিহ্ন"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ভাগ চিহ্ন"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"গৌণিক"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"গুণ"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"শতাংশ"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"পাওয়ার"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"বর্গমূল"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"বিয়োগ চিহ্ন"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ডিগ্রী মোড"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"রেডিয়ান মোড"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ডিগ্রীতে পাল্টান"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"রেডিয়ানে পাল্টান"</string>
- <string name="desc_eq" msgid="3349320880874699285">"সমান চিহ্ন"</string>
- <string name="desc_clr" msgid="737502124268890797">"সাফ করুন"</string>
- <string name="desc_del" msgid="7879515781929311432">"মুছুন"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"বিপরীত ক্রিয়াকলাপ দেখান"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"বিপরীত ক্রিয়াকলাপ লুকান"</string>
- <string name="desc_formula" msgid="8056588859637585007">"কোনো সূত্র নেই"</string>
- <string name="desc_result" msgid="1794073190203126821">"কোনো ফলাফল নেই"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"নম্বর এবং মৌলিক ক্রিয়াকলাপ"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"উন্নত ক্রিয়াকলাপ"</string>
- <string name="error_nan" msgid="5674077944929888710">"একটি সংখ্যা নয়"</string>
- <string name="error_syntax" msgid="4786987111228645602">"খারাপ এক্সপ্রেশন"</string>
- <string name="error_aborted" msgid="3402238176316342537">"বাতিল করা হয়েছে"</string>
- <string name="error_overflow" msgid="7800547394563434764">"অসীম?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 দিয়ে শেয়ার করা যাবে না"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"পাঠ্য প্রতিলিপি হয়েছে"</string>
- <string name="cancelled" msgid="2207323593183640994">"গণনা করা বাতিল করা হয়েছে৷"</string>
- <string name="timeout" msgid="5461892570729418573">"মূল্য অসীম বা অনির্ধারিত হতে পারে।"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"দীর্ঘক্ষণ সময় সমাপ্ত ব্যবহার করুন"</string>
- <string name="dismiss" msgid="7872443888515066216">"খারিজ করুন"</string>
- <string name="exact" msgid="2597237880041789948">"(যথাযথ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±১ শেষের ডিজিটের মধ্যে)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"লিডিং সংখ্যায় উত্তর"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ভগ্নাংশ হিসাবে উত্তর"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ওপেন সোর্স লাইসেন্স"</string>
- <string name="menu_history" msgid="9006222701220105452">"ইতিহাস"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"সাফ করুন"</string>
- <string name="title_history" msgid="7820912156315181539">"ইতিহাস"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"উপরে নেভিগেট করুন"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"সময় সমাপ্ত"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ইতিহাস এবং মেমরি সাফ করবেন?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"বর্তমান এক্সপ্রেশন"</string>
- <string name="no_history" msgid="4331262030447527188">"কোনো ইতিহাস নেই"</string>
-</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
deleted file mode 100644
index f0eb24f..0000000
--- a/res/values-bs/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"step"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"obr"</string>
- <string name="cleared" msgid="3952521190281880880">"obrisano"</string>
- <string name="del" msgid="5878069000864178910">"izbr"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerov broj"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"zarez"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"lijeva zagrada"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"desna zagrada"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"prirodni logaritam"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritam"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverzni kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverzni sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverzni tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"deset na potenciju"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponencijalna funkcija"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"druga potencija"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"sabiranje"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dijeljenje"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorijel"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"množenje"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potencija"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratni korijen"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"oduzimanje"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"rad sa stepenima"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"rad sa radijanima"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"prebacivanje na stepene"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"prebacivanje na radijane"</string>
- <string name="desc_eq" msgid="3349320880874699285">"jednako"</string>
- <string name="desc_clr" msgid="737502124268890797">"obriši"</string>
- <string name="desc_del" msgid="7879515781929311432">"izbriši"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"prikaži inverzne funkcije"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"sakrij inverzne funkcije"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nema formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nema rezultata"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Brojevi i osnovne operacije"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Napredne operacije"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nije broj"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Nepravilan izraz"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Prekinuto"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Beskonačno?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nije moguće podijeliti s 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekst kopiran"</string>
- <string name="cancelled" msgid="2207323593183640994">"Računanje je otkazano."</string>
- <string name="timeout" msgid="5461892570729418573">"Moguće je da je vrijednost beskonačna ili je neodređena"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Koristi duže vrijeme za istek"</string>
- <string name="dismiss" msgid="7872443888515066216">"Odbaci"</string>
- <string name="exact" msgid="2597237880041789948">"(tačno)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 u posljednjoj cifri)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Odgovor sa zaokruživanjem"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Odgovor kao razlomak"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licence otvorenog koda"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historija"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Obriši"</string>
- <string name="title_history" msgid="7820912156315181539">"Historija"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Idi prema gore"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Vrijeme je isteklo"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Obrisati historiju i memoriju?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Trenutni izraz"</string>
- <string name="no_history" msgid="4331262030447527188">"Nema historije"</string>
-</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
deleted file mode 100644
index 067ad1a..0000000
--- a/res/values-ca/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"esb"</string>
- <string name="cleared" msgid="3952521190281880880">"esborrat"</string>
- <string name="del" msgid="5878069000864178910">"sup"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"nombre d\'Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punt"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parèntesi d\'obertura"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parèntesi de tancament"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritme natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arc cosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arc sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arc tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"deu elevat a"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"funció exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"al quadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"més"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divideix"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplica"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percentatge"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potència"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"arrel quadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menys"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"mode de graus"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"mode de radians"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"canvia a graus"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"canvia a radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"és igual a"</string>
- <string name="desc_clr" msgid="737502124268890797">"esborra"</string>
- <string name="desc_del" msgid="7879515781929311432">"suprimeix"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostra les funcions inverses"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"amaga les funcions inverses"</string>
- <string name="desc_formula" msgid="8056588859637585007">"No hi ha cap fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"No hi ha cap resultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números i operacions bàsiques"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operacions avançades"</string>
- <string name="error_nan" msgid="5674077944929888710">"No és una xifra"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expr. incorrecta"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Anul·lat"</string>
- <string name="error_overflow" msgid="7800547394563434764">"És infinit?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"No es pot dividir per 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text copiat"</string>
- <string name="cancelled" msgid="2207323593183640994">"S\'ha cancel·lat el càlcul."</string>
- <string name="timeout" msgid="5461892570729418573">"És possible que el valor sigui infinit o indefinit."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Utilitza temps d\'espera més llargs"</string>
- <string name="dismiss" msgid="7872443888515066216">"Accepta"</string>
- <string name="exact" msgid="2597237880041789948">"(exacte)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 a l\'últim dígit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Resposta dígits inicials"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Resposta fracció"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Llic. prog. lliure"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historial"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Esborra"</string>
- <string name="title_history" msgid="7820912156315181539">"Historial"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navega cap a dalt"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"S\'ha esgotat el temps d\'espera"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Confirmes que vols esborrar l\'historial i la memòria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expressió actual"</string>
- <string name="no_history" msgid="4331262030447527188">"Sense historial"</string>
-</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
deleted file mode 100644
index ebc39db..0000000
--- a/res/values-cs/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulačka"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"CE"</string>
- <string name="cleared" msgid="3952521190281880880">"vymazáno"</string>
- <string name="del" msgid="5878069000864178910">"←"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerovo číslo"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pí"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"desetinná čárka"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"levá závorka"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"pravá závorka"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"přirozený logaritmus"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmus"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkus kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkus sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkus tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"mocnina o základu 10"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponenciální funkce"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"druhá mocnina"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"děleno"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriál"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"násobení"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procento"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"mocnina"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"druhá odmocnina"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"režim stupňů"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"režim radiánů"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"přepnout na stupně"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"přepnout na radiány"</string>
- <string name="desc_eq" msgid="3349320880874699285">"rovná se"</string>
- <string name="desc_clr" msgid="737502124268890797">"smazat celý výraz"</string>
- <string name="desc_del" msgid="7879515781929311432">"smazat"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"zobrazit inverzní funkce"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"skrýt inverzní funkce"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Žádný vzorec"</string>
- <string name="desc_result" msgid="1794073190203126821">"Žádný výsledek"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Čísla a základní operace"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Pokročilé operace"</string>
- <string name="error_nan" msgid="5674077944929888710">"Není číslo"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Chybný výraz"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Zrušeno"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Nekonečno?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nulou nelze dělit"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text byl zkopírován"</string>
- <string name="cancelled" msgid="2207323593183640994">"Výpočet byl zrušen."</string>
- <string name="timeout" msgid="5461892570729418573">"Hodnota je možná nekonečná nebo není definována."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Používat delší časové limity"</string>
- <string name="dismiss" msgid="7872443888515066216">"Zavřít"</string>
- <string name="exact" msgid="2597237880041789948">"(přesně)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 na posledním místě)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Výsledek včetně úvodních číslic"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Výsledek ve tvaru zlomku"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licence open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historie"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Vymazat"</string>
- <string name="title_history" msgid="7820912156315181539">"Historie"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Přejít nahoru"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Časový limit vypršel"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Vymazat historii a paměť?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Aktuální výraz"</string>
- <string name="no_history" msgid="4331262030447527188">"Žádná historie"</string>
-</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
deleted file mode 100644
index 9d4e251..0000000
--- a/res/values-da/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Lommeregner"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"grad"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"ryd"</string>
- <string name="cleared" msgid="3952521190281880880">"ryddet"</string>
- <string name="del" msgid="5878069000864178910">"slet"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulers tal"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punktum"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"venstre parentes"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"højre parentes"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"naturlig logaritme"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"invers cosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"invers sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"invers tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 i n\'te potens"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponentiel funktion"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"i anden"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plustegn"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divider"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktor"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"gange"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potens"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratrod"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gradtilstand"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radiantilstand"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"skift til grader"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"skift til radianer"</string>
- <string name="desc_eq" msgid="3349320880874699285">"lig med"</string>
- <string name="desc_clr" msgid="737502124268890797">"ryd"</string>
- <string name="desc_del" msgid="7879515781929311432">"slet"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"vis inversfunktioner"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"skjul inversfunktioner"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ingen formel"</string>
- <string name="desc_result" msgid="1794073190203126821">"Intet resultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Tal og grundlæggende handlinger"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Avancerede handlinger"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ikke et tal"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Ugyldigt udtryk"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Afbrudt"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Uendeligt?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Ingen division med 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teksten blev kopieret"</string>
- <string name="cancelled" msgid="2207323593183640994">"Beregningen blev annulleret."</string>
- <string name="timeout" msgid="5461892570729418573">"Værdien kan være uendelig eller udefineret."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Brug længere timeouts"</string>
- <string name="dismiss" msgid="7872443888515066216">"Luk"</string>
- <string name="exact" msgid="2597237880041789948">"(eksakt)"</string>
- <string name="approximate" msgid="7117143366610670836">"(± 1 i sidste ciffer)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Svar med indledende cifre"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Vis som brøk"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open source-licenser"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historik"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Ryd"</string>
- <string name="title_history" msgid="7820912156315181539">"Historik"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Naviger op"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Vil du rydde historik og hukommelse?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Nuværende udtryk"</string>
- <string name="no_history" msgid="4331262030447527188">"Ingen historik"</string>
-</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
deleted file mode 100644
index ce407fb..0000000
--- a/res/values-de/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Rechner"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"Grad"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"Gelöscht"</string>
- <string name="del" msgid="5878069000864178910">"CE"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulersche Zahl"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"Pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"Dezimalzeichen"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"Klammer auf"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"Klammer zu"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"Kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"Natürlicher Logarithmus"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"Logarithmus"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"Sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"Tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"Arkuskosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"Arkussinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"Arkustangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 hoch"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"Exponentialfunktion"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"Quadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"Plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"Dividieren"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"Fakultät"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplizieren"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"Prozent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"Potenz"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"Quadratwurzel"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"Minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"Winkelmodus (Grad)"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"Winkelmodus (Radiant)"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"Zu Grad wechseln"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"Zu Radiant wechseln"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ist gleich"</string>
- <string name="desc_clr" msgid="737502124268890797">"Entfernen"</string>
- <string name="desc_del" msgid="7879515781929311432">"Löschen"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"Umkehrfunktionen anzeigen"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"Umkehrfunktionen ausblenden"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Keine Formel"</string>
- <string name="desc_result" msgid="1794073190203126821">"Kein Ergebnis"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Zahlen und grundlegende Vorgänge"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Erweiterte Vorgänge"</string>
- <string name="error_nan" msgid="5674077944929888710">"Keine Zahl"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Ausdrucksfehler"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Abgebrochen"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Unendlich?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Kein Teilen durch 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text kopiert"</string>
- <string name="cancelled" msgid="2207323593183640994">"Die Berechnung wurde abgebrochen."</string>
- <string name="timeout" msgid="5461892570729418573">"Wert ist möglicherweise unendlich oder nicht definiert."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Längere Zeitlimits verwenden"</string>
- <string name="dismiss" msgid="7872443888515066216">"Schließen"</string>
- <string name="exact" msgid="2597237880041789948">"(exakt)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 für die letzte Zahl)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Ergebnis mit führenden Ziffern"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Ergebnis als Bruch"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open Source-Lizenzen"</string>
- <string name="menu_history" msgid="9006222701220105452">"Verlauf"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Löschen"</string>
- <string name="title_history" msgid="7820912156315181539">"Verlauf"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Nach oben"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Zeitüberschreitung"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Verlauf und Speicher löschen?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Aktueller Ausdruck"</string>
- <string name="no_history" msgid="4331262030447527188">"Kein Verlauf"</string>
-</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
deleted file mode 100644
index 9cbc5a9..0000000
--- a/res/values-el/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Αριθμομηχανή"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"°"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"διαγράφηκε"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Αριθμός Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"πι"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"βαθμός"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"αριστερή παρένθεση"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"δεξιά παρένθεση"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"συνημίτονο"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"φυσικός λογάριθμος"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"λογάριθμος"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ημίτονο"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"εφαπτομένη"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"αντίστροφο συνημίτονο"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"αντίστροφο ημίτονο"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"αντίστροφη εφαπτομένη"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"δέκα στη δύναμη του"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"εκθετική συνάρτηση"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"στο τετράγωνο"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"συν"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"διαίρεση"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"παραγοντικό"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"πολλαπλασιασμός"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"σύμβολο ποσοστού"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ενεργοποίηση"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"τετραγωνική ρίζα"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"μείον"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"λειτουργία μοιρών"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"λειτουργία ακτινίων"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"εναλλαγή σε μοίρες"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"εναλλαγή σε ακτίνια"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ίσον"</string>
- <string name="desc_clr" msgid="737502124268890797">"διαγραφή"</string>
- <string name="desc_del" msgid="7879515781929311432">"διαγραφή"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"εμφάνιση αντίστροφων λειτουργιών"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"απόκρυψη αντίστροφων λειτουργιών"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Δεν υπάρχει τύπος"</string>
- <string name="desc_result" msgid="1794073190203126821">"Κανένα αποτέλεσμα"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Αριθμοί και βασικές λειτουργίες"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Προηγμένες λειτουργίες"</string>
- <string name="error_nan" msgid="5674077944929888710">"Όχι αριθμός"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Λάθος έκφραση"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Ακυρώθηκε"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Άπειρο;"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Δεν είναι δυνατή η διαίρεση με το 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Το κείμενο αντιγράφηκε"</string>
- <string name="cancelled" msgid="2207323593183640994">"Ο υπολογισμός ακυρώθηκε."</string>
- <string name="timeout" msgid="5461892570729418573">"Η τιμή θα πρέπει να είναι άπειρη ή μη καθορισμένη."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Χρήση μεγαλύτερων χρονικών ορίων λήξης"</string>
- <string name="dismiss" msgid="7872443888515066216">"Παράβλεψη"</string>
- <string name="exact" msgid="2597237880041789948">"(ακριβές)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 στο τελευταίο ψηφίο)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Απάντηση με αρχικά ψηφία"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Απάντηση ως κλάσμα"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Άδειες λογισμικού ανοικτού κώδικα"</string>
- <string name="menu_history" msgid="9006222701220105452">"Ιστορικό"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Διαγραφή"</string>
- <string name="title_history" msgid="7820912156315181539">"Ιστορικό"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Πλοήγηση προς τα επάνω"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Λήξη ορίου χρόνου"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Διαγραφή ιστορικού και μνήμης;"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Τρέχουσα έκφραση"</string>
- <string name="no_history" msgid="4331262030447527188">"Δεν υπάρχει Ιστορικό"</string>
-</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
deleted file mode 100644
index 5f5aab3..0000000
--- a/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"cleared"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler\'s number"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"point"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"left parenthesis"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"right parenthesis"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natural logarithm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ten to the power of"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponential function"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"squared"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divide"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiply"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"power"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"square root"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"degree mode"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian mode"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"switch to degrees"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"switch to radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"equals"</string>
- <string name="desc_clr" msgid="737502124268890797">"clear"</string>
- <string name="desc_del" msgid="7879515781929311432">"Delete"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"show inverse functions"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"hide inverse functions"</string>
- <string name="desc_formula" msgid="8056588859637585007">"No formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"No result"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numbers and basic operations"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Advanced operations"</string>
- <string name="error_nan" msgid="5674077944929888710">"Not a number"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Bad expression"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Aborted"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinite?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Can\'t divide by 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text copied"</string>
- <string name="cancelled" msgid="2207323593183640994">"Computation cancelled."</string>
- <string name="timeout" msgid="5461892570729418573">"Value may be infinite or undefined."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Use longer timeouts"</string>
- <string name="dismiss" msgid="7872443888515066216">"Dismiss"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 in last digit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Answer with leading digits"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Answer as fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open-source licences"</string>
- <string name="menu_history" msgid="9006222701220105452">"History"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Clear"</string>
- <string name="title_history" msgid="7820912156315181539">"History"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigate up"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Clear history and memory?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Current Expression"</string>
- <string name="no_history" msgid="4331262030447527188">"No history"</string>
-</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
deleted file mode 100644
index 5f5aab3..0000000
--- a/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"cleared"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler\'s number"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"point"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"left parenthesis"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"right parenthesis"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natural logarithm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ten to the power of"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponential function"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"squared"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divide"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiply"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"power"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"square root"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"degree mode"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian mode"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"switch to degrees"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"switch to radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"equals"</string>
- <string name="desc_clr" msgid="737502124268890797">"clear"</string>
- <string name="desc_del" msgid="7879515781929311432">"Delete"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"show inverse functions"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"hide inverse functions"</string>
- <string name="desc_formula" msgid="8056588859637585007">"No formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"No result"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numbers and basic operations"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Advanced operations"</string>
- <string name="error_nan" msgid="5674077944929888710">"Not a number"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Bad expression"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Aborted"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinite?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Can\'t divide by 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text copied"</string>
- <string name="cancelled" msgid="2207323593183640994">"Computation cancelled."</string>
- <string name="timeout" msgid="5461892570729418573">"Value may be infinite or undefined."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Use longer timeouts"</string>
- <string name="dismiss" msgid="7872443888515066216">"Dismiss"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 in last digit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Answer with leading digits"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Answer as fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open-source licences"</string>
- <string name="menu_history" msgid="9006222701220105452">"History"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Clear"</string>
- <string name="title_history" msgid="7820912156315181539">"History"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigate up"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Clear history and memory?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Current Expression"</string>
- <string name="no_history" msgid="4331262030447527188">"No history"</string>
-</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
deleted file mode 100644
index 5f5aab3..0000000
--- a/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"cleared"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler\'s number"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"point"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"left parenthesis"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"right parenthesis"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natural logarithm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ten to the power of"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponential function"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"squared"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divide"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiply"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"power"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"square root"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"degree mode"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian mode"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"switch to degrees"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"switch to radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"equals"</string>
- <string name="desc_clr" msgid="737502124268890797">"clear"</string>
- <string name="desc_del" msgid="7879515781929311432">"Delete"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"show inverse functions"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"hide inverse functions"</string>
- <string name="desc_formula" msgid="8056588859637585007">"No formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"No result"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numbers and basic operations"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Advanced operations"</string>
- <string name="error_nan" msgid="5674077944929888710">"Not a number"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Bad expression"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Aborted"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinite?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Can\'t divide by 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text copied"</string>
- <string name="cancelled" msgid="2207323593183640994">"Computation cancelled."</string>
- <string name="timeout" msgid="5461892570729418573">"Value may be infinite or undefined."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Use longer timeouts"</string>
- <string name="dismiss" msgid="7872443888515066216">"Dismiss"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 in last digit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Answer with leading digits"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Answer as fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open-source licences"</string>
- <string name="menu_history" msgid="9006222701220105452">"History"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Clear"</string>
- <string name="title_history" msgid="7820912156315181539">"History"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigate up"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Clear history and memory?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Current Expression"</string>
- <string name="no_history" msgid="4331262030447527188">"No history"</string>
-</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
deleted file mode 100644
index 5f5aab3..0000000
--- a/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"cleared"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler\'s number"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"point"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"left parenthesis"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"right parenthesis"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natural logarithm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ten to the power of"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponential function"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"squared"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divide"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiply"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"power"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"square root"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"degree mode"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian mode"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"switch to degrees"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"switch to radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"equals"</string>
- <string name="desc_clr" msgid="737502124268890797">"clear"</string>
- <string name="desc_del" msgid="7879515781929311432">"Delete"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"show inverse functions"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"hide inverse functions"</string>
- <string name="desc_formula" msgid="8056588859637585007">"No formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"No result"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numbers and basic operations"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Advanced operations"</string>
- <string name="error_nan" msgid="5674077944929888710">"Not a number"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Bad expression"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Aborted"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinite?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Can\'t divide by 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text copied"</string>
- <string name="cancelled" msgid="2207323593183640994">"Computation cancelled."</string>
- <string name="timeout" msgid="5461892570729418573">"Value may be infinite or undefined."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Use longer timeouts"</string>
- <string name="dismiss" msgid="7872443888515066216">"Dismiss"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 in last digit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Answer with leading digits"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Answer as fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open-source licences"</string>
- <string name="menu_history" msgid="9006222701220105452">"History"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Clear"</string>
- <string name="title_history" msgid="7820912156315181539">"History"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigate up"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Clear history and memory?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Current Expression"</string>
- <string name="no_history" msgid="4331262030447527188">"No history"</string>
-</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
deleted file mode 100644
index 2f1b4a8..0000000
--- a/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎Calculator‎‏‎‎‏‎"</string>
- <string name="dec_point" msgid="8920102493070918054">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎.‎‏‎‎‏‎"</string>
- <string name="mode_deg" msgid="1146123354434332479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎deg‎‏‎‎‏‎"</string>
- <string name="mode_rad" msgid="1434228830085760996">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎rad‎‏‎‎‏‎"</string>
- <string name="clr" msgid="6730945431543327337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‏‎clr‎‏‎‎‏‎"</string>
- <string name="cleared" msgid="3952521190281880880">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎cleared‎‏‎‎‏‎"</string>
- <string name="del" msgid="5878069000864178910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎del‎‏‎‎‏‎"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎Euler\'s number‎‏‎‎‏‎"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎pi‎‏‎‎‏‎"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎point‎‏‎‎‏‎"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎left parenthesis‎‏‎‎‏‎"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎right parenthesis‎‏‎‎‏‎"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎cosine‎‏‎‎‏‎"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎natural logarithm‎‏‎‎‏‎"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎logarithm‎‏‎‎‏‎"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎sine‎‏‎‎‏‎"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎tangent‎‏‎‎‏‎"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎inverse cosine‎‏‎‎‏‎"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‏‎inverse sine‎‏‎‎‏‎"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎inverse tangent‎‏‎‎‏‎"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎ten to the power of‎‏‎‎‏‎"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎exponential function‎‏‎‎‏‎"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎squared‎‏‎‎‏‎"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎plus‎‏‎‎‏‎"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎divide‎‏‎‎‏‎"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‎factorial‎‏‎‎‏‎"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎multiply‎‏‎‎‏‎"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎percent‎‏‎‎‏‎"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎power‎‏‎‎‏‎"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎square root‎‏‎‎‏‎"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎minus‎‏‎‎‏‎"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎degree mode‎‏‎‎‏‎"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎radian mode‎‏‎‎‏‎"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎switch to degrees‎‏‎‎‏‎"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎switch to radians‎‏‎‎‏‎"</string>
- <string name="desc_eq" msgid="3349320880874699285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎equals‎‏‎‎‏‎"</string>
- <string name="desc_clr" msgid="737502124268890797">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎clear‎‏‎‎‏‎"</string>
- <string name="desc_del" msgid="7879515781929311432">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎delete‎‏‎‎‏‎"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‎show inverse functions‎‏‎‎‏‎"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎hide inverse functions‎‏‎‎‏‎"</string>
- <string name="desc_formula" msgid="8056588859637585007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎No formula‎‏‎‎‏‎"</string>
- <string name="desc_result" msgid="1794073190203126821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎No result‎‏‎‎‏‎"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎Numbers and basic operations‎‏‎‎‏‎"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎Advanced operations‎‏‎‎‏‎"</string>
- <string name="error_nan" msgid="5674077944929888710">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎Not a number‎‏‎‎‏‎"</string>
- <string name="error_syntax" msgid="4786987111228645602">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎Bad expression‎‏‎‎‏‎"</string>
- <string name="error_aborted" msgid="3402238176316342537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎Aborted‎‏‎‎‏‎"</string>
- <string name="error_overflow" msgid="7800547394563434764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎Infinite?‎‏‎‎‏‎"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎Can\'t divide by 0‎‏‎‎‏‎"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎Text copied‎‏‎‎‏‎"</string>
- <string name="cancelled" msgid="2207323593183640994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎Computation cancelled.‎‏‎‎‏‎"</string>
- <string name="timeout" msgid="5461892570729418573">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎Value may be infinite or undefined.‎‏‎‎‏‎"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎Use longer timeouts‎‏‎‎‏‎"</string>
- <string name="dismiss" msgid="7872443888515066216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎Dismiss‎‏‎‎‏‎"</string>
- <string name="exact" msgid="2597237880041789948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎(exact)‎‏‎‎‏‎"</string>
- <string name="approximate" msgid="7117143366610670836">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎(±1 in last digit)‎‏‎‎‏‎"</string>
- <string name="menu_leading" msgid="2338520833272667740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎Answer with leading digits‎‏‎‎‏‎"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎Answer as fraction‎‏‎‎‏‎"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎Open source licenses‎‏‎‎‏‎"</string>
- <string name="menu_history" msgid="9006222701220105452">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‎History‎‏‎‎‏‎"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎Clear‎‏‎‎‏‎"</string>
- <string name="title_history" msgid="7820912156315181539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎History‎‏‎‎‏‎"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎Navigate up‎‏‎‎‏‎"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎Timeout‎‏‎‎‏‎"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎Clear history and memory?‎‏‎‎‏‎"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎Current Expression‎‏‎‎‏‎"</string>
- <string name="no_history" msgid="4331262030447527188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎No History‎‏‎‎‏‎"</string>
-</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
deleted file mode 100644
index 61bafb7..0000000
--- a/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"º"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"BT"</string>
- <string name="cleared" msgid="3952521190281880880">"borrados"</string>
- <string name="del" msgid="5878069000864178910">"BC"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"número de Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punto"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"paréntesis de apertura"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"paréntesis de cierre"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"coseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"coseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"diez a la potencia de"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"función exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"al cuadrado"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"más"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"división"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicar"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"porcentaje"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potencia"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"raíz cuadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menos"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modo de grados"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modo de radianes"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"cambiar a grados"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"cambiar a radianes"</string>
- <string name="desc_eq" msgid="3349320880874699285">"igual a"</string>
- <string name="desc_clr" msgid="737502124268890797">"borrar"</string>
- <string name="desc_del" msgid="7879515781929311432">"eliminar"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostrar funciones inversas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ocultar funciones inversas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Sin fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Sin resultados"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números y operaciones básicas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operaciones avanzadas"</string>
- <string name="error_nan" msgid="5674077944929888710">"No es número."</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expresión incorrecta"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Interrumpida"</string>
- <string name="error_overflow" msgid="7800547394563434764">"¿Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"División por 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Se copió el texto"</string>
- <string name="cancelled" msgid="2207323593183640994">"Se canceló el cálculo."</string>
- <string name="timeout" msgid="5461892570729418573">"Es posible que el valor sea infinito o indefinido."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Usar tiempos de espera más largos"</string>
- <string name="dismiss" msgid="7872443888515066216">"Ignorar"</string>
- <string name="exact" msgid="2597237880041789948">"(exacto)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 en el último dígito)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Respuesta con dígitos más significativos"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Respuesta como fracción"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licencias de código abierto"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historial"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Borrar"</string>
- <string name="title_history" msgid="7820912156315181539">"Historial"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navegar hacia arriba"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tiempo de espera"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"¿Borrar historial y memoria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expresión actual"</string>
- <string name="no_history" msgid="4331262030447527188">"No historial"</string>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
deleted file mode 100644
index 7a9da71..0000000
--- a/res/values-es/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"bor"</string>
- <string name="cleared" msgid="3952521190281880880">"borrados"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"número de Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punto"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"paréntesis de apertura"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"paréntesis de cierre"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"coseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"coseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"diez elevado a"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"función exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"elevado al cuadrado"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"más"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dividir"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicar"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"porcentaje"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potencia"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"raíz cuadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menos"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modo de grados"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modo de radianes"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"cambiar a grados"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"cambiar a radianes"</string>
- <string name="desc_eq" msgid="3349320880874699285">"igual a"</string>
- <string name="desc_clr" msgid="737502124268890797">"borrar"</string>
- <string name="desc_del" msgid="7879515781929311432">"eliminar"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"muestra las funciones inversas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"oculta las funciones inversas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Sin fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Sin resultados"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números y operaciones básicas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operaciones avanzadas"</string>
- <string name="error_nan" msgid="5674077944929888710">"No es un número"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expresión incorrecta"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Cancelado"</string>
- <string name="error_overflow" msgid="7800547394563434764">"¿Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"No se puede dividir por 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texto copiado"</string>
- <string name="cancelled" msgid="2207323593183640994">"Cálculo cancelado."</string>
- <string name="timeout" msgid="5461892570729418573">"Es posible que el valor sea infinito o no esté definido."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Utilizar tiempos de espera más largos"</string>
- <string name="dismiss" msgid="7872443888515066216">"Descartar"</string>
- <string name="exact" msgid="2597237880041789948">"(exacto)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 en el último dígito)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Responder con dígitos iniciales"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Responder como fracción"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Lic. soft. libre"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historial"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Borrar"</string>
- <string name="title_history" msgid="7820912156315181539">"Historial"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Desplazarse hacia arriba"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tiempo de espera"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"¿Borrar historial y memoria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expresión actual"</string>
- <string name="no_history" msgid="4331262030447527188">"No hay historial"</string>
-</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
deleted file mode 100644
index 1ffe00c..0000000
--- a/res/values-et/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulaator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"tüh"</string>
- <string name="cleared" msgid="3952521190281880880">"kustutatud"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euleri arv"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pii"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"koma"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"vasaksulg"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"paremsulg"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"koosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"naturaallogaritm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"siinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkuskoosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkussiinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkustangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"kümme astmes"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponentfunktsioon"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ruudus"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"pluss"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"jagamine"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriaal"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"korrutamine"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"protsent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"toide"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ruutjuur"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"miinus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"kraadirežiim"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radiaanirežiim"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"kraadidele lülitumine"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"radiaanidele lülitumine"</string>
- <string name="desc_eq" msgid="3349320880874699285">"võrdub"</string>
- <string name="desc_clr" msgid="737502124268890797">"tühjendamine"</string>
- <string name="desc_del" msgid="7879515781929311432">"kustutamine"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"pöördfunktsioonide kuvamine"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"pöördfunktsioonide peitmine"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Valem puudub"</string>
- <string name="desc_result" msgid="1794073190203126821">"Tulemusi pole"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numbrid ja lihtsad toimingud"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Täpsemad toimingud"</string>
- <string name="error_nan" msgid="5674077944929888710">"Pole number"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Vale avaldis"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Katkestatud"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Lõpmatu?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0-ga ei saa jagada"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekst on kopeeritud"</string>
- <string name="cancelled" msgid="2207323593183640994">"Arvutamine tühistati."</string>
- <string name="timeout" msgid="5461892570729418573">"Väärtus võib olla lõpmatu või määramata."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Kasuta pikemaid ajalõppe"</string>
- <string name="dismiss" msgid="7872443888515066216">"Loobu"</string>
- <string name="exact" msgid="2597237880041789948">"(täpne)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 viimases numbris)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Vasta esimeste numbritega"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Vasta murdarvuga"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Avatud lähtekoodi litsentsid"</string>
- <string name="menu_history" msgid="9006222701220105452">"Ajalugu"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Kustuta"</string>
- <string name="title_history" msgid="7820912156315181539">"Ajalugu"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Liigu üles"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Ajalõpp"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Kas kustutada ajalugu ja mälu?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Praegune avaldis"</string>
- <string name="no_history" msgid="4331262030447527188">"Ajalugu pole"</string>
-</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
deleted file mode 100644
index e270dc8..0000000
--- a/res/values-eu/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulagailua"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"°"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"CE"</string>
- <string name="cleared" msgid="3952521190281880880">"garbituta"</string>
- <string name="del" msgid="5878069000864178910">"C"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerren zenbakia"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi zenbakia"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"koma"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ezkerreko parentesia"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"eskuineko parentesia"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinua"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo nepertarra"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmoa"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinua"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangentea"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arku kosinua"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arku sinua"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arku tangentea"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"hamar ber"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"funtzio esponentziala"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ber bi"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"gehi"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"zati"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriala"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"biderkatu"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ehunekoa"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"berreketa"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"erro karratua"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gradu modua"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian modua"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"aldatu gradutara"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"aldatu radianetara"</string>
- <string name="desc_eq" msgid="3349320880874699285">"berdin"</string>
- <string name="desc_clr" msgid="737502124268890797">"garbitu sarrera"</string>
- <string name="desc_del" msgid="7879515781929311432">"ezabatu"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"erakutsi alderantzizko funtzioak"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ezkutatu alderantzizko funtzioak"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ez dago formularik"</string>
- <string name="desc_result" msgid="1794073190203126821">"Ez da aurkitu emaitzarik"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Zenbakiak eta oinarrizko eragiketak"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Eragiketa aurreratuak"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ez da zenbakia"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Sintaxi-errorea"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Utzi egin da"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinitua?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Ezin da zeroz zatitu"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Kopiatu da testua"</string>
- <string name="cancelled" msgid="2207323593183640994">"Bertan behera utzi da kalkulua."</string>
- <string name="timeout" msgid="5461892570729418573">"Balioa infinitua edo zehaztugabea izan liteke."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Erabili denbora-muga luzeagoak"</string>
- <string name="dismiss" msgid="7872443888515066216">"Baztertu"</string>
- <string name="exact" msgid="2597237880041789948">"(zehatza)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 azken digituan)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Erantzun hasierako digituekin"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Erantzun zatiki gisa"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Kode irekiko lizentziak"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historia"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Garbitu"</string>
- <string name="title_history" msgid="7820912156315181539">"Historia"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Joan gora"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Denbora-muga"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Memoria eta historia garbitu?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Adierazpen hau"</string>
- <string name="no_history" msgid="4331262030447527188">"Hutsik dago historia"</string>
-</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
deleted file mode 100644
index 4b4428a..0000000
--- a/res/values-fa/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ماشین‌حساب"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"درجه"</string>
- <string name="mode_rad" msgid="1434228830085760996">"راد"</string>
- <string name="clr" msgid="6730945431543327337">"پاک"</string>
- <string name="cleared" msgid="3952521190281880880">"پاک شد"</string>
- <string name="del" msgid="5878069000864178910">"حذف"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"عدد اولر"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"پی"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ممیز"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"پرانتز چپ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"پرانتز راست"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"کسینوس"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"لگاریتم طبیعی"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"لگاریتم"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"سینوس"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"تانژانت"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"کسینوس وارون"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"سینوس وارون"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"تانژانت وارون"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ده به توان"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"تابع نمایی"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"به توان دو"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"به‌علاوه"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"تقسیم"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"فاکتوریل"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ضرب"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"درصد"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"توان"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ریشه دوم"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"منها"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"حالت درجه"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"حالت رادیان"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"تغییر به درجه"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"تغییر به رادیان"</string>
- <string name="desc_eq" msgid="3349320880874699285">"مساوی"</string>
- <string name="desc_clr" msgid="737502124268890797">"پاک کردن"</string>
- <string name="desc_del" msgid="7879515781929311432">"حذف"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"نمایش توابع معکوس"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"پنهان کردن توابع معکوس"</string>
- <string name="desc_formula" msgid="8056588859637585007">"فرمولی وجود ندارد"</string>
- <string name="desc_result" msgid="1794073190203126821">"نتیجه‌ای پیدا نشد"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"عملیات عددی و پایه"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"عملیات پیشرفته"</string>
- <string name="error_nan" msgid="5674077944929888710">"پاسخ عددی ندارد"</string>
- <string name="error_syntax" msgid="4786987111228645602">"عبارت نادرست"</string>
- <string name="error_aborted" msgid="3402238176316342537">"لغو شد"</string>
- <string name="error_overflow" msgid="7800547394563434764">"بی‌نهایت؟"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"تقسیم بر ۰ ممکن نیست"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"نوشتار کپی شد"</string>
- <string name="cancelled" msgid="2207323593183640994">"محاسبه لغو شد."</string>
- <string name="timeout" msgid="5461892570729418573">"ممکن است مقدار، بی‌نهایت یا تعریف‌نشده باشد."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"استفاده از مهلت‌های زمانی طولانی‌تر"</string>
- <string name="dismiss" msgid="7872443888515066216">"رد کردن"</string>
- <string name="exact" msgid="2597237880041789948">"(دقیق)"</string>
- <string name="approximate" msgid="7117143366610670836">"(۱‏± در رقم آخر)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"پاسخ با اولین رقم"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"پاسخ به‌صورت کسر"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"مجوزهای منبع آزاد"</string>
- <string name="menu_history" msgid="9006222701220105452">"سابقه"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"پاک کردن"</string>
- <string name="title_history" msgid="7820912156315181539">"سابقه"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"پیمایش به بالا"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"مهلت زمانی"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"سابقه و حافظه پاک شود؟"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"عبارت کنونی"</string>
- <string name="no_history" msgid="4331262030447527188">"سابقه موجود نیست"</string>
-</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
deleted file mode 100644
index f099ebe..0000000
--- a/res/values-fi/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Laskin"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"thj"</string>
- <string name="cleared" msgid="3952521190281880880">"tyhjennetty"</string>
- <string name="del" msgid="5878069000864178910">"pst"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerin luku"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pii"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"piste"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"vasen sulkumerkki"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"oikea sulkumerkki"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosini"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"luonnollinen logaritmi"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmi"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sini"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangentti"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkuskosini"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkussini"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkustangentti"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"kymmenen potenssiin"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponenttifunktio"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"potenssiin kaksi"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"jaa"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"kertoma"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"kerto"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"prosentti"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"virta"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"neliöjuuri"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"miinus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"astetila"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radiaanitila"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"vaihda asteiksi"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"vaihda radiaaneiksi"</string>
- <string name="desc_eq" msgid="3349320880874699285">"on yhtä kuin"</string>
- <string name="desc_clr" msgid="737502124268890797">"tyhjennä"</string>
- <string name="desc_del" msgid="7879515781929311432">"poista"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"näytä käänteisfunktiot"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"piilota käänteisfunktiot"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ei kaavaa"</string>
- <string name="desc_result" msgid="1794073190203126821">"Ei tuloksia"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numerot ja peruslaskutoimitukset"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Lisätoiminnot"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ei numero"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Virhe ilmaisussa"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Keskeytettiin."</string>
- <string name="error_overflow" msgid="7800547394563434764">"Päättymätön?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Ei jaollinen luvulla 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teksti kopioitiin."</string>
- <string name="cancelled" msgid="2207323593183640994">"Laskenta peruutettiin."</string>
- <string name="timeout" msgid="5461892570729418573">"Arvo voi olla ääretön tai määrittämätön."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Käytä pidempää aikakatkaisua"</string>
- <string name="dismiss" msgid="7872443888515066216">"Hylkää"</string>
- <string name="exact" msgid="2597237880041789948">"(tarkka)"</string>
- <string name="approximate" msgid="7117143366610670836">"(viimeinen numero ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Desimaalilukuna"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Murtolukuna"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Koodin oikeudet"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historia"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Tyhjennä"</string>
- <string name="title_history" msgid="7820912156315181539">"Historia"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Siirry ylös"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Aikakatkaistiin"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Tyhjennä historia ja muisti?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Nykyinen lauseke"</string>
- <string name="no_history" msgid="4331262030447527188">"Ei historiaa"</string>
-</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
deleted file mode 100644
index 7c94cec..0000000
--- a/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculatrice"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"eff"</string>
- <string name="cleared" msgid="3952521190281880880">"effacés"</string>
- <string name="del" msgid="5878069000864178910">"sup"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"nombre d\'Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"virgule"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parenthèse gauche"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parenthèse droite"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logarithme naturel"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"cosinus inverse"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"sinus inverse"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inverse"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dix à la puissance"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"fonction exponentielle"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"au carré"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"diviser"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factoriel"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplier"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"pourcentage"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"puissance"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"racine carrée"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"moins"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"mode degré"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"mode radian"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"convertir en degrés"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"convertir en radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"égal"</string>
- <string name="desc_clr" msgid="737502124268890797">"effacer"</string>
- <string name="desc_del" msgid="7879515781929311432">"supprimer"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"afficher les fonctions inverses"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"masquer les fonctions inverses"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Aucune formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Aucun résultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Chiffres et opérations de base"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Opérations avancées"</string>
- <string name="error_nan" msgid="5674077944929888710">"Pas un nombre"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Express. incorr."</string>
- <string name="error_aborted" msgid="3402238176316342537">"Annulée"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infini?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Impos. diviser par 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texte copié"</string>
- <string name="cancelled" msgid="2207323593183640994">"Calcul annulé."</string>
- <string name="timeout" msgid="5461892570729418573">"Il est possible que la valeur soit infinie ou non définie."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Utiliser délais avant expir. plus longs"</string>
- <string name="dismiss" msgid="7872443888515066216">"Ignorer"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(± 1 au dernier chiffre)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Réponse avec premiers chiffres"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Réponse en fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Lic. log. libres"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historique"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Effacer"</string>
- <string name="title_history" msgid="7820912156315181539">"Historique"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Naviguer vers le haut"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Le délai a expiré"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Effacer historique et mémoire?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expression actuelle"</string>
- <string name="no_history" msgid="4331262030447527188">"Aucun historique"</string>
-</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
deleted file mode 100644
index b16df9c..0000000
--- a/res/values-fr/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculatrice"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"eff"</string>
- <string name="cleared" msgid="3952521190281880880">"effacés"</string>
- <string name="del" msgid="5878069000864178910">"sup"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"nombre d\'Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"virgule"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parenthèse gauche"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parenthèse droite"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logarithme naturel"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"cosinus inverse"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"sinus inverse"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inverse"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dix à la puissance"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"fonction exponentielle"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"au carré"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divisé"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factoriel"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplier"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"pourcent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"puissance"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"racine carrée"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"moins"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"mode degrés"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"mode radians"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"passer en mode degrés"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"passer en mode radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"égal"</string>
- <string name="desc_clr" msgid="737502124268890797">"effacer"</string>
- <string name="desc_del" msgid="7879515781929311432">"supprimer"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"afficher les fonctions inverses"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"masquer les fonctions inverses"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Aucune formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Aucun résultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Nombres et opérations de base"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Opérations avancées"</string>
- <string name="error_nan" msgid="5674077944929888710">"Pas un nombre"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Express. incorr."</string>
- <string name="error_aborted" msgid="3402238176316342537">"Annulée"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infini ?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Div par 0 impossible"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Le texte a bien été copié."</string>
- <string name="cancelled" msgid="2207323593183640994">"Calcul annulé."</string>
- <string name="timeout" msgid="5461892570729418573">"Il est possible que la valeur soit infinie ou non définie."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Utiliser délais plus longs"</string>
- <string name="dismiss" msgid="7872443888515066216">"Fermer"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 au dernier chiffre)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Réponse avec prem. chiffres"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Réponse en fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licences Open Source"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historique"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Effacer"</string>
- <string name="title_history" msgid="7820912156315181539">"Historique"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Remonter d\'un niveau"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Expiration du délai"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Effacer historique et mémoire ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expression actuelle"</string>
- <string name="no_history" msgid="4331262030447527188">"Aucun historique"</string>
-</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
deleted file mode 100644
index 4b4858e..0000000
--- a/res/values-gl/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"DEG"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"borrados"</string>
- <string name="del" msgid="5878069000864178910">"←"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Número de Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punto"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"paréntese esquerda"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"paréntese dereita"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"coseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tanxente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"coseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tanxente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dez elevado a"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"función exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ao cadrado"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"máis"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dividido entre"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicar"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"porcentaxe"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"batería"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"raíz cadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menos"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modo de grao"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modo radián"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"cambiar a graos"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"cambiar a radiáns"</string>
- <string name="desc_eq" msgid="3349320880874699285">"igual"</string>
- <string name="desc_clr" msgid="737502124268890797">"borrar"</string>
- <string name="desc_del" msgid="7879515781929311432">"eliminar"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostrar funcións inversas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ocultar funcións inversas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Sen fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Non hai resultados"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números e operacións básicas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operacións avanzadas"</string>
- <string name="error_nan" msgid="5674077944929888710">"Non é número"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expresión incorrecta"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Abortada"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Non se divide por 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Copiouse o texto"</string>
- <string name="cancelled" msgid="2207323593183640994">"Cancelouse o cálculo"</string>
- <string name="timeout" msgid="5461892570729418573">"O valor pode ser infinito ou indefinido."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Usar tempos de espera máis longos"</string>
- <string name="dismiss" msgid="7872443888515066216">"Ignorar"</string>
- <string name="exact" msgid="2597237880041789948">"(exacto)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 no último díxito)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Resposta con díxitos iniciais"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Resposta en fracción"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licenzas de código aberto"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historial"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Borrar"</string>
- <string name="title_history" msgid="7820912156315181539">"Historial"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Ir para arriba"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tempo de espera"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Borrar historial e memoria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expresión actual"</string>
- <string name="no_history" msgid="4331262030447527188">"Non hai historial"</string>
-</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
deleted file mode 100644
index 8a4fb5d..0000000
--- a/res/values-gu/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"કેલ્ક્યુલેટર"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"સાફ કર્યા"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"યુલરનો નંબર"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"પાઇ"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"પોઇન્ટ"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ડાબો કૌંસ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"જમણો કૌંસ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"કોટિજ્યા"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"પ્રાકૃતિક લઘુગણક"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"લઘુગણક"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"જ્યા"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"સ્પર્શક"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"વ્યસ્ત કોટિજ્યા"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"વ્યસ્ત જ્યા"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"વ્યસ્ત સ્પર્શક"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"દસની ઘાત"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ઘાતાંકીય કાર્ય"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"વર્ગાકાર"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"સરવાળો"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ભાગાકાર"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ફેક્ટોરિઅલ"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ગુણાકાર"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ટકા"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ઘાત"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"વર્ગમૂળ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"બાદબાકી"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ડિગ્રી મોડ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"સમત્રિજ્યાકોણ મોડ"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ડિગ્રી પર સ્વિચ કરો"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"સમત્રિજ્યાકોણ પર સ્વિચ કરો"</string>
- <string name="desc_eq" msgid="3349320880874699285">"બરાબર"</string>
- <string name="desc_clr" msgid="737502124268890797">"સાફ કરો"</string>
- <string name="desc_del" msgid="7879515781929311432">"કાઢી નાખો"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"વ્યુત્ક્રમ કાર્ય બતાવો"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"વ્યુત્ક્રમ કાર્ય છુપાવો"</string>
- <string name="desc_formula" msgid="8056588859637585007">"કોઇ ફોર્મૂલા નથી"</string>
- <string name="desc_result" msgid="1794073190203126821">"કોઈ પરિણામ નથી"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"નંબરો અને મૂળભૂત ઓપરેશન્સ"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"વિગતવાર ઓપરેશન્સ"</string>
- <string name="error_nan" msgid="5674077944929888710">"કોઈ સંખ્યા નથી"</string>
- <string name="error_syntax" msgid="4786987111228645602">"ખોટી પદાવલિ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"રદ કરેલ"</string>
- <string name="error_overflow" msgid="7800547394563434764">"અનંત?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 દ્વારા ભાગાકાર કરી શકતાં નથી"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ટેક્સ્ટ કૉપિ કરી"</string>
- <string name="cancelled" msgid="2207323593183640994">"ગણતરી રદ કરી."</string>
- <string name="timeout" msgid="5461892570729418573">"મૂલ્ય અનિશ્ચિત અથવા અવ્યાખ્યાયિત હોઈ શકે છે."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"લાંબી સમયસમાપ્તિનો ઉપયોગ કરો"</string>
- <string name="dismiss" msgid="7872443888515066216">"છોડી દો"</string>
- <string name="exact" msgid="2597237880041789948">"(ચોક્કસ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(છેલ્લા અંકમાં ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"આગળ વાળા અંકો સાથે જવાબ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"અપૂર્ણાંક તરીકે જવાબ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ઓપન સૉર્સ લાઇસન્સ"</string>
- <string name="menu_history" msgid="9006222701220105452">"ઇતિહાસ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"સાફ કરો"</string>
- <string name="title_history" msgid="7820912156315181539">"ઇતિહાસ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ઉપર નેવિગેટ કરો"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"સમયસમાપ્તિ"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ઇતિહાસ અને મેમરી સાફ કરીએ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"વર્તમાન સમીકરણ"</string>
- <string name="no_history" msgid="4331262030447527188">"કોઇ ઇતિહાસ નથી"</string>
-</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
deleted file mode 100644
index 905996a..0000000
--- a/res/values-hi/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"कैल्क्यूलेटर"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"साफ़ किए गए"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"यूलर की संख्या"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"पाई"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"बिंदु"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"बायां कोष्ठक"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"दायां कोष्ठक"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"कोज्या"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"प्राकृतिक लघुगणक"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"लघुगणक"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ज्या"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"स्पर्शज्या"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"प्रतिलोम कोज्या"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"प्रतिलोम ज्या"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"प्रतिलोम स्पर्शज्या"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"दस की घात"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"घातांक फ़ंक्‍शन"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"वर्ग"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"धन"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"विभाजन"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"क्रमगुणन"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"गुणा"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"प्रतिशत"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"घात"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"वर्गमूल"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ऋण"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"अंश मोड"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"रेडियन मोड"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"अंश पर स्विच करें"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"रेडियन पर स्विच करें"</string>
- <string name="desc_eq" msgid="3349320880874699285">"बराबर"</string>
- <string name="desc_clr" msgid="737502124268890797">"साफ़ करें"</string>
- <string name="desc_del" msgid="7879515781929311432">"हटाएं"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"प्रतिलोम फ़ंक्शन दिखाएं"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"प्रतिलोम फ़ंक्शन छिपाएं"</string>
- <string name="desc_formula" msgid="8056588859637585007">"कोई फ़ार्मूला नहीं"</string>
- <string name="desc_result" msgid="1794073190203126821">"कोई परिणाम नहीं"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"संख्याएं और मूल संचालन"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"उन्नत संचालन"</string>
- <string name="error_nan" msgid="5674077944929888710">"संख्या नहीं है"</string>
- <string name="error_syntax" msgid="4786987111228645602">"खराब व्यंजक"</string>
- <string name="error_aborted" msgid="3402238176316342537">"निरस्त किया गया"</string>
- <string name="error_overflow" msgid="7800547394563434764">"असीमित?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 से विभाजित नहीं कर सकते"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"लेख की प्रति बनाई गई"</string>
- <string name="cancelled" msgid="2207323593183640994">"गणना रोक दी गई."</string>
- <string name="timeout" msgid="5461892570729418573">"मूल्‍य अनंत या अपरिभाषित हो सकता है."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"अधिक बड़े समयबाह्य का उपयोग करें"</string>
- <string name="dismiss" msgid="7872443888515066216">"ख़ारिज करें"</string>
- <string name="exact" msgid="2597237880041789948">"(सटीक)"</string>
- <string name="approximate" msgid="7117143366610670836">"(अंतिम अंक में ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"आगे वाले अंक से उत्तर दें"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"भिन्न में उत्तर दें"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ओपन सोर्स लाइसेंस"</string>
- <string name="menu_history" msgid="9006222701220105452">"इतिहास"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"साफ़ करें"</string>
- <string name="title_history" msgid="7820912156315181539">"इतिहास"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ऊपर नेविगेट करें"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"समयबाह्य"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"इतिहास और मेमोरी मिटाना चाहते हैं?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"वर्तमान अभिव्यक्ति"</string>
- <string name="no_history" msgid="4331262030447527188">"कोई इतिहास नहीं"</string>
-</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
deleted file mode 100644
index eb89246..0000000
--- a/res/values-hr/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"stup."</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"izbrisano"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerov broj"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"decimalna točka"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"lijeva zagrada"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"desna zagrada"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"prirodni logaritam"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritam"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkus kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkus sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkus tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"potencija broja deset"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponencijalna funkcija"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"na kvadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"podijeljeno"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorijel"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"pomnoži"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"postotak"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potencija"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"drugi korijen"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"način stupnjeva"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"način radijana"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"prelazak na stupnjeve"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"prelazak na radijane"</string>
- <string name="desc_eq" msgid="3349320880874699285">"jednako"</string>
- <string name="desc_clr" msgid="737502124268890797">"očisti"</string>
- <string name="desc_del" msgid="7879515781929311432">"izbriši"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"prikazuje inverzne funkcije"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"sakriva inverzne funkcije"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nema formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nema rezultata"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Brojevi i osnovne operacije"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Napredne operacije"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nije broj"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Neispravan izraz"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Prekinuto"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Beskonačno?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nije moguće dijeliti s 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekst kopiran"</string>
- <string name="cancelled" msgid="2207323593183640994">"Izračun je otkazan."</string>
- <string name="timeout" msgid="5461892570729418573">"Vrijednost može biti beskonačna ili neodređena."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Koristi dulje vrijeme čekanja"</string>
- <string name="dismiss" msgid="7872443888515066216">"Odbaci"</string>
- <string name="exact" msgid="2597237880041789948">"(točno)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 u zadnjoj znamenci)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"S poč. brojevima"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Kao razlomak"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licence otv. koda"</string>
- <string name="menu_history" msgid="9006222701220105452">"Povijest"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Izbriši"</string>
- <string name="title_history" msgid="7820912156315181539">"Povijest"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Idi gore"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Vrijeme je isteklo"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Izbrisati povijest i memoriju?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Trenutačni izraz"</string>
- <string name="no_history" msgid="4331262030447527188">"Nema povijesti"</string>
-</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
deleted file mode 100644
index e63991e..0000000
--- a/res/values-hu/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Számológép"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"törölve"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler-féle szám"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pí"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"tizedesvessző"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"nyitó zárójel"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"berekesztő zárójel"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"koszinusz"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"természetes logaritmus"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmus"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"szinusz"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkusz koszinusz"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkusz szinusz"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkusz tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 a következő hatványra emelve:"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponenciális függvény"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"négyzetre emelés"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"összeadás"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"osztás"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriális"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"szorzás"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"százalék"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"hatványozás"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"négyzetgyök"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"kivonás"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"fok mód"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radián mód"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"váltás fokra"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"váltás radiánra"</string>
- <string name="desc_eq" msgid="3349320880874699285">"egyenlő"</string>
- <string name="desc_clr" msgid="737502124268890797">"törlés"</string>
- <string name="desc_del" msgid="7879515781929311432">"törlés"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"inverz függvények megjelenítése"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"inverz függvények elrejtése"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nincs képlet"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nincs találat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Számok és alapműveletek"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Speciális műveletek"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nem egy szám"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Hibás kifejezés"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Megszakítva"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Végtelen?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0-val osztás nincs"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Szöveg átmásolva"</string>
- <string name="cancelled" msgid="2207323593183640994">"Számítás leállítva."</string>
- <string name="timeout" msgid="5461892570729418573">"Lehet, hogy az érték végtelen vagy meghatározatlan."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Hosszabb időtúllépés használata"</string>
- <string name="dismiss" msgid="7872443888515066216">"Elvetés"</string>
- <string name="exact" msgid="2597237880041789948">"(pontos)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 az utolsó számjegy esetén)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Elsőtől kezdve"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Törtként"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Nyílt licencek"</string>
- <string name="menu_history" msgid="9006222701220105452">"Előzmények"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Törlés"</string>
- <string name="title_history" msgid="7820912156315181539">"Előzmények"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Fel"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Időtúllépés"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Előzmények és memória törlése?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Jelenlegi kifejezés"</string>
- <string name="no_history" msgid="4331262030447527188">"Nincsenek előzmények"</string>
-</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
deleted file mode 100644
index 804d0c6..0000000
--- a/res/values-hy/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Հաշվիչ"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"ջնջվեց"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Էյլերյան թիվ"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"պի"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"կետ"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ձախ փակագիծ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"աջ փակագիծ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"կոսինուս"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"բնական լոգարիթմ"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"լոգարիթմ"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"սինուս"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"տանգենս"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"հակադարձ կոսինուս"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"հակադարձ սինուս"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"հակադարձ տանգենս"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"հետևյալ աստիճանի տասը՝"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"աստիճանային ֆունկցիա"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"քառակուսի"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"գումարում"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"բաժանում"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ֆակտորիալ"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"բազմապատկում"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"տոկոս"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"սնուցում"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"քառակուսի արմատ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"հանում"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"աստիճանների ռեժիմ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ռադիան ռեժիմ"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"փոխարկել աստիճանների"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"փոխարկել ռադիանի"</string>
- <string name="desc_eq" msgid="3349320880874699285">"հավասար է"</string>
- <string name="desc_clr" msgid="737502124268890797">"մաքրել"</string>
- <string name="desc_del" msgid="7879515781929311432">"ջնջել"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ցուցադրել հակադարձ գործառույթները"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"թաքցնել հակադարձ գործառույթները"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Բանաձև չկա"</string>
- <string name="desc_result" msgid="1794073190203126821">"Արդյունք չկա"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Թվեր և հիմնական գործողություններ"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Լրացուցիչ գործողություններ"</string>
- <string name="error_nan" msgid="5674077944929888710">"Թիվ չէ"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Սխալ է"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Ընդհատված"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Անվե՞րջ է:"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Հնարավոր չէ բաժանել 0-ի"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Տեսքտը պատճենվեց"</string>
- <string name="cancelled" msgid="2207323593183640994">"Հաշվարկը չեղարկվել է:"</string>
- <string name="timeout" msgid="5461892570729418573">"Հնարավոր է` արժեքն անսահման է կամ սահմանված չէ:"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Երկարատև ժամանակի սպառումով"</string>
- <string name="dismiss" msgid="7872443888515066216">"Փակել"</string>
- <string name="exact" msgid="2597237880041789948">"(ճշգրիտ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 վերջին նիշում)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Առաջին թվերով"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Որպես կոտորակ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Բաց կոդի արտոնագրեր"</string>
- <string name="menu_history" msgid="9006222701220105452">"Պատմություն"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Մաքրել"</string>
- <string name="title_history" msgid="7820912156315181539">"Պատմություն"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Անցնել վերև"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Ժամանակի սպառում"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Մաքրե՞լ պատմությունն ու հիշողությունը:"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Ընթացիկ արտահայտությունը"</string>
- <string name="no_history" msgid="4331262030447527188">"Պատմություն չկա"</string>
-</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
deleted file mode 100644
index cad8732..0000000
--- a/res/values-in/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"dihapus"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"bilangan Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"koma"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"kurung buka"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"kurung tutup"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritma alami"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritma"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangen"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"balikan kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"balikan sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"balikan tangen"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"pangkat sepuluh dari"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"fungsi eksponensial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kuadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"tambah"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"bagi"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"kali"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"persen"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"pangkat"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"akar pangkat dua"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"kurang"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"mode derajat"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"mode radian"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"beralih ke derajat"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"beralih ke radian"</string>
- <string name="desc_eq" msgid="3349320880874699285">"sama dengan"</string>
- <string name="desc_clr" msgid="737502124268890797">"kosongkan"</string>
- <string name="desc_del" msgid="7879515781929311432">"hapus"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"tampilkan fungsi balikan"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"semunyikan fungsi balikan"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Tidak ada formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Tidak ada hasil"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Angka dan operasi dasar"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operasi lanjutan"</string>
- <string name="error_nan" msgid="5674077944929888710">"Bukan angka"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Pernyataan salah"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Dibatalkan"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Tak terhingga?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Tak bisa dengan 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teks disalin"</string>
- <string name="cancelled" msgid="2207323593183640994">"Komputasi dibatalkan."</string>
- <string name="timeout" msgid="5461892570729418573">"Nilai mungkin tidak terbatas atau tidak ditentukan."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Gunakan waktu tunggu yang lebih lama"</string>
- <string name="dismiss" msgid="7872443888515066216">"Tutup"</string>
- <string name="exact" msgid="2597237880041789948">"(persis)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 dalam digit terakhir)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Jawab dengan digit depan"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Jawab sebagai pecahan"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Lisensi open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"Histori"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Hapus"</string>
- <string name="title_history" msgid="7820912156315181539">"Histori"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigasi naik"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Waktu habis"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Hapus histori dan memori?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Ekspresi Saat Ini"</string>
- <string name="no_history" msgid="4331262030447527188">"Tidak Ada Histori"</string>
-</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
deleted file mode 100644
index 548e428..0000000
--- a/res/values-is/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Reiknivél"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"grá"</string>
- <string name="mode_rad" msgid="1434228830085760996">"bog"</string>
- <string name="clr" msgid="6730945431543327337">"hre"</string>
- <string name="cleared" msgid="3952521190281880880">"hreinsað"</string>
- <string name="del" msgid="5878069000864178910">"eyð"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Tala Eulers"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pí"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"komma"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"vinstri svigi"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"hægri svigi"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kósínus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"náttúrlegur logri"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logri"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sínus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkarkósínus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arkarsínus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arkartangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"tíu í veldinu"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"veldisvísisfall"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"í öðru veldi"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plús"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"deila"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"hrópmerkt"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"margfalda"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"prósent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"veldi"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvaðratrót"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"mínus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gráðustilling"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"bogamálseiningastilling"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"skipta yfir í gráður"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"skipta yfir í bogamálseiningar"</string>
- <string name="desc_eq" msgid="3349320880874699285">"samasem"</string>
- <string name="desc_clr" msgid="737502124268890797">"hreinsa"</string>
- <string name="desc_del" msgid="7879515781929311432">"eyða"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"sýna andhverf föll"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"fela andhverf föll"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Engin formúla"</string>
- <string name="desc_result" msgid="1794073190203126821">"Engar niðurstöður"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Tölur og einfaldar aðgerðir"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Ítarlegri aðgerðir"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ekki tala"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Röng segð"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Hætt við"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Óendanleg?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Ekki er hægt að deila með 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texti afritaður"</string>
- <string name="cancelled" msgid="2207323593183640994">"Hætt við útreikning."</string>
- <string name="timeout" msgid="5461892570729418573">"Gildið kann að vera óendanlegt eða ótilgreint."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Nota lengri tímafrest"</string>
- <string name="dismiss" msgid="7872443888515066216">"Hunsa"</string>
- <string name="exact" msgid="2597237880041789948">"(nákvæmt)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 í síðasta tölustaf)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Svara með tölustöfum á undan"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Svara með broti"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Leyfi opins kóða"</string>
- <string name="menu_history" msgid="9006222701220105452">"Ferill"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Hreinsa"</string>
- <string name="title_history" msgid="7820912156315181539">"Ferill"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Fara upp"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tímamörk"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Hreinsa feril og minni?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Núverandi segð"</string>
- <string name="no_history" msgid="4331262030447527188">"Enginn ferill"</string>
-</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
deleted file mode 100644
index e850d73..0000000
--- a/res/values-it/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calcolatrice"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"c"</string>
- <string name="cleared" msgid="3952521190281880880">"cancellati"</string>
- <string name="del" msgid="5878069000864178910">"ce"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"numero di Eulero"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"virgola"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parentesi aperta"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parentesi chiusa"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"coseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo naturale"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"coseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dieci elevato alla"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"funzione esponenziale"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"al quadrato"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"più"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"diviso"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fattoriale"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"per"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percentuale"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potenza"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"radice quadrata"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"meno"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modalità gradi"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modalità radiante"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"passa ai gradi"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"passa ai radianti"</string>
- <string name="desc_eq" msgid="3349320880874699285">"uguale"</string>
- <string name="desc_clr" msgid="737502124268890797">"cancella"</string>
- <string name="desc_del" msgid="7879515781929311432">"elimina"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostra funzioni inverse"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"nascondi funzioni inverse"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nessuna formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nessun risultato"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numeri e operazioni basilari"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operazioni avanzate"</string>
- <string name="error_nan" msgid="5674077944929888710">"Non è un numero"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Espressione errata"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Interrotta"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Divisione per 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Testo copiato"</string>
- <string name="cancelled" msgid="2207323593183640994">"Calcolo annullato."</string>
- <string name="timeout" msgid="5461892570729418573">"Il valore potrebbe essere infinito o indefinito."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Utilizza timeout più lunghi"</string>
- <string name="dismiss" msgid="7872443888515066216">"Chiudi"</string>
- <string name="exact" msgid="2597237880041789948">"(esatto)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 nell\'ultima cifra)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Risultato con cifre iniziali"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Risultato come frazione"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licenze open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"Cronologia"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Cancella"</string>
- <string name="title_history" msgid="7820912156315181539">"Cronologia"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Vai in alto"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Cancellare cronologia e memoria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Espressione corrente"</string>
- <string name="no_history" msgid="4331262030447527188">"Nessuna cronologia"</string>
-</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
deleted file mode 100644
index 31ed2c6..0000000
--- a/res/values-iw/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"מחשבון"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"נוקה"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"‏הקבוע e"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"פאי"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"נקודה"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"סוגר שמאלי"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"סוגר ימני"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"קוסינוס"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"לוגריתם טבעי"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"לוגריתם"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"סינוס"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"טנגנס"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"אינברס קוסינוס"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"אינברס סינוס"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"אינברס טנגנס"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"עשר בחזקת"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"פונקציה מעריכית"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"בריבוע"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"פלוס"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"חילוק"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"עצרת"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"כפל"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"אחוז"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"חזקה"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"שורש ריבועי"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"מינוס"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"מצב מעלות"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"מצב רדיאנים"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"עבור למעלות"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"עבור לרדיאנים"</string>
- <string name="desc_eq" msgid="3349320880874699285">"שווה"</string>
- <string name="desc_clr" msgid="737502124268890797">"נקה"</string>
- <string name="desc_del" msgid="7879515781929311432">"מחק"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"הצג פונקציות אינברס"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"הסתר פונקציות אינברס"</string>
- <string name="desc_formula" msgid="8056588859637585007">"אין נוסחה"</string>
- <string name="desc_result" msgid="1794073190203126821">"אין תוצאה"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"מספרים ופעולות בסיסיות"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"פעולות מתקדמות"</string>
- <string name="error_nan" msgid="5674077944929888710">"אינו מספר"</string>
- <string name="error_syntax" msgid="4786987111228645602">"ביטוי שגוי"</string>
- <string name="error_aborted" msgid="3402238176316342537">"בוטל"</string>
- <string name="error_overflow" msgid="7800547394563434764">"אינסופי?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"אי אפשר לחלק ב-0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"הטקסט הועתק"</string>
- <string name="cancelled" msgid="2207323593183640994">"החישוב בוטל."</string>
- <string name="timeout" msgid="5461892570729418573">"ייתכן שהערך הוא אינסופי או לא מוגדר."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"הארך את הזמן הקצוב לתפוגה"</string>
- <string name="dismiss" msgid="7872443888515066216">"סגור"</string>
- <string name="exact" msgid="2597237880041789948">"(מדויק)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 בספרה האחרונה)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"תשובה עם ספרות מובילות"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"תשובה בצורת שבר"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"רישיונות קוד פתוח"</string>
- <string name="menu_history" msgid="9006222701220105452">"היסטוריה"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"נקה"</string>
- <string name="title_history" msgid="7820912156315181539">"היסטוריה"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"נווט למעלה"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"זמן קצוב לתפוגה"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"לנקות את ההיסטוריה והזיכרון?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"הביטוי הנוכחי"</string>
- <string name="no_history" msgid="4331262030447527188">"אין היסטוריה"</string>
-</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
deleted file mode 100644
index 1f1dbea..0000000
--- a/res/values-ja/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"電卓"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"消去しました"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"自然対数の底"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"パイ"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ポイント"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"左かっこ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"右かっこ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"コサイン"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"自然対数"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"対数"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"サイン"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"タンジェント"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"逆コサイン"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"逆サイン"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"逆タンジェント"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10の累乗"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"指数関数"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"2乗"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"足す"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"割る"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"階乗"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"乗算"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"パーセント"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"累乗"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"平方根"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"引く"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"度モード"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ラジアンモード"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"度に切り替え"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ラジアンに切り替え"</string>
- <string name="desc_eq" msgid="3349320880874699285">"イコール"</string>
- <string name="desc_clr" msgid="737502124268890797">"クリア"</string>
- <string name="desc_del" msgid="7879515781929311432">"削除"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"逆関数を表示する"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"逆関数を表示しない"</string>
- <string name="desc_formula" msgid="8056588859637585007">"数式がありません"</string>
- <string name="desc_result" msgid="1794073190203126821">"該当する結果がありません"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"数字と基本的な演算"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"高度な演算"</string>
- <string name="error_nan" msgid="5674077944929888710">"数値以外です"</string>
- <string name="error_syntax" msgid="4786987111228645602">"式が無効です"</string>
- <string name="error_aborted" msgid="3402238176316342537">"中止しました"</string>
- <string name="error_overflow" msgid="7800547394563434764">"無限大です"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"ゼロでは除算できません"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"テキストをコピーしました"</string>
- <string name="cancelled" msgid="2207323593183640994">"計算をキャンセルしました。"</string>
- <string name="timeout" msgid="5461892570729418573">"値は無限または未定義の可能性があります。"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"タイムアウトを延長して再試行"</string>
- <string name="dismiss" msgid="7872443888515066216">"閉じる"</string>
- <string name="exact" msgid="2597237880041789948">"(誤差なし)"</string>
- <string name="approximate" msgid="7117143366610670836">"(最後の桁の誤差±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"先頭の桁を含めて表示"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"分数で表示"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"オープンソースライセンス"</string>
- <string name="menu_history" msgid="9006222701220105452">"履歴"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"削除"</string>
- <string name="title_history" msgid="7820912156315181539">"履歴"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"上へ移動"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"タイムアウト"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"履歴とメモリを削除しますか?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"現在の式"</string>
- <string name="no_history" msgid="4331262030447527188">"履歴はありません"</string>
-</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
deleted file mode 100644
index 5d26074..0000000
--- a/res/values-ka/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"კალკულატორი"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"გრად."</string>
- <string name="mode_rad" msgid="1434228830085760996">"რად."</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"გასუფთავდა"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"ეილერის რიცხვი"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ათობითი გამყოფი"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"მარცხენა ფრჩხილი"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"მარჯვენა ფრჩხილი"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"კოსინუსი"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ნატურალური ლოგარითმი"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ლოგარითმი"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"სინუსი"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ტანგენსი"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"შებრუნებული კოსინუსი"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"შებრუნებული სინუსი"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"შებრუნებული ტანგესი"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ათი ხარისხში"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ექსპონენციალური ფუნქცია"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"კვადრატი"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"პლუსი"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"გაყოფა"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ფაქტორიალი"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"გამრავლება"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"პროცენტი"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ხარისხში აყვანა"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"კვადრატული ფესვი"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"მინუსი"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ხარისხის რეჟიმი"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"რადიანის რეჟიმი"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"გრადუსებზე გადართვა"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"რადიანებზე გადართვა"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ტოლია"</string>
- <string name="desc_clr" msgid="737502124268890797">"გასუფთავება"</string>
- <string name="desc_del" msgid="7879515781929311432">"წაშლა"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"შებრუნებული ფუნქციების ჩვენება"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"შებრუნებული ფუნქციების დამალვა"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ფორმულა არ არის"</string>
- <string name="desc_result" msgid="1794073190203126821">"შედეგი არ არის"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"რიცხვები და ძირითადი ოპერაციები"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"დამატებითი ოპერაციები"</string>
- <string name="error_nan" msgid="5674077944929888710">"არ არის რიცხვი"</string>
- <string name="error_syntax" msgid="4786987111228645602">"არასწორი გამოსახულება"</string>
- <string name="error_aborted" msgid="3402238176316342537">"შეწყვეტილია"</string>
- <string name="error_overflow" msgid="7800547394563434764">"განუსაზღვრელი?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0-ზე გაყოფა შეუძლებელია"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ტექსტი დაკოპირდა"</string>
- <string name="cancelled" msgid="2207323593183640994">"გამოთვლა გაუქმდა."</string>
- <string name="timeout" msgid="5461892570729418573">"მნიშვნელობა შეიძლება იყოს უსასრულო ან განუსაზღვრელი."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"უფრო ხანგრძლივი დროის ლიმიტის გამოყენება"</string>
- <string name="dismiss" msgid="7872443888515066216">"დახურვა"</string>
- <string name="exact" msgid="2597237880041789948">"(ზუსტი)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 ბოლო ციფრში)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"პირველი ციფრებით"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"პასუხი წილადით"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ღია კოდის ლიცენ."</string>
- <string name="menu_history" msgid="9006222701220105452">"ისტორია"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"გასუფთავება"</string>
- <string name="title_history" msgid="7820912156315181539">"ისტორია"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ნავიგაცია ზემოთ"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"დროის ლიმიტი ამოიწურა"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"გასუფთავდეს ისტორია და მეხსიერება?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"ამჟამინდელი გამოსახულება"</string>
- <string name="no_history" msgid="4331262030447527188">"ისტორია არ არის"</string>
-</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
deleted file mode 100644
index 57a9f7b..0000000
--- a/res/values-kk/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калькулятор"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"тзл"</string>
- <string name="cleared" msgid="3952521190281880880">"тазартылған"</string>
- <string name="del" msgid="5878069000864178910">"жою"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Эйлер саны"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"пи"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"нүкте"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"сол жақ жақша"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"оң жақ жақша"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"натуралды логарифм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логарифм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"арккосинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"арксинус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"арктангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"онның мынадай дәрежесі:"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"экспоненциалды функция"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"шаршыға алынған"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"қосу"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"бөлу"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факториал"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"көбейту"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"пайыз"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"дәреже"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"шаршы түбір"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"алу"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"деңгей режимі"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"радиан режимі"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"градусқа ауыстыру"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"радианға ауыстыру"</string>
- <string name="desc_eq" msgid="3349320880874699285">"тең"</string>
- <string name="desc_clr" msgid="737502124268890797">"тазалау"</string>
- <string name="desc_del" msgid="7879515781929311432">"жою"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"кері функцияларды көрсетеді"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"кері функцияларды жасырады"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Формуласы жоқ"</string>
- <string name="desc_result" msgid="1794073190203126821">"Нәтиже жоқ"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Сандар және негізгі операциялар"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Күрделі операциялар"</string>
- <string name="error_nan" msgid="5674077944929888710">"Сан емес"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Қате өрнек"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Тоқтатылды"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Шексіз бе?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0-ге бөлу мүмкін емес"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Мәтін көшірілді"</string>
- <string name="cancelled" msgid="2207323593183640994">"Есептеуден бас тартылды."</string>
- <string name="timeout" msgid="5461892570729418573">"Мән шексіз немесе анықталмаған болуы мүмкін."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Ұзағырақ күту уақытын пайдалану"</string>
- <string name="dismiss" msgid="7872443888515066216">"Жабу"</string>
- <string name="exact" msgid="2597237880041789948">"(дәл)"</string>
- <string name="approximate" msgid="7117143366610670836">"(соңғы цифрда ± 1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Бірінші цифрларын көрсету"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Бөлшек түрінде көрсету"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Ашық бастапқы код лицензиялары"</string>
- <string name="menu_history" msgid="9006222701220105452">"Тарих"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Тазалау"</string>
- <string name="title_history" msgid="7820912156315181539">"Тарих"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Жоғары қарай жылжу"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Күту уақыты бітті"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Тарих пен жад тазалансын ба?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Ағымдағы өрнек"</string>
- <string name="no_history" msgid="4331262030447527188">"Тарих жоқ"</string>
-</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
deleted file mode 100644
index 40ba9db..0000000
--- a/res/values-km/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ម៉ាស៊ីន​គិត​លេខ"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"បានសម្អាត"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"លេខ Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ចុច"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"វង់ក្រចក​ឆ្វេង"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"វង់ក្រចកស្ដាំ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"កូស៊ីនុស"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"លោការីតធម្មជាតិ"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"លោការីត"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ស៊ីនុស"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"តង់សង់"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"កូស៊ីនុសច្រាស"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ស៊ីនុសច្រាស"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"តង់សង់ច្រាស"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ដប់ស្វ័យគុណ"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"អនុគមន៍អិចស្ប៉ូណង់ស្យែល"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"រឹសការេ"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"បូក"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ចែក"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ហ្វាក់តូរីយ្យែល"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"គុណ"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ភាគរយ"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ស្វ័យគុណ"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ឫសការ៉េ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ដក"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"របៀបដឺក្រេ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"របៀបរ៉ាដ្យង់"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ប្តូរទៅដឺក្រេ"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ប្តូរទៅរ៉ាដ្យង់"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ស្មើ"</string>
- <string name="desc_clr" msgid="737502124268890797">"សម្អាត"</string>
- <string name="desc_del" msgid="7879515781929311432">"លុប"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"បង្ហាញមុខងារច្រាស"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"លាក់មុខងារច្រាស"</string>
- <string name="desc_formula" msgid="8056588859637585007">"គ្មានរូបមន្ត"</string>
- <string name="desc_result" msgid="1794073190203126821">"គ្មានលទ្ធផលទេ"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"លេខ និងប្រតិបត្តិការមូលដ្ឋាន"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"ប្រតិបត្តិការកម្រិតខ្ពស់"</string>
- <string name="error_nan" msgid="5674077944929888710">"មិនមែនជាលេខទេ"</string>
- <string name="error_syntax" msgid="4786987111228645602">"កន្សោមមិនត្រឹមត្រូវ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"បោះបង់"</string>
- <string name="error_overflow" msgid="7800547394563434764">"មិនកំណត់?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"មិនអាចចែកដោយ 0 បានទេ"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"បានចម្លងអត្ថបទ"</string>
- <string name="cancelled" msgid="2207323593183640994">"បានលុបការគណនា"</string>
- <string name="timeout" msgid="5461892570729418573">"តម្លៃអាចគ្មានដែនកំណត់ ឬមិនបានកំណត់។"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ប្រើការអស់ពេលយូរជាងនេះ"</string>
- <string name="dismiss" msgid="7872443888515066216">"បដិសេធ"</string>
- <string name="exact" msgid="2597237880041789948">"(គត់)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 ក្នុងខ្ទង់ចុងក្រោយ)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"ចម្លើយជាមួយខ្ទង់នាំមុខ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ចម្លើយជាប្រភាគ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"អាជ្ញាបណ្ណកូដចំហ"</string>
- <string name="menu_history" msgid="9006222701220105452">"ប្រវត្តិ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"សម្អាត"</string>
- <string name="title_history" msgid="7820912156315181539">"ប្រវត្តិ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"រំកិលទៅលើ"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"អស់ពេល"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"សម្អាតប្រវត្តិ និងអង្គចងចាំមែនទេ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"ការបង្ហាញអារម្មណ៍បច្ចុប្បន្ន"</string>
- <string name="no_history" msgid="4331262030447527188">"គ្មានប្រវត្តិទេ"</string>
-</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
deleted file mode 100644
index 2f079f3..0000000
--- a/res/values-kn/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ಕ್ಯಾಲ್ಕ್ಯುಲೇಟರ್"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"ತೆರ"</string>
- <string name="cleared" msgid="3952521190281880880">"ತೆರವುಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"ಯೂಲರ್‌ನ ಸಂಖ್ಯೆ"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"ಪೈ"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ಬಿಂದು"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ಎಡ ಆವರಣದ ವಾಕ್ಯ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"ಬಲ ಆವರಣದ ವಾಕ್ಯ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"ಕೊಸೈನ್"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ಸ್ವಾಭಾವಿಕ ಲಾಗರಿದಮ್"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ಲಾಗರಿದಮ್"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ಸೈನ್"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ಸ್ಪರ್ಶರೇಖೆ"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"ವಿಲೋಮ ಕೊಸೈನ್"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ವಿಲೋಮ ಸೈನ್"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"ವಿಲೋಮ ಸ್ಪರ್ಶರೇಖೆ"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ಹತ್ತರ ಘಾತ"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ಘಾತ ಕ್ರಿಯೆ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ವರ್ಗ"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"ಸಂಕಲನ"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ವಿಭಾಗಿಸು"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ಅಪವರ್ತನೀಯ"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ಗುಣಿಸು"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ಪ್ರತಿಶತ"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ಪವರ್‌"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ವರ್ಗಮೂಲ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ವ್ಯವಕಲನ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ಡಿಗ್ರಿ ಮೋಡ್"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ರೇಡಿಯನ್ ಮೋಡ್"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ಡಿಗ್ರಿಗಳಿಗೆ ಬದಲಾಯಿಸು"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ರೇಡಿಯನ್‌ಗಳಿಗೆ ಬದಲಾಯಿಸು"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ಸಮ ಚಿಹ್ನೆ"</string>
- <string name="desc_clr" msgid="737502124268890797">"ತೆರವುಗೊಳಿಸು"</string>
- <string name="desc_del" msgid="7879515781929311432">"ಅಳಿಸಿ"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ವಿಲೋಮ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ತೋರಿಸು"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ವಿಲೋಮ ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಮರೆಮಾಡು"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ಯಾವುದೇ ಫಾರ್ಮುಲಾ ಇಲ್ಲ"</string>
- <string name="desc_result" msgid="1794073190203126821">"ಯಾವುದೇ ಫಲಿತಾಂಶವಿಲ್ಲ"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"ಸಂಖ್ಯೆಗಳು ಮತ್ತು ಮೂಲ ಕಾರ್ಯಾಚರಣೆಗಳು"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"ಸುಧಾರಿತ ಕಾರ್ಯಾಚರಣೆಗಳು"</string>
- <string name="error_nan" msgid="5674077944929888710">"ಸಂಖ್ಯೆಯಲ್ಲ"</string>
- <string name="error_syntax" msgid="4786987111228645602">"ತಪ್ಪು ಪದ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ರದ್ದು ಮಾಡಲಾಗಿದೆ"</string>
- <string name="error_overflow" msgid="7800547394563434764">"ಅಪರಿಮಿತ?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 ನಿಂದ ಭಾಗಿಸಲಸಾಧ್ಯ"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ಪಠ್ಯವನ್ನು ನಕಲಿಸಲಾಗಿದೆ"</string>
- <string name="cancelled" msgid="2207323593183640994">"ಎಣಿಕೆ ರದ್ದು ಮಾಡಲಾಗಿದೆ."</string>
- <string name="timeout" msgid="5461892570729418573">"ಮೌಲ್ಯವು ಅಪರಿಮಿತ ಅಥವಾ ಬಣ್ಣಿಸಲು ಸಾಧ್ಯವಾಗದೆ ಇರಬಹುದು."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ದೀರ್ಘ ಅವಧಿ ಮೀರುವಿಕೆಗಳನ್ನು ಬಳಸಿ"</string>
- <string name="dismiss" msgid="7872443888515066216">"ವಜಾಗೊಳಿಸಿ"</string>
- <string name="exact" msgid="2597237880041789948">"(ನಿಖರ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 ಕೊನೆಯ ಅಂಕಿಯಲ್ಲಿ)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"ಮೊದಲ ಅಂಕೆ ಜೊತೆ ಉತ್ತರಿಸಿ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ಭಾಗದಂತೆ ಉತ್ತರಿಸಿ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ಓಪನ್ ಸೋರ್ಸ್ ಪರವಾನಗಿಗಳು"</string>
- <string name="menu_history" msgid="9006222701220105452">"ಇತಿಹಾಸ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"ತೆರವುಗೊಳಿಸಿ"</string>
- <string name="title_history" msgid="7820912156315181539">"ಇತಿಹಾಸ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ಮೇಲಕ್ಕೆ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿ"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"ಅವಧಿ ಮೀರಿದೆ"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ಇತಿಹಾಸ ಮತ್ತು ಮೆಮೊರಿಯನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"ಪ್ರಸ್ತುತ ಅಭಿವ್ಯಕ್ತಿ"</string>
- <string name="no_history" msgid="4331262030447527188">"ಯಾವುದೇ ಇತಿಹಾಸವಿಲ್ಲ"</string>
-</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
deleted file mode 100644
index 6af8123..0000000
--- a/res/values-ko/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"계산기"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"삭제됨"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"오일러의 수"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"원주율(파이)"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"소수점"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"왼쪽 괄호"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"오른쪽 괄호"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"코사인"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"자연 로그"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"로그"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"사인"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"탄젠트"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"역코사인"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"역사인"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"역탄젠트"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10의 거듭제곱"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"지수 함수"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"제곱"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"더하기"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"나누기"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"팩토리얼"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"곱하기"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"퍼센트"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"거듭제곱"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"제곱근"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"빼기"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"도 모드"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"라디안 모드"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"도로 전환"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"라디안으로 전환"</string>
- <string name="desc_eq" msgid="3349320880874699285">"등호"</string>
- <string name="desc_clr" msgid="737502124268890797">"지우기"</string>
- <string name="desc_del" msgid="7879515781929311432">"삭제"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"역함수 표시"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"역함수 숨기기"</string>
- <string name="desc_formula" msgid="8056588859637585007">"수식 없음"</string>
- <string name="desc_result" msgid="1794073190203126821">"결과 없음"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"숫자 및 기본 작업"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"고급 작업"</string>
- <string name="error_nan" msgid="5674077944929888710">"숫자가 아님"</string>
- <string name="error_syntax" msgid="4786987111228645602">"잘못된 수식"</string>
- <string name="error_aborted" msgid="3402238176316342537">"중단됨"</string>
- <string name="error_overflow" msgid="7800547394563434764">"무한?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0으로 나눌 수 없음"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"텍스트를 복사했습니다."</string>
- <string name="cancelled" msgid="2207323593183640994">"계산이 취소되었습니다."</string>
- <string name="timeout" msgid="5461892570729418573">"값이 무한하거나 정의되지 않았을 수 있습니다."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"제한시간 연장 사용"</string>
- <string name="dismiss" msgid="7872443888515066216">"취소"</string>
- <string name="exact" msgid="2597237880041789948">"(완전일치)"</string>
- <string name="approximate" msgid="7117143366610670836">"(마지막 자리 ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"선행 자릿수로 답변"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"결과를 분수로 표시"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"오픈소스 라이선스"</string>
- <string name="menu_history" msgid="9006222701220105452">"기록"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"삭제"</string>
- <string name="title_history" msgid="7820912156315181539">"기록"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"위로 탐색"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"시간 초과"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"기록 및 메모리를 삭제하시겠습니까?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"현재 수식"</string>
- <string name="no_history" msgid="4331262030447527188">"기록이 없습니다."</string>
-</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
deleted file mode 100644
index 1902bf6..0000000
--- a/res/values-ky/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Эсептегич"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"град"</string>
- <string name="mode_rad" msgid="1434228830085760996">"радиан"</string>
- <string name="clr" msgid="6730945431543327337">"жтч"</string>
- <string name="cleared" msgid="3952521190281880880">"тазаланды"</string>
- <string name="del" msgid="5878069000864178910">"өчр"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Эйлер саны"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"Пи"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"чекит"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"сол кашаа"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"оң кашаа"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"натуралдык логарифм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логарифм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"арккосинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"арксинус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"арктангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"онду даражага көтөрүү"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"Экспонент функциясы"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"квадрат"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"плюс"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"бөлүү"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факториал"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"көбөйтүү"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"пайыз"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"кубат"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"квадраттык тамыр"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"кемитүү"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"даража режими"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"радиан режими"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"даражаларга которулуу"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"радиандарга которулуу"</string>
- <string name="desc_eq" msgid="3349320880874699285">"барабар"</string>
- <string name="desc_clr" msgid="737502124268890797">"тазалоо"</string>
- <string name="desc_del" msgid="7879515781929311432">"жок кылуу"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"карама-каршы функцияларды көрсөтүү"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"карама-каршы функцияларды жашыруу"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Формула жок"</string>
- <string name="desc_result" msgid="1794073190203126821">"Жыйынтык жок"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Сандар жана негизги операциялар"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Өркүндөтүлгөн операциялар"</string>
- <string name="error_nan" msgid="5674077944929888710">"Сан эмес"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Начар туюнтма"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Үзгүлтккө учурды"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Чексизби?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0гө бөлүнбөйт"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текст көчүрүлдү"</string>
- <string name="cancelled" msgid="2207323593183640994">"Эсептөө жокко чыгарылды."</string>
- <string name="timeout" msgid="5461892570729418573">"Маани чексиз жана белгисиз болушу мүмкүн."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Күтүү убакытын узартуу"</string>
- <string name="dismiss" msgid="7872443888515066216">"Жок"</string>
- <string name="exact" msgid="2597237880041789948">"(так)"</string>
- <string name="approximate" msgid="7117143366610670836">"(акыркы санда ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Биринчи сандарды көрсөтүү"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Бөлчөк түрүндө"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Ачык программа уруксаттамалары"</string>
- <string name="menu_history" msgid="9006222701220105452">"Таржымал"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Тазалоо"</string>
- <string name="title_history" msgid="7820912156315181539">"Таржымал"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Жогору чабыттоо"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Таймаут"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Буга чейин эсептелген нерселер тазалансынбы?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Учурдагы туюнтма"</string>
- <string name="no_history" msgid="4331262030447527188">"Таржымал жок"</string>
-</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
deleted file mode 100644
index 6fba77a..0000000
--- a/res/values-lo/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ຈັກຄິດໄລ່"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"ອົງ​ສາ"</string>
- <string name="mode_rad" msgid="1434228830085760996">"ຣາ​ດຽງ"</string>
- <string name="clr" msgid="6730945431543327337">"ລຶບລ້າງ"</string>
- <string name="cleared" msgid="3952521190281880880">"ລ້າງ​ແລ້ວ"</string>
- <string name="del" msgid="5878069000864178910">"ລຶບ"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"ຈຳ​ນວນ​ຄ່າ​ຄົງ​ທີ່"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"​ປີ່"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"​ຈ້ຳ​ເມັດ"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ວົງເລັບຊ້າຍ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"ວົງເລັບຂວາ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ໂລ​ກາ​ຣິ​ດ​ທຳ​ມະ​ຊາດ"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"​ໂລ​ກາ​ຣິ​ດ"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"cosine ປີ້ນ"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"sine ປີ້ນ"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangent ປີ້ນ"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ສິບ​ກຳ​ລັງ"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ຟັງ​ຄ໌​ຊັນ​ເອັກ​ໂປ​ເນັນ​ຊຽ​ວ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ຂັ້ນ​ສອງ"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"ບວກ"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ຫານ"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ແຟັກໂຕຣຽວ"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ຄູນ"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ເປີເຊັນ"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ກຳ​ລັງ"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ຮາກຂັ້ນ​ສອງ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ລົບ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ໂໝດ​ອົງ​ສາ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ໂໝດ​ຣາ​ດຽງ"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ສັບ​ປ່ຽນ​ເປັນ​ອົງ​ສາ"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ສັບ​ປ່ຽນ​ເປັນ​ຣາ​ດຽງ"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ເທົ່າກັບ"</string>
- <string name="desc_clr" msgid="737502124268890797">"ລຶບ​ລ້າງ"</string>
- <string name="desc_del" msgid="7879515781929311432">"ລຶບ"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ສະ​ແດງ​ຟັງ​ຄ໌​ຊັນ​ທີ່​ຈຸ່ມ​ລົງ"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ເຊື່ອງ​ຟັງ​ຄ໌​ຊັນ​ທີ່​ຈຸ່ມ​ລົງ"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ບໍ່ມີສູດຄຳນວນ"</string>
- <string name="desc_result" msgid="1794073190203126821">"ບໍ່ມີຜົນການຊອກຫາ"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"ຄຳສັ່ງພື້ນຖານ ແລະ ຕົວເລກ"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"ຄຳສັ່ງຂັ້ນສູງ"</string>
- <string name="error_nan" msgid="5674077944929888710">"ບໍ່​ແມ່ນ​ໂຕ​ເລກ"</string>
- <string name="error_syntax" msgid="4786987111228645602">"ສຳ​ນວນ​ບໍ່​ດີ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ລົບ​ລ້າງ"</string>
- <string name="error_overflow" msgid="7800547394563434764">"ອະ​ສົງ​ໄຂ​ບໍ?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"ບໍ່​ສາ​ມາດ​ຫານ​ດ້ວຍ 0 ໄດ້"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ອັດ​ສຳ​ເນົາ​ຂໍ້​ຄວາມ​ແລ້ວ"</string>
- <string name="cancelled" msgid="2207323593183640994">"ຍົກເລີກການຄຳນວນແລ້ວ."</string>
- <string name="timeout" msgid="5461892570729418573">"ຄ່າອາດເປັນອະສົງໄຂ ຫຼື ບໍ່ໄດ້ລະບຸ."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ໃຊ້​ການ​ໝົດ​ເວ​ລາ​ດົນ​ຂຶ້ນ"</string>
- <string name="dismiss" msgid="7872443888515066216">"ປິດໄວ້"</string>
- <string name="exact" msgid="2597237880041789948">"(ແນ່ນອນ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 ໃນ​ຕົວ​ເລກ​ສຸດ​ທ້າຍ)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"ຄຳຕອບເປັນຕົວເລກນຳ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ຄຳ​ຕອບ​ເປັນ​ເສດ​ສ່ວນ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"​ລິ​ຂະ​ສິດ​ໂອ​ເພນ​ຊອດ"</string>
- <string name="menu_history" msgid="9006222701220105452">"ປະຫວັດ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"ລຶບລ້າງ"</string>
- <string name="title_history" msgid="7820912156315181539">"ປະຫວັດ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ເລື່ອນຂຶ້ນໄປເທິງ"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"ໝົດເວລາ"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ລຶບລ້າງປະຫວັດ ແລະ ຄວາມຈຳອອກບໍ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"ເອັກເພຣສຊັນປັດຈຸບັນ"</string>
- <string name="no_history" msgid="4331262030447527188">"ບໍ່ມີປະຫວັດ"</string>
-</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
deleted file mode 100644
index bd15dbe..0000000
--- a/res/values-lt/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Skaičiuotuvas"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"lpsn."</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"išv."</string>
- <string name="cleared" msgid="3952521190281880880">"išvalyta"</string>
- <string name="del" msgid="5878069000864178910">"išt."</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerio skaičius"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"kablelis"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"kairysis skliaustas"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"dešinysis skliaustas"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinusas"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natūralusis logaritmas"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmas"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinusas"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangentas"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"atvirkštinis kosinusas"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"atvirkštinis sinusas"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"atvirkštinis tangentas"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dešimt, pakelta laipsniu"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponentinė funkcija"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"pakelta kvadratu"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"sudėtis"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dalyba"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorialas"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"dauginti"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procentai"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"laipsnis"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratinė šaknis"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"atimtis"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"laipsnių režimas"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radianų režimas"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"perjungti į laipsnius"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"perjungti į radianus"</string>
- <string name="desc_eq" msgid="3349320880874699285">"lygu"</string>
- <string name="desc_clr" msgid="737502124268890797">"išvalyti"</string>
- <string name="desc_del" msgid="7879515781929311432">"ištrinti"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"rodyti atvirkštines funkcijas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"slėpti atvirkštines funkcijas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nėra formulės"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nėra jokių rezultatų"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Skaičiai ir pagrindiniai veiksmai"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Išplėstiniai veiksmai"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ne skaičius"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Blogas reiškinys"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Nutraukta"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Begalybė?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Neįman. padal. iš 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekstas nukopijuotas"</string>
- <string name="cancelled" msgid="2207323593183640994">"Skaičiavimas atšauktas."</string>
- <string name="timeout" msgid="5461892570729418573">"Vertė gali būti begalinė arba nenurodyta."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Naudoti ilgesnius skirtuosius laikus"</string>
- <string name="dismiss" msgid="7872443888515066216">"Atsisakyti"</string>
- <string name="exact" msgid="2597237880041789948">"(tikslus)"</string>
- <string name="approximate" msgid="7117143366610670836">"(paskutinis skaitmuo: ± 1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Ats. su sk. pr."</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Ats. kaip trupm."</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Atv. šalt. lic."</string>
- <string name="menu_history" msgid="9006222701220105452">"Istorija"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Išvalyti"</string>
- <string name="title_history" msgid="7820912156315181539">"Istorija"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Naršyti į viršų"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Baigėsi skirtasis laikas"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Išvalyti istoriją ir atmintį?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Dabartinis reiškinys"</string>
- <string name="no_history" msgid="4331262030447527188">"Nėra istorijos"</string>
-</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
deleted file mode 100644
index 22ad154..0000000
--- a/res/values-lv/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulators"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"grādi"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"C"</string>
- <string name="cleared" msgid="3952521190281880880">"notīrīts"</string>
- <string name="del" msgid="5878069000864178910">"CE"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eilera skaitlis"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pī"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"komats"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"kreisā iekava"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"labā iekava"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinuss"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"naturālais logaritms"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritms"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinuss"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangenss"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arkkosinuss"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arksinuss"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arktangenss"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"desmit ar kāpinātāju"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponenciālā funkcija"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kvadrātā"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dalīts"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriāls"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"reizināt"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procentu simbols"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"kāpināt"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadrātsakne"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"mīnus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"grādu režīms"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radiānu režīms"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"pārslēgt uz grādiem"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"pārslēgt uz radiāniem"</string>
- <string name="desc_eq" msgid="3349320880874699285">"vienāds"</string>
- <string name="desc_clr" msgid="737502124268890797">"notīrīt"</string>
- <string name="desc_del" msgid="7879515781929311432">"dzēst"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"rādīt inversās funkcijas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"slēpt inversās funkcijas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nav formulas"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nav neviena rezultāta"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Skaitļi un pamatdarbības"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Papildu darbības"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nav skaitlis"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Kļūd. izteiksme"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Pārtraukts"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Vai bezgalība?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nevar dalīt ar 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teksts ir nokopēts."</string>
- <string name="cancelled" msgid="2207323593183640994">"Aprēķināšana tika pārtraukta."</string>
- <string name="timeout" msgid="5461892570729418573">"Vērtība var būt neierobežota vai nedefinēta."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Izmantot ilgāku noildzi"</string>
- <string name="dismiss" msgid="7872443888515066216">"Nerādīt"</string>
- <string name="exact" msgid="2597237880041789948">"(precīzs)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 pēdējā ciparā)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Parādīt pirmos ciparus"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Parādīt kā daļskaitli"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Atklātā pirmkoda licences"</string>
- <string name="menu_history" msgid="9006222701220105452">"Vēsture"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Dzēst"</string>
- <string name="title_history" msgid="7820912156315181539">"Vēsture"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Pārvietoties augšup"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Noildze"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Vai dzēst vēsturi un atmiņu?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Pašreizējā izteiksme"</string>
- <string name="no_history" msgid="4331262030447527188">"Nav vēstures"</string>
-</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
deleted file mode 100644
index 65fa3b8..0000000
--- a/res/values-mk/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калкулатор"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"исчистено"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Ојлеров број"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"Пи"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"запирка"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"лева заграда"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"десна заграда"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"природен логаритам"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логаритам"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангента"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"инверзен косинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"инверзен синус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"инверзна тангента"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"десет на степен"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"експоненцијална функција"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"на квадрат"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"плус"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"подели"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факторијал"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"множи"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"процент"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"на степен"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"квадратен корен"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"минус"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"режим на степени"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"режим на радијани"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"префрли на степени"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"префрли на радијани"</string>
- <string name="desc_eq" msgid="3349320880874699285">"еднакво"</string>
- <string name="desc_clr" msgid="737502124268890797">"исчисти"</string>
- <string name="desc_del" msgid="7879515781929311432">"избриши"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"прикажи инверзни функции"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"сокриј инверзни функции"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Нема формула"</string>
- <string name="desc_result" msgid="1794073190203126821">"Нема резултати"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Броеви и основни операции"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Напредни операции"</string>
- <string name="error_nan" msgid="5674077944929888710">"Не е број"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Погрешен израз"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Прекинато"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Бесконечно?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Не се дели со 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текстот е копиран"</string>
- <string name="cancelled" msgid="2207323593183640994">"Пресметката е откажана."</string>
- <string name="timeout" msgid="5461892570729418573">"Вредноста можеби е бесконечна или недефинирана."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Користи подолго истекување на времето"</string>
- <string name="dismiss" msgid="7872443888515066216">"Отфрли"</string>
- <string name="exact" msgid="2597237880041789948">"(точно)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 во последната цифра)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Одг.–вод. цифри"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Одгов. со дропка"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Лиц. со отв. код"</string>
- <string name="menu_history" msgid="9006222701220105452">"Историја"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Исчисти"</string>
- <string name="title_history" msgid="7820912156315181539">"Историја"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Одете нагоре"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Времето истече"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Да се исчисти историја и меморија?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Тековен израз"</string>
- <string name="no_history" msgid="4331262030447527188">"Нема историја"</string>
-</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
deleted file mode 100644
index 660b84f..0000000
--- a/res/values-ml/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"കാൽക്കുലേറ്റർ"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"ഡിഗ്രി"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"മായ്ച്ചു"</string>
- <string name="del" msgid="5878069000864178910">"മായ്ക്കൂ"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"യൂളറിന്റെ നമ്പർ"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"പൈ"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"പോയിന്റ്"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ഇടത് പരാന്തിസിസ്"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"വലത് പരാന്തിസിസ്"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"നാച്ചുറൽ ലോഗരിതം"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ലോഗരിതം"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"വിപരീത cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"വിപരീത sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"വിപരീത tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"പത്തിന്റെ ഇരട്ടി"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"എക്‌സ്‌പൊണൻഷ്യൽ ഫംഗ്‌ഷൻ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"വർഗ്ഗം"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"അധികചിഹ്‌നം"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ഹരണചിഹ്‌നം"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ഫാക്‌ടോറിയൽ"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ഗുണനചിഹ്നം"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ശതമാനം"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"പവർ"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"വർഗ്ഗമൂലം"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ന്യൂനചിഹ്നം"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ഡിഗ്രി മോഡ്"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"റേഡിയൻ മോഡ്"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ഡിഗ്രികളിൽ മാറുക"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"റേഡിയനുകളിലേക്ക് മാറുക"</string>
- <string name="desc_eq" msgid="3349320880874699285">"സമം"</string>
- <string name="desc_clr" msgid="737502124268890797">"മായ്ക്കൂ"</string>
- <string name="desc_del" msgid="7879515781929311432">"ഇല്ലാതാക്കുക"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"വിപരീത പ്രവർത്തനങ്ങൾ കാണിക്കുക"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"വിപരീത പ്രവർത്തനങ്ങൾ മറയ്‌ക്കുക"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ഫോർമുലയില്ല"</string>
- <string name="desc_result" msgid="1794073190203126821">"ഫലമൊന്നും ഇല്ല"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"നമ്പറുകളും അടിസ്ഥാന പ്രവർത്തനങ്ങളും"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"വിപുലമായ പ്രവർത്തനങ്ങൾ"</string>
- <string name="error_nan" msgid="5674077944929888710">"സംഖ്യയല്ല"</string>
- <string name="error_syntax" msgid="4786987111228645602">"മോശം എക്‌സ്‌പ്രഷൻ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"പരാജയപ്പെട്ടു"</string>
- <string name="error_overflow" msgid="7800547394563434764">"അനന്തസംഖ്യയാണോ?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 കൊണ്ട് വിഭജിക്കാനാവില്ല"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ടെക്‌സ്റ്റ് പകർത്തി"</string>
- <string name="cancelled" msgid="2207323593183640994">"കമ്പ്യൂട്ടേഷൻ റദ്ദാക്കി."</string>
- <string name="timeout" msgid="5461892570729418573">"മൂല്യം അനന്തമായതോ നിർവ്വചിക്കാനാകാത്തതോ ആകാം."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ദൈർഘ്യമേറിയ കാലഹരണപ്പെടൽ സമയം ഉപയോഗിക്കുക"</string>
- <string name="dismiss" msgid="7872443888515066216">"നിരസിക്കുക"</string>
- <string name="exact" msgid="2597237880041789948">"(കൃത്യമായ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(അവസാനത്തെ അക്കത്തിനൊപ്പം ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"അടുത്തുവരുന്ന അക്കമുപയോഗിച്ച് ഉത്തരംനൽകൂ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ഒരു ഭിന്നസംഖ്യയായി ഉത്തരം നൽകുക"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസ്"</string>
- <string name="menu_history" msgid="9006222701220105452">"ചരിത്രം"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"മായ്‌ക്കുക"</string>
- <string name="title_history" msgid="7820912156315181539">"ചരിത്രം"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"മുകളിലേക്ക് നാവിഗേറ്റ് ചെയ്യുക"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"കാലഹരണപ്പെട്ടു"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ചരിത്രവും മെമ്മറിയും മായ്ക്കണോ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"നിലവിലെ എക്സ്പ്രഷൻ"</string>
- <string name="no_history" msgid="4331262030447527188">"ചരിത്രമില്ല"</string>
-</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
deleted file mode 100644
index e59e6a8..0000000
--- a/res/values-mn/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Тооны машин"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"хэм"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"Цэвэрлэсэн"</string>
- <string name="del" msgid="5878069000864178910">"устгах"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Эйлерийн тоо"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"пи тоо"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"цэг"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"зүүн хаалт"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"баруун хаалт"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"натурал логарифм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логарифм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"урвуу косинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"урвуу синус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"урвуу тангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 зэрэг"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"илтгэгч функц"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"квадрат"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"нэмэх"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"хуваах"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факториал"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"үржүүлэх"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"Хувь"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"зэрэг"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"язгуур"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"хасах"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"Зэрэг горим"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"Радиан горим"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"зэрэгт шилжүүлэх"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"радиан руу шилжүүлэх"</string>
- <string name="desc_eq" msgid="3349320880874699285">"тэнцүү"</string>
- <string name="desc_clr" msgid="737502124268890797">"цэвэрлэх"</string>
- <string name="desc_del" msgid="7879515781929311432">"устгах"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"урвуу фүнкцыг харуулах"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"урвуу функцийг нуух"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Томъёо байхгүй"</string>
- <string name="desc_result" msgid="1794073190203126821">"Илэрц алга"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Тоо, үндсэн үйл ажиллагаа"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Сайжруулсан үйл ажиллагаа"</string>
- <string name="error_nan" msgid="5674077944929888710">"Тоо биш байна"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Буруу илэрхийлэл"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Зогсоосон"</string>
- <string name="error_overflow" msgid="7800547394563434764">"хязгааргүй?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0-д хуваах боломжгүй"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текстийг хуулсан"</string>
- <string name="cancelled" msgid="2207323593183640994">"Тооцооллыг цуцалсан."</string>
- <string name="timeout" msgid="5461892570729418573">"Утга нь хязгааргүй, эсвэл тодорхойгүй."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Илүү урт хугацаа ашиглана уу"</string>
- <string name="dismiss" msgid="7872443888515066216">"Алгасах"</string>
- <string name="exact" msgid="2597237880041789948">"(Яг)"</string>
- <string name="approximate" msgid="7117143366610670836">"(сүүлийн оронд ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Эхний орон"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Бутархай тоо"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Нээлттэй эхийн лиценз"</string>
- <string name="menu_history" msgid="9006222701220105452">"Түүх"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Устгах"</string>
- <string name="title_history" msgid="7820912156315181539">"Түүх"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Дээш шилжих"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Завсарлага"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Түүх, санах ойг устгах уу?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Одоогийн илэрхийлэл"</string>
- <string name="no_history" msgid="4331262030447527188">"Түүх байхгүй"</string>
-</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
deleted file mode 100644
index b250e4f..0000000
--- a/res/values-mr/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"कॅलक्युलेटर"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"अंश"</string>
- <string name="mode_rad" msgid="1434228830085760996">"रॅडियन"</string>
- <string name="clr" msgid="6730945431543327337">"साफ करा"</string>
- <string name="cleared" msgid="3952521190281880880">"साफ केले"</string>
- <string name="del" msgid="5878069000864178910">"हटवा"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"यूलरची संख्या"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"पाय"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"बिंदू"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"डावा कंस"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"उजवा कंस"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"कोसाइन"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"प्राकृतिक लॉगॅरिथम"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"लॉगॅरिथम"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"साइन"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"टँजंट"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"व्यस्त कोसाइन"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"व्यस्त साइन"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"व्यस्त टँजंट"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"दहा चा घात"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"घातांकीय कार्य"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"वर्ग"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"अधिक"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"भागणे"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"क्रमगुणित"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"गुणाकार"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"टक्के"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"घात"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"वर्गमूळ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"वजा"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"अंश मोड"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"रॅडियन मोड"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"अंशांवर स्विच करा"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"रॅडियनवर स्विच करा"</string>
- <string name="desc_eq" msgid="3349320880874699285">"समान"</string>
- <string name="desc_clr" msgid="737502124268890797">"साफ करा"</string>
- <string name="desc_del" msgid="7879515781929311432">"हटवा"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"व्यस्त कार्ये दर्शवा"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"व्यस्त कार्ये लपवा"</string>
- <string name="desc_formula" msgid="8056588859637585007">"सूत्र नाही"</string>
- <string name="desc_result" msgid="1794073190203126821">"कोणताही परिणाम नाही"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"संख्या आणि मूलभूत ऑपरेशन"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"प्रगत ऑपरेशन"</string>
- <string name="error_nan" msgid="5674077944929888710">"संख्या नाही"</string>
- <string name="error_syntax" msgid="4786987111228645602">"खराब पदावली"</string>
- <string name="error_aborted" msgid="3402238176316342537">"विलोपन केले"</string>
- <string name="error_overflow" msgid="7800547394563434764">"अपरिमित?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 ने भाग देऊ शकत नाही"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"मजकूर कॉपी केला"</string>
- <string name="cancelled" msgid="2207323593183640994">"गणना रद्द केली."</string>
- <string name="timeout" msgid="5461892570729418573">"मूल्य अमर्यादित असू शकते किंवा ते निर्धारित केलेले नसू शकते."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"दीर्घ कालबाह्य वापरा"</string>
- <string name="dismiss" msgid="7872443888515066216">"डिसमिस करा"</string>
- <string name="exact" msgid="2597237880041789948">"(अचूक)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 शेवटच्या अंकात)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"अग्रस्थानी अंकांसह उत्तर"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"अपूर्णांक म्हणून उत्तर"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"मुक्त स्त्रोत परवाने"</string>
- <string name="menu_history" msgid="9006222701220105452">"इतिहास"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"साफ करा"</string>
- <string name="title_history" msgid="7820912156315181539">"इतिहास"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"वर नेव्हिगेट करा"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"कालबाह्य"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"इतिहास आणि मेमरी साफ करायची?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"वर्तमान अभिव्यक्ती"</string>
- <string name="no_history" msgid="4331262030447527188">"इतिहास नाही"</string>
-</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
deleted file mode 100644
index 0b6ead1..0000000
--- a/res/values-ms/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"drjh"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"ksg"</string>
- <string name="cleared" msgid="3952521190281880880">"dikosongkan"</string>
- <string name="del" msgid="5878069000864178910">"pdm"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Nombor Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"titik"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"tanda kurung kiri"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"tanda kurung kanan"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritma asli"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritma"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangen"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"kosinus songsang"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"sinus songsang"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangen songsang"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"sepuluh kuasa"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"fungsi eksponen"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kuasa dua"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"tambah"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"bahagi"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"darab"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"peratus"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"kuasa"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"punca kuasa dua"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"tolak"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"mod darjah"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"mod radian"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"tukar kepada darjah"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"tukar kepada radian"</string>
- <string name="desc_eq" msgid="3349320880874699285">"sama dengan"</string>
- <string name="desc_clr" msgid="737502124268890797">"kosongkan"</string>
- <string name="desc_del" msgid="7879515781929311432">"padam"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"tunjukkan fungsi songsang"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"sembunyikan fungsi songsang"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Tiada formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Tiada hasil"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Nombor dan pengendalian asas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Pengendalian lanjutan"</string>
- <string name="error_nan" msgid="5674077944929888710">"Bukan nombor"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Ungkapan salah"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Dihenti paksa"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Tak terhingga?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Tdk blh bahagi dgn 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teks disalin"</string>
- <string name="cancelled" msgid="2207323593183640994">"Pengiraan dibatalkan."</string>
- <string name="timeout" msgid="5461892570729418573">"Nilai mungkin tak terhingga atau tak tertakrif."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Gunakan tamat masa yang lebih lama"</string>
- <string name="dismiss" msgid="7872443888515066216">"Ketepikan"</string>
- <string name="exact" msgid="2597237880041789948">"(tepat)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 dalam digit terakhir)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Jwpn dgn digit depan"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Jwpn sbg pecahan"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Lesen sumber terbuka"</string>
- <string name="menu_history" msgid="9006222701220105452">"Sejarah"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Kosongkan"</string>
- <string name="title_history" msgid="7820912156315181539">"Sejarah"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigasi ke atas"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tamat masa"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Kosongkan sejarah dan memori?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Ungkapan Semasa"</string>
- <string name="no_history" msgid="4331262030447527188">"Tiada Sejarah."</string>
-</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
deleted file mode 100644
index 614982b..0000000
--- a/res/values-my/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ဂဏန်းတွက်စက်"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"ရှင်းပြီးပါပြီ"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler\'s ဂဏန်း"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"ပိုင်"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"အစက်"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ကွင်းစ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"ကွင်းပိတ်"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"ကိုဆိုင်း"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"သဘာဝ လော်ဂရစ်သမ်"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"လော်ဂရစ်သမ်"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ဆိုင်း"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"တန်းဂျင့်"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"ကိုဆိုင်း ပြောင်းပြန်"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ဆိုင်း ပြောင်းပြန်"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"တန်းဂျင့် ပြောင်းပြန်"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ဆယ်ထပ်ကိန်း"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"အဆ function"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"နှစ်ထပ်"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"အပေါင်း လက္ခဏာ"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"စားရန်"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"မြှောက်ကိန်း"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ဆတိုး"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ရာခိုင်နှုန်း"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ထပ်ကိန်း"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"နှစ်ထပ်ကိန်းရင်း"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"အနှုတ်"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ဒီဂရီ မုဒ်"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ရေဒီယံ မုဒ်"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ဒီဂရီသို့ပြောင်းမည်"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ရေဒီယံသို့ ပြောင်းရန်"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ညီမျှခြင်း"</string>
- <string name="desc_clr" msgid="737502124268890797">"ရှင်းရန်"</string>
- <string name="desc_del" msgid="7879515781929311432">"ဖျက်ရန်"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ပြောင်းပြန်ဆောင်ရွက်ချက်များ ပြပါ"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ပြောင်းပြန်ဆောင်ရွက်ချက်များ ဖျောက်ထားရန်"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ဖော်မြူလာမရှိပါ"</string>
- <string name="desc_result" msgid="1794073190203126821">"ရလဒ်မရှိပါ"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"နံပါတ်နှင့် အခြေခံလုပ်ငန်းများ"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"အဆင့်မြင့် လုပ်ငန်းများ"</string>
- <string name="error_nan" msgid="5674077944929888710">"ဂဏန်း မဟုတ်"</string>
- <string name="error_syntax" msgid="4786987111228645602">"ဖော်ပြချက်အမှား"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ဖျက်လိုက်ပြီ"</string>
- <string name="error_overflow" msgid="7800547394563434764">"အဆုံးမရှိ ပါသလား?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 ဖြင့်စား၍မရပါ"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"စာသားကူးယူပြီး"</string>
- <string name="cancelled" msgid="2207323593183640994">"တွက်ချက်ခြင်းကို ပယ်ဖျက်လိုက်ပါပြီ။"</string>
- <string name="timeout" msgid="5461892570729418573">"အချက်အလက်သည် အကန့်အသတ်မရှိ သို့မဟုတ် သတ်မှတ်ခြင်းမရှိ ဖြစ်နိုင်ပါသည်။"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"အချိန်ကုန်ခြင်း ပိုမိုကြာမြင့်သည်ကို အသုံးပြုရန်"</string>
- <string name="dismiss" msgid="7872443888515066216">"မလုပ်တော့"</string>
- <string name="exact" msgid="2597237880041789948">"(အတိအကျ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(နောက်ဆုံးဂဏန်းတွင် ± 1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"ဦးဆောင်ဂဏန်းနှင့်ဖြေ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"အပိုင်းကဏန်းအဖြစ် အဖြေ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"အခမဲ့ ရင်းမြစ် လိုင်စင်များ"</string>
- <string name="menu_history" msgid="9006222701220105452">"မှတ်တမ်း"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"ရှင်းရန်"</string>
- <string name="title_history" msgid="7820912156315181539">"မှတ်တမ်း"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"အပေါ်သို့ သွားရန်"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"သတ်မှတ်ချိန် ကုန်သွားပါပြီ"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"မှတ်တမ်းနှင့်မှတ်ဉာဏ်ရှင်းမလား"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"လက်ရှိ ဖော်ပြချက်"</string>
- <string name="no_history" msgid="4331262030447527188">"မှတ်တမ်းမရှိပါ"</string>
-</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
deleted file mode 100644
index d6a7b62..0000000
--- a/res/values-nb/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"grad"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"fjernet"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulers tall"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punktum"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"venstre parentes"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"høyre parentes"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"naturlig logaritme"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"invers cosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"invers sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"invers tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ti opphøyd i"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponentialfunksjon"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"opphøyd i annen"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plussknapp"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dele"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fakultet"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplisere"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"prosent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potens"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratrot"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minusknapp"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gradmodus"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radianmodus"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"bytt til grader"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"bytt til radianer"</string>
- <string name="desc_eq" msgid="3349320880874699285">"er lik"</string>
- <string name="desc_clr" msgid="737502124268890797">"fjern"</string>
- <string name="desc_del" msgid="7879515781929311432">"slett"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"vis omvendte funksjoner"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"skjul omvendte funksjoner"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ingen formel"</string>
- <string name="desc_result" msgid="1794073190203126821">"Ingen resultater"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Tall og grunnleggende operasjoner"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Avanserte operasjoner"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ikke et tall"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Ugyldig uttrykk"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Avbrutt"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Uendelig?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Kan ikke dele på 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teksten er kopiert"</string>
- <string name="cancelled" msgid="2207323593183640994">"Utregningen er avbrutt."</string>
- <string name="timeout" msgid="5461892570729418573">"Verdien kan være uendelig eller udefinert."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Bruk lengre tidsavbrudd"</string>
- <string name="dismiss" msgid="7872443888515066216">"Fjern"</string>
- <string name="exact" msgid="2597237880041789948">"(nøyaktig)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 i det siste sifferet)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Svar med innledende siffer"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Svar som brøk"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Åpen kildekode-lisenser"</string>
- <string name="menu_history" msgid="9006222701220105452">"Logg"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Tøm"</string>
- <string name="title_history" msgid="7820912156315181539">"Logg"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Gå opp"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tidsavbrudd"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Vil du tømme loggen og minnet?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Gjeldende uttrykk"</string>
- <string name="no_history" msgid="4331262030447527188">"Ingen logg"</string>
-</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
deleted file mode 100644
index debd6a8..0000000
--- a/res/values-ne/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"क्यालकुलेटर"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"डिग्री"</string>
- <string name="mode_rad" msgid="1434228830085760996">"र्याड"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"मेटाइयो"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"युलरको नम्बर"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"थोप्लो"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"बायाँ कोष्ठक"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"बायाँ कोष्ठक"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"कोसाइन"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"नेचुरल लोगारिदम"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"लोगारिदम"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"साइन"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ट्यान्जेन्ट"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"व्युत्क्रम कोसाइन"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"व्युत्क्रम साइन"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"व्युत्क्रम ट्यान्जेन्ट"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"दशको पावर"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"एक्सपोनेन्सियल प्रकार्य"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"वर्ग"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"जोड"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"भाग गर्नुहोस्"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"फ्याक्टोरियल"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"गुणन"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"प्रतिशत"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"पावर"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"वर्गमूल"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"घटाउ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"डिग्री मोड"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"रेडियन मोड"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"डिग्रीमा स्विच गर्नुहोस्"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"रेडियनमा स्विच गर्नुहोस्"</string>
- <string name="desc_eq" msgid="3349320880874699285">"बराबर"</string>
- <string name="desc_clr" msgid="737502124268890797">"खाली गर्नुहोस्"</string>
- <string name="desc_del" msgid="7879515781929311432">"मेटाउनुहोस्"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"व्युत्क्रम प्रकार्यहरु देखाउनुहोस्"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"व्युत्क्रम प्रकार्यहरु लुकाउनुहोस्"</string>
- <string name="desc_formula" msgid="8056588859637585007">"कुनै सूत्र छैन"</string>
- <string name="desc_result" msgid="1794073190203126821">"कुनै परिणाम छैन"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"संख्या र आधारभूत कारबाहीहरू"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"उन्नत कारबाहीहरू"</string>
- <string name="error_nan" msgid="5674077944929888710">"एक नम्बर होइन"</string>
- <string name="error_syntax" msgid="4786987111228645602">"खराब अभिव्यक्ति"</string>
- <string name="error_aborted" msgid="3402238176316342537">"रद्द गरियो"</string>
- <string name="error_overflow" msgid="7800547394563434764">"अनन्त?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"० ले भाग गर्न मिल्दैन"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"पाठ प्रतिलिपि गरियो"</string>
- <string name="cancelled" msgid="2207323593183640994">"कम्प्युटेसन रद्द भयो।"</string>
- <string name="timeout" msgid="5461892570729418573">"मान अनन्त वा अपरिभाषित हुन सक्छ।"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"लामो टाइमआउट प्रयोग गर्नुहोस्"</string>
- <string name="dismiss" msgid="7872443888515066216">"बेवास्ता गर्नुहोस्"</string>
- <string name="exact" msgid="2597237880041789948">"(सही)"</string>
- <string name="approximate" msgid="7117143366610670836">"(अन्तिम अंकमा ±१)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"अग्र अंकमा उत्तर"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"भाग रुपमा उत्तर"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"खुलास्रोत इजाजतपत्रहरू"</string>
- <string name="menu_history" msgid="9006222701220105452">"इतिहास"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"खाली गर्नुहोस्"</string>
- <string name="title_history" msgid="7820912156315181539">"इतिहास"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"माथि नेभिगेसन गर्नुहोस्"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"टाइमआउट भयो"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"इतिहास र मेमोरी खाली गर्ने हो?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"हालको अभिव्यक्ति"</string>
- <string name="no_history" msgid="4331262030447527188">"कुनै इतिहास छैन"</string>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
deleted file mode 100644
index 310301d..0000000
--- a/res/values-nl/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Rekenmachine"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"wis"</string>
- <string name="cleared" msgid="3952521190281880880">"gewist"</string>
- <string name="del" msgid="5878069000864178910">"←"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"constante van Neper"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"punt"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"linkerhaakje"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"rechterhaakje"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natuurlijk logaritme"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritme"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"tien tot de macht"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponentiële functie"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kwadraat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"delen"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faculteit"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"vermenigvuldigen"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"macht"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"vierkantswortel"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"min"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gradenmodus"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radialenmodus"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"overschakelen naar graden"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"overschakelen naar radialen"</string>
- <string name="desc_eq" msgid="3349320880874699285">"is gelijk aan"</string>
- <string name="desc_clr" msgid="737502124268890797">"wissen"</string>
- <string name="desc_del" msgid="7879515781929311432">"verwijderen"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"inverse functies weergeven"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"inverse functies verbergen"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Geen formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Geen resultaat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Cijfers en basisbewerkingen"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Geavanceerde bewerkingen"</string>
- <string name="error_nan" msgid="5674077944929888710">"Is geen getal"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Ongeldige invoer"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Afgebroken"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Oneindig?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Kan niet delen door 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekst gekopieerd"</string>
- <string name="cancelled" msgid="2207323593183640994">"Berekening geannuleerd."</string>
- <string name="timeout" msgid="5461892570729418573">"De waarde is mogelijk oneindig of niet gedefinieerd."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Langere time-outs gebruiken"</string>
- <string name="dismiss" msgid="7872443888515066216">"Sluiten"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 in laatste cijfer)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Antwoord met voorloopcijfers"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Antwoord als breuk"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Open-sourcelicenties"</string>
- <string name="menu_history" msgid="9006222701220105452">"Geschiedenis"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Wissen"</string>
- <string name="title_history" msgid="7820912156315181539">"Geschiedenis"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Omhoog navigeren"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Time-out"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Geschiedenis/geheugen wissen?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Huidige expressie"</string>
- <string name="no_history" msgid="4331262030447527188">"Geen geschiedenis"</string>
-</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
deleted file mode 100644
index 31d4375..0000000
--- a/res/values-pa/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ਕੈਲਕੂਲੇਟਰ"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"ਡਿਗਰੀ"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"ਸਾਫ਼"</string>
- <string name="cleared" msgid="3952521190281880880">"ਸਾਫ਼ ਕੀਤਾ ਗਿਆ"</string>
- <string name="del" msgid="5878069000864178910">"ਮਿਟਾਓ"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler ਦੀ ਸੰਖਿਆ"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ਬਿੰਦੂ"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ਖੱਬੀਆਂ ਬਰੈਕਟਾਂ"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"ਸੱਜੀਆਂ ਬਰੈਕਟਾਂ"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"ਕੋਸਾਇਨ"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ਨੈਚੁਰਲ ਲਾਗਰਿਥਮ"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ਲਾਗਰਿਥਮ"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ਸਾਇਨ"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ਸਪਰਸ਼ ਰੇਖਾ"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"ਉਲਟਾ ਕੋਸਾਇਨ"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ਉਲਟਾ ਸਾਇਨ"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"ਉਲਟੀ ਸਪਰਸ਼ ਰੇਖਾ"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ਦਸ ਦੀ ਘਾਤ"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ਘਾਤ ਅੰਕ ਵਾਲਾ ਫੰਕਸ਼ਨ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ਵਰਗਾਕਾਰ"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"ਪਲਸ"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"ਭਾਗ ਦਿਓ"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ਫੈਕਟੋਰੀਅਲ"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ਗੁਣਾ ਕਰੋ"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ਪ੍ਰਤੀਸ਼ਤ"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ਪਾਵਰ"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"ਵਰਗ਼ ਮੂਲ"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ਘਟਾਅ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ਡਿਗਰੀ ਮੋਡ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ਰੇਡੀਅਨ ਮੋਡ"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ਡਿਗਰੀ ਵਿੱਚ ਸਵਿੱਚ ਕਰੋ"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ਰੇਡੀਅਨਸ ਵਿੱਚ ਸਵਿੱਚ ਕਰੋ"</string>
- <string name="desc_eq" msgid="3349320880874699285">"ਬਰਾਬਰ"</string>
- <string name="desc_clr" msgid="737502124268890797">"ਹਟਾਓ"</string>
- <string name="desc_del" msgid="7879515781929311432">"ਮਿਟਾਓ"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ਉਲਟੇ ਫੰਕਸ਼ਨ ਦਿਖਾਓ"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ਉਲਟੇ ਫੰਕਸ਼ਨ ਲੁਕਾਓ"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ਕੋਈ ਫ਼ਾਰਮੂਲਾ ਨਹੀਂ"</string>
- <string name="desc_result" msgid="1794073190203126821">"ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"ਨੰਬਰ ਅਤੇ ਮੂਲ ਆਪਰੇਸ਼ਨ"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"ਉੱਨਤ ਆਪਰੇਸ਼ਨ"</string>
- <string name="error_nan" msgid="5674077944929888710">"ਇੱਕ ਸੰਖਿਆ ਨਹੀਂ"</string>
- <string name="error_syntax" msgid="4786987111228645602">"ਗਲਤ ਸਮੀਕਰਨ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ਬਰਖ਼ਾਸਤ ਕੀਤਾ ਗਿਆ"</string>
- <string name="error_overflow" msgid="7800547394563434764">"ਅਨੰਤ?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 ਨਾਲ ਭਾਗ ਨਹੀਂ ਹੋ ਸਕਦੀ"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"ਟੈਕਸਟ ਕਾਪੀ ਕੀਤਾ"</string>
- <string name="cancelled" msgid="2207323593183640994">"ਗਿਣਤੀ ਰੱਦ ਕੀਤੀ ਗਈ।"</string>
- <string name="timeout" msgid="5461892570729418573">"ਮੁੱਲ ਅਣਗਿਣਤ ਜਾਂ ਅਪਰਿਭਾਸ਼ਤ ਹੋ ਸਕਦਾ ਹੈ।"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ਲੰਮੇ ਟਾਈਮਆਉਟ ਵਰਤੋ"</string>
- <string name="dismiss" msgid="7872443888515066216">"ਖਾਰਜ ਕਰੋ"</string>
- <string name="exact" msgid="2597237880041789948">"(ਬਿਲਕੁਲ)"</string>
- <string name="approximate" msgid="7117143366610670836">"(ਪਿਛਲੇ ਅੰਕ ਵਿਚ ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"ਮੋਹਰੀ ਅੰਕਾਂ ਦੇ ਨਾਲ ਜਵਾਬ ਦਿਓ"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ਭਾਗਅੰਸ਼ ਦੇ ਰੂਪ ਵਿੱਚ ਜਵਾਬ ਦਿਓ"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ਖੁੱਲ੍ਹਾ ਸਰੋਤ ਲਾਇਸੰਸ"</string>
- <string name="menu_history" msgid="9006222701220105452">"ਇਤਿਹਾਸ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"ਕਲੀਅਰ ਕਰੋ"</string>
- <string name="title_history" msgid="7820912156315181539">"ਇਤਿਹਾਸ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ਉੱਪਰ ਆਵਾਗੌਣ ਕਰੋ"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"ਸਮਾਂ ਸਮਾਪਤ"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ਇਤਿਹਾਸ ਅਤੇ ਮੈਮਰੀ ਕਲੀਅਰ ਕਰਨੀ ਹੈ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"ਮੌਜੂਦਾ ਸਮੀਕਰਨ"</string>
- <string name="no_history" msgid="4331262030447527188">"ਕੋਈ ਇਤਿਹਾਸ ਨਹੀਂ"</string>
-</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
deleted file mode 100644
index 7a8e1ba..0000000
--- a/res/values-pl/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"wyc"</string>
- <string name="cleared" msgid="3952521190281880880">"wyczyszczone"</string>
- <string name="del" msgid="5878069000864178910">"←"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"liczba Eulera"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"przecinek"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"nawias otwierający"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"nawias zamykający"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logarytm naturalny"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarytm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"odwrotność cosinusa"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"odwrotność sinusa"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"odwrotność tangensa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dziesięć do potęgi"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"funkcja wykładnicza"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"do kwadratu"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"podziel"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"silnia"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"pomnożyć"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"silnia"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"pierwiastek kwadratowy"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"tryb stopni"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"tryb radianów"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"przełącz na stopnie"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"przełącz na radiany"</string>
- <string name="desc_eq" msgid="3349320880874699285">"równa się"</string>
- <string name="desc_clr" msgid="737502124268890797">"wyczyść"</string>
- <string name="desc_del" msgid="7879515781929311432">"usuń"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"pokaż funkcje odwrotne"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ukryj funkcje odwrotne"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Brak formuły"</string>
- <string name="desc_result" msgid="1794073190203126821">"Brak wyników"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Liczby i operacje podstawowe"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operacje zaawansowane"</string>
- <string name="error_nan" msgid="5674077944929888710">"To nie liczba"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Błędne wyrażenie"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Przerwano"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Bez końca?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nie można dzielić przez zero"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Tekst został skopiowany"</string>
- <string name="cancelled" msgid="2207323593183640994">"Obliczanie zostało anulowane."</string>
- <string name="timeout" msgid="5461892570729418573">"Wartość może być nieskończona lub niezdefiniowana."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Użyj dłuższych limitów czasu"</string>
- <string name="dismiss" msgid="7872443888515066216">"Zamknij"</string>
- <string name="exact" msgid="2597237880041789948">"(dokładnie)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 w ostatniej cyfrze)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Odpowiedź z początkowymi cyframi"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Odpowiedź jako ułamek"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licencje open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historia"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Wyczyść"</string>
- <string name="title_history" msgid="7820912156315181539">"Historia"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Przejdź wyżej"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Minął czas oczekiwania"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Wyczyścić historię i pamięć?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Bieżące wyrażenie"</string>
- <string name="no_history" msgid="4331262030447527188">"Brak historii"</string>
-</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
deleted file mode 100644
index 766bc48..0000000
--- a/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"graus"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"limp"</string>
- <string name="cleared" msgid="3952521190281880880">"apagados"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Número de Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ponto"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parêntese esquerdo"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parêntese direito"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"cosseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dez elevado a"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"função exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ao quadrado"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"mais"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dividir"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fatorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicar"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"porcentagem"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potência"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"raiz quadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menos"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modo grau"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modo radiano"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"alterar para graus"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"alterar para radianos"</string>
- <string name="desc_eq" msgid="3349320880874699285">"igual"</string>
- <string name="desc_clr" msgid="737502124268890797">"limpar"</string>
- <string name="desc_del" msgid="7879515781929311432">"excluir"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostrar funções inversas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ocultar funções inversas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nenhuma fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nenhum resultado"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números e operações básicas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operações avançadas"</string>
- <string name="error_nan" msgid="5674077944929888710">"Não é número"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expressão ruim"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Cancelada"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Impos. dividir por 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texto copiado"</string>
- <string name="cancelled" msgid="2207323593183640994">"Cálculo cancelado."</string>
- <string name="timeout" msgid="5461892570729418573">"O valor pode ser infinito ou indefinido."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Usar tempos limite mais longos"</string>
- <string name="dismiss" msgid="7872443888515066216">"Dispensar"</string>
- <string name="exact" msgid="2597237880041789948">"(exato)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 no último dígito)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Resposta c/ dígitos iniciais"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Responder como fração"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licenças de código aberto"</string>
- <string name="menu_history" msgid="9006222701220105452">"Histórico"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Limpar"</string>
- <string name="title_history" msgid="7820912156315181539">"Histórico"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navegar para cima"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tempo limite"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Limpar histórico e memória?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expressão atual"</string>
- <string name="no_history" msgid="4331262030447527188">"Sem histórico"</string>
-</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
deleted file mode 100644
index 5627f16..0000000
--- a/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"limpo"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Número de Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ponto"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parêntese esquerdo"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parêntese direito"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"cosseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dez elevado a"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"função exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ao quadrado"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"mais"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dividir"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fatorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicar"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percentagem"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"expoente"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"raiz quadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menos"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modo de graus"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modo de radianos"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"mudar para graus"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"mudar para radianos"</string>
- <string name="desc_eq" msgid="3349320880874699285">"igual"</string>
- <string name="desc_clr" msgid="737502124268890797">"limpar"</string>
- <string name="desc_del" msgid="7879515781929311432">"eliminar"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostrar funções inversas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ocultar funções inversas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Sem fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Sem resultados"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números e operações básicas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operações avançadas"</string>
- <string name="error_nan" msgid="5674077944929888710">"Não é um núm."</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expr. incorreta"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Interrompida"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Impos. dividir por 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texto copiado"</string>
- <string name="cancelled" msgid="2207323593183640994">"Cálculo cancelado."</string>
- <string name="timeout" msgid="5461892570729418573">"O valor pode ser infinito ou indefinido."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Utilizar tempos limite maiores"</string>
- <string name="dismiss" msgid="7872443888515066216">"Ignorar"</string>
- <string name="exact" msgid="2597237880041789948">"(exato)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 no último dígito)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Resp. com dígitos iniciais"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Responder como fração"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Lic. código aberto"</string>
- <string name="menu_history" msgid="9006222701220105452">"Histórico"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Limpar"</string>
- <string name="title_history" msgid="7820912156315181539">"Histórico"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navegar para cima"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tempo limite"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Limpar histórico e memória?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expressão atual"</string>
- <string name="no_history" msgid="4331262030447527188">"Sem histórico"</string>
-</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
deleted file mode 100644
index 766bc48..0000000
--- a/res/values-pt/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculadora"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"graus"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"limp"</string>
- <string name="cleared" msgid="3952521190281880880">"apagados"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Número de Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"ponto"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"parêntese esquerdo"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parêntese direito"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosseno"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmo natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmo"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"seno"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"cosseno inverso"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"seno inverso"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangente inversa"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dez elevado a"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"função exponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ao quadrado"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"mais"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"dividir"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fatorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicar"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"porcentagem"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potência"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"raiz quadrada"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"menos"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modo grau"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modo radiano"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"alterar para graus"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"alterar para radianos"</string>
- <string name="desc_eq" msgid="3349320880874699285">"igual"</string>
- <string name="desc_clr" msgid="737502124268890797">"limpar"</string>
- <string name="desc_del" msgid="7879515781929311432">"excluir"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"mostrar funções inversas"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ocultar funções inversas"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nenhuma fórmula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Nenhum resultado"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Números e operações básicas"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operações avançadas"</string>
- <string name="error_nan" msgid="5674077944929888710">"Não é número"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expressão ruim"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Cancelada"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinito?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Impos. dividir por 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texto copiado"</string>
- <string name="cancelled" msgid="2207323593183640994">"Cálculo cancelado."</string>
- <string name="timeout" msgid="5461892570729418573">"O valor pode ser infinito ou indefinido."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Usar tempos limite mais longos"</string>
- <string name="dismiss" msgid="7872443888515066216">"Dispensar"</string>
- <string name="exact" msgid="2597237880041789948">"(exato)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 no último dígito)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Resposta c/ dígitos iniciais"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Responder como fração"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licenças de código aberto"</string>
- <string name="menu_history" msgid="9006222701220105452">"Histórico"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Limpar"</string>
- <string name="title_history" msgid="7820912156315181539">"Histórico"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navegar para cima"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tempo limite"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Limpar histórico e memória?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expressão atual"</string>
- <string name="no_history" msgid="4331262030447527188">"Sem histórico"</string>
-</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
deleted file mode 100644
index 72fdd91..0000000
--- a/res/values-ro/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"grad"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"gol"</string>
- <string name="cleared" msgid="3952521190281880880">"șters"</string>
- <string name="del" msgid="5878069000864178910">"ștr"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"numărul lui Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"virgulă"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"paranteză stânga"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"paranteză dreapta"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritm natural"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangentă"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"arccosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"arcsinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"arctangentă"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"zece la puterea"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"funcție exponențială"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"la pătrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"împarte"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"înmulțește"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"putere"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"rădăcină pătrată"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modul grad"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modul radian"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"comută la grade"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"comută la radiani"</string>
- <string name="desc_eq" msgid="3349320880874699285">"este egal cu"</string>
- <string name="desc_clr" msgid="737502124268890797">"golește"</string>
- <string name="desc_del" msgid="7879515781929311432">"șterge"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"afișează inversele funcțiilor"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ascunde inversele funcțiilor"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nicio formulă"</string>
- <string name="desc_result" msgid="1794073190203126821">"Niciun rezultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numere și operații de bază"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Operații avansate"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nu este număr"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Expresie greșită"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Anulat"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinit?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nu se împarte la 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text copiat"</string>
- <string name="cancelled" msgid="2207323593183640994">"Calculul a fost anulat."</string>
- <string name="timeout" msgid="5461892570729418573">"Valoarea poate fi infinită sau nedefinită."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Folosiți timpi limită mai lungi"</string>
- <string name="dismiss" msgid="7872443888515066216">"Închideți"</string>
- <string name="exact" msgid="2597237880041789948">"(exact)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 în ultima cifră)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Răspuns cu primele cifre"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Răspuns ca fracție"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licențe open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"Istoric"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Goliți"</string>
- <string name="title_history" msgid="7820912156315181539">"Istoric"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigați în sus"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timpul a expirat"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Goliți istoricul și memoria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Expresie actuală"</string>
- <string name="no_history" msgid="4331262030447527188">"Istoric gol"</string>
-</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
deleted file mode 100644
index db68c2f..0000000
--- a/res/values-ru/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калькулятор"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"сброшено"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"число Эйлера"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"число \"пи\""</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"десятичный разделитель"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"открывающая скобка"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"закрывающая скобка"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"натуральный логарифм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"десятичный логарифм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"арккосинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"арксинус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"арктангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"десять в степени"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"экспонента"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"в квадрате"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"сложить"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"разделить"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факториал"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"умножение"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"проценты"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"в степени"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"квадратный корень"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"вычесть"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"режим степени"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"режим радиан"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"в градусах"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"в радианах"</string>
- <string name="desc_eq" msgid="3349320880874699285">"равно"</string>
- <string name="desc_clr" msgid="737502124268890797">"сбросить"</string>
- <string name="desc_del" msgid="7879515781929311432">"удалить"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"показать обратные функции"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"скрыть обратные функции"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Нет формулы"</string>
- <string name="desc_result" msgid="1794073190203126821">"Ничего не найдено"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Числа и основные операции"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Сложные операции"</string>
- <string name="error_nan" msgid="5674077944929888710">"Не число"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Неправ. выраж-е"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Отменено"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Бесконечное число"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"На 0 делить нельзя"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текст скопирован"</string>
- <string name="cancelled" msgid="2207323593183640994">"Вычисление отменено."</string>
- <string name="timeout" msgid="5461892570729418573">"Значение может быть бесконечным или неопределенным."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Увеличить время ожидания"</string>
- <string name="dismiss" msgid="7872443888515066216">"Закрыть"</string>
- <string name="exact" msgid="2597237880041789948">"(точно)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 в последнем знаке)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"С первыми цифрами"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"В виде дроби"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Лицензии открытого ПО"</string>
- <string name="menu_history" msgid="9006222701220105452">"История"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Очистить"</string>
- <string name="title_history" msgid="7820912156315181539">"История"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Перейти вверх"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Время ожидания истекло"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Очистить историю и память?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Текущее выражение"</string>
- <string name="no_history" msgid="4331262030447527188">"В истории нет записей"</string>
-</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
deleted file mode 100644
index ffb30e3..0000000
--- a/res/values-si/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"ගණක යන්ත්‍රය"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"හිස් කරන ලදී"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"ඔයිලර් අංකය"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"පයි"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"දශම"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"වම් වරහන"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"දකුණු වරහන"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"කෝසයින"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ස්වාභාවික ලඝු"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ලඝු"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"සයින"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ටැන්ජන"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"ප්‍රතිලෝම කෝසයින"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ප්‍රතිලෝම සයින්"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"ප්‍රතිලෝම සීකන"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"දහයෙහි බලය"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"දර්ශක ශ්‍රිතය"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"වර්ග කළ"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"ධන"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"බෙදීම"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ක්‍රමාරෝපිත"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ගුණිතය"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"ප්‍රතිශතය"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"බලය"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"වර්ග මූලය"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ඍණ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"අංශක මෝඩය"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"රේඩියන් මෝඩය"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"අංශක වෙත මාරු වීම"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"රේඩියන වෙත මාරු වීම"</string>
- <string name="desc_eq" msgid="3349320880874699285">"සමාන"</string>
- <string name="desc_clr" msgid="737502124268890797">"හිස් කරන්න"</string>
- <string name="desc_del" msgid="7879515781929311432">"මකන්න"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ප්‍රතිලෝම ශ්‍රිත පෙන්වන්න"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ප්‍රතිලෝම ශ්‍රිත සඟවන්න"</string>
- <string name="desc_formula" msgid="8056588859637585007">"සූත්‍රයක් නැත"</string>
- <string name="desc_result" msgid="1794073190203126821">"ප්‍රතිඵල නැත"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"අංක සහ මූලික මෙහෙයුම්"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"උසස් මෙහෙයුම්"</string>
- <string name="error_nan" msgid="5674077944929888710">"අංකයක් නොවේ"</string>
- <string name="error_syntax" msgid="4786987111228645602">"වැරදි ප්‍රකාශනයක්"</string>
- <string name="error_aborted" msgid="3402238176316342537">"නතර කෙරිණි"</string>
- <string name="error_overflow" msgid="7800547394563434764">"අපිරිමිත?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 න් බෙදිය නොහැකිය"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"පෙළ පිටපත් කරන ලදී"</string>
- <string name="cancelled" msgid="2207323593183640994">"ගණනය අවලංගු කරන ලදී."</string>
- <string name="timeout" msgid="5461892570729418573">"අගය අපරිමිත හෝ අර්ථ දක්වා නොමැති විය හැකිය."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"දිගු කාල නිමාවන් භාවිත කරන්න"</string>
- <string name="dismiss" msgid="7872443888515066216">"ඉවත ලන්න"</string>
- <string name="exact" msgid="2597237880041789948">"(නිශ්චිත)"</string>
- <string name="approximate" msgid="7117143366610670836">"(අවසන් ඉලක්කමේදී ± 1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"පළමු පූර්ණ සංඛාව සමගින් පිළිතුරු දෙන්න"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"භාග සංඛ්‍යාවක් ලෙස පිළිතුර දෙන්න"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"විවෘත මූලාශ්‍ර බලපත්‍ර"</string>
- <string name="menu_history" msgid="9006222701220105452">"ඉතිහාසය"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"හිස් කරන්න"</string>
- <string name="title_history" msgid="7820912156315181539">"ඉතිහාසය"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"ඉහළට සංචාලනය කරන්න"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"කාල නිමාව"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ඉතිහාසය සහ මතකය හිස් කරන්නද?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Current Expression"</string>
- <string name="no_history" msgid="4331262030447527188">"ඉතිහාසය නැත"</string>
-</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
deleted file mode 100644
index 02bb9b8..0000000
--- a/res/values-sk/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulačka"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"vymazané"</string>
- <string name="del" msgid="5878069000864178910">"←"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerovo číslo"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pí"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"desatinná čiarka"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ľavá zátvorka"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"pravá zátvorka"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosínus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"prirodzený logaritmus"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmus"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sínus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverzný kosínus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverzný sínus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverzný tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"mocnina so základom desať"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponenciálna funkcia"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"druhá mocnina"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"deleno"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriál"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"násobenie"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"percento"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"mocnina"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"druhá odmocnina"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"mínus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"režim stupňov"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"režim radiánov"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"prepnuť na stupne"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"prepnúť na radiány"</string>
- <string name="desc_eq" msgid="3349320880874699285">"sa rovná"</string>
- <string name="desc_clr" msgid="737502124268890797">"vymazať"</string>
- <string name="desc_del" msgid="7879515781929311432">"odstrániť"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"zobraziť inverzné funkcie"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"skryť inverzné funkcie"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Žiadny vzorec"</string>
- <string name="desc_result" msgid="1794073190203126821">"Žiadny výsledok"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Čísla a základné operácie"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Pokročilé operácie"</string>
- <string name="error_nan" msgid="5674077944929888710">"Nie je číslo"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Chybný výraz"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Prerušené"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Nekonečné?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nedá sa deliť nulou"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Text bol skopírovaný"</string>
- <string name="cancelled" msgid="2207323593183640994">"Počítanie bolo zrušené."</string>
- <string name="timeout" msgid="5461892570729418573">"Hodnota môže byť nekonečná alebo nedefinovaná."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Použiť dlhšie časové limity"</string>
- <string name="dismiss" msgid="7872443888515066216">"Zavrieť"</string>
- <string name="exact" msgid="2597237880041789948">"(presne)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 na poslednom mieste)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Výsledok vrátane prvých číslic"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Výsledok v tvare zlomku"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licencie open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"História"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Vymazať"</string>
- <string name="title_history" msgid="7820912156315181539">"História"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Prejsť hore"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Časový limit vypršal"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Vymazať históriu a pamäť?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Aktuálny výraz"</string>
- <string name="no_history" msgid="4331262030447527188">"Žiadna história"</string>
-</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
deleted file mode 100644
index 9689d64..0000000
--- a/res/values-sl/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Računalo"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"sto"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"poč"</string>
- <string name="cleared" msgid="3952521190281880880">"izbrisano"</string>
- <string name="del" msgid="5878069000864178910">"izb"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulerjevo število"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"pika"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"oklepaj"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"zaklepaj"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"naravni logaritem"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritem"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverzni kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverzni sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverzni tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"deset na"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponencialna funkcija"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"na kvadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"deli"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fakulteta"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"pomnoži"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"odstotki"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"potenca"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratni koren"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"način stopinj"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"način radianov"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"preklop na stopinje"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"preklop na radiane"</string>
- <string name="desc_eq" msgid="3349320880874699285">"je enako"</string>
- <string name="desc_clr" msgid="737502124268890797">"počisti"</string>
- <string name="desc_del" msgid="7879515781929311432">"izbriši"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"prikaz inverznih funkcij"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"skritje inverznih funkcij"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ni formule"</string>
- <string name="desc_result" msgid="1794073190203126821">"Ni rezultatov"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Številke in osnovni postopki"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Napredni postopki"</string>
- <string name="error_nan" msgid="5674077944929888710">"Ni število"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Napačen izraz"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Preklicano"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Neskončno?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Ni mogoče deliti z 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Besedilo kopirano"</string>
- <string name="cancelled" msgid="2207323593183640994">"Izračun preklican."</string>
- <string name="timeout" msgid="5461892570729418573">"Vrednost je morda neskončna ali nedoločena."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Uporabi daljše časovne omejitve"</string>
- <string name="dismiss" msgid="7872443888515066216">"Opusti"</string>
- <string name="exact" msgid="2597237880041789948">"(natančno)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 pri zadnji števki)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Prikaži rezultat z vodilnimi števkami"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Prikaži rezultat kot ulomek"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Odprtokodne licence"</string>
- <string name="menu_history" msgid="9006222701220105452">"Zgodovina"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Izbriši"</string>
- <string name="title_history" msgid="7820912156315181539">"Zgodovina"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Krmarjenje navzgor"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Časovna omejitev"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Izbris zgodov. in pomnilnika?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Trenutni izraz"</string>
- <string name="no_history" msgid="4331262030447527188">"Ni zgodovine"</string>
-</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
deleted file mode 100644
index 23d42d3..0000000
--- a/res/values-sq/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Makina llogaritëse"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"grd"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"pst"</string>
- <string name="cleared" msgid="3952521190281880880">"u pastruan"</string>
- <string name="del" msgid="5878069000864178910">"fsh"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Konstante matematikore"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"pikë"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"kllapa e majtë"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"kllapa e djathtë"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logaritmi natyror"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritmi"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangjente"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"kosinus i kundërt"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"sinus i kundërt"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tangjente e kundërt"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"dhjetë në fuqi të"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"funksioni eksponencial"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"në katror"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"pjesëto"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktoriali"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"shumëzo"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"përqindje"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"në fuqi"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"rrënja katrore"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"modaliteti i gradëve"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"modaliteti i radianëve"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"kalo në gradë"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"kalo në radianë"</string>
- <string name="desc_eq" msgid="3349320880874699285">"barazim"</string>
- <string name="desc_clr" msgid="737502124268890797">"pastro"</string>
- <string name="desc_del" msgid="7879515781929311432">"fshi"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"shfaq funksionet e kundërta"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"fshih funksionet e kundërta"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Nuk ka formulë"</string>
- <string name="desc_result" msgid="1794073190203126821">"Asnjë rezultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Numrat dhe veprimet bazë"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Veprimet e përparuara"</string>
- <string name="error_nan" msgid="5674077944929888710">"S\'është numër"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Shprehje e pasaktë"</string>
- <string name="error_aborted" msgid="3402238176316342537">"U ndërpre"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinit?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Nuk pjesëtohet me 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Teksti u kopjua"</string>
- <string name="cancelled" msgid="2207323593183640994">"Llogaritja u anulua."</string>
- <string name="timeout" msgid="5461892570729418573">"Vlera mund të jetë në infinit ose e papërcaktuar."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Përdor kohë më të gjata të pritjes"</string>
- <string name="dismiss" msgid="7872443888515066216">"Injoro"</string>
- <string name="exact" msgid="2597237880041789948">"(ekzakt)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 në shifrën e fundit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Rezultati me numra të plotë"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Rezultati si thyesë"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Licencat me burim të hapur"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historiku"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Pastro"</string>
- <string name="title_history" msgid="7820912156315181539">"Historiku"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Ngjitu lart"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Koha e pritjes"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Të pastrohet historiku dhe memoria?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Shprehja aktuale"</string>
- <string name="no_history" msgid="4331262030447527188">"Nuk ka asnjë historik"</string>
-</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
deleted file mode 100644
index ff4386e..0000000
--- a/res/values-sr/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калкулатор"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"обрисано"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Ојлеров број"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"пи"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"зарез"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"отворена заграда"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"затворена заграда"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"природни логаритам"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логаритам"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"аркус косинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"аркус синус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"аркус тангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"десет на степен"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"експоненцијална функција"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"на квадрат"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"плус"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"дељење"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факторијел"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"помножи"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"проценат"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"степен"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"квадратни корен"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"минус"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"режим степени"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"режим радијана"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"пребаци у степене"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"пребаци у радијане"</string>
- <string name="desc_eq" msgid="3349320880874699285">"једнако"</string>
- <string name="desc_clr" msgid="737502124268890797">"обриши"</string>
- <string name="desc_del" msgid="7879515781929311432">"избриши"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"прикажи инверзне функције"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"сакриј инверзне функције"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Нема формуле"</string>
- <string name="desc_result" msgid="1794073190203126821">"Нема резултата"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Бројеви и основне операције"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Напредне операције"</string>
- <string name="error_nan" msgid="5674077944929888710">"Није број"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Неисправан израз"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Отказано је"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Бесконачно?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Нема дељења нулом"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текст је копиран"</string>
- <string name="cancelled" msgid="2207323593183640994">"Израчунавање је отказано."</string>
- <string name="timeout" msgid="5461892570729418573">"Вредност је можда бесконачна или недефинисана."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Користи дужа времена чекања"</string>
- <string name="dismiss" msgid="7872443888515066216">"Одбаци"</string>
- <string name="exact" msgid="2597237880041789948">"(тачно)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 за последњу цифру)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Резултат са бројевима на почетку"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Резултат као разломак"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Лиценце отвореног кода"</string>
- <string name="menu_history" msgid="9006222701220105452">"Историја"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Обриши"</string>
- <string name="title_history" msgid="7820912156315181539">"Историја"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Кретање нагоре"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Време чекања"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Бришете историју и меморију?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Актуелни израз"</string>
- <string name="no_history" msgid="4331262030447527188">"Нема историје"</string>
-</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
deleted file mode 100644
index 1aaaa77..0000000
--- a/res/values-sv/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkylator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"rensad"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eulers tal"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"komma"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"vänsterparentes"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"högerparentes"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"naturlig logaritm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverterad cosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverterad sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverterad tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"tio upphöjt till"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponentialfunktion"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"i kvadrat"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"delat med"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"fakultet"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"multiplicera"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"procent"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"upphöjt till"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadratrot"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gradläge"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radianläge"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"byt till grader"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"byt till radianer"</string>
- <string name="desc_eq" msgid="3349320880874699285">"är lika med"</string>
- <string name="desc_clr" msgid="737502124268890797">"rensa"</string>
- <string name="desc_del" msgid="7879515781929311432">"radera"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"visa inverterade funktioner"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"dölj inverterade funktioner"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ingen formel"</string>
- <string name="desc_result" msgid="1794073190203126821">"Inga resultat"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Siffror och grundläggande åtgärder"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Avancerade åtgärder"</string>
- <string name="error_nan" msgid="5674077944929888710">"Inte ett tal"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Felaktigt uttryck"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Avbruten"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Oändligt?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Kan inte dela med 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Texten har kopierats"</string>
- <string name="cancelled" msgid="2207323593183640994">"Beräkningen har avbrutits."</string>
- <string name="timeout" msgid="5461892570729418573">"Värdet kan vara oändligt eller odefinierat."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Använd längre tidsgränser"</string>
- <string name="dismiss" msgid="7872443888515066216">"Stäng"</string>
- <string name="exact" msgid="2597237880041789948">"(exakt)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 i sista siffran)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Förstasiffror"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Svar i bråkform"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Öppen källkod"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historik"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Rensa"</string>
- <string name="title_history" msgid="7820912156315181539">"Historik"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Navigera uppåt"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tidsgräns"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Rensa historiken och minnet?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Nuvarande uttryck"</string>
- <string name="no_history" msgid="4331262030447527188">"Det finns ingen historik"</string>
-</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
deleted file mode 100644
index 496b5c4..0000000
--- a/res/values-sw/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kikokotoo"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"digrii"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rediani"</string>
- <string name="clr" msgid="6730945431543327337">"futa"</string>
- <string name="cleared" msgid="3952521190281880880">"zimefutwa"</string>
- <string name="del" msgid="5878069000864178910">"futa"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"nambari ya Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"nukta"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"mabano ya kushoto"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"mabano ya kulia"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosini"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logi asili"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logi"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sini"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tanjenti"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"kosini ya kinyume"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"sini ya kinyume"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"tanjenti ya kinyume"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"kumi kwenye kipeo cha"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"kipeo husisho"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kipeo cha pili"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"jumlisha"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"gawanya"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"zao mtiririko"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"zidisha"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"asilimia"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"kipeo"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kipeo cha pili"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"kutoa"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"hali ya digrii"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"hali ya rediani"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"badilisha hadi digrii"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"badilisha hadi rediani"</string>
- <string name="desc_eq" msgid="3349320880874699285">"sawa na"</string>
- <string name="desc_clr" msgid="737502124268890797">"ondoa"</string>
- <string name="desc_del" msgid="7879515781929311432">"futa"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"Onyesha chaguo za kukokotoa za kinyume"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ficha chaguo za kukokotoa za kinyume"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Hakuna fomula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Hakuna matokeo"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Nambari na utendaji wa msingi"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Utendaji wa kina"</string>
- <string name="error_nan" msgid="5674077944929888710">"Si nambari"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Hesabu yenye hitilafu"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Imeghairiwa"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Isiyokoma?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Haiwezi kugawanya kwa 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Maandishi yamenakiliwa"</string>
- <string name="cancelled" msgid="2207323593183640994">"Ukokotoaji umeghairiwa."</string>
- <string name="timeout" msgid="5461892570729418573">"Thamani inaweza kuwa isiyo na kikomo au isiyobainishwa."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Tumia muda mrefu zaidi wa kwisha"</string>
- <string name="dismiss" msgid="7872443888515066216">"Ondoa"</string>
- <string name="exact" msgid="2597237880041789948">"(mahususi)"</string>
- <string name="approximate" msgid="7117143366610670836">"(± 1 katika tarakimu ya mwisho)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Jibu kwa tarakimu zinazoongoza"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Jibu kama sehemu"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Leseni za programu huria"</string>
- <string name="menu_history" msgid="9006222701220105452">"Historia"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Futa"</string>
- <string name="title_history" msgid="7820912156315181539">"Historia"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Sogeza juu"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Muda umekwishwa"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Je, ungependa kufuta historia na hifadhi?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Maelezo ya Sasa"</string>
- <string name="no_history" msgid="4331262030447527188">"Hakuna historia"</string>
-</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
deleted file mode 100644
index 8606caa..0000000
--- a/res/values-ta/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"கணிப்பான்"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"டிகிரி"</string>
- <string name="mode_rad" msgid="1434228830085760996">"ரேடியன்"</string>
- <string name="clr" msgid="6730945431543327337">"அழி"</string>
- <string name="cleared" msgid="3952521190281880880">"அழிக்கப்பட்டது"</string>
- <string name="del" msgid="5878069000864178910">"நீக்கு"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"ஆய்லரின் எண்"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"பை"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"புள்ளி"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"இடது அடைப்புக்குறி"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"வலது அடைப்புக்குறி"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"கோசைன்"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"இயல் மடக்கை"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"மடக்கை"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"சைன்"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"டேன்ஜென்ட்"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"தலைகீழ் கோசைன்"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"தலைகீழ் சைன்"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"தலைகீழ் டேன்ஜென்ட்"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"பத்தின் அடுக்கு"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"அடுக்கைச் சார்பு"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"வர்க்கம்"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"கூட்டல்"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"வகுத்தல்"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"காரணியப் பெருக்கம்"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"பெருக்கல்"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"சதவீதக்குறி"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"அடுக்கு"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"வர்க்க மூலம்"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"கழித்தல்"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"டிகிரி பயன்முறை"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ரேடியன் பயன்முறை"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"டிகிரிகளுக்கு மாறு"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ரேடியன்களுக்கு மாறு"</string>
- <string name="desc_eq" msgid="3349320880874699285">"சமம்"</string>
- <string name="desc_clr" msgid="737502124268890797">"அழி"</string>
- <string name="desc_del" msgid="7879515781929311432">"நீக்கு"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"நேர்மாறு சார்புகளைக் காட்டு"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"நேர்மாறு சார்புகளை மறை"</string>
- <string name="desc_formula" msgid="8056588859637585007">"சூத்திரம் இல்லை"</string>
- <string name="desc_result" msgid="1794073190203126821">"முடிவு இல்லை"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"எண்களும் அடிப்படை செயல்பாடுகளும்"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"மேம்பட்ட செயல்பாடுகள்"</string>
- <string name="error_nan" msgid="5674077944929888710">"எண் அல்ல"</string>
- <string name="error_syntax" msgid="4786987111228645602">"தவறான கோவை"</string>
- <string name="error_aborted" msgid="3402238176316342537">"நிறுத்தப்பட்டது"</string>
- <string name="error_overflow" msgid="7800547394563434764">"முடிவிலியா?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 ஆல் வகுக்க முடியாது"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"உரை நகலெடுக்கப்பட்டது"</string>
- <string name="cancelled" msgid="2207323593183640994">"கணக்கீடு ரத்துசெய்யப்பட்டது."</string>
- <string name="timeout" msgid="5461892570729418573">"மதிப்பு முடிவிலியாக அல்லது வரையறுக்கப்படாததாக இருக்கலாம்."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"நீண்ட, நேர முடிவுகளைப் பயன்படுத்து"</string>
- <string name="dismiss" msgid="7872443888515066216">"விலக்கு"</string>
- <string name="exact" msgid="2597237880041789948">"(சரியாக)"</string>
- <string name="approximate" msgid="7117143366610670836">"(கடைசி இலக்கத்தில் ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"முன்னிலை இலக்கங்களுடன் பதிலளி"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"பின்னமாகப் பதிலளி"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
- <string name="menu_history" msgid="9006222701220105452">"வரலாறு"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"அழி"</string>
- <string name="title_history" msgid="7820912156315181539">"வரலாறு"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"மேலே செல்"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"நேரம் முடிந்தது"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ஹிஸ்டரி &amp; மெமரியை அழிக்கவா?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"தற்போதைய எக்ஸ்பிரஷன்"</string>
- <string name="no_history" msgid="4331262030447527188">"வரலாறு இல்லை"</string>
-</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
deleted file mode 100644
index bb129a6..0000000
--- a/res/values-te/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"కాలిక్యులేటర్"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"ఖాళీ చేయబడింది"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"యూలర్ సంఖ్య"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"చుక్క"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ఎడమ కుండలీకరణం"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"కుడి కుండలీకరణం"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"కొసైన్"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"సహజ సంవర్గమానం"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"సంవర్గమానం"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"సైన్"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"ట్యాంజెంట్"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"విలోమ కొసైన్"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"విలోమ సైన్"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"విలోమ ట్యాంజెంట్"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"పది యొక్క ఘాతం"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ఘాతీయఫలము"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"వర్గం"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"కూడిక"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"భాగహారం"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"క్రమగుణితం"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"గుణించు"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"శాతం"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"పవర్"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"వర్గమూలం"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"తీసివేత"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"డిగ్రీ మోడ్"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"రేడియన్ మోడ్"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"డిగ్రీలకు మారండి"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"రేడియన్లకు మారండి"</string>
- <string name="desc_eq" msgid="3349320880874699285">"సమాన గుర్తు"</string>
- <string name="desc_clr" msgid="737502124268890797">"తీసివేయండి"</string>
- <string name="desc_del" msgid="7879515781929311432">"తొలగించు"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"విలోమ ఫంక్షన్‌లను చూపుతుంది"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"విలోమ ఫంక్షన్‌లను దాస్తుంది"</string>
- <string name="desc_formula" msgid="8056588859637585007">"సూత్రం లేదు"</string>
- <string name="desc_result" msgid="1794073190203126821">"ఫలితం ఏదీ లేదు"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"సంఖ్యలు మరియు ప్రాథమిక చర్యలు"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"అధునాతన చర్యలు"</string>
- <string name="error_nan" msgid="5674077944929888710">"సంఖ్య కాదు"</string>
- <string name="error_syntax" msgid="4786987111228645602">"తప్పు వ్యక్తీకరణ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"రద్దు చేసారు"</string>
- <string name="error_overflow" msgid="7800547394563434764">"అసంఖ్యాకమా?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0తో భాగించడం కుదరదు"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"వచనం కాపీ చేయబడింది"</string>
- <string name="cancelled" msgid="2207323593183640994">"గణన రద్దు చేసారు."</string>
- <string name="timeout" msgid="5461892570729418573">"విలువ అనంతం లేదా నిర్వచించబడనిది కావచ్చు."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"దీర్ఘకాల సమయ ముగింపులను ఉపయోగించు"</string>
- <string name="dismiss" msgid="7872443888515066216">"విస్మరించు"</string>
- <string name="exact" msgid="2597237880041789948">"(సరిగ్గా)"</string>
- <string name="approximate" msgid="7117143366610670836">"(చివరి అంకెలో ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"ఆధిక్య అంకెల్లో జవాబివ్వు"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ఫ్రాక్షన్‌లో జవాబివ్వు"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
- <string name="menu_history" msgid="9006222701220105452">"చరిత్ర"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"క్లియర్ చేయి"</string>
- <string name="title_history" msgid="7820912156315181539">"చరిత్ర"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"పైకి నావిగేట్ చేయి"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"సమయాభావం జరిగింది"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"చరిత్ర మరియు మెమరీని క్లియర్ చేయాలా?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"ప్రస్తుత వ్యక్తీకరణ"</string>
- <string name="no_history" msgid="4331262030447527188">"చరిత్ర లేదు"</string>
-</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
deleted file mode 100644
index b6c0e68..0000000
--- a/res/values-th/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"เครื่องคิดเลข"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"ล้าง"</string>
- <string name="cleared" msgid="3952521190281880880">"ล้างข้อมูลแล้ว"</string>
- <string name="del" msgid="5878069000864178910">"ลบ"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"จำนวนออยเลอร์"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"พาย"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"จุด"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"วงเล็บซ้าย"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"วงเล็บขวา"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"โคไซน์"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"ลอการิทึมธรรมชาติ"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"ลอการิทึม"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"ไซน์"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"แทนเจนต์"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"โคไซน์ผกผัน"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ไซน์ผกผัน"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"แทนเจนต์ผกผัน"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 ยกกำลัง"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ฟังก์ชันเลขชี้กำลัง"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"ยกกำลัง 2"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"บวก"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"หาร"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"แฟกทอเรียล"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"คูณ"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"เปอร์เซ็นต์"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"ยกกำลัง"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"รากที่ 2"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ลบ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"โหมดองศา"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"โหมดเรเดียน"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"เปลี่ยนเป็นองศา"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"เปลี่ยนเป็นเรเดียน"</string>
- <string name="desc_eq" msgid="3349320880874699285">"เท่ากับ"</string>
- <string name="desc_clr" msgid="737502124268890797">"ล้าง"</string>
- <string name="desc_del" msgid="7879515781929311432">"ลบ"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"แสดงฟังก์ชันผกผัน"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ซ่อนฟังก์ชันผกผัน"</string>
- <string name="desc_formula" msgid="8056588859637585007">"ไม่มีสูตร"</string>
- <string name="desc_result" msgid="1794073190203126821">"ไม่พบผลลัพธ์"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"แป้นตัวเลขและการคำนวณขั้นต้น"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"การใช้งานขั้นสูง"</string>
- <string name="error_nan" msgid="5674077944929888710">"ไม่ใช่ตัวเลข"</string>
- <string name="error_syntax" msgid="4786987111228645602">"นิพจน์ไม่ถูกต้อง"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ล้มเลิกแล้ว"</string>
- <string name="error_overflow" msgid="7800547394563434764">"เป็นอนันต์ใช่ไหม"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"ไม่สามารถหารด้วย 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"คัดลอกข้อความแล้ว"</string>
- <string name="cancelled" msgid="2207323593183640994">"ยกเลิกการคำนวณแล้ว"</string>
- <string name="timeout" msgid="5461892570729418573">"ค่าอาจเป็นอนันต์หรือไม่ระบุ"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"ใช้ระยะหมดเวลาที่นานขึ้น"</string>
- <string name="dismiss" msgid="7872443888515066216">"ปิด"</string>
- <string name="exact" msgid="2597237880041789948">"(ลงตัว)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 ในหลักสุดท้าย)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"คำตอบที่มีเลขนำหน้า"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"ตอบเป็นเศษส่วน"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"ใบอนุญาตโอเพนซอร์ส"</string>
- <string name="menu_history" msgid="9006222701220105452">"ประวัติ"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"ล้าง"</string>
- <string name="title_history" msgid="7820912156315181539">"ประวัติ"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"นำทางขึ้น"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"ระยะหมดเวลา"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"ล้างประวัติและหน่วยความจำไหม"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"นิพจน์ปัจจุบัน"</string>
- <string name="no_history" msgid="4331262030447527188">"ไม่มีประวัติ"</string>
-</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
deleted file mode 100644
index 862ef11..0000000
--- a/res/values-tl/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Calculator"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"na-clear"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler\'s number"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"point"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"kaliwang panaklong"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"kanang panaklong"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natural logarithm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ten to the power of"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"exponential function"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"squared"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"plus"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"divide"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"factorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"i-multiply"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"porsyento"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"power"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"square root"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"minus"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"degree mode"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian mode"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"lumipat sa degrees"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"lumipat sa radians"</string>
- <string name="desc_eq" msgid="3349320880874699285">"equals"</string>
- <string name="desc_clr" msgid="737502124268890797">"i-clear"</string>
- <string name="desc_del" msgid="7879515781929311432">"i-delete"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ipakita ang mga inverse function"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"itago ang mga inverse function"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Walang formula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Walang resulta"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Mga numero at basic na pagpapatakbo"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Mga advanced na pagpapatakbo"</string>
- <string name="error_nan" msgid="5674077944929888710">"Hindi numero"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Bad expression"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Itinigil"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Infinite?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Hindi mahahati sa 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Kinopya ang text"</string>
- <string name="cancelled" msgid="2207323593183640994">"Kinansela ang pagkalkula."</string>
- <string name="timeout" msgid="5461892570729418573">"Maaaring infinite o undefined ang value."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Gumamit ng mas mahahabang timeout"</string>
- <string name="dismiss" msgid="7872443888515066216">"I-dismiss"</string>
- <string name="exact" msgid="2597237880041789948">"(eksakto)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 sa huling digit)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Sagutin gamit ang leading digits"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Sagutin bilang fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Mga lisensyang open source"</string>
- <string name="menu_history" msgid="9006222701220105452">"History"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"I-clear"</string>
- <string name="title_history" msgid="7820912156315181539">"History"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Mag-navigate pataas"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Timeout"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"I-clear ang history at memory?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Kasalukuyang Expression"</string>
- <string name="no_history" msgid="4331262030447527188">"Walang History"</string>
-</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
deleted file mode 100644
index 8eec9b9..0000000
--- a/res/values-tr/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Hesap Makinesi"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"drc"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"tmz"</string>
- <string name="cleared" msgid="3952521190281880880">"temizlendi"</string>
- <string name="del" msgid="5878069000864178910">"sil"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Euler sayısı"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"virgül"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"sol parantez"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"sağ parantez"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinüs"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"doğal logaritma"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logaritma"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinüs"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tanjant"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"ters kosinüs"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"ters sinüs"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"ters tanjant"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"on üssü"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"üstel fonksiyon"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kare"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"artı"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"bölü"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktöriyel"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"çarpı"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"yüzde"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"üssü"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"karekök"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"eksi"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"derece modu"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radyan mode"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"dereceye geç"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"radyana geç"</string>
- <string name="desc_eq" msgid="3349320880874699285">"eşittir"</string>
- <string name="desc_clr" msgid="737502124268890797">"temizle"</string>
- <string name="desc_del" msgid="7879515781929311432">"sil"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"ters fonksiyonları göster"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ters fonksiyonları gizle"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Formül yok"</string>
- <string name="desc_result" msgid="1794073190203126821">"Sonuç yok"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Sayılar ve temel işlemler"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Gelişmiş işlemler"</string>
- <string name="error_nan" msgid="5674077944929888710">"Sayı değil"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Hatalı ifade"</string>
- <string name="error_aborted" msgid="3402238176316342537">"İptal edildi"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Sonsuz?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0\'a bölünemez"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Metin kopyalandı"</string>
- <string name="cancelled" msgid="2207323593183640994">"Hesaplama işlemi iptal edildi."</string>
- <string name="timeout" msgid="5461892570729418573">"Değer sonsuz veya tanımsız olabilir."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Daha uzun zaman aşımı süreleri kullan"</string>
- <string name="dismiss" msgid="7872443888515066216">"Kapat"</string>
- <string name="exact" msgid="2597237880041789948">"(tam)"</string>
- <string name="approximate" msgid="7117143366610670836">"(Son basamakta ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Başında basamaklar olan yanıt"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Kesirli yanıt"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Açık kaynak lisansları"</string>
- <string name="menu_history" msgid="9006222701220105452">"Geçmiş"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Temizle"</string>
- <string name="title_history" msgid="7820912156315181539">"Geçmiş"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Yukarı git"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Zaman aşımı"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Geçmiş ve bellek temizlensin mi?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Geçerli İfade"</string>
- <string name="no_history" msgid="4331262030447527188">"Geçmiş Yok"</string>
-</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
deleted file mode 100755
index 65949ce..0000000
--- a/res/values-uk/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Калькулятор"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"очс"</string>
- <string name="cleared" msgid="3952521190281880880">"очищено"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"число Ейлера"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"пі"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"кома"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"ліва дужка"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"права дужка"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"косинус"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"натуральний логарифм"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"логарифм"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"синус"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"тангенс"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"арккосинус"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"арксинус"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"арктангенс"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"десять у степені"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"експоненціальна функція"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"у квадраті"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"додати"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"поділити"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"факторіал"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"помножити"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"відсоток"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"степінь"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"квадратний корінь"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"відняти"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"режим градусів"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"режим радіанів"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"градуси"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"радіани"</string>
- <string name="desc_eq" msgid="3349320880874699285">"дорівнює"</string>
- <string name="desc_clr" msgid="737502124268890797">"очистити"</string>
- <string name="desc_del" msgid="7879515781929311432">"видалити"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"показати обернені функції"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"сховати обернені функції"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Немає формули"</string>
- <string name="desc_result" msgid="1794073190203126821">"Результатів немає"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Числа й основні операції"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Додаткові операції"</string>
- <string name="error_nan" msgid="5674077944929888710">"Не число"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Невірний вираз"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Скасовано"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Безкінечність?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Не можна ділити на 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Текст скопійовано"</string>
- <string name="cancelled" msgid="2207323593183640994">"Обчислення скасовано."</string>
- <string name="timeout" msgid="5461892570729418573">"Значення може бути нескінченне або невизначене."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Збільшити час очікування"</string>
- <string name="dismiss" msgid="7872443888515066216">"Закрити"</string>
- <string name="exact" msgid="2597237880041789948">"(точно)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 в останній цифрі)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Показати перші цифри"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Показати дріб"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Ліцензії відкритого коду"</string>
- <string name="menu_history" msgid="9006222701220105452">"Історія"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Очистити"</string>
- <string name="title_history" msgid="7820912156315181539">"Історія"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Перейти вгору"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Час очікування"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Очистити історію та пам’ять?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Поточний вираз"</string>
- <string name="no_history" msgid="4331262030447527188">"Немає історії"</string>
-</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
deleted file mode 100644
index a3f08d6..0000000
--- a/res/values-ur/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"کیلکولیٹر"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"صاف ہوگیا"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"‏Euler کا نمبر"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"پوائنٹ"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"بایاں قوسین"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"دایاں قوسین"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"قدرتی لاگرتھم"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"لاگرتھم"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"‏انورس cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"‏انورس sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"‏انورس tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"دس کی طاقت برائے"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"ایکسپونینشل فنکشن"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"مربع نما"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"جمع"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"تقسیم"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"فیکٹوریل"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ضرب دیں"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"فیصد"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"پاور"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"جذر مربع"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"تفریق"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"ڈگری موڈ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"ریڈئین موڈ"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"ڈگریز پر سوئچ کریں"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"ریڈئینز پر سوئچ کریں"</string>
- <string name="desc_eq" msgid="3349320880874699285">"برابر"</string>
- <string name="desc_clr" msgid="737502124268890797">"صاف کریں"</string>
- <string name="desc_del" msgid="7879515781929311432">"حذف کریں"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"معکوس فنکشنز دکھائیں"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"معکوس فنکشنز چھپائیں"</string>
- <string name="desc_formula" msgid="8056588859637585007">"کوئی فارمولہ نہیں"</string>
- <string name="desc_result" msgid="1794073190203126821">"کوئی نتیجہ نہیں ہے"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"اعداد اور بنیادی کاروائیاں"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"اعلی کاروا‏ئیاں"</string>
- <string name="error_nan" msgid="5674077944929888710">"نمبر نہیں ہے"</string>
- <string name="error_syntax" msgid="4786987111228645602">"غلط ایکسپریشن"</string>
- <string name="error_aborted" msgid="3402238176316342537">"ساقط کر دیا گیا"</string>
- <string name="error_overflow" msgid="7800547394563434764">"لا محدود؟"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 سے تقسیم نہیں کر سکتے"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"متن کاپی ہوگیا"</string>
- <string name="cancelled" msgid="2207323593183640994">"حساب منسوخ ہو گیا۔"</string>
- <string name="timeout" msgid="5461892570729418573">"قدر شاید لامحدود یا غیر واضح ہے۔"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"طویل ٹائم آؤٹس استعمال کریں"</string>
- <string name="dismiss" msgid="7872443888515066216">"برخاست کریں"</string>
- <string name="exact" msgid="2597237880041789948">"(عین مطابق)"</string>
- <string name="approximate" msgid="7117143366610670836">"‏(آخری ہندسہ میں ‎±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"شروعاتی ہندسوں سے جواب دیں"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"بطور فریکشن جواب دیں"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"اوپن سورس لائسنسز"</string>
- <string name="menu_history" msgid="9006222701220105452">"سرگزشت"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"صاف کریں"</string>
- <string name="title_history" msgid="7820912156315181539">"سرگزشت"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"اوپر نیویگیٹ کریں"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"ٹائم آؤٹ"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"سرگزشت اور میموری صاف کریں؟"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"موجودہ ایکسپریشن"</string>
- <string name="no_history" msgid="4331262030447527188">"کوئی سرگزشت نہیں"</string>
-</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
deleted file mode 100644
index 183770c..0000000
--- a/res/values-uz/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Kalkulyator"</string>
- <string name="dec_point" msgid="8920102493070918054">","</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"tozalandi"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Eyler soni"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi soni"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"o‘nli kasr ajratuvchisi"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"chap qavs"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"o‘ng qavs"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"kosinus"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"natural logarifm"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarifm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sinus"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tangens"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"teskari kosinus"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"teskari sinus"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"teskari tangens"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"o‘nning darajasida"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"eksponensial funksiya"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"kvadrati"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"qo‘shish"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"bo‘lish"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"faktorial"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"ko‘paytirish"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"foiz"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"darajada"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"kvadrat ildiz"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"ayirish"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"gradus rejimi"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"radian rejimi"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"gradusga o‘tish"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"radianga o‘tish"</string>
- <string name="desc_eq" msgid="3349320880874699285">"barobar"</string>
- <string name="desc_clr" msgid="737502124268890797">"tozalash"</string>
- <string name="desc_del" msgid="7879515781929311432">"o‘chirish"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"teskari funksiyalarni ko‘rsatish"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"teskari funksiyalarni berkitish"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Formula yo‘q"</string>
- <string name="desc_result" msgid="1794073190203126821">"Hech narsa topilmadi"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Sonlar va asosiy amallar"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Qo‘shimcha amallar"</string>
- <string name="error_nan" msgid="5674077944929888710">"Haqiqiy son emas"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Noto‘g‘ri ifoda"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Bekor qilindi"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Cheksizmi?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"0 ga bo‘lib bo‘lmaydi"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Matn nusxalandi"</string>
- <string name="cancelled" msgid="2207323593183640994">"Hisoblash bekor qilindi."</string>
- <string name="timeout" msgid="5461892570729418573">"Qiymat cheksiz yoki noaniq bo‘lishi mumkin."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Kutish vaqtini uzaytirish"</string>
- <string name="dismiss" msgid="7872443888515066216">"Yopish"</string>
- <string name="exact" msgid="2597237880041789948">"(aniq)"</string>
- <string name="approximate" msgid="7117143366610670836">"(so‘nggi raqam ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Birinchi raqam xonasigacha yaxlitlash"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Kasr sifatida"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Ochiq kodli DT litsenziyalari"</string>
- <string name="menu_history" msgid="9006222701220105452">"Tarix"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Tozalash"</string>
- <string name="title_history" msgid="7820912156315181539">"Tarix"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Yopish"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Tanaffus"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Hisob-kitob tarixi va xotiradagi qiymatlar tozalab tashlansinmi?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Joriy amal"</string>
- <string name="no_history" msgid="4331262030447527188">"Hech narsa topilmadi"</string>
-</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
deleted file mode 100644
index 61ed164..0000000
--- a/res/values-vi/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Máy tính"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"xóa"</string>
- <string name="cleared" msgid="3952521190281880880">"đã xóa"</string>
- <string name="del" msgid="5878069000864178910">"xóa"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Số Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"chấm"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"dấu ngoặc trái"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"dấu ngoặc phải"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosin"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logarit tự nhiên"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarit"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sin"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"tang"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"nghịch đảo cosin"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"nghịch đảo sin"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"nghịch đảo tang"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 mũ"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"hàm mũ"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"bình phương"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"cộng"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"chia"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"giai thừa"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"nhân"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"phần trăm"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"lũy thừa"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"dấu khai căn"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"trừ"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"chế độ độ"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"chế độ radian"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"chuyển sang độ"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"chuyển sang radian"</string>
- <string name="desc_eq" msgid="3349320880874699285">"bằng"</string>
- <string name="desc_clr" msgid="737502124268890797">"xóa sạch"</string>
- <string name="desc_del" msgid="7879515781929311432">"gạch bỏ"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"hiển thị hàm nghịch"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"ẩn hàm nghịch"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Không có công thức"</string>
- <string name="desc_result" msgid="1794073190203126821">"Không có kết quả nào"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Số và phép tính cơ bản"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Phép tính nâng cao"</string>
- <string name="error_nan" msgid="5674077944929888710">"Không phải số"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Biểu thức không hợp lệ"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Đã hủy bỏ"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Vô hạn?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Không chia được cho 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Đã sao chép văn bản"</string>
- <string name="cancelled" msgid="2207323593183640994">"Đã hủy tính toán."</string>
- <string name="timeout" msgid="5461892570729418573">"Có thể giá trị là vô hạn hoặc không xác định."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Sử dụng thời gian chờ lâu hơn"</string>
- <string name="dismiss" msgid="7872443888515066216">"Loại bỏ"</string>
- <string name="exact" msgid="2597237880041789948">"(chính xác)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 trong chữ số cuối cùng)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Trả lời bằng các chữ số đứng đầu"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Trả lời dưới dạng phân số"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Giấy phép nguồn mở"</string>
- <string name="menu_history" msgid="9006222701220105452">"Lịch sử"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Xóa"</string>
- <string name="title_history" msgid="7820912156315181539">"Lịch sử"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Điều hướng lên trên"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Hết thời gian"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Xóa lịch sử và bộ nhớ?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Biểu thức hiện tại"</string>
- <string name="no_history" msgid="4331262030447527188">"Không có lịch sử"</string>
-</resources>
diff --git a/res/values-w230dp-h275dp/dimens.xml b/res/values-w230dp-h275dp/dimens.xml
deleted file mode 100644
index 7f8bf5e..0000000
--- a/res/values-w230dp-h275dp/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">0dip</dimen>
- <dimen name="formula_padding_bottom">8dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">28dip</dimen>
- <dimen name="formula_max_textsize">28dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">0dip</dimen>
- <dimen name="result_padding_bottom">8dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">28dip</dimen>
-</resources>
diff --git a/res/values-w230dp-h275dp/layout.xml b/res/values-w230dp-h275dp/layout.xml
deleted file mode 100644
index f9a2d97..0000000
--- a/res/values-w230dp-h275dp/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_one_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values-w230dp-h275dp/styles.xml b/res/values-w230dp-h275dp/styles.xml
deleted file mode 100644
index bbb38be..0000000
--- a/res/values-w230dp-h275dp/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">16dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">18dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">visible</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">16dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">18dip</item>
- <item name="android:paddingEnd">18dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">7</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w230dp-h375dp/dimens.xml b/res/values-w230dp-h375dp/dimens.xml
deleted file mode 100644
index a747231..0000000
--- a/res/values-w230dp-h375dp/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">2dip</dimen>
- <dimen name="formula_padding_bottom">10dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">32dip</dimen>
- <dimen name="formula_max_textsize">32dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">12dip</dimen>
- <dimen name="result_padding_bottom">18dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">32dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w230dp-h375dp/layout.xml b/res/values-w230dp-h375dp/layout.xml
deleted file mode 100644
index f9a2d97..0000000
--- a/res/values-w230dp-h375dp/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_one_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values-w230dp-h375dp/styles.xml b/res/values-w230dp-h375dp/styles.xml
deleted file mode 100644
index c72fd3f..0000000
--- a/res/values-w230dp-h375dp/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">15dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">27dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">visible</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">24dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">15dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">18dip</item>
- <item name="android:paddingEnd">18dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">7</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w230dp-h475dp-port/dimens.xml b/res/values-w230dp-h475dp-port/dimens.xml
deleted file mode 100644
index 072a06e..0000000
--- a/res/values-w230dp-h475dp-port/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">8dip</dimen>
- <dimen name="formula_padding_bottom">18dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">32dip</dimen>
- <dimen name="formula_max_textsize">56dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">18dip</dimen>
- <dimen name="result_padding_bottom">36dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">32dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w230dp-h475dp-port/layout.xml b/res/values-w230dp-h475dp-port/layout.xml
deleted file mode 100644
index 9f7bd6b..0000000
--- a/res/values-w230dp-h475dp-port/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_one_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_3x5</item>
-</resources>
diff --git a/res/values-w230dp-h475dp-port/styles.xml b/res/values-w230dp-h475dp-port/styles.xml
deleted file mode 100644
index 05987ad..0000000
--- a/res/values-w230dp-h475dp-port/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">32dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">visible</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">23dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">12dip</item>
- <item name="android:paddingBottom">20dip</item>
- <item name="android:paddingStart">18dip</item>
- <item name="android:paddingEnd">18dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">7</item>
- <item name="android:paddingTop">12dip</item>
- <item name="android:paddingBottom">20dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">24dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w375dp-h220dp/dimens.xml b/res/values-w375dp-h220dp/dimens.xml
deleted file mode 100644
index 10a6c21..0000000
--- a/res/values-w375dp-h220dp/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">0dip</dimen>
- <dimen name="formula_padding_bottom">8dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">28dip</dimen>
- <dimen name="formula_max_textsize">28dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">0dip</dimen>
- <dimen name="result_padding_bottom">8dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">28dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w375dp-h220dp/layout.xml b/res/values-w375dp-h220dp/layout.xml
deleted file mode 100644
index ac4cde8..0000000
--- a/res/values-w375dp-h220dp/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_one_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values-w375dp-h220dp/styles.xml b/res/values-w375dp-h220dp/styles.xml
deleted file mode 100644
index 16931ff..0000000
--- a/res/values-w375dp-h220dp/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">12dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">16dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">20dip</item>
- <item name="android:paddingEnd">20dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w375dp-h275dp/dimens.xml b/res/values-w375dp-h275dp/dimens.xml
deleted file mode 100644
index 10a6c21..0000000
--- a/res/values-w375dp-h275dp/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">0dip</dimen>
- <dimen name="formula_padding_bottom">8dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">28dip</dimen>
- <dimen name="formula_max_textsize">28dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">0dip</dimen>
- <dimen name="result_padding_bottom">8dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">28dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w375dp-h275dp/layout.xml b/res/values-w375dp-h275dp/layout.xml
deleted file mode 100644
index 3890667..0000000
--- a/res/values-w375dp-h275dp/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values-w375dp-h275dp/styles.xml b/res/values-w375dp-h275dp/styles.xml
deleted file mode 100644
index efed4dc..0000000
--- a/res/values-w375dp-h275dp/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">20dip</item>
- <item name="android:paddingEnd">20dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w375dp-h375dp/dimens.xml b/res/values-w375dp-h375dp/dimens.xml
deleted file mode 100644
index a747231..0000000
--- a/res/values-w375dp-h375dp/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">2dip</dimen>
- <dimen name="formula_padding_bottom">10dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">32dip</dimen>
- <dimen name="formula_max_textsize">32dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">12dip</dimen>
- <dimen name="result_padding_bottom">18dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">32dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w375dp-h375dp/layout.xml b/res/values-w375dp-h375dp/layout.xml
deleted file mode 100644
index 3890667..0000000
--- a/res/values-w375dp-h375dp/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values-w375dp-h375dp/styles.xml b/res/values-w375dp-h375dp/styles.xml
deleted file mode 100644
index b1d4ac5..0000000
--- a/res/values-w375dp-h375dp/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">15dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">27dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">24dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">15dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">20dip</item>
- <item name="android:paddingEnd">20dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w375dp-h500dp-port/dimens.xml b/res/values-w375dp-h500dp-port/dimens.xml
deleted file mode 100644
index 37508de..0000000
--- a/res/values-w375dp-h500dp-port/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">16dip</dimen>
- <dimen name="formula_padding_bottom">28dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">42dip</dimen>
- <dimen name="formula_max_textsize">74dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">16dip</dimen>
- <dimen name="result_padding_bottom">42dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">42dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w375dp-h500dp-port/layout.xml b/res/values-w375dp-h500dp-port/layout.xml
deleted file mode 100644
index 9f7bd6b..0000000
--- a/res/values-w375dp-h500dp-port/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_one_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_3x5</item>
-</resources>
diff --git a/res/values-w375dp-h500dp-port/styles.xml b/res/values-w375dp-h500dp-port/styles.xml
deleted file mode 100644
index 5f5057e..0000000
--- a/res/values-w375dp-h500dp-port/styles.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">23dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">36dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">visible</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">27dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">12dip</item>
- <item name="android:paddingBottom">20dip</item>
- <item name="android:paddingStart">20dip</item>
- <item name="android:paddingEnd">20dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">7</item>
- <item name="android:paddingTop">12dip</item>
- <item name="android:paddingBottom">20dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">24dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w375dp-h768dp-port/dimens.xml b/res/values-w375dp-h768dp-port/dimens.xml
deleted file mode 100644
index e74d35d..0000000
--- a/res/values-w375dp-h768dp-port/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">16dip</dimen>
- <dimen name="formula_padding_bottom">32dip</dimen>
- <dimen name="formula_padding_start">44dip</dimen>
- <dimen name="formula_padding_end">44dip</dimen>
- <dimen name="formula_min_textsize">48dip</dimen>
- <dimen name="formula_max_textsize">72dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">20dip</dimen>
- <dimen name="result_padding_bottom">48dip</dimen>
- <dimen name="result_padding_start">44dip</dimen>
- <dimen name="result_padding_end">44dip</dimen>
- <dimen name="result_textsize">48dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w375dp-h768dp-port/layout.xml b/res/values-w375dp-h768dp-port/layout.xml
deleted file mode 100644
index 98db0fe..0000000
--- a/res/values-w375dp-h768dp-port/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_tablet_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_5x3</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
-</resources>
diff --git a/res/values-w375dp-h768dp-port/styles.xml b/res/values-w375dp-h768dp-port/styles.xml
deleted file mode 100644
index 2c5ae35..0000000
--- a/res/values-w375dp-h768dp-port/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">27dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">24dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">36dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">36dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">24dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_height">0dip</item>
- <item name="android:layout_weight">264</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">16dip</item>
- <item name="android:paddingEnd">16dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">500</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">16dip</item>
- <item name="android:paddingEnd">16dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">264</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w520dp-h220dp-land/dimens.xml b/res/values-w520dp-h220dp-land/dimens.xml
deleted file mode 100644
index 0ae75b5..0000000
--- a/res/values-w520dp-h220dp-land/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">0dip</dimen>
- <dimen name="formula_padding_bottom">8dip</dimen>
- <dimen name="formula_padding_start">36dip</dimen>
- <dimen name="formula_padding_end">36dip</dimen>
- <dimen name="formula_min_textsize">28dip</dimen>
- <dimen name="formula_max_textsize">28dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">0dip</dimen>
- <dimen name="result_padding_bottom">8dip</dimen>
- <dimen name="result_padding_start">36dip</dimen>
- <dimen name="result_padding_end">36dip</dimen>
- <dimen name="result_textsize">28dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w520dp-h220dp-land/layout.xml b/res/values-w520dp-h220dp-land/layout.xml
deleted file mode 100644
index f4d3c4f..0000000
--- a/res/values-w520dp-h220dp-land/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_land</item>
- <item name="display" type="layout">@layout/display_one_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values-w520dp-h220dp-land/styles.xml b/res/values-w520dp-h220dp-land/styles.xml
deleted file mode 100644
index 536d5e7..0000000
--- a/res/values-w520dp-h220dp-land/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">12dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">16dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">4</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">2</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w520dp-h275dp-land/dimens.xml b/res/values-w520dp-h275dp-land/dimens.xml
deleted file mode 100644
index b00f26e..0000000
--- a/res/values-w520dp-h275dp-land/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">2dip</dimen>
- <dimen name="formula_padding_bottom">8dip</dimen>
- <dimen name="formula_padding_start">36dip</dimen>
- <dimen name="formula_padding_end">36dip</dimen>
- <dimen name="formula_min_textsize">28dip</dimen>
- <dimen name="formula_max_textsize">28dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">8dip</dimen>
- <dimen name="result_padding_bottom">16dip</dimen>
- <dimen name="result_padding_start">36dip</dimen>
- <dimen name="result_padding_end">36dip</dimen>
- <dimen name="result_textsize">28dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w520dp-h275dp-land/layout.xml b/res/values-w520dp-h275dp-land/layout.xml
deleted file mode 100644
index 15b5b1b..0000000
--- a/res/values-w520dp-h275dp-land/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_land</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_3x5</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
-</resources>
diff --git a/res/values-w520dp-h275dp-land/styles.xml b/res/values-w520dp-h275dp-land/styles.xml
deleted file mode 100644
index 003949e..0000000
--- a/res/values-w520dp-h275dp-land/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_weight">5</item>
- <item name="android:layout_width">0dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w520dp-h375dp-land/dimens.xml b/res/values-w520dp-h375dp-land/dimens.xml
deleted file mode 100644
index 7cfeb8e..0000000
--- a/res/values-w520dp-h375dp-land/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">2dip</dimen>
- <dimen name="formula_padding_bottom">10dip</dimen>
- <dimen name="formula_padding_start">36dip</dimen>
- <dimen name="formula_padding_end">36dip</dimen>
- <dimen name="formula_min_textsize">32dip</dimen>
- <dimen name="formula_max_textsize">32dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">12dip</dimen>
- <dimen name="result_padding_bottom">18dip</dimen>
- <dimen name="result_padding_start">36dip</dimen>
- <dimen name="result_padding_end">36dip</dimen>
- <dimen name="result_textsize">32dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w520dp-h375dp-land/layout.xml b/res/values-w520dp-h375dp-land/layout.xml
deleted file mode 100644
index 15b5b1b..0000000
--- a/res/values-w520dp-h375dp-land/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_land</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_3x5</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
-</resources>
diff --git a/res/values-w520dp-h375dp-land/styles.xml b/res/values-w520dp-h375dp-land/styles.xml
deleted file mode 100644
index 8c7d0ed..0000000
--- a/res/values-w520dp-h375dp-land/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">23dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">17dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_weight">5</item>
- <item name="android:layout_width">0dip</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w520dp-h500dp-land/dimens.xml b/res/values-w520dp-h500dp-land/dimens.xml
deleted file mode 100644
index 37508de..0000000
--- a/res/values-w520dp-h500dp-land/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">16dip</dimen>
- <dimen name="formula_padding_bottom">28dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">42dip</dimen>
- <dimen name="formula_max_textsize">74dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">16dip</dimen>
- <dimen name="result_padding_bottom">42dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">42dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w520dp-h500dp-land/layout.xml b/res/values-w520dp-h500dp-land/layout.xml
deleted file mode 100644
index 15b5b1b..0000000
--- a/res/values-w520dp-h500dp-land/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_land</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_3x5</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
-</resources>
diff --git a/res/values-w520dp-h500dp-land/styles.xml b/res/values-w520dp-h500dp-land/styles.xml
deleted file mode 100644
index e0cc0e2..0000000
--- a/res/values-w520dp-h500dp-land/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">23dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">36dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">27dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">20dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_weight">5</item>
- <item name="android:layout_width">0dip</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w520dp-h768dp-land/dimens.xml b/res/values-w520dp-h768dp-land/dimens.xml
deleted file mode 100644
index 69b2f01..0000000
--- a/res/values-w520dp-h768dp-land/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">24dip</dimen>
- <dimen name="formula_padding_bottom">32dip</dimen>
- <dimen name="formula_padding_start">44dip</dimen>
- <dimen name="formula_padding_end">44dip</dimen>
- <dimen name="formula_min_textsize">44dip</dimen>
- <dimen name="formula_max_textsize">76dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">24dip</dimen>
- <dimen name="result_padding_bottom">56dip</dimen>
- <dimen name="result_padding_start">44dip</dimen>
- <dimen name="result_padding_end">44dip</dimen>
- <dimen name="result_textsize">44dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w520dp-h768dp-land/layout.xml b/res/values-w520dp-h768dp-land/layout.xml
deleted file mode 100644
index 15b5b1b..0000000
--- a/res/values-w520dp-h768dp-land/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_land</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_3x5</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
-</resources>
diff --git a/res/values-w520dp-h768dp-land/styles.xml b/res/values-w520dp-h768dp-land/styles.xml
deleted file mode 100644
index 61acbd2..0000000
--- a/res/values-w520dp-h768dp-land/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">30dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>s
- <item name="android:textSize">26dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">38dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">36dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">26dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_weight">5</item>
- <item name="android:layout_width">0dip</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">5</item>
- <item name="android:paddingTop">12dip</item>
- <item name="android:paddingBottom">20dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">24dip</item>
- <item name="android:paddingStart">12dip</item>
- <item name="android:paddingEnd">12dip</item>
- </style>
-
-</resources>
diff --git a/res/values-w520dp-h768dp-port/dimens.xml b/res/values-w520dp-h768dp-port/dimens.xml
deleted file mode 100644
index e74d35d..0000000
--- a/res/values-w520dp-h768dp-port/dimens.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">16dip</dimen>
- <dimen name="formula_padding_bottom">32dip</dimen>
- <dimen name="formula_padding_start">44dip</dimen>
- <dimen name="formula_padding_end">44dip</dimen>
- <dimen name="formula_min_textsize">48dip</dimen>
- <dimen name="formula_max_textsize">72dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">20dip</dimen>
- <dimen name="result_padding_bottom">48dip</dimen>
- <dimen name="result_padding_start">44dip</dimen>
- <dimen name="result_padding_end">44dip</dimen>
- <dimen name="result_textsize">48dip</dimen>
-</resources> \ No newline at end of file
diff --git a/res/values-w520dp-h768dp-port/layout.xml b/res/values-w520dp-h768dp-port/layout.xml
deleted file mode 100644
index 98db0fe..0000000
--- a/res/values-w520dp-h768dp-port/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_tablet_port</item>
- <item name="display" type="layout">@layout/display_two_line</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_5x3</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_two_col</item>
-</resources>
diff --git a/res/values-w520dp-h768dp-port/styles.xml b/res/values-w520dp-h768dp-port/styles.xml
deleted file mode 100644
index 9136b50..0000000
--- a/res/values-w520dp-h768dp-port/styles.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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 xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">32dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">28dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">38dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">gone</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">38dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">28dip</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:layout_height">0dip</item>
- <item name="android:layout_weight">264</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">16dip</item>
- <item name="android:paddingEnd">16dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">500</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">16dip</item>
- <item name="android:paddingEnd">16dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">264</item>
- <item name="android:paddingTop">8dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
-</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 113e7be..0000000
--- a/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"计算器"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"已清除"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"欧拉数"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"圆周率"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"小数点"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"左括号"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"右括号"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"余弦"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"自然对数"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"对数"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"正弦"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"正切"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"反余弦"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"反正弦"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"反正切"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 的次方"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"指数函数"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"平方"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"加"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"除"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"阶乘"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"乘"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"百分比符号"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"幂数"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"平方根"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"减"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"角度模式"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"弧度模式"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"切换成角度"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"切换成弧度"</string>
- <string name="desc_eq" msgid="3349320880874699285">"等于"</string>
- <string name="desc_clr" msgid="737502124268890797">"清除"</string>
- <string name="desc_del" msgid="7879515781929311432">"删除"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"显示反函数"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"隐藏反函数"</string>
- <string name="desc_formula" msgid="8056588859637585007">"无任何公式"</string>
- <string name="desc_result" msgid="1794073190203126821">"没有任何结果"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"数字和基本操作"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"高级操作"</string>
- <string name="error_nan" msgid="5674077944929888710">"不是数字"</string>
- <string name="error_syntax" msgid="4786987111228645602">"表达式错误"</string>
- <string name="error_aborted" msgid="3402238176316342537">"已中止"</string>
- <string name="error_overflow" msgid="7800547394563434764">"无限值?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"不能除以 0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"文本已复制"</string>
- <string name="cancelled" msgid="2207323593183640994">"计算已取消。"</string>
- <string name="timeout" msgid="5461892570729418573">"您可能使用了无限值或未定义的值。"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"延长超时时间"</string>
- <string name="dismiss" msgid="7872443888515066216">"关闭"</string>
- <string name="exact" msgid="2597237880041789948">"(精确)"</string>
- <string name="approximate" msgid="7117143366610670836">"(最后一位数字 ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"在结果中显示前导数"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"以分数形式显示结果"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"开放源代码许可"</string>
- <string name="menu_history" msgid="9006222701220105452">"历史记录"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"清除"</string>
- <string name="title_history" msgid="7820912156315181539">"历史记录"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"转到上一层级"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"超时"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"要清除历史记录和存储内容吗?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"目前的表达式"</string>
- <string name="no_history" msgid="4331262030447527188">"没有历史记录"</string>
-</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
deleted file mode 100644
index 6e3c5e3..0000000
--- a/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"計算機"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"CLR"</string>
- <string name="cleared" msgid="3952521190281880880">"已清除"</string>
- <string name="del" msgid="5878069000864178910">"DEL"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"歐拉數"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"圓周率"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"小數點"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"左括弧"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"右括弧"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"餘弦"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"自然對數"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"對數"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"正弦"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"正切"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"反餘弦"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"反正弦"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"反正切"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"十的次方數"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"指數函數"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"平方"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"加"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"除"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"階乘"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"乘"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"百分比"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"次方"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"平方根"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"減"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"角度模式"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"弧度模式"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"切換至角度"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"切換至弧度"</string>
- <string name="desc_eq" msgid="3349320880874699285">"等號"</string>
- <string name="desc_clr" msgid="737502124268890797">"清除"</string>
- <string name="desc_del" msgid="7879515781929311432">"刪除"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"顯示反函數"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"隱藏反函數"</string>
- <string name="desc_formula" msgid="8056588859637585007">"沒有公式"</string>
- <string name="desc_result" msgid="1794073190203126821">"沒有結果"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"數字和基本操作"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"進階操作"</string>
- <string name="error_nan" msgid="5674077944929888710">"非數字"</string>
- <string name="error_syntax" msgid="4786987111228645602">"算式錯誤"</string>
- <string name="error_aborted" msgid="3402238176316342537">"已中止"</string>
- <string name="error_overflow" msgid="7800547394563434764">"無限大?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"不可除零"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"已複製文字"</string>
- <string name="cancelled" msgid="2207323593183640994">"運算已取消。"</string>
- <string name="timeout" msgid="5461892570729418573">"數值可能為無限或未定義。"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"延長逾時時間"</string>
- <string name="dismiss" msgid="7872443888515066216">"關閉"</string>
- <string name="exact" msgid="2597237880041789948">"(準確)"</string>
- <string name="approximate" msgid="7117143366610670836">"(最後一個數字 ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"作答時使用前置數字"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"以分數作答"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"開放原始碼授權"</string>
- <string name="menu_history" msgid="9006222701220105452">"記錄"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"清除"</string>
- <string name="title_history" msgid="7820912156315181539">"記錄"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"向上瀏覽"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"逾時"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"要清除記錄和儲存內容嗎?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"目前算式"</string>
- <string name="no_history" msgid="4331262030447527188">"沒有記錄"</string>
-</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 51d2c71..0000000
--- a/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"計算機"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"清除完畢"</string>
- <string name="del" msgid="5878069000864178910">"del"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"尤拉數"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"圓周率符號"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"點"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"左括弧"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"右括弧"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"餘弦函數"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"自然對數"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"對數"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"正弦函數"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"正切函數"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"反餘弦函數"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"反正弦函數"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"反正切函數"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"10 的次方"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"指數函數"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"平方"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"加號"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"除號"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"階乘"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"乘號"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"百分比符號"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"指數"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"平方根號"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"減號"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"角度模式"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"弧度模式"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"切換成角度"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"切換成弧度"</string>
- <string name="desc_eq" msgid="3349320880874699285">"等於"</string>
- <string name="desc_clr" msgid="737502124268890797">"清除"</string>
- <string name="desc_del" msgid="7879515781929311432">"刪除"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"顯示反函數"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"隱藏反函數"</string>
- <string name="desc_formula" msgid="8056588859637585007">"沒有公式"</string>
- <string name="desc_result" msgid="1794073190203126821">"沒有任何相符的結果"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"數字和基本操作"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"進階操作"</string>
- <string name="error_nan" msgid="5674077944929888710">"非數字"</string>
- <string name="error_syntax" msgid="4786987111228645602">"運算式無效"</string>
- <string name="error_aborted" msgid="3402238176316342537">"已中止"</string>
- <string name="error_overflow" msgid="7800547394563434764">"無限值?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"除數不得為零"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"文字已複製"</string>
- <string name="cancelled" msgid="2207323593183640994">"已取消計算。"</string>
- <string name="timeout" msgid="5461892570729418573">"你可能使用了無限值或未定義的值。"</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"使用較長的逾時期限"</string>
- <string name="dismiss" msgid="7872443888515066216">"關閉"</string>
- <string name="exact" msgid="2597237880041789948">"(精確)"</string>
- <string name="approximate" msgid="7117143366610670836">"(最後一位數字 ±1)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"在結果中顯示前導數"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"以分數顯示結果"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"開放原始碼授權"</string>
- <string name="menu_history" msgid="9006222701220105452">"記錄"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"清除"</string>
- <string name="title_history" msgid="7820912156315181539">"記錄"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"向上瀏覽"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"逾時"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"要清除歷史記錄和儲存內容嗎?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"目前的運算式"</string>
- <string name="no_history" msgid="4331262030447527188">"沒有任何記錄"</string>
-</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
deleted file mode 100644
index 9a7a3a4..0000000
--- a/res/values-zu/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (C) 2015 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 xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="1756503303878374382">"Isibali"</string>
- <string name="dec_point" msgid="8920102493070918054">"."</string>
- <string name="mode_deg" msgid="1146123354434332479">"deg"</string>
- <string name="mode_rad" msgid="1434228830085760996">"rad"</string>
- <string name="clr" msgid="6730945431543327337">"clr"</string>
- <string name="cleared" msgid="3952521190281880880">"kusuliwe"</string>
- <string name="del" msgid="5878069000864178910">"sula"</string>
- <string name="desc_const_e" msgid="1889187337970539507">"Inombolo ye-Euler"</string>
- <string name="desc_const_pi" msgid="5430918714009441655">"pi"</string>
- <string name="desc_dec_point" msgid="5725254504360445023">"iphoyinti"</string>
- <string name="desc_lparen" msgid="8688758170211924916">"abakaki abakwesokunxele"</string>
- <string name="desc_rparen" msgid="7920608385146151731">"parenthesis yesokudla"</string>
- <string name="desc_fun_cos" msgid="3787913784504974731">"cosine"</string>
- <string name="desc_fun_ln" msgid="2505119732546227166">"logarithm yemvelo"</string>
- <string name="desc_fun_log" msgid="4202230639814060062">"logarithm"</string>
- <string name="desc_fun_sin" msgid="7425661271929838876">"sine"</string>
- <string name="desc_fun_tan" msgid="3545496562069310036">"i-tangent"</string>
- <string name="desc_fun_arccos" msgid="7583077865497939123">"inverse cosine"</string>
- <string name="desc_fun_arcsin" msgid="8592309261123302915">"inverse sine"</string>
- <string name="desc_fun_arctan" msgid="6891388393360447455">"inverse tangent"</string>
- <string name="desc_fun_10pow" msgid="3972646467174520812">"ishumi ukuya kumandla wokungu-"</string>
- <string name="desc_fun_exp" msgid="657106837530588390">"umsebenzi we-exponential"</string>
- <string name="desc_op_sqr" msgid="693577095029219627">"iyisikwele"</string>
- <string name="desc_op_add" msgid="5539599782598050813">"hlanganisa"</string>
- <string name="desc_op_div" msgid="3032399266115257498">"hlukanisa"</string>
- <string name="desc_op_fact" msgid="6142780103294179702">"ngokwesimo"</string>
- <string name="desc_op_mul" msgid="6882122010553947015">"phindaphinda"</string>
- <string name="desc_op_pct" msgid="2466179646911499434">"iphesenti"</string>
- <string name="desc_op_pow" msgid="6010144442344099030">"amandla"</string>
- <string name="desc_op_sqrt" msgid="6882241473601721767">"impande yesikwele"</string>
- <string name="desc_op_sub" msgid="2744940875059679129">"susa"</string>
- <string name="desc_mode_deg" msgid="4129831241246511710">"imodi ye-degree"</string>
- <string name="desc_mode_rad" msgid="730135521908627673">"imodi ye-radian"</string>
- <string name="desc_switch_deg" msgid="6675211986921592374">"shintshela kuma-degree"</string>
- <string name="desc_switch_rad" msgid="2845875847488919914">"shintshela kuma-radian"</string>
- <string name="desc_eq" msgid="3349320880874699285">"okulinganayo"</string>
- <string name="desc_clr" msgid="737502124268890797">"sula"</string>
- <string name="desc_del" msgid="7879515781929311432">"susa"</string>
- <string name="desc_inv_off" msgid="3672218250519616068">"bonisa imisebenzi yemuva"</string>
- <string name="desc_inv_on" msgid="2515675590767677178">"fihla imisebenzi yemuva"</string>
- <string name="desc_formula" msgid="8056588859637585007">"Ayikho ifomula"</string>
- <string name="desc_result" msgid="1794073190203126821">"Awukho umphumela"</string>
- <string name="desc_num_pad" msgid="515720457459745571">"Izinombolo nokusebenza okuyisisekelo"</string>
- <string name="desc_adv_pad" msgid="3794276256462677914">"Ukusebenza okuthuthukisiwe"</string>
- <string name="error_nan" msgid="5674077944929888710">"Akuyona inombolo"</string>
- <string name="error_syntax" msgid="4786987111228645602">"Ukusho okubi"</string>
- <string name="error_aborted" msgid="3402238176316342537">"Kukhanseliwe"</string>
- <string name="error_overflow" msgid="7800547394563434764">"Ukungapheleli?"</string>
- <string name="error_zero_divide" msgid="458040988686661801">"Ayikwazi ukuhlukanisa ngo-0"</string>
- <string name="text_copied_toast" msgid="2104264466812485425">"Umbhalo okopishiwe"</string>
- <string name="cancelled" msgid="2207323593183640994">"Ukubala ngekhompuyutha kukhanseliwe."</string>
- <string name="timeout" msgid="5461892570729418573">"Inani kungenzeka alipheli noma alichaziwe."</string>
- <string name="ok_remove_timeout" msgid="8344529153919268011">"Sebenzisa izikhathi zokuvala ezinde"</string>
- <string name="dismiss" msgid="7872443888515066216">"Cashisa"</string>
- <string name="exact" msgid="2597237880041789948">"(ukuqonda)"</string>
- <string name="approximate" msgid="7117143366610670836">"(±1 kudijithi lokugcina)"</string>
- <string name="menu_leading" msgid="2338520833272667740">"Phendula ngokuhola kwamadijithi"</string>
- <string name="menu_fraction" msgid="1247477377840252234">"Phendula njenge-fraction"</string>
- <string name="menu_licenses" msgid="1890541368064108592">"Amalayisense womthombo ovulekile"</string>
- <string name="menu_history" msgid="9006222701220105452">"Umlando"</string>
- <string name="menu_clear_history" msgid="2336526604226069572">"Sula"</string>
- <string name="title_history" msgid="7820912156315181539">"Umlando"</string>
- <string name="desc_navigate_up" msgid="6208699569165589623">"Zulazulela phezulu"</string>
- <string name="dialog_timeout" msgid="9069768442342329065">"Isikhathi sokuvala"</string>
- <string name="dialog_clear" msgid="7137395395908350702">"Sula umlando nememori?"</string>
- <string name="title_current_expression" msgid="2442754548537900591">"Ukuvezwa kwamanje"</string>
- <string name="no_history" msgid="4331262030447527188">"Awukho umlando"</string>
-</resources>
diff --git a/res/values/attr.xml b/res/values/attr.xml
deleted file mode 100644
index 825fc9f..0000000
--- a/res/values/attr.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <declare-styleable name="CalculatorFormula">
- <attr name="minTextSize" format="dimension" />
- <attr name="maxTextSize" format="dimension" />
- <attr name="stepTextSize" format="dimension" />
- </declare-styleable>
-
-</resources>
diff --git a/res/values/color.xml b/res/values/color.xml
deleted file mode 100644
index 2f6475f..0000000
--- a/res/values/color.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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>
-
- <!-- Default accent color. -->
- <color name="calculator_accent_color">#0097A7</color>
-
- <!-- Primary color (Color for the toolbars). -->
- <color name="calculator_primary_color">#00BCD4</color>
-
- <!-- Status bar color. -->
- <color name="calculator_statusbar_color">#0096A9</color>
-
- <!-- Color to indicate an error has occured. -->
- <color name="calculator_error_color">#C2185B</color>
-
- <!-- Background color of the calculator display. -->
- <color name="display_background_color">#FFF</color>
-
- <!-- Text color for the formula in the calculator display. -->
- <color name="display_formula_text_color">#000000</color>
-
- <!-- Text color for the result in the calculator display. -->
- <color name="display_result_text_color">#6C000000</color>
-
- <!-- Lighter color for exponent while scrolling. -->
- <color name="display_result_exponent_text_color">#40000000</color>
-
- <!-- Background color for the numeric pad. -->
- <color name="pad_numeric_background_color">#434343</color>
-
- <!-- Background color for the operator pad. -->
- <color name="pad_operator_background_color">#636363</color>
-
- <!-- Background color for the advanced pad. -->
- <color name="pad_advanced_background_color">#1DE9B6</color>
-
- <!-- Text color for a button in a pad. -->
- <color name="pad_button_text_color">#FFF</color>
-
- <!-- Text color for a button in the advanced pad. -->
- <color name="pad_button_advanced_text_color">#99000000</color>
-
- <!-- Ripple color when a button is pressed in a pad. -->
- <color name="pad_button_ripple_color">#33FFFFFF</color>
-
- <!-- Ripple color when a button is pressed in a pad. -->
- <color name="pad_button_advanced_ripple_color">#1A000000</color>
-
- <!-- Background color for empty history view. -->
- <color name="empty_history_color">#EEEEEE</color>
-
-</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
deleted file mode 100644
index 827097a..0000000
--- a/res/values/dimens.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources>
-
- <!-- The margin between the pad pages when displayed using a view pager. -->
- <dimen name="pad_page_margin">24dip</dimen>
-
- <dimen name="history_divider_padding">14dip</dimen>
-
- <dimen name="history_item_text_padding_top">8dip</dimen>
- <dimen name="history_item_text_padding_bottom">16dip</dimen>
-
- <!-- Dimens for display formula. -->
- <dimen name="formula_padding_top">0dip</dimen>
- <dimen name="formula_padding_bottom">8dip</dimen>
- <dimen name="formula_padding_start">16dip</dimen>
- <dimen name="formula_padding_end">16dip</dimen>
- <dimen name="formula_min_textsize">28dip</dimen>
- <dimen name="formula_max_textsize">28dip</dimen>
- <dimen name="formula_step_textsize">8dip</dimen>
-
- <!-- Dimens for display result. -->
- <dimen name="result_padding_top">0dip</dimen>
- <dimen name="result_padding_bottom">8dip</dimen>
- <dimen name="result_padding_start">16dip</dimen>
- <dimen name="result_padding_end">16dip</dimen>
- <dimen name="result_textsize">28dip</dimen>
-
-</resources> \ No newline at end of file
diff --git a/res/values/layout.xml b/res/values/layout.xml
deleted file mode 100644
index 0e698d5..0000000
--- a/res/values/layout.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
- <item name="activity_calculator" type="layout">@layout/activity_calculator_port</item>
- <item name="display" type="layout">@layout/display_one_line</item>
- <item name="pad_operator" type="layout">@layout/pad_operator_one_col</item>
- <item name="pad_advanced" type="layout">@layout/pad_advanced_4x4</item>
-</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
deleted file mode 100644
index 762378a..0000000
--- a/res/values/strings.xml
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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>
-
- <!-- Name of the application. [CHAR_LIMIT=NONE] -->
- <string name="app_name">Calculator</string>
-
- <!-- Constant for Euler's number (i.e. "2.7182…"). [CHAR_LIMIT=1] -->
- <string name="const_e" translatable="false">e</string>
- <!-- Constant for pi (i.e. "3.1415…"). [CHAR_LIMIT=1] -->
- <string name="const_pi" translatable="false">π</string>
-
- <!-- Left parenthesis (e.g. "log(", "2 × (3 - 1)". [CHAR_LIMIT=1] -->
- <string name="lparen" translatable="false">(</string>
- <!-- Right parenthesis (e.g. "log(2)", "(3 - 1) × 2". [CHAR_LIMIT=1] -->
- <string name="rparen" translatable="false">)</string>
-
- <!--
- Decimal separator (e.g. "1.23" or "1,23").
-
- This should be whatever character is appropriate for use as a decimal sign for a given locale
- when used with Arabic numerals (i.e. 0, 1, 2, 3, ...)
-
- [CHAR_LIMIT=1]
- -->
- <string name="dec_point">.</string>
-
- <!-- Decimal representation of zero (e.g. "0", "10", "1.0", "1e0"). [CHAR_LIMIT=1] -->
- <string name="digit_0" translatable="false">0</string>
- <!-- Decimal representation of one (e.g. "1", "11", "1.1", "1e1"). [CHAR_LIMIT=1] -->
- <string name="digit_1" translatable="false">1</string>
- <!-- Decimal representation of two (e.g. "2", "22", "2.2", "2e2"). [CHAR_LIMIT=1] -->
- <string name="digit_2" translatable="false">2</string>
- <!-- Decimal representation of three (e.g. "3", "33", "3.3", "3e3"). [CHAR_LIMIT=1] -->
- <string name="digit_3" translatable="false">3</string>
- <!-- Decimal representation of four (e.g. "4", "44", "4.4", "4e4"). [CHAR_LIMIT=1] -->
- <string name="digit_4" translatable="false">4</string>
- <!-- Decimal representation of five (e.g. "5", "55", "5.5", "5e5"). [CHAR_LIMIT=1] -->
- <string name="digit_5" translatable="false">5</string>
- <!-- Decimal representation of six (e.g. "6", "66", "6.6", "6e6"). [CHAR_LIMIT=1] -->
- <string name="digit_6" translatable="false">6</string>
- <!-- Decimal representation of seven (e.g. "7", "77", "7.7", "7e7"). [CHAR_LIMIT=1] -->
- <string name="digit_7" translatable="false">7</string>
- <!-- Decimal representation of eight (e.g. "8", "88", "8.8", "8e8"). [CHAR_LIMIT=1] -->
- <string name="digit_8" translatable="false">8</string>
- <!-- Decimal representation of eight (e.g. "9", "99", "9.9", "9e9"). [CHAR_LIMIT=1] -->
- <string name="digit_9" translatable="false">9</string>
-
- <!-- Addition operator (e.g. "1 + 2"). [CHAR_LIMIT=1] -->
- <string name="op_add" translatable="false">+</string>
- <!-- Divide operator (e.g. "1 ÷ 2"). [CHAR_LIMIT=1] -->
- <string name="op_div" translatable="false">÷</string>
- <!-- Factorial operator (e.g. "2!"). [CHAR_LIMIT=1] -->
- <string name="op_fact" translatable="false">!</string>
- <!-- Multiply operator (e.g. "1 × 2"). [CHAR_LIMIT=1] -->
- <string name="op_mul" translatable="false">×</string>
- <!-- Percent operator (e.g. "25%"). [CHAR_LIMIT=1] -->
- <string name="op_pct" translatable="false">%</string>
- <!-- Power operator (e.g. "1 ^ 2"). [CHAR_LIMIT=1] -->
- <string name="op_pow" translatable="false">^</string>
- <!-- Square root operator (e.g. "√1"). [CHAR_LIMIT=1] -->
- <string name="op_sqrt" translatable="false">√</string>
- <!-- Subtraction operator (e.g. "1 - 2"). [CHAR_LIMIT=1] -->
- <string name="op_sub" translatable="false">−</string>
-
- <!-- Abbrev. name of cosine function (e.g. "cos(π)"). [CHAR_LIMIT=4] -->
- <string name="fun_cos" translatable="false">cos</string>
- <!-- Natural logarithm function (e.g. "ln(2)"). [CHAR_LIMIT=4] -->
- <string name="fun_ln" translatable="false">ln</string>
- <!-- Logarithm function (e.g. "log(10)"). [CHAR_LIMIT=4] -->
- <string name="fun_log" translatable="false">log</string>
- <!-- Abbrev. name of sine function (e.g. "sin(π)"). [CHAR_LIMIT=4] -->
- <string name="fun_sin" translatable="false">sin</string>
- <!-- Abbrev. name of tangent function (e.g. "tan(π)"). [CHAR_LIMIT=4] -->
- <string name="fun_tan" translatable="false">tan</string>
- <!-- Abbrev. name of cosine function (e.g. "arccos(π)"). [CHAR_LIMIT=5] -->
- <string name="fun_arccos" translatable="false">cos\u207B\u00B9</string>
- <!-- Abbrev. name of sine function (e.g. "arcsin(π)"). [CHAR_LIMIT=5] -->
- <string name="fun_arcsin" translatable="false">sin\u207B\u00B9</string>
- <!-- Abbrev. name of tangent function (e.g. "arctan(π)"). [CHAR_LIMIT=5] -->
- <string name="fun_arctan" translatable="false">tan\u207B\u00B9</string>
-
- <!-- Abbrev. name of base 10 exponential function (e.g. "10^6"). [CHAR_LIMIT=5] -->
- <string name="fun_10pow" translatable="false">10\u02E3</string>
- <!-- Abbrev. name of exponential function (e.g. "e^6"). [CHAR_LIMIT=5] -->
- <string name="fun_exp" translatable="false">e\u02E3</string>
- <!-- Abbrev. name of suffix square function on key (e.g. "17^2"). [CHAR_LIMIT=5] -->
- <string name="op_sqr" translatable="false">x\u00B2</string>
- <!--
- Abbrev. name of suffix square function in formula.
- "^2" does not work, since it blends into a later constant.
- -->
- <string name="squared" translatable="false">²</string>
- <!-- Abbrev. name of exponential function in formula. -->
- <string name="exponential" translatable = "false">exp</string>
-
- <!-- Abbrev. name of degree mode [CHAR_LIMIT=4] -->
- <string name="mode_deg">deg</string>
- <!-- Abbrev. name of radian mode. [CHAR_LIMIT=4] -->
- <string name="mode_rad">rad</string>
-
- <!-- Equals button (e.g. "1 + 2 = ?"). [CHAR_LIMIT=1] -->
- <string name="eq" translatable="false">=</string>
- <!-- Clear button to clear the currently entered expression. [CHAR_LIMIT=4] -->
- <string name="clr">clr</string>
- <!--
- Announced when all characters are removed from Formula, e.g. after clear. [CHAR_LIMIT=NONE]
- -->
- <string name="cleared">cleared</string>
- <!-- Delete button to remove last entered token. [CHAR_LIMIT=4] -->
- <string name="del">del</string>
- <!-- Toggle button to show/hide inverse functions. [CHAR_LIMIT=4] -->
- <string name="inv" translatable="false">inv</string>
-
- <!--
- Item on Formula context menu used to paste from the Memory into the edit field. [CHAR_LIMIT=2]
- -->
- <string name="memory_recall" translatable="false">MR</string>
- <!-- Item on Result context menu used to store the result in memory. [CHAR_LIMIT=2]
- -->
- <string name="memory_store" translatable="false">MS</string>
- <!-- Item on Result context menu, which subtracts the current result from the number in memory.
- [CHAR_LIMIT=2]
- -->
- <string name="memory_subtract" translatable="false">M\u2212</string>
- <!-- Item on Result context menu, which adds the current result to the number in memory.
- [CHAR_LIMIT=2]
- -->
- <string name="memory_add" translatable="false">M+</string>
-
- <!-- Content description for 'e' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_const_e">Euler\'s number</string>
- <!-- Content description for 'π' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_const_pi">pi</string>
-
- <!-- Content description for '.' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_dec_point">point</string>
-
- <!-- Content description for '(' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_lparen">left parenthesis</string>
- <!-- Content description for ')' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_rparen">right parenthesis</string>
-
- <!-- Content description for 'cos' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_cos">cosine</string>
- <!-- Content description for 'ln' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_ln">natural logarithm</string>
- <!-- Content description for 'log' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_log">logarithm</string>
- <!-- Content description for 'sin' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_sin">sine</string>
- <!-- Content description for 'tan' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_tan">tangent</string>
- <!-- Content description for 'arccos' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_arccos">inverse cosine</string>
- <!-- Content description for 'arcsin' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_arcsin">inverse sine</string>
- <!-- Content description for 'arctan' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_arctan">inverse tangent</string>
-
- <!--
- Content description for 10^ button. This button is used to raise 10 to the subsequently
- entered power. E.g. <10^>3 would yield 1000.
- [CHAR_LIMIT=NONE]
- -->
- <string name="desc_fun_10pow">ten to the power of</string>
- <!-- Content description for e^ (exponential function) button. [CHAR_LIMIT=NONE] -->
- <string name="desc_fun_exp">exponential function</string>
- <!--
- Content description for ^2 button. This button is used to square the previously entered
- number. E.g. 3<^2> would yield 9.
- [CHAR_LIMIT=NONE]
- -->
- <string name="desc_op_sqr">squared</string>
-
- <!-- Content description for '+' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_add">plus</string>
- <!-- Content description for '÷' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_div">divide</string>
- <!-- Content description for '!' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_fact">factorial</string>
- <!-- Content description for '×' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_mul">multiply</string>
- <!-- Content description for '%' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_pct">percent</string>
- <!-- Content description for '^' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_pow">power</string>
- <!-- Content description for '√' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_sqrt">square root</string>
- <!-- Content description for '-' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_op_sub">minus</string>
-
- <!-- Content description for degree mode. [CHAR_LIMIT=NONE] -->
- <string name="desc_mode_deg">degree mode</string>
- <!-- Content description for radian mode. [CHAR_LIMIT=NONE] -->
- <string name="desc_mode_rad">radian mode</string>
-
- <!-- Content description for switch to degree button. [CHAR_LIMIT=NONE] -->
- <string name="desc_switch_deg">switch to degrees</string>
- <!-- Content description for switch to radian button. [CHAR_LIMIT=NONE] -->
- <string name="desc_switch_rad">switch to radians</string>
-
- <!-- Content description for '=' button. [CHAR_LIMIT=NONE] -->
- <string name="desc_eq">equals</string>
- <!-- Content description for "clr" button. Deletes entire formula. [CHAR_LIMIT=NONE] -->
- <string name="desc_clr">clear</string>
- <!--
- Content description for "del" button. Deletes single character. Should differ
- from desc_clr. [CHAR_LIMIT=NONE]
- -->
- <string name="desc_del">delete</string>
- <!-- Content description for "inv" button to show inverse functions. [CHAR_LIMIT=NONE] -->
- <string name="desc_inv_off">show inverse functions</string>
- <!-- Content description for "inv" button to hide inverse functions. [CHAR_LIMIT=NONE] -->
- <string name="desc_inv_on">hide inverse functions</string>
-
- <!-- Content description for formula field when it is empty. [CHAR_LIMIT=NONE] -->
- <string name="desc_formula">No formula</string>
- <!-- Content description for result field when it is empty. [CHAR_LIMIT=NONE] -->
- <string name="desc_result">No result</string>
-
- <!-- Content description for the numeric/operation pad when slide-able. [CHAR_LIMIT=NONE] -->
- <string name="desc_num_pad">Numbers and basic operations</string>
- <!-- Content description for the advanced pad when slide-able. [CHAR_LIMIT=NONE] -->
- <string name="desc_adv_pad">Advanced operations</string>
- <!-- Content description for the pad pages when slide-able. -->
- <string-array name="desc_pad_pages" translatable="false">
- <item>@string/desc_num_pad</item>
- <item>@string/desc_adv_pad</item>
- </string-array>
-
- <!-- Error displayed when expression evaluates to an undefined result. [CHAR_LIMIT=20] -->
- <string name="error_nan">Not a number</string>
- <!-- Error displayed when expression contains a syntax error. [CHAR_LIMIT=20] -->
- <string name="error_syntax">Bad expression</string>
- <!-- Error displayed when evaluation is manually aborted. [CHAR_LIMIT=20] -->
- <string name="error_aborted">Aborted</string>
- <!-- Error displayed when excessive precision is required. [CHAR_LIMIT=20] -->
- <string name="error_overflow">Infinite?</string>
- <!--
- Error displayed when division by zero is detected.
-
- If the translation does not fit within the given limit, then a shortened version must
- be used, e.g. "Division by 0". Exceeding the limit will result in a truncated string.
-
- [CHAR_LIMIT=20]
- -->
- <string name="error_zero_divide">Can\'t divide by 0</string>
-
- <!-- Toast shown when text is copied to the clipboard. [CHAR_LIMIT=40] -->
- <string name="text_copied_toast">Text copied</string>
-
- <!-- Dialog message when a computation is cancelled by the user. [CHAR_LIMIT=NONE] -->
- <string name="cancelled">Computation cancelled.</string>
- <!-- Dialog message when a computation times out. [CHAR_LIMIT=NONE] -->
- <string name="timeout">Value may be infinite or undefined.</string>
- <!--
- Button label to allow future computations with a longer timeout.
-
- When evaluating a result takes too long, we show a "timed out" dialog. This button allows
- the user to increase the maximum amount of time we attempt to evaluate the expression before
- "timing out".
-
- [CHAR_LIMIT=40]
- -->
- <string name="ok_remove_timeout">Use longer timeouts</string>
- <!-- Button label to dismiss informative text message. [CHAR_LIMIT=40] -->
- <string name="dismiss">Dismiss</string>
- <!-- Appended indicator (for "leading" display) that result is exact. [CHAR_LIMIT=NONE] -->
- <string name="exact">(exact)</string>
- <!-- Indicator (for "leading" display) that result is inexact. [CHAR_LIMIT=NONE] -->
- <string name="approximate">(±1 in last digit)</string>
-
- <!-- Menu option to display result including leading digits. [CHAR_LIMIT=40] -->
- <string name="menu_leading">Answer with leading digits</string>
- <!-- Menu option to display result as fraction. [CHAR_LIMIT=40] -->
- <string name="menu_fraction">Answer as fraction</string>
- <!-- Menu option to view the app's open source licenses. [CHAR_LIMIT=40] -->
- <string name="menu_licenses">Open source licenses</string>
- <!-- Menu option to access calculation history. [CHAR_LIMIT=40] -->
- <string name="menu_history">History</string>
- <!-- Menu option to clear calculation history and memory. [CHAR_LIMIT=40] -->
- <string name="menu_clear_history">Clear</string>
-
- <!-- Action bar title in history page. [CHAR_LIMIT=40] -->
- <string name="title_history">History</string>
- <!-- Action bar navigate up description in history page. [CHAR_LIMIT=40] -->
- <string name="desc_navigate_up">Navigate up</string>
-
- <!-- Title for alert dialog when calculation takes too long (timeout). [CHAR_LIMIT=30] -->
- <string name="dialog_timeout">Timeout</string>
-
- <!--
- Message for alert dialog when user is about to clear history and memory. [CHAR_LIMIT=NONE]
- -->
- <string name="dialog_clear">Clear history and memory?</string>
-
- <!-- Title for "current expression" in history page. [CHAR_LIMIT=40] -->
- <string name="title_current_expression">Current Expression</string>
- <!-- Placeholder string when there is no history to be shown. [CHAR_LIMIT=40] -->
- <string name="no_history">No History</string>
-
-</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
deleted file mode 100644
index 3cf2e38..0000000
--- a/res/values/styles.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <style name="DisplayTextStyle" parent="@android:style/Widget.Material.Light.TextView">
- <item name="android:cursorVisible">false</item>
- <item name="android:fontFamily">sans-serif-light</item>
- <item name="android:includeFontPadding">false</item>
- <item name="android:gravity">bottom|end</item>
- <item name="android:textAlignment">viewEnd</item>
- </style>
-
- <style name="DisplayTextStyle.Formula">
- <item name="android:paddingTop">@dimen/formula_padding_top</item>
- <item name="android:paddingBottom">@dimen/formula_padding_bottom</item>
- <item name="android:paddingStart">@dimen/formula_padding_start</item>
- <item name="android:paddingEnd">@dimen/formula_padding_end</item>
- <item name="android:gravity">bottom</item>
- <item name="minTextSize">@dimen/formula_min_textsize</item>
- <item name="maxTextSize">@dimen/formula_max_textsize</item>
- <item name="stepTextSize">@dimen/formula_step_textsize</item>
- </style>
-
- <style name="DisplayTextStyle.Result">
- <item name="android:paddingTop">@dimen/result_padding_top</item>
- <item name="android:paddingBottom">@dimen/result_padding_bottom</item>
- <item name="android:paddingStart">@dimen/result_padding_start</item>
- <item name="android:paddingEnd">@dimen/result_padding_end</item>
- <item name="android:gravity">bottom</item>
- <item name="android:textSize">@dimen/result_textsize</item>
- </style>
-
- <style name="HistoryItemTextStyle" parent="DisplayTextStyle">
- <item name="android:layout_gravity">bottom|end</item>
- <item name="android:paddingTop">@dimen/history_item_text_padding_top</item>
- <item name="android:paddingBottom">@dimen/history_item_text_padding_bottom</item>
- <!-- Note: result_padding_start == formula_padding_start. -->
- <item name="android:paddingStart">@dimen/result_padding_start</item>
- <item name="android:paddingEnd">@dimen/result_padding_end</item>
- <item name="android:textSize">@dimen/result_textsize</item>
- </style>
-
- <style name="PadButtonStyle" parent="@android:style/Widget.Material.Light.Button.Borderless">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_height">0dip</item>
- <item name="android:background">@drawable/pad_button_background</item>
- <item name="android:fontFamily">sans-serif-light</item>
- <item name="android:gravity">center</item>
- <item name="android:includeFontPadding">false</item>
- <item name="android:minWidth">0dip</item>
- <item name="android:minHeight">0dip</item>
- <item name="android:onClick">onButtonClick</item>
- <item name="android:textAllCaps">false</item>
- <item name="android:textColor">@color/pad_button_text_color</item>
-
- <!-- Attributes from androidx.appcompat.gridlayout -->
- <item name="layout_gravity">fill</item>
- <item name="layout_rowWeight">1</item>
- <item name="layout_columnWeight">1</item>
- </style>
-
- <style name="PadButtonStyle.Advanced">
- <item name="android:background">@drawable/pad_button_advanced_background</item>
- <item name="android:textColor">@color/pad_button_advanced_text_color</item>
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Advanced.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">12dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric">
- <item name="android:textSize">16dip</item>
- </style>
-
- <style name="PadButtonStyle.Numeric.Equals">
- <item name="android:visibility">visible</item>
- </style>
-
- <style name="PadButtonStyle.Operator">
- <item name="android:textSize">14dip</item>
- </style>
-
- <style name="PadButtonStyle.Operator.Text">
- <item name="android:textAllCaps">true</item>
- <item name="android:textSize">12dip</item>
- </style>
-
- <style name="PadLayoutStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">match_parent</item>
- </style>
-
- <style name="PadLayoutStyle.Advanced">
- <item name="android:elevation">4dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">18dip</item>
- <item name="android:paddingEnd">18dip</item>
- </style>
-
- <style name="PadLayoutStyle.Numeric">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">7</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">8dip</item>
- <item name="android:paddingEnd">8dip</item>
- </style>
-
- <style name="PadLayoutStyle.Operator">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_weight">3</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:paddingBottom">8dip</item>
- <item name="android:paddingStart">4dip</item>
- <item name="android:paddingEnd">28dip</item>
- </style>
-
-</resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
deleted file mode 100644
index 36adfbe..0000000
--- a/res/values/themes.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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>
-
- <style name="Theme" parent="@android:style/Theme.Material.Light.DarkActionBar">
- <item name="android:colorPrimary">@color/calculator_primary_color</item>
- <item name="android:colorAccent">@color/calculator_accent_color</item>
- <item name="android:statusBarColor">@color/calculator_accent_color</item>
- <item name="android:windowSoftInputMode">stateAlwaysHidden</item>
- </style>
-
- <style name="Theme.Calculator">
- <item name="android:windowActionBar">false</item>
- <item name="android:windowActionModeOverlay">true</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:layoutDirection">ltr</item>
- </style>
-
- <style name="Theme.Licenses">
- <item name="android:title">@string/menu_licenses</item>
- </style>
-
-</resources>
diff --git a/src/com/android/calculator2/AlertDialogFragment.java b/src/com/android/calculator2/AlertDialogFragment.java
deleted file mode 100644
index 3939a73..0000000
--- a/src/com/android/calculator2/AlertDialogFragment.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2015 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.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
-import android.view.LayoutInflater;
-import android.widget.TextView;
-
-/**
- * Display a message with a dismiss putton, and optionally a second button.
- */
-public class AlertDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
-
- public interface OnClickListener {
- /**
- * This method will be invoked when a button in the dialog is clicked.
- *
- * @param fragment the AlertDialogFragment that received the click
- * @param which the button that was clicked (e.g.
- * {@link DialogInterface#BUTTON_POSITIVE}) or the position
- * of the item clicked
- */
- void onClick(AlertDialogFragment fragment, int which);
- }
-
- private static final String NAME = AlertDialogFragment.class.getName();
- private static final String KEY_MESSAGE = NAME + "_message";
- private static final String KEY_BUTTON_NEGATIVE = NAME + "_button_negative";
- private static final String KEY_BUTTON_POSITIVE = NAME + "_button_positive";
- private static final String KEY_TITLE = NAME + "_title";
-
- /**
- * Convenience method for creating and showing a DialogFragment with the given message and
- * title.
- *
- * @param activity originating Activity
- * @param title resource id for the title string
- * @param message resource id for the displayed message string
- * @param positiveButtonLabel label for second button, if any. If non-null, activity must
- * implement AlertDialogFragment.OnClickListener to respond.
- */
- public static void showMessageDialog(Activity activity, @StringRes int title,
- @StringRes int message, @StringRes int positiveButtonLabel, @Nullable String tag) {
- showMessageDialog(activity, title != 0 ? activity.getString(title) : null,
- activity.getString(message),
- positiveButtonLabel != 0 ? activity.getString(positiveButtonLabel) : null,
- tag);
- }
-
- /**
- * Create and show a DialogFragment with the given message.
- *
- * @param activity originating Activity
- * @param title displayed title, if any
- * @param message displayed message
- * @param positiveButtonLabel label for second button, if any. If non-null, activity must
- * implement AlertDialogFragment.OnClickListener to respond.
- */
- public static void showMessageDialog(Activity activity, @Nullable CharSequence title,
- CharSequence message, @Nullable CharSequence positiveButtonLabel, @Nullable String tag)
- {
- final FragmentManager manager = activity.getFragmentManager();
- if (manager == null || manager.isDestroyed()) {
- return;
- }
- final AlertDialogFragment dialogFragment = new AlertDialogFragment();
- final Bundle args = new Bundle();
- args.putCharSequence(KEY_MESSAGE, message);
- args.putCharSequence(KEY_BUTTON_NEGATIVE, activity.getString(R.string.dismiss));
- if (positiveButtonLabel != null) {
- args.putCharSequence(KEY_BUTTON_POSITIVE, positiveButtonLabel);
- }
- args.putCharSequence(KEY_TITLE, title);
- dialogFragment.setArguments(args);
- dialogFragment.show(manager, tag /* tag */);
- }
-
- public AlertDialogFragment() {
- setStyle(STYLE_NO_TITLE, android.R.attr.alertDialogTheme);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Bundle args = getArguments() == null ? Bundle.EMPTY : getArguments();
- final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-
- final LayoutInflater inflater = LayoutInflater.from(builder.getContext());
- final TextView messageView = (TextView) inflater.inflate(
- R.layout.dialog_message, null /* root */);
- messageView.setText(args.getCharSequence(KEY_MESSAGE));
- builder.setView(messageView);
-
- builder.setNegativeButton(args.getCharSequence(KEY_BUTTON_NEGATIVE), null /* listener */);
-
- final CharSequence positiveButtonLabel = args.getCharSequence(KEY_BUTTON_POSITIVE);
- if (positiveButtonLabel != null) {
- builder.setPositiveButton(positiveButtonLabel, this);
- }
-
- builder.setTitle(args.getCharSequence(KEY_TITLE));
-
- return builder.create();
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final Activity activity = getActivity();
- if (activity instanceof AlertDialogFragment.OnClickListener /* always true */) {
- ((AlertDialogFragment.OnClickListener) activity).onClick(this, which);
- }
- }
-}
diff --git a/src/com/android/calculator2/AlignedTextView.java b/src/com/android/calculator2/AlignedTextView.java
deleted file mode 100644
index 91ad0dd..0000000
--- a/src/com/android/calculator2/AlignedTextView.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.widget.TextView;
-
-/**
- * Extended {@link TextView} that supports ascent/baseline alignment.
- */
-public class AlignedTextView extends TextView {
-
- private static final String LATIN_CAPITAL_LETTER = "H";
-
- // temporary rect for use during layout
- private final Rect mTempRect = new Rect();
-
- private int mTopPaddingOffset;
- private int mBottomPaddingOffset;
-
- public AlignedTextView(Context context) {
- this(context, null /* attrs */);
- }
-
- public AlignedTextView(Context context, AttributeSet attrs) {
- this(context, attrs, android.R.attr.textViewStyle);
- }
-
- public AlignedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
-
- // Disable any included font padding by default.
- setIncludeFontPadding(false);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- final Paint paint = getPaint();
-
- // Always align text to the default capital letter height.
- paint.getTextBounds(LATIN_CAPITAL_LETTER, 0, 1, mTempRect);
-
- mTopPaddingOffset = Math.min(getPaddingTop(),
- (int) Math.ceil(mTempRect.top - paint.ascent()));
- mBottomPaddingOffset = Math.min(getPaddingBottom(), (int) Math.ceil(paint.descent()));
-
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
-
- @Override
- public int getCompoundPaddingTop() {
- return super.getCompoundPaddingTop() - mTopPaddingOffset;
- }
-
- @Override
- public int getCompoundPaddingBottom() {
- return super.getCompoundPaddingBottom() - mBottomPaddingOffset;
- }
-}
diff --git a/src/com/android/calculator2/BoundedRational.java b/src/com/android/calculator2/BoundedRational.java
deleted file mode 100644
index 16fa581..0000000
--- a/src/com/android/calculator2/BoundedRational.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Copyright (C) 2015 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 com.hp.creals.CR;
-
-import java.math.BigInteger;
-import java.util.Objects;
-import java.util.Random;
-
-/**
- * Rational numbers that may turn to null if they get too big.
- * For many operations, if the length of the nuumerator plus the length of the denominator exceeds
- * a maximum size, we simply return null, and rely on our caller do something else.
- * We currently never return null for a pure integer or for a BoundedRational that has just been
- * constructed.
- *
- * We also implement a number of irrational functions. These return a non-null result only when
- * the result is known to be rational.
- */
-public class BoundedRational {
- // TODO: Consider returning null for integers. With some care, large factorials might become
- // much faster.
- // TODO: Maybe eventually make this extend Number?
-
- private static final int MAX_SIZE = 10000; // total, in bits
-
- private final BigInteger mNum;
- private final BigInteger mDen;
-
- public BoundedRational(BigInteger n, BigInteger d) {
- mNum = n;
- mDen = d;
- }
-
- public BoundedRational(BigInteger n) {
- mNum = n;
- mDen = BigInteger.ONE;
- }
-
- public BoundedRational(long n, long d) {
- mNum = BigInteger.valueOf(n);
- mDen = BigInteger.valueOf(d);
- }
-
- public BoundedRational(long n) {
- mNum = BigInteger.valueOf(n);
- mDen = BigInteger.valueOf(1);
- }
-
- /**
- * Produce BoundedRational equal to the given double.
- */
- public static BoundedRational valueOf(double x) {
- final long l = Math.round(x);
- if ((double) l == x && Math.abs(l) <= 1000) {
- return valueOf(l);
- }
- final long allBits = Double.doubleToRawLongBits(Math.abs(x));
- long mantissa = (allBits & ((1L << 52) - 1));
- final int biased_exp = (int)(allBits >>> 52);
- if ((biased_exp & 0x7ff) == 0x7ff) {
- throw new ArithmeticException("Infinity or NaN not convertible to BoundedRational");
- }
- final long sign = x < 0.0 ? -1 : 1;
- int exp = biased_exp - 1075; // 1023 + 52; we treat mantissa as integer.
- if (biased_exp == 0) {
- exp += 1; // Denormal exponent is 1 greater.
- } else {
- mantissa += (1L << 52); // Implied leading one.
- }
- BigInteger num = BigInteger.valueOf(sign * mantissa);
- BigInteger den = BigInteger.ONE;
- if (exp >= 0) {
- num = num.shiftLeft(exp);
- } else {
- den = den.shiftLeft(-exp);
- }
- return new BoundedRational(num, den);
- }
-
- /**
- * Produce BoundedRational equal to the given long.
- */
- public static BoundedRational valueOf(long x) {
- if (x >= -2 && x <= 10) {
- switch((int) x) {
- case -2:
- return MINUS_TWO;
- case -1:
- return MINUS_ONE;
- case 0:
- return ZERO;
- case 1:
- return ONE;
- case 2:
- return TWO;
- case 10:
- return TEN;
- }
- }
- return new BoundedRational(x);
- }
-
- /**
- * Convert to String reflecting raw representation.
- * Debug or log messages only, not pretty.
- */
- public String toString() {
- return mNum.toString() + "/" + mDen.toString();
- }
-
- /**
- * Convert to readable String.
- * Intended for output to user. More expensive, less useful for debugging than
- * toString(). Not internationalized.
- */
- public String toNiceString() {
- final BoundedRational nicer = reduce().positiveDen();
- String result = nicer.mNum.toString();
- if (!nicer.mDen.equals(BigInteger.ONE)) {
- result += "/" + nicer.mDen;
- }
- return result;
- }
-
- public static String toString(BoundedRational r) {
- if (r == null) {
- return "not a small rational";
- }
- return r.toString();
- }
-
- /**
- * Returns a truncated (rounded towards 0) representation of the result.
- * Includes n digits to the right of the decimal point.
- * @param n result precision, >= 0
- */
- public String toStringTruncated(int n) {
- String digits = mNum.abs().multiply(BigInteger.TEN.pow(n)).divide(mDen.abs()).toString();
- int len = digits.length();
- if (len < n + 1) {
- digits = StringUtils.repeat('0', n + 1 - len) + digits;
- len = n + 1;
- }
- return (signum() < 0 ? "-" : "") + digits.substring(0, len - n) + "."
- + digits.substring(len - n);
- }
-
- /**
- * Return a double approximation.
- * The result is correctly rounded to nearest, with ties rounded away from zero.
- * TODO: Should round ties to even.
- */
- public double doubleValue() {
- final int sign = signum();
- if (sign < 0) {
- return -BoundedRational.negate(this).doubleValue();
- }
- // We get the mantissa by dividing the numerator by denominator, after
- // suitably prescaling them so that the integral part of the result contains
- // enough bits. We do the prescaling to avoid any precision loss, so the division result
- // is correctly truncated towards zero.
- final int apprExp = mNum.bitLength() - mDen.bitLength();
- if (apprExp < -1100 || sign == 0) {
- // Bail fast for clearly zero result.
- return 0.0;
- }
- final int neededPrec = apprExp - 80;
- final BigInteger dividend = neededPrec < 0 ? mNum.shiftLeft(-neededPrec) : mNum;
- final BigInteger divisor = neededPrec > 0 ? mDen.shiftLeft(neededPrec) : mDen;
- final BigInteger quotient = dividend.divide(divisor);
- final int qLength = quotient.bitLength();
- int extraBits = qLength - 53;
- int exponent = neededPrec + qLength; // Exponent assuming leading binary point.
- if (exponent >= -1021) {
- // Binary point is actually to right of leading bit.
- --exponent;
- } else {
- // We're in the gradual underflow range. Drop more bits.
- extraBits += (-1022 - exponent) + 1;
- exponent = -1023;
- }
- final BigInteger bigMantissa =
- quotient.add(BigInteger.ONE.shiftLeft(extraBits - 1)).shiftRight(extraBits);
- if (exponent > 1024) {
- return Double.POSITIVE_INFINITY;
- }
- if (exponent > -1023 && bigMantissa.bitLength() != 53
- || exponent <= -1023 && bigMantissa.bitLength() >= 53) {
- throw new AssertionError("doubleValue internal error");
- }
- final long mantissa = bigMantissa.longValue();
- final long bits = (mantissa & ((1l << 52) - 1)) | (((long) exponent + 1023) << 52);
- return Double.longBitsToDouble(bits);
- }
-
- public CR crValue() {
- return CR.valueOf(mNum).divide(CR.valueOf(mDen));
- }
-
- public int intValue() {
- BoundedRational reduced = reduce();
- if (!reduced.mDen.equals(BigInteger.ONE)) {
- throw new ArithmeticException("intValue of non-int");
- }
- return reduced.mNum.intValue();
- }
-
- // Approximate number of bits to left of binary point.
- // Negative indicates leading zeroes to the right of binary point.
- public int wholeNumberBits() {
- if (mNum.signum() == 0) {
- return Integer.MIN_VALUE;
- } else {
- return mNum.bitLength() - mDen.bitLength();
- }
- }
-
- /**
- * Is this number too big for us to continue with rational arithmetic?
- * We return fals for integers on the assumption that we have no better fallback.
- */
- private boolean tooBig() {
- if (mDen.equals(BigInteger.ONE)) {
- return false;
- }
- return (mNum.bitLength() + mDen.bitLength() > MAX_SIZE);
- }
-
- /**
- * Return an equivalent fraction with a positive denominator.
- */
- private BoundedRational positiveDen() {
- if (mDen.signum() > 0) {
- return this;
- }
- return new BoundedRational(mNum.negate(), mDen.negate());
- }
-
- /**
- * Return an equivalent fraction in lowest terms.
- * Denominator sign may remain negative.
- */
- private BoundedRational reduce() {
- if (mDen.equals(BigInteger.ONE)) {
- return this; // Optimization only
- }
- final BigInteger divisor = mNum.gcd(mDen);
- return new BoundedRational(mNum.divide(divisor), mDen.divide(divisor));
- }
-
- static Random sReduceRng = new Random();
-
- /**
- * Return a possibly reduced version of r that's not tooBig().
- * Return null if none exists.
- */
- private static BoundedRational maybeReduce(BoundedRational r) {
- if (r == null) return null;
- // Reduce randomly, with 1/16 probability, or if the result is too big.
- if (!r.tooBig() && (sReduceRng.nextInt() & 0xf) != 0) {
- return r;
- }
- BoundedRational result = r.positiveDen();
- result = result.reduce();
- if (!result.tooBig()) {
- return result;
- }
- return null;
- }
-
- public int compareTo(BoundedRational r) {
- // Compare by multiplying both sides by denominators, invert result if denominator product
- // was negative.
- return mNum.multiply(r.mDen).compareTo(r.mNum.multiply(mDen)) * mDen.signum()
- * r.mDen.signum();
- }
-
- public int signum() {
- return mNum.signum() * mDen.signum();
- }
-
- @Override
- public int hashCode() {
- // Note that this may be too expensive to be useful.
- BoundedRational reduced = reduce().positiveDen();
- return Objects.hash(reduced.mNum, reduced.mDen);
- }
-
- @Override
- public boolean equals(Object r) {
- return r != null && r instanceof BoundedRational && compareTo((BoundedRational) r) == 0;
- }
-
- // We use static methods for arithmetic, so that we can easily handle the null case. We try
- // to catch domain errors whenever possible, sometimes even when one of the arguments is null,
- // but not relevant.
-
- /**
- * Returns equivalent BigInteger result if it exists, null if not.
- */
- public static BigInteger asBigInteger(BoundedRational r) {
- if (r == null) {
- return null;
- }
- final BigInteger[] quotAndRem = r.mNum.divideAndRemainder(r.mDen);
- if (quotAndRem[1].signum() == 0) {
- return quotAndRem[0];
- } else {
- return null;
- }
- }
- public static BoundedRational add(BoundedRational r1, BoundedRational r2) {
- if (r1 == null || r2 == null) {
- return null;
- }
- final BigInteger den = r1.mDen.multiply(r2.mDen);
- final BigInteger num = r1.mNum.multiply(r2.mDen).add(r2.mNum.multiply(r1.mDen));
- return maybeReduce(new BoundedRational(num,den));
- }
-
- /**
- * Return the argument, but with the opposite sign.
- * Returns null only for a null argument.
- */
- public static BoundedRational negate(BoundedRational r) {
- if (r == null) {
- return null;
- }
- return new BoundedRational(r.mNum.negate(), r.mDen);
- }
-
- public static BoundedRational subtract(BoundedRational r1, BoundedRational r2) {
- return add(r1, negate(r2));
- }
-
- /**
- * Return product of r1 and r2 without reducing the result.
- */
- private static BoundedRational rawMultiply(BoundedRational r1, BoundedRational r2) {
- // It's tempting but marginally unsound to reduce 0 * null to 0. The null could represent
- // an infinite value, for which we failed to throw an exception because it was too big.
- if (r1 == null || r2 == null) {
- return null;
- }
- // Optimize the case of our special ONE constant, since that's cheap and somewhat frequent.
- if (r1 == ONE) {
- return r2;
- }
- if (r2 == ONE) {
- return r1;
- }
- final BigInteger num = r1.mNum.multiply(r2.mNum);
- final BigInteger den = r1.mDen.multiply(r2.mDen);
- return new BoundedRational(num,den);
- }
-
- public static BoundedRational multiply(BoundedRational r1, BoundedRational r2) {
- return maybeReduce(rawMultiply(r1, r2));
- }
-
- public static class ZeroDivisionException extends ArithmeticException {
- public ZeroDivisionException() {
- super("Division by zero");
- }
- }
-
- /**
- * Return the reciprocal of r (or null if the argument was null).
- */
- public static BoundedRational inverse(BoundedRational r) {
- if (r == null) {
- return null;
- }
- if (r.mNum.signum() == 0) {
- throw new ZeroDivisionException();
- }
- return new BoundedRational(r.mDen, r.mNum);
- }
-
- public static BoundedRational divide(BoundedRational r1, BoundedRational r2) {
- return multiply(r1, inverse(r2));
- }
-
- public static BoundedRational sqrt(BoundedRational r) {
- // Return non-null if numerator and denominator are small perfect squares.
- if (r == null) {
- return null;
- }
- r = r.positiveDen().reduce();
- if (r.mNum.signum() < 0) {
- throw new ArithmeticException("sqrt(negative)");
- }
- final BigInteger num_sqrt = BigInteger.valueOf(Math.round(Math.sqrt(r.mNum.doubleValue())));
- if (!num_sqrt.multiply(num_sqrt).equals(r.mNum)) {
- return null;
- }
- final BigInteger den_sqrt = BigInteger.valueOf(Math.round(Math.sqrt(r.mDen.doubleValue())));
- if (!den_sqrt.multiply(den_sqrt).equals(r.mDen)) {
- return null;
- }
- return new BoundedRational(num_sqrt, den_sqrt);
- }
-
- public final static BoundedRational ZERO = new BoundedRational(0);
- public final static BoundedRational HALF = new BoundedRational(1,2);
- public final static BoundedRational MINUS_HALF = new BoundedRational(-1,2);
- public final static BoundedRational THIRD = new BoundedRational(1,3);
- public final static BoundedRational QUARTER = new BoundedRational(1,4);
- public final static BoundedRational SIXTH = new BoundedRational(1,6);
- public final static BoundedRational ONE = new BoundedRational(1);
- public final static BoundedRational MINUS_ONE = new BoundedRational(-1);
- public final static BoundedRational TWO = new BoundedRational(2);
- public final static BoundedRational MINUS_TWO = new BoundedRational(-2);
- public final static BoundedRational TEN = new BoundedRational(10);
- public final static BoundedRational TWELVE = new BoundedRational(12);
- public final static BoundedRational THIRTY = new BoundedRational(30);
- public final static BoundedRational MINUS_THIRTY = new BoundedRational(-30);
- public final static BoundedRational FORTY_FIVE = new BoundedRational(45);
- public final static BoundedRational MINUS_FORTY_FIVE = new BoundedRational(-45);
- public final static BoundedRational NINETY = new BoundedRational(90);
- public final static BoundedRational MINUS_NINETY = new BoundedRational(-90);
-
- private static final BigInteger BIG_TWO = BigInteger.valueOf(2);
- private static final BigInteger BIG_MINUS_ONE = BigInteger.valueOf(-1);
-
- /**
- * Compute integral power of this, assuming this has been reduced and exp is >= 0.
- */
- private BoundedRational rawPow(BigInteger exp) {
- if (exp.equals(BigInteger.ONE)) {
- return this;
- }
- if (exp.and(BigInteger.ONE).intValue() == 1) {
- return rawMultiply(rawPow(exp.subtract(BigInteger.ONE)), this);
- }
- if (exp.signum() == 0) {
- return ONE;
- }
- BoundedRational tmp = rawPow(exp.shiftRight(1));
- if (Thread.interrupted()) {
- throw new CR.AbortedException();
- }
- BoundedRational result = rawMultiply(tmp, tmp);
- if (result == null || result.tooBig()) {
- return null;
- }
- return result;
- }
-
- /**
- * Compute an integral power of this.
- */
- public BoundedRational pow(BigInteger exp) {
- int expSign = exp.signum();
- if (expSign == 0) {
- // Questionable if base has undefined or zero value.
- // java.lang.Math.pow() returns 1 anyway, so we do the same.
- return BoundedRational.ONE;
- }
- if (exp.equals(BigInteger.ONE)) {
- return this;
- }
- // Reducing once at the beginning means there's no point in reducing later.
- BoundedRational reduced = reduce().positiveDen();
- // First handle cases in which huge exponents could give compact results.
- if (reduced.mDen.equals(BigInteger.ONE)) {
- if (reduced.mNum.equals(BigInteger.ZERO)) {
- return ZERO;
- }
- if (reduced.mNum.equals(BigInteger.ONE)) {
- return ONE;
- }
- if (reduced.mNum.equals(BIG_MINUS_ONE)) {
- if (exp.testBit(0)) {
- return MINUS_ONE;
- } else {
- return ONE;
- }
- }
- }
- if (exp.bitLength() > 1000) {
- // Stack overflow is likely; a useful rational result is not.
- return null;
- }
- if (expSign < 0) {
- return inverse(reduced).rawPow(exp.negate());
- } else {
- return reduced.rawPow(exp);
- }
- }
-
- public static BoundedRational pow(BoundedRational base, BoundedRational exp) {
- if (exp == null) {
- return null;
- }
- if (base == null) {
- return null;
- }
- exp = exp.reduce().positiveDen();
- if (!exp.mDen.equals(BigInteger.ONE)) {
- return null;
- }
- return base.pow(exp.mNum);
- }
-
-
- private static final BigInteger BIG_FIVE = BigInteger.valueOf(5);
-
- /**
- * Return the number of decimal digits to the right of the decimal point required to represent
- * the argument exactly.
- * Return Integer.MAX_VALUE if that's not possible. Never returns a value less than zero, even
- * if r is a power of ten.
- */
- public static int digitsRequired(BoundedRational r) {
- if (r == null) {
- return Integer.MAX_VALUE;
- }
- int powersOfTwo = 0; // Max power of 2 that divides denominator
- int powersOfFive = 0; // Max power of 5 that divides denominator
- // Try the easy case first to speed things up.
- if (r.mDen.equals(BigInteger.ONE)) {
- return 0;
- }
- r = r.reduce();
- BigInteger den = r.mDen;
- if (den.bitLength() > MAX_SIZE) {
- return Integer.MAX_VALUE;
- }
- while (!den.testBit(0)) {
- ++powersOfTwo;
- den = den.shiftRight(1);
- }
- while (den.mod(BIG_FIVE).signum() == 0) {
- ++powersOfFive;
- den = den.divide(BIG_FIVE);
- }
- // If the denominator has a factor of other than 2 or 5 (the divisors of 10), the decimal
- // expansion does not terminate. Multiplying the fraction by any number of powers of 10
- // will not cancel the demoniator. (Recall the fraction was in lowest terms to start
- // with.) Otherwise the powers of 10 we need to cancel the denominator is the larger of
- // powersOfTwo and powersOfFive.
- if (!den.equals(BigInteger.ONE) && !den.equals(BIG_MINUS_ONE)) {
- return Integer.MAX_VALUE;
- }
- return Math.max(powersOfTwo, powersOfFive);
- }
-}
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
deleted file mode 100644
index 81ab1f6..0000000
--- a/src/com/android/calculator2/Calculator.java
+++ /dev/null
@@ -1,1538 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-// TODO: Copy & more general paste in formula? Note that this requires
-// great care: Currently the text version of a displayed formula
-// is not directly useful for re-evaluating the formula later, since
-// it contains ellipses representing subexpressions evaluated with
-// a different degree mode. Rather than supporting copy from the
-// formula window, we may eventually want to support generation of a
-// more useful text version in a separate window. It's not clear
-// this is worth the added (code and user) complexity.
-
-package com.android.calculator2;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.ClipData;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.annotation.StringRes;
-import androidx.core.content.ContextCompat;
-import androidx.viewpager.widget.ViewPager;
-import android.text.Editable;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.text.style.ForegroundColorSpan;
-import android.util.Log;
-import android.util.Property;
-import android.view.ActionMode;
-import android.view.KeyCharacterMap;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnLongClickListener;
-import android.view.ViewAnimationUtils;
-import android.view.ViewGroupOverlay;
-import android.view.ViewTreeObserver;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import android.widget.HorizontalScrollView;
-import android.widget.TextView;
-import android.widget.Toolbar;
-
-import com.android.calculator2.CalculatorFormula.OnTextSizeChangeListener;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.text.DecimalFormatSymbols;
-
-import static com.android.calculator2.CalculatorFormula.OnFormulaContextMenuClickListener;
-
-public class Calculator extends Activity
- implements OnTextSizeChangeListener, OnLongClickListener,
- AlertDialogFragment.OnClickListener, Evaluator.EvaluationListener /* for main result */,
- DragLayout.CloseCallback, DragLayout.DragCallback {
-
- private static final String TAG = "Calculator";
- /**
- * Constant for an invalid resource id.
- */
- public static final int INVALID_RES_ID = -1;
-
- private enum CalculatorState {
- INPUT, // Result and formula both visible, no evaluation requested,
- // Though result may be visible on bottom line.
- EVALUATE, // Both visible, evaluation requested, evaluation/animation incomplete.
- // Not used for instant result evaluation.
- INIT, // Very temporary state used as alternative to EVALUATE
- // during reinitialization. Do not animate on completion.
- INIT_FOR_RESULT, // Identical to INIT, but evaluation is known to terminate
- // with result, and current expression has been copied to history.
- ANIMATE, // Result computed, animation to enlarge result window in progress.
- RESULT, // Result displayed, formula invisible.
- // If we are in RESULT state, the formula was evaluated without
- // error to initial precision.
- // The current formula is now also the last history entry.
- ERROR // Error displayed: Formula visible, result shows error message.
- // Display similar to INPUT state.
- }
- // Normal transition sequence is
- // INPUT -> EVALUATE -> ANIMATE -> RESULT (or ERROR) -> INPUT
- // A RESULT -> ERROR transition is possible in rare corner cases, in which
- // a higher precision evaluation exposes an error. This is possible, since we
- // initially evaluate assuming we were given a well-defined problem. If we
- // were actually asked to compute sqrt(<extremely tiny negative number>) we produce 0
- // unless we are asked for enough precision that we can distinguish the argument from zero.
- // ERROR and RESULT are translated to INIT or INIT_FOR_RESULT state if the application
- // is restarted in that state. This leads us to recompute and redisplay the result
- // ASAP. We avoid saving the ANIMATE state or activating history in that state.
- // In INIT_FOR_RESULT, and RESULT state, a copy of the current
- // expression has been saved in the history db; in the other non-ANIMATE states,
- // it has not.
- // TODO: Possibly save a bit more information, e.g. its initial display string
- // or most significant digit position, to speed up restart.
-
- private final Property<TextView, Integer> TEXT_COLOR =
- new Property<TextView, Integer>(Integer.class, "textColor") {
- @Override
- public Integer get(TextView textView) {
- return textView.getCurrentTextColor();
- }
-
- @Override
- public void set(TextView textView, Integer textColor) {
- textView.setTextColor(textColor);
- }
- };
-
- private static final String NAME = "Calculator";
- private static final String KEY_DISPLAY_STATE = NAME + "_display_state";
- private static final String KEY_UNPROCESSED_CHARS = NAME + "_unprocessed_chars";
- /**
- * Associated value is a byte array holding the evaluator state.
- */
- private static final String KEY_EVAL_STATE = NAME + "_eval_state";
- private static final String KEY_INVERSE_MODE = NAME + "_inverse_mode";
- /**
- * Associated value is an boolean holding the visibility state of the toolbar.
- */
- private static final String KEY_SHOW_TOOLBAR = NAME + "_show_toolbar";
-
- private final ViewTreeObserver.OnPreDrawListener mPreDrawListener =
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- mFormulaContainer.scrollTo(mFormulaText.getRight(), 0);
- final ViewTreeObserver observer = mFormulaContainer.getViewTreeObserver();
- if (observer.isAlive()) {
- observer.removeOnPreDrawListener(this);
- }
- return false;
- }
- };
-
- private final Evaluator.Callback mEvaluatorCallback = new Evaluator.Callback() {
- @Override
- public void onMemoryStateChanged() {
- mFormulaText.onMemoryStateChanged();
- }
-
- @Override
- public void showMessageDialog(@StringRes int title, @StringRes int message,
- @StringRes int positiveButtonLabel, String tag) {
- AlertDialogFragment.showMessageDialog(Calculator.this, title, message,
- positiveButtonLabel, tag);
-
- }
- };
-
- private final OnDisplayMemoryOperationsListener mOnDisplayMemoryOperationsListener =
- new OnDisplayMemoryOperationsListener() {
- @Override
- public boolean shouldDisplayMemory() {
- return mEvaluator.getMemoryIndex() != 0;
- }
- };
-
- private final OnFormulaContextMenuClickListener mOnFormulaContextMenuClickListener =
- new OnFormulaContextMenuClickListener() {
- @Override
- public boolean onPaste(ClipData clip) {
- final ClipData.Item item = clip.getItemCount() == 0 ? null : clip.getItemAt(0);
- if (item == null) {
- // nothing to paste, bail early...
- return false;
- }
-
- // Check if the item is a previously copied result, otherwise paste as raw text.
- final Uri uri = item.getUri();
- if (uri != null && mEvaluator.isLastSaved(uri)) {
- clearIfNotInputState();
- mEvaluator.appendExpr(mEvaluator.getSavedIndex());
- redisplayAfterFormulaChange();
- } else {
- addChars(item.coerceToText(Calculator.this).toString(), false);
- }
- return true;
- }
-
- @Override
- public void onMemoryRecall() {
- clearIfNotInputState();
- long memoryIndex = mEvaluator.getMemoryIndex();
- if (memoryIndex != 0) {
- mEvaluator.appendExpr(mEvaluator.getMemoryIndex());
- redisplayAfterFormulaChange();
- }
- }
- };
-
-
- private final TextWatcher mFormulaTextWatcher = new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
- }
-
- @Override
- public void onTextChanged(CharSequence charSequence, int start, int count, int after) {
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
- final ViewTreeObserver observer = mFormulaContainer.getViewTreeObserver();
- if (observer.isAlive()) {
- observer.removeOnPreDrawListener(mPreDrawListener);
- observer.addOnPreDrawListener(mPreDrawListener);
- }
- }
- };
-
- private CalculatorState mCurrentState;
- private Evaluator mEvaluator;
-
- private CalculatorDisplay mDisplayView;
- private TextView mModeView;
- private CalculatorFormula mFormulaText;
- private CalculatorResult mResultText;
- private HorizontalScrollView mFormulaContainer;
- private DragLayout mDragLayout;
-
- private ViewPager mPadViewPager;
- private View mDeleteButton;
- private View mClearButton;
- private View mEqualButton;
- private View mMainCalculator;
-
- private TextView mInverseToggle;
- private TextView mModeToggle;
-
- private View[] mInvertibleButtons;
- private View[] mInverseButtons;
-
- private View mCurrentButton;
- private Animator mCurrentAnimator;
-
- // Characters that were recently entered at the end of the display that have not yet
- // been added to the underlying expression.
- private String mUnprocessedChars = null;
-
- // Color to highlight unprocessed characters from physical keyboard.
- // TODO: should probably match this to the error color?
- private ForegroundColorSpan mUnprocessedColorSpan = new ForegroundColorSpan(Color.RED);
-
- // Whether the display is one line.
- private boolean mIsOneLine;
-
- /**
- * Map the old saved state to a new state reflecting requested result reevaluation.
- */
- private CalculatorState mapFromSaved(CalculatorState savedState) {
- switch (savedState) {
- case RESULT:
- case INIT_FOR_RESULT:
- // Evaluation is expected to terminate normally.
- return CalculatorState.INIT_FOR_RESULT;
- case ERROR:
- case INIT:
- return CalculatorState.INIT;
- case EVALUATE:
- case INPUT:
- return savedState;
- default: // Includes ANIMATE state.
- throw new AssertionError("Impossible saved state");
- }
- }
-
- /**
- * Restore Evaluator state and mCurrentState from savedInstanceState.
- * Return true if the toolbar should be visible.
- */
- private void restoreInstanceState(Bundle savedInstanceState) {
- final CalculatorState savedState = CalculatorState.values()[
- savedInstanceState.getInt(KEY_DISPLAY_STATE,
- CalculatorState.INPUT.ordinal())];
- setState(savedState);
- CharSequence unprocessed = savedInstanceState.getCharSequence(KEY_UNPROCESSED_CHARS);
- if (unprocessed != null) {
- mUnprocessedChars = unprocessed.toString();
- }
- byte[] state = savedInstanceState.getByteArray(KEY_EVAL_STATE);
- if (state != null) {
- try (ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(state))) {
- mEvaluator.restoreInstanceState(in);
- } catch (Throwable ignored) {
- // When in doubt, revert to clean state
- mCurrentState = CalculatorState.INPUT;
- mEvaluator.clearMain();
- }
- }
- if (savedInstanceState.getBoolean(KEY_SHOW_TOOLBAR, true)) {
- showAndMaybeHideToolbar();
- } else {
- mDisplayView.hideToolbar();
- }
- onInverseToggled(savedInstanceState.getBoolean(KEY_INVERSE_MODE));
- // TODO: We're currently not saving and restoring scroll position.
- // We probably should. Details may require care to deal with:
- // - new display size
- // - slow recomputation if we've scrolled far.
- }
-
- private void restoreDisplay() {
- onModeChanged(mEvaluator.getDegreeMode(Evaluator.MAIN_INDEX));
- if (mCurrentState != CalculatorState.RESULT
- && mCurrentState != CalculatorState.INIT_FOR_RESULT) {
- redisplayFormula();
- }
- if (mCurrentState == CalculatorState.INPUT) {
- // This resultText will explicitly call evaluateAndNotify when ready.
- mResultText.setShouldEvaluateResult(CalculatorResult.SHOULD_EVALUATE, this);
- } else {
- // Just reevaluate.
- setState(mapFromSaved(mCurrentState));
- // Request evaluation when we know display width.
- mResultText.setShouldEvaluateResult(CalculatorResult.SHOULD_REQUIRE, this);
- }
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.activity_calculator_main);
- setActionBar((Toolbar) findViewById(R.id.toolbar));
-
- // Hide all default options in the ActionBar.
- getActionBar().setDisplayOptions(0);
-
- // Ensure the toolbar stays visible while the options menu is displayed.
- getActionBar().addOnMenuVisibilityListener(new ActionBar.OnMenuVisibilityListener() {
- @Override
- public void onMenuVisibilityChanged(boolean isVisible) {
- mDisplayView.setForceToolbarVisible(isVisible);
- }
- });
-
- mMainCalculator = findViewById(R.id.main_calculator);
- mDisplayView = (CalculatorDisplay) findViewById(R.id.display);
- mModeView = (TextView) findViewById(R.id.mode);
- mFormulaText = (CalculatorFormula) findViewById(R.id.formula);
- mResultText = (CalculatorResult) findViewById(R.id.result);
- mFormulaContainer = (HorizontalScrollView) findViewById(R.id.formula_container);
- mEvaluator = Evaluator.getInstance(this);
- mEvaluator.setCallback(mEvaluatorCallback);
- mResultText.setEvaluator(mEvaluator, Evaluator.MAIN_INDEX);
- KeyMaps.setActivity(this);
-
- mPadViewPager = (ViewPager) findViewById(R.id.pad_pager);
- mDeleteButton = findViewById(R.id.del);
- mClearButton = findViewById(R.id.clr);
- final View numberPad = findViewById(R.id.pad_numeric);
- mEqualButton = numberPad.findViewById(R.id.eq);
- if (mEqualButton == null || mEqualButton.getVisibility() != View.VISIBLE) {
- mEqualButton = findViewById(R.id.pad_operator).findViewById(R.id.eq);
- }
- final TextView decimalPointButton = (TextView) numberPad.findViewById(R.id.dec_point);
- decimalPointButton.setText(getDecimalSeparator());
-
- mInverseToggle = (TextView) findViewById(R.id.toggle_inv);
- mModeToggle = (TextView) findViewById(R.id.toggle_mode);
-
- mIsOneLine = mResultText.getVisibility() == View.INVISIBLE;
-
- mInvertibleButtons = new View[] {
- findViewById(R.id.fun_sin),
- findViewById(R.id.fun_cos),
- findViewById(R.id.fun_tan),
- findViewById(R.id.fun_ln),
- findViewById(R.id.fun_log),
- findViewById(R.id.op_sqrt)
- };
- mInverseButtons = new View[] {
- findViewById(R.id.fun_arcsin),
- findViewById(R.id.fun_arccos),
- findViewById(R.id.fun_arctan),
- findViewById(R.id.fun_exp),
- findViewById(R.id.fun_10pow),
- findViewById(R.id.op_sqr)
- };
-
- mDragLayout = (DragLayout) findViewById(R.id.drag_layout);
- mDragLayout.removeDragCallback(this);
- mDragLayout.addDragCallback(this);
- mDragLayout.setCloseCallback(this);
-
- mFormulaText.setOnContextMenuClickListener(mOnFormulaContextMenuClickListener);
- mFormulaText.setOnDisplayMemoryOperationsListener(mOnDisplayMemoryOperationsListener);
-
- mFormulaText.setOnTextSizeChangeListener(this);
- mFormulaText.addTextChangedListener(mFormulaTextWatcher);
- mDeleteButton.setOnLongClickListener(this);
-
- if (savedInstanceState != null) {
- restoreInstanceState(savedInstanceState);
- } else {
- mCurrentState = CalculatorState.INPUT;
- mEvaluator.clearMain();
- showAndMaybeHideToolbar();
- onInverseToggled(false);
- }
- restoreDisplay();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- if (mDisplayView.isToolbarVisible()) {
- showAndMaybeHideToolbar();
- }
- // If HistoryFragment is showing, hide the main Calculator elements from accessibility.
- // This is because Talkback does not use visibility as a cue for RelativeLayout elements,
- // and RelativeLayout is the base class of DragLayout.
- // If we did not do this, it would be possible to traverse to main Calculator elements from
- // HistoryFragment.
- mMainCalculator.setImportantForAccessibility(
- mDragLayout.isOpen() ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
- : View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
- }
-
- @Override
- protected void onSaveInstanceState(@NonNull Bundle outState) {
- mEvaluator.cancelAll(true);
- // If there's an animation in progress, cancel it first to ensure our state is up-to-date.
- if (mCurrentAnimator != null) {
- mCurrentAnimator.cancel();
- }
-
- super.onSaveInstanceState(outState);
- outState.putInt(KEY_DISPLAY_STATE, mCurrentState.ordinal());
- outState.putCharSequence(KEY_UNPROCESSED_CHARS, mUnprocessedChars);
- ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
- try (ObjectOutput out = new ObjectOutputStream(byteArrayStream)) {
- mEvaluator.saveInstanceState(out);
- } catch (IOException e) {
- // Impossible; No IO involved.
- throw new AssertionError("Impossible IO exception", e);
- }
- outState.putByteArray(KEY_EVAL_STATE, byteArrayStream.toByteArray());
- outState.putBoolean(KEY_INVERSE_MODE, mInverseToggle.isSelected());
- outState.putBoolean(KEY_SHOW_TOOLBAR, mDisplayView.isToolbarVisible());
- // We must wait for asynchronous writes to complete, since outState may contain
- // references to expressions being written.
- mEvaluator.waitForWrites();
- }
-
- // Set the state, updating delete label and display colors.
- // This restores display positions on moving to INPUT.
- // But movement/animation for moving to RESULT has already been done.
- private void setState(CalculatorState state) {
- if (mCurrentState != state) {
- if (state == CalculatorState.INPUT) {
- // We'll explicitly request evaluation from now on.
- mResultText.setShouldEvaluateResult(CalculatorResult.SHOULD_NOT_EVALUATE, null);
- restoreDisplayPositions();
- }
- mCurrentState = state;
-
- if (mCurrentState == CalculatorState.RESULT) {
- // No longer do this for ERROR; allow mistakes to be corrected.
- mDeleteButton.setVisibility(View.GONE);
- mClearButton.setVisibility(View.VISIBLE);
- } else {
- mDeleteButton.setVisibility(View.VISIBLE);
- mClearButton.setVisibility(View.GONE);
- }
-
- if (mIsOneLine) {
- if (mCurrentState == CalculatorState.RESULT
- || mCurrentState == CalculatorState.EVALUATE
- || mCurrentState == CalculatorState.ANIMATE) {
- mFormulaText.setVisibility(View.VISIBLE);
- mResultText.setVisibility(View.VISIBLE);
- } else if (mCurrentState == CalculatorState.ERROR) {
- mFormulaText.setVisibility(View.INVISIBLE);
- mResultText.setVisibility(View.VISIBLE);
- } else {
- mFormulaText.setVisibility(View.VISIBLE);
- mResultText.setVisibility(View.INVISIBLE);
- }
- }
-
- if (mCurrentState == CalculatorState.ERROR) {
- final int errorColor =
- ContextCompat.getColor(this, R.color.calculator_error_color);
- mFormulaText.setTextColor(errorColor);
- mResultText.setTextColor(errorColor);
- getWindow().setStatusBarColor(errorColor);
- } else if (mCurrentState != CalculatorState.RESULT) {
- mFormulaText.setTextColor(
- ContextCompat.getColor(this, R.color.display_formula_text_color));
- mResultText.setTextColor(
- ContextCompat.getColor(this, R.color.display_result_text_color));
- getWindow().setStatusBarColor(
- ContextCompat.getColor(this, R.color.calculator_statusbar_color));
- }
-
- invalidateOptionsMenu();
- }
- }
-
- public boolean isResultLayout() {
- // Note that ERROR has INPUT, not RESULT layout.
- return mCurrentState == CalculatorState.INIT_FOR_RESULT
- || mCurrentState == CalculatorState.RESULT;
- }
-
- public boolean isOneLine() {
- return mIsOneLine;
- }
-
- @Override
- protected void onDestroy() {
- mDragLayout.removeDragCallback(this);
- super.onDestroy();
- }
-
- /**
- * Destroy the evaluator and close the underlying database.
- */
- public void destroyEvaluator() {
- mEvaluator.destroyEvaluator();
- }
-
- @Override
- public void onActionModeStarted(ActionMode mode) {
- super.onActionModeStarted(mode);
- if (mode.getTag() == CalculatorFormula.TAG_ACTION_MODE) {
- mFormulaContainer.scrollTo(mFormulaText.getRight(), 0);
- }
- }
-
- /**
- * Stop any active ActionMode or ContextMenu for copy/paste actions.
- * Return true if there was one.
- */
- private boolean stopActionModeOrContextMenu() {
- return mResultText.stopActionModeOrContextMenu()
- || mFormulaText.stopActionModeOrContextMenu();
- }
-
- @Override
- public void onUserInteraction() {
- super.onUserInteraction();
-
- // If there's an animation in progress, end it immediately, so the user interaction can
- // be handled.
- if (mCurrentAnimator != null) {
- mCurrentAnimator.end();
- }
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent e) {
- if (e.getActionMasked() == MotionEvent.ACTION_DOWN) {
- stopActionModeOrContextMenu();
-
- final HistoryFragment historyFragment = getHistoryFragment();
- if (mDragLayout.isOpen() && historyFragment != null) {
- historyFragment.stopActionModeOrContextMenu();
- }
- }
- return super.dispatchTouchEvent(e);
- }
-
- @Override
- public void onBackPressed() {
- if (!stopActionModeOrContextMenu()) {
- final HistoryFragment historyFragment = getHistoryFragment();
- if (mDragLayout.isOpen() && historyFragment != null) {
- if (!historyFragment.stopActionModeOrContextMenu()) {
- removeHistoryFragment();
- }
- return;
- }
- if (mPadViewPager != null && mPadViewPager.getCurrentItem() != 0) {
- // Select the previous pad.
- mPadViewPager.setCurrentItem(mPadViewPager.getCurrentItem() - 1);
- } else {
- // If the user is currently looking at the first pad (or the pad is not paged),
- // allow the system to handle the Back button.
- super.onBackPressed();
- }
- }
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- // Allow the system to handle special key codes (e.g. "BACK" or "DPAD").
- switch (keyCode) {
- case KeyEvent.KEYCODE_BACK:
- case KeyEvent.KEYCODE_ESCAPE:
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- return super.onKeyUp(keyCode, event);
- }
-
- // Stop the action mode or context menu if it's showing.
- stopActionModeOrContextMenu();
-
- // Always cancel unrequested in-progress evaluation of the main expression, so that
- // we don't have to worry about subsequent asynchronous completion.
- // Requested in-progress evaluations are handled below.
- cancelUnrequested();
-
- switch (keyCode) {
- case KeyEvent.KEYCODE_NUMPAD_ENTER:
- case KeyEvent.KEYCODE_ENTER:
- case KeyEvent.KEYCODE_DPAD_CENTER:
- mCurrentButton = mEqualButton;
- onEquals();
- return true;
- case KeyEvent.KEYCODE_DEL:
- mCurrentButton = mDeleteButton;
- onDelete();
- return true;
- case KeyEvent.KEYCODE_CLEAR:
- mCurrentButton = mClearButton;
- onClear();
- return true;
- default:
- cancelIfEvaluating(false);
- final int raw = event.getKeyCharacterMap().get(keyCode, event.getMetaState());
- if ((raw & KeyCharacterMap.COMBINING_ACCENT) != 0) {
- return true; // discard
- }
- // Try to discard non-printing characters and the like.
- // The user will have to explicitly delete other junk that gets past us.
- if (Character.isIdentifierIgnorable(raw) || Character.isWhitespace(raw)) {
- return true;
- }
- char c = (char) raw;
- if (c == '=') {
- mCurrentButton = mEqualButton;
- onEquals();
- } else {
- addChars(String.valueOf(c), true);
- redisplayAfterFormulaChange();
- }
- return true;
- }
- }
-
- /**
- * Invoked whenever the inverse button is toggled to update the UI.
- *
- * @param showInverse {@code true} if inverse functions should be shown
- */
- private void onInverseToggled(boolean showInverse) {
- mInverseToggle.setSelected(showInverse);
- if (showInverse) {
- mInverseToggle.setContentDescription(getString(R.string.desc_inv_on));
- for (View invertibleButton : mInvertibleButtons) {
- invertibleButton.setVisibility(View.GONE);
- }
- for (View inverseButton : mInverseButtons) {
- inverseButton.setVisibility(View.VISIBLE);
- }
- } else {
- mInverseToggle.setContentDescription(getString(R.string.desc_inv_off));
- for (View invertibleButton : mInvertibleButtons) {
- invertibleButton.setVisibility(View.VISIBLE);
- }
- for (View inverseButton : mInverseButtons) {
- inverseButton.setVisibility(View.GONE);
- }
- }
- }
-
- /**
- * Invoked whenever the deg/rad mode may have changed to update the UI. Note that the mode has
- * not necessarily actually changed where this is invoked.
- *
- * @param degreeMode {@code true} if in degree mode
- */
- private void onModeChanged(boolean degreeMode) {
- if (degreeMode) {
- mModeView.setText(R.string.mode_deg);
- mModeView.setContentDescription(getString(R.string.desc_mode_deg));
-
- mModeToggle.setText(R.string.mode_rad);
- mModeToggle.setContentDescription(getString(R.string.desc_switch_rad));
- } else {
- mModeView.setText(R.string.mode_rad);
- mModeView.setContentDescription(getString(R.string.desc_mode_rad));
-
- mModeToggle.setText(R.string.mode_deg);
- mModeToggle.setContentDescription(getString(R.string.desc_switch_deg));
- }
- }
-
- private void removeHistoryFragment() {
- final FragmentManager manager = getFragmentManager();
- if (manager != null && !manager.isDestroyed()) {
- manager.popBackStack(HistoryFragment.TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE);
- }
-
- // When HistoryFragment is hidden, the main Calculator is important for accessibility again.
- mMainCalculator.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
- }
-
- /**
- * Switch to INPUT from RESULT state in response to input of the specified button_id.
- * View.NO_ID is treated as an incomplete function id.
- */
- private void switchToInput(int button_id) {
- if (KeyMaps.isBinary(button_id) || KeyMaps.isSuffix(button_id)) {
- mEvaluator.collapse(mEvaluator.getMaxIndex() /* Most recent history entry */);
- } else {
- announceClearedForAccessibility();
- mEvaluator.clearMain();
- }
- setState(CalculatorState.INPUT);
- }
-
- // Add the given button id to input expression.
- // If appropriate, clear the expression before doing so.
- private void addKeyToExpr(int id) {
- if (mCurrentState == CalculatorState.ERROR) {
- setState(CalculatorState.INPUT);
- } else if (mCurrentState == CalculatorState.RESULT) {
- switchToInput(id);
- }
- if (!mEvaluator.append(id)) {
- // TODO: Some user visible feedback?
- }
- }
-
- /**
- * Add the given button id to input expression, assuming it was explicitly
- * typed/touched.
- * We perform slightly more aggressive correction than in pasted expressions.
- */
- private void addExplicitKeyToExpr(int id) {
- if (mCurrentState == CalculatorState.INPUT && id == R.id.op_sub) {
- mEvaluator.getExpr(Evaluator.MAIN_INDEX).removeTrailingAdditiveOperators();
- }
- addKeyToExpr(id);
- }
-
- public void evaluateInstantIfNecessary() {
- if (mCurrentState == CalculatorState.INPUT
- && mEvaluator.getExpr(Evaluator.MAIN_INDEX).hasInterestingOps()) {
- mEvaluator.evaluateAndNotify(Evaluator.MAIN_INDEX, this, mResultText);
- }
- }
-
- private void redisplayAfterFormulaChange() {
- // TODO: Could do this more incrementally.
- redisplayFormula();
- setState(CalculatorState.INPUT);
- mResultText.clear();
- if (haveUnprocessed()) {
- // Force reevaluation when text is deleted, even if expression is unchanged.
- mEvaluator.touch();
- } else {
- evaluateInstantIfNecessary();
- }
- }
-
- /**
- * Show the toolbar.
- * Automatically hide it again if it's not relevant to current formula.
- */
- private void showAndMaybeHideToolbar() {
- final boolean shouldBeVisible =
- mCurrentState == CalculatorState.INPUT && mEvaluator.hasTrigFuncs();
- mDisplayView.showToolbar(!shouldBeVisible);
- }
-
- /**
- * Display or hide the toolbar depending on calculator state.
- */
- private void showOrHideToolbar() {
- final boolean shouldBeVisible =
- mCurrentState == CalculatorState.INPUT && mEvaluator.hasTrigFuncs();
- if (shouldBeVisible) {
- mDisplayView.showToolbar(false);
- } else {
- mDisplayView.hideToolbar();
- }
- }
-
- public void onButtonClick(View view) {
- // Any animation is ended before we get here.
- mCurrentButton = view;
- stopActionModeOrContextMenu();
-
- // See onKey above for the rationale behind some of the behavior below:
- cancelUnrequested();
-
- final int id = view.getId();
- switch (id) {
- case R.id.eq:
- onEquals();
- break;
- case R.id.del:
- onDelete();
- break;
- case R.id.clr:
- onClear();
- return; // Toolbar visibility adjusted at end of animation.
- case R.id.toggle_inv:
- final boolean selected = !mInverseToggle.isSelected();
- mInverseToggle.setSelected(selected);
- onInverseToggled(selected);
- if (mCurrentState == CalculatorState.RESULT) {
- mResultText.redisplay(); // In case we cancelled reevaluation.
- }
- break;
- case R.id.toggle_mode:
- cancelIfEvaluating(false);
- final boolean mode = !mEvaluator.getDegreeMode(Evaluator.MAIN_INDEX);
- if (mCurrentState == CalculatorState.RESULT
- && mEvaluator.getExpr(Evaluator.MAIN_INDEX).hasTrigFuncs()) {
- // Capture current result evaluated in old mode.
- mEvaluator.collapse(mEvaluator.getMaxIndex());
- redisplayFormula();
- }
- // In input mode, we reinterpret already entered trig functions.
- mEvaluator.setDegreeMode(mode);
- onModeChanged(mode);
- // Show the toolbar to highlight the mode change.
- showAndMaybeHideToolbar();
- setState(CalculatorState.INPUT);
- mResultText.clear();
- if (!haveUnprocessed()) {
- evaluateInstantIfNecessary();
- }
- return;
- default:
- cancelIfEvaluating(false);
- if (haveUnprocessed()) {
- // For consistency, append as uninterpreted characters.
- // This may actually be useful for a left parenthesis.
- addChars(KeyMaps.toString(this, id), true);
- } else {
- addExplicitKeyToExpr(id);
- redisplayAfterFormulaChange();
- }
- break;
- }
- showOrHideToolbar();
- }
-
- void redisplayFormula() {
- SpannableStringBuilder formula
- = mEvaluator.getExpr(Evaluator.MAIN_INDEX).toSpannableStringBuilder(this);
- if (mUnprocessedChars != null) {
- // Add and highlight characters we couldn't process.
- formula.append(mUnprocessedChars, mUnprocessedColorSpan,
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- mFormulaText.changeTextTo(formula);
- mFormulaText.setContentDescription(TextUtils.isEmpty(formula)
- ? getString(R.string.desc_formula) : null);
- }
-
- @Override
- public boolean onLongClick(View view) {
- mCurrentButton = view;
-
- if (view.getId() == R.id.del) {
- onClear();
- return true;
- }
- return false;
- }
-
- // Initial evaluation completed successfully. Initiate display.
- public void onEvaluate(long index, int initDisplayPrec, int msd, int leastDigPos,
- String truncatedWholeNumber) {
- if (index != Evaluator.MAIN_INDEX) {
- throw new AssertionError("Unexpected evaluation result index\n");
- }
-
- // Invalidate any options that may depend on the current result.
- invalidateOptionsMenu();
-
- mResultText.onEvaluate(index, initDisplayPrec, msd, leastDigPos, truncatedWholeNumber);
- if (mCurrentState != CalculatorState.INPUT) {
- // In EVALUATE, INIT, RESULT, or INIT_FOR_RESULT state.
- onResult(mCurrentState == CalculatorState.EVALUATE /* animate */,
- mCurrentState == CalculatorState.INIT_FOR_RESULT
- || mCurrentState == CalculatorState.RESULT /* previously preserved */);
- }
- }
-
- // Reset state to reflect evaluator cancellation. Invoked by evaluator.
- public void onCancelled(long index) {
- // Index is Evaluator.MAIN_INDEX. We should be in EVALUATE state.
- setState(CalculatorState.INPUT);
- mResultText.onCancelled(index);
- }
-
- // Reevaluation completed; ask result to redisplay current value.
- public void onReevaluate(long index) {
- // Index is Evaluator.MAIN_INDEX.
- mResultText.onReevaluate(index);
- }
-
- @Override
- public void onTextSizeChanged(final TextView textView, float oldSize) {
- if (mCurrentState != CalculatorState.INPUT) {
- // Only animate text changes that occur from user input.
- return;
- }
-
- // Calculate the values needed to perform the scale and translation animations,
- // maintaining the same apparent baseline for the displayed text.
- final float textScale = oldSize / textView.getTextSize();
- final float translationX = (1.0f - textScale) *
- (textView.getWidth() / 2.0f - textView.getPaddingEnd());
- final float translationY = (1.0f - textScale) *
- (textView.getHeight() / 2.0f - textView.getPaddingBottom());
-
- final AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.playTogether(
- ObjectAnimator.ofFloat(textView, View.SCALE_X, textScale, 1.0f),
- ObjectAnimator.ofFloat(textView, View.SCALE_Y, textScale, 1.0f),
- ObjectAnimator.ofFloat(textView, View.TRANSLATION_X, translationX, 0.0f),
- ObjectAnimator.ofFloat(textView, View.TRANSLATION_Y, translationY, 0.0f));
- animatorSet.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime));
- animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
- animatorSet.start();
- }
-
- /**
- * Cancel any in-progress explicitly requested evaluations.
- * @param quiet suppress pop-up message. Explicit evaluation can change the expression
- value, and certainly changes the display, so it seems reasonable to warn.
- * @return true if there was such an evaluation
- */
- private boolean cancelIfEvaluating(boolean quiet) {
- if (mCurrentState == CalculatorState.EVALUATE) {
- mEvaluator.cancel(Evaluator.MAIN_INDEX, quiet);
- return true;
- } else {
- return false;
- }
- }
-
-
- private void cancelUnrequested() {
- if (mCurrentState == CalculatorState.INPUT) {
- mEvaluator.cancel(Evaluator.MAIN_INDEX, true);
- }
- }
-
- private boolean haveUnprocessed() {
- return mUnprocessedChars != null && !mUnprocessedChars.isEmpty();
- }
-
- private void onEquals() {
- // Ignore if in non-INPUT state, or if there are no operators.
- if (mCurrentState == CalculatorState.INPUT) {
- if (haveUnprocessed()) {
- setState(CalculatorState.EVALUATE);
- onError(Evaluator.MAIN_INDEX, R.string.error_syntax);
- } else if (mEvaluator.getExpr(Evaluator.MAIN_INDEX).hasInterestingOps()) {
- setState(CalculatorState.EVALUATE);
- mEvaluator.requireResult(Evaluator.MAIN_INDEX, this, mResultText);
- }
- }
- }
-
- private void onDelete() {
- // Delete works like backspace; remove the last character or operator from the expression.
- // Note that we handle keyboard delete exactly like the delete button. For
- // example the delete button can be used to delete a character from an incomplete
- // function name typed on a physical keyboard.
- // This should be impossible in RESULT state.
- // If there is an in-progress explicit evaluation, just cancel it and return.
- if (cancelIfEvaluating(false)) return;
- setState(CalculatorState.INPUT);
- if (haveUnprocessed()) {
- mUnprocessedChars = mUnprocessedChars.substring(0, mUnprocessedChars.length() - 1);
- } else {
- mEvaluator.delete();
- }
- if (mEvaluator.getExpr(Evaluator.MAIN_INDEX).isEmpty() && !haveUnprocessed()) {
- // Resulting formula won't be announced, since it's empty.
- announceClearedForAccessibility();
- }
- redisplayAfterFormulaChange();
- }
-
- private void reveal(View sourceView, int colorRes, AnimatorListener listener) {
- final ViewGroupOverlay groupOverlay =
- (ViewGroupOverlay) getWindow().getDecorView().getOverlay();
-
- final Rect displayRect = new Rect();
- mDisplayView.getGlobalVisibleRect(displayRect);
-
- // Make reveal cover the display and status bar.
- final View revealView = new View(this);
- revealView.setBottom(displayRect.bottom);
- revealView.setLeft(displayRect.left);
- revealView.setRight(displayRect.right);
- revealView.setBackgroundColor(ContextCompat.getColor(this, colorRes));
- groupOverlay.add(revealView);
-
- final int[] clearLocation = new int[2];
- sourceView.getLocationInWindow(clearLocation);
- clearLocation[0] += sourceView.getWidth() / 2;
- clearLocation[1] += sourceView.getHeight() / 2;
-
- final int revealCenterX = clearLocation[0] - revealView.getLeft();
- final int revealCenterY = clearLocation[1] - revealView.getTop();
-
- final double x1_2 = Math.pow(revealView.getLeft() - revealCenterX, 2);
- final double x2_2 = Math.pow(revealView.getRight() - revealCenterX, 2);
- final double y_2 = Math.pow(revealView.getTop() - revealCenterY, 2);
- final float revealRadius = (float) Math.max(Math.sqrt(x1_2 + y_2), Math.sqrt(x2_2 + y_2));
-
- final Animator revealAnimator =
- ViewAnimationUtils.createCircularReveal(revealView,
- revealCenterX, revealCenterY, 0.0f, revealRadius);
- revealAnimator.setDuration(
- getResources().getInteger(android.R.integer.config_longAnimTime));
- revealAnimator.addListener(listener);
-
- final Animator alphaAnimator = ObjectAnimator.ofFloat(revealView, View.ALPHA, 0.0f);
- alphaAnimator.setDuration(
- getResources().getInteger(android.R.integer.config_mediumAnimTime));
-
- final AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.play(revealAnimator).before(alphaAnimator);
- animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
- animatorSet.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animator) {
- groupOverlay.remove(revealView);
- mCurrentAnimator = null;
- }
- });
-
- mCurrentAnimator = animatorSet;
- animatorSet.start();
- }
-
- private void announceClearedForAccessibility() {
- mResultText.announceForAccessibility(getResources().getString(R.string.cleared));
- }
-
- public void onClearAnimationEnd() {
- mUnprocessedChars = null;
- mResultText.clear();
- mEvaluator.clearMain();
- setState(CalculatorState.INPUT);
- redisplayFormula();
- }
-
- private void onClear() {
- if (mEvaluator.getExpr(Evaluator.MAIN_INDEX).isEmpty() && !haveUnprocessed()) {
- return;
- }
- cancelIfEvaluating(true);
- announceClearedForAccessibility();
- reveal(mCurrentButton, R.color.calculator_primary_color, new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- onClearAnimationEnd();
- showOrHideToolbar();
- }
- });
- }
-
- // Evaluation encountered en error. Display the error.
- @Override
- public void onError(final long index, final int errorResourceId) {
- if (index != Evaluator.MAIN_INDEX) {
- throw new AssertionError("Unexpected error source");
- }
- if (mCurrentState == CalculatorState.EVALUATE) {
- setState(CalculatorState.ANIMATE);
- mResultText.announceForAccessibility(getResources().getString(errorResourceId));
- reveal(mCurrentButton, R.color.calculator_error_color,
- new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- setState(CalculatorState.ERROR);
- mResultText.onError(index, errorResourceId);
- }
- });
- } else if (mCurrentState == CalculatorState.INIT
- || mCurrentState == CalculatorState.INIT_FOR_RESULT /* very unlikely */) {
- setState(CalculatorState.ERROR);
- mResultText.onError(index, errorResourceId);
- } else {
- mResultText.clear();
- }
- }
-
- // Animate movement of result into the top formula slot.
- // Result window now remains translated in the top slot while the result is displayed.
- // (We convert it back to formula use only when the user provides new input.)
- // Historical note: In the Lollipop version, this invisibly and instantaneously moved
- // formula and result displays back at the end of the animation. We no longer do that,
- // so that we can continue to properly support scrolling of the result.
- // We assume the result already contains the text to be expanded.
- private void onResult(boolean animate, boolean resultWasPreserved) {
- // Calculate the textSize that would be used to display the result in the formula.
- // For scrollable results just use the minimum textSize to maximize the number of digits
- // that are visible on screen.
- float textSize = mFormulaText.getMinimumTextSize();
- if (!mResultText.isScrollable()) {
- textSize = mFormulaText.getVariableTextSize(mResultText.getText().toString());
- }
-
- // Scale the result to match the calculated textSize, minimizing the jump-cut transition
- // when a result is reused in a subsequent expression.
- final float resultScale = textSize / mResultText.getTextSize();
-
- // Set the result's pivot to match its gravity.
- mResultText.setPivotX(mResultText.getWidth() - mResultText.getPaddingRight());
- mResultText.setPivotY(mResultText.getHeight() - mResultText.getPaddingBottom());
-
- // Calculate the necessary translations so the result takes the place of the formula and
- // the formula moves off the top of the screen.
- final float resultTranslationY = (mFormulaContainer.getBottom() - mResultText.getBottom())
- - (mFormulaText.getPaddingBottom() - mResultText.getPaddingBottom());
- float formulaTranslationY = -mFormulaContainer.getBottom();
- if (mIsOneLine) {
- // Position the result text.
- mResultText.setY(mResultText.getBottom());
- formulaTranslationY = -(findViewById(R.id.toolbar).getBottom()
- + mFormulaContainer.getBottom());
- }
-
- // Change the result's textColor to match the formula.
- final int formulaTextColor = mFormulaText.getCurrentTextColor();
-
- if (resultWasPreserved) {
- // Result was previously addded to history.
- mEvaluator.represerve();
- } else {
- // Add current result to history.
- mEvaluator.preserve(Evaluator.MAIN_INDEX, true);
- }
-
- if (animate) {
- mResultText.announceForAccessibility(getResources().getString(R.string.desc_eq));
- mResultText.announceForAccessibility(mResultText.getText());
- setState(CalculatorState.ANIMATE);
- final AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.playTogether(
- ObjectAnimator.ofPropertyValuesHolder(mResultText,
- PropertyValuesHolder.ofFloat(View.SCALE_X, resultScale),
- PropertyValuesHolder.ofFloat(View.SCALE_Y, resultScale),
- PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, resultTranslationY)),
- ObjectAnimator.ofArgb(mResultText, TEXT_COLOR, formulaTextColor),
- ObjectAnimator.ofFloat(mFormulaContainer, View.TRANSLATION_Y,
- formulaTranslationY));
- animatorSet.setDuration(getResources().getInteger(
- android.R.integer.config_longAnimTime));
- animatorSet.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- setState(CalculatorState.RESULT);
- mCurrentAnimator = null;
- }
- });
-
- mCurrentAnimator = animatorSet;
- animatorSet.start();
- } else /* No animation desired; get there fast when restarting */ {
- mResultText.setScaleX(resultScale);
- mResultText.setScaleY(resultScale);
- mResultText.setTranslationY(resultTranslationY);
- mResultText.setTextColor(formulaTextColor);
- mFormulaContainer.setTranslationY(formulaTranslationY);
- setState(CalculatorState.RESULT);
- }
- }
-
- // Restore positions of the formula and result displays back to their original,
- // pre-animation state.
- private void restoreDisplayPositions() {
- // Clear result.
- mResultText.setText("");
- // Reset all of the values modified during the animation.
- mResultText.setScaleX(1.0f);
- mResultText.setScaleY(1.0f);
- mResultText.setTranslationX(0.0f);
- mResultText.setTranslationY(0.0f);
- mFormulaContainer.setTranslationY(0.0f);
-
- mFormulaText.requestFocus();
- }
-
- @Override
- public void onClick(AlertDialogFragment fragment, int which) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- if (HistoryFragment.CLEAR_DIALOG_TAG.equals(fragment.getTag())) {
- // TODO: Try to preserve the current, saved, and memory expressions. How should we
- // handle expressions to which they refer?
- mEvaluator.clearEverything();
- // TODO: It's not clear what we should really do here. This is an initial hack.
- // May want to make onClearAnimationEnd() private if/when we fix this.
- onClearAnimationEnd();
- mEvaluatorCallback.onMemoryStateChanged();
- onBackPressed();
- } else if (Evaluator.TIMEOUT_DIALOG_TAG.equals(fragment.getTag())) {
- // Timeout extension request.
- mEvaluator.setLongTimeout();
- } else {
- Log.e(TAG, "Unknown AlertDialogFragment click:" + fragment.getTag());
- }
- }
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
-
- getMenuInflater().inflate(R.menu.activity_calculator, menu);
- return true;
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
-
- // Show the leading option when displaying a result.
- menu.findItem(R.id.menu_leading).setVisible(mCurrentState == CalculatorState.RESULT);
-
- // Show the fraction option when displaying a rational result.
- boolean visible = mCurrentState == CalculatorState.RESULT;
- final UnifiedReal mainResult = mEvaluator.getResult(Evaluator.MAIN_INDEX);
- // mainResult should never be null, but it happens. Check as a workaround to protect
- // against crashes until we find the root cause (b/34763650).
- visible &= mainResult != null && mainResult.exactlyDisplayable();
- menu.findItem(R.id.menu_fraction).setVisible(visible);
-
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_history:
- showHistoryFragment();
- return true;
- case R.id.menu_leading:
- displayFull();
- return true;
- case R.id.menu_fraction:
- displayFraction();
- return true;
- case R.id.menu_licenses:
- startActivity(new Intent(this, Licenses.class));
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- /* Begin override CloseCallback method. */
-
- @Override
- public void onClose() {
- removeHistoryFragment();
- }
-
- /* End override CloseCallback method. */
-
- /* Begin override DragCallback methods */
-
- public void onStartDraggingOpen() {
- mDisplayView.hideToolbar();
- showHistoryFragment();
- }
-
- @Override
- public void onInstanceStateRestored(boolean isOpen) {
- }
-
- @Override
- public void whileDragging(float yFraction) {
- }
-
- @Override
- public boolean shouldCaptureView(View view, int x, int y) {
- return view.getId() == R.id.history_frame
- && (mDragLayout.isMoving() || mDragLayout.isViewUnder(view, x, y));
- }
-
- @Override
- public int getDisplayHeight() {
- return mDisplayView.getMeasuredHeight();
- }
-
- /* End override DragCallback methods */
-
- /**
- * Change evaluation state to one that's friendly to the history fragment.
- * Return false if that was not easily possible.
- */
- private boolean prepareForHistory() {
- if (mCurrentState == CalculatorState.ANIMATE) {
- // End the current animation and signal that preparation has failed.
- // onUserInteraction is unreliable and onAnimationEnd() is asynchronous, so we
- // aren't guaranteed to be out of the ANIMATE state by the time prepareForHistory is
- // called.
- if (mCurrentAnimator != null) {
- mCurrentAnimator.end();
- }
- return false;
- } else if (mCurrentState == CalculatorState.EVALUATE) {
- // Cancel current evaluation
- cancelIfEvaluating(true /* quiet */ );
- setState(CalculatorState.INPUT);
- return true;
- } else if (mCurrentState == CalculatorState.INIT) {
- // Easiest to just refuse. Otherwise we can see a state change
- // while in history mode, which causes all sorts of problems.
- // TODO: Consider other alternatives. If we're just doing the decimal conversion
- // at the end of an evaluation, we could treat this as RESULT state.
- return false;
- }
- // We should be in INPUT, INIT_FOR_RESULT, RESULT, or ERROR state.
- return true;
- }
-
- private HistoryFragment getHistoryFragment() {
- final FragmentManager manager = getFragmentManager();
- if (manager == null || manager.isDestroyed()) {
- return null;
- }
- final Fragment fragment = manager.findFragmentByTag(HistoryFragment.TAG);
- return fragment == null || fragment.isRemoving() ? null : (HistoryFragment) fragment;
- }
-
- private void showHistoryFragment() {
- if (getHistoryFragment() != null) {
- // If the fragment already exists, do nothing.
- return;
- }
-
- final FragmentManager manager = getFragmentManager();
- if (manager == null || manager.isDestroyed() || !prepareForHistory()) {
- // If the history fragment can not be shown, close the draglayout.
- mDragLayout.setClosed();
- return;
- }
-
- stopActionModeOrContextMenu();
- manager.beginTransaction()
- .replace(R.id.history_frame, new HistoryFragment(), HistoryFragment.TAG)
- .setTransition(FragmentTransaction.TRANSIT_NONE)
- .addToBackStack(HistoryFragment.TAG)
- .commit();
-
- // When HistoryFragment is visible, hide all descendants of the main Calculator view.
- mMainCalculator.setImportantForAccessibility(
- View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
- // TODO: pass current scroll position of result
- }
-
- private void displayMessage(String title, String message) {
- AlertDialogFragment.showMessageDialog(this, title, message, null, null /* tag */);
- }
-
- private void displayFraction() {
- UnifiedReal result = mEvaluator.getResult(Evaluator.MAIN_INDEX);
- displayMessage(getString(R.string.menu_fraction),
- KeyMaps.translateResult(result.toNiceString()));
- }
-
- // Display full result to currently evaluated precision
- private void displayFull() {
- Resources res = getResources();
- String msg = mResultText.getFullText(true /* withSeparators */) + " ";
- if (mResultText.fullTextIsExact()) {
- msg += res.getString(R.string.exact);
- } else {
- msg += res.getString(R.string.approximate);
- }
- displayMessage(getString(R.string.menu_leading), msg);
- }
-
- /**
- * Add input characters to the end of the expression.
- * Map them to the appropriate button pushes when possible. Leftover characters
- * are added to mUnprocessedChars, which is presumed to immediately precede the newly
- * added characters.
- * @param moreChars characters to be added
- * @param explicit these characters were explicitly typed by the user, not pasted
- */
- private void addChars(String moreChars, boolean explicit) {
- if (mUnprocessedChars != null) {
- moreChars = mUnprocessedChars + moreChars;
- }
- int current = 0;
- int len = moreChars.length();
- boolean lastWasDigit = false;
- if (mCurrentState == CalculatorState.RESULT && len != 0) {
- // Clear display immediately for incomplete function name.
- switchToInput(KeyMaps.keyForChar(moreChars.charAt(current)));
- }
- char groupingSeparator = KeyMaps.translateResult(",").charAt(0);
- while (current < len) {
- char c = moreChars.charAt(current);
- if (Character.isSpaceChar(c) || c == groupingSeparator) {
- ++current;
- continue;
- }
- int k = KeyMaps.keyForChar(c);
- if (!explicit) {
- int expEnd;
- if (lastWasDigit && current !=
- (expEnd = Evaluator.exponentEnd(moreChars, current))) {
- // Process scientific notation with 'E' when pasting, in spite of ambiguity
- // with base of natural log.
- // Otherwise the 10^x key is the user's friend.
- mEvaluator.addExponent(moreChars, current, expEnd);
- current = expEnd;
- lastWasDigit = false;
- continue;
- } else {
- boolean isDigit = KeyMaps.digVal(k) != KeyMaps.NOT_DIGIT;
- if (current == 0 && (isDigit || k == R.id.dec_point)
- && mEvaluator.getExpr(Evaluator.MAIN_INDEX).hasTrailingConstant()) {
- // Refuse to concatenate pasted content to trailing constant.
- // This makes pasting of calculator results more consistent, whether or
- // not the old calculator instance is still around.
- addKeyToExpr(R.id.op_mul);
- }
- lastWasDigit = (isDigit || lastWasDigit && k == R.id.dec_point);
- }
- }
- if (k != View.NO_ID) {
- mCurrentButton = findViewById(k);
- if (explicit) {
- addExplicitKeyToExpr(k);
- } else {
- addKeyToExpr(k);
- }
- if (Character.isSurrogate(c)) {
- current += 2;
- } else {
- ++current;
- }
- continue;
- }
- int f = KeyMaps.funForString(moreChars, current);
- if (f != View.NO_ID) {
- mCurrentButton = findViewById(f);
- if (explicit) {
- addExplicitKeyToExpr(f);
- } else {
- addKeyToExpr(f);
- }
- if (f == R.id.op_sqrt) {
- // Square root entered as function; don't lose the parenthesis.
- addKeyToExpr(R.id.lparen);
- }
- current = moreChars.indexOf('(', current) + 1;
- continue;
- }
- // There are characters left, but we can't convert them to button presses.
- mUnprocessedChars = moreChars.substring(current);
- redisplayAfterFormulaChange();
- showOrHideToolbar();
- return;
- }
- mUnprocessedChars = null;
- redisplayAfterFormulaChange();
- showOrHideToolbar();
- }
-
- private void clearIfNotInputState() {
- if (mCurrentState == CalculatorState.ERROR
- || mCurrentState == CalculatorState.RESULT) {
- setState(CalculatorState.INPUT);
- mEvaluator.clearMain();
- }
- }
-
- /**
- * Since we only support LTR format, using the RTL comma does not make sense.
- */
- private String getDecimalSeparator() {
- final char defaultSeparator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
- final char rtlComma = '\u066b';
- return defaultSeparator == rtlComma ? "," : String.valueOf(defaultSeparator);
- }
-
- /**
- * Clean up animation for context menu.
- */
- @Override
- public void onContextMenuClosed(Menu menu) {
- stopActionModeOrContextMenu();
- }
-
- public interface OnDisplayMemoryOperationsListener {
- boolean shouldDisplayMemory();
- }
-}
diff --git a/src/com/android/calculator2/CalculatorDisplay.java b/src/com/android/calculator2/CalculatorDisplay.java
deleted file mode 100644
index 341564d..0000000
--- a/src/com/android/calculator2/CalculatorDisplay.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.transition.Fade;
-import android.transition.Transition;
-import android.transition.TransitionManager;
-import android.util.AttributeSet;
-import android.view.GestureDetector;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.accessibility.AccessibilityManager;
-import android.widget.LinearLayout;
-import android.widget.Toolbar;
-
-public class CalculatorDisplay extends LinearLayout
- implements AccessibilityManager.AccessibilityStateChangeListener {
-
- /**
- * The duration in milliseconds after which to hide the toolbar.
- */
- private static final long AUTO_HIDE_DELAY_MILLIS = 3000L;
-
- /**
- * The duration in milliseconds to fade in/out the toolbar.
- */
- private static final long FADE_DURATION = 200L;
-
- private final Runnable mHideToolbarRunnable = new Runnable() {
- @Override
- public void run() {
- // Remove any duplicate callbacks to hide the toolbar.
- removeCallbacks(this);
-
- // Only animate if we have been laid out at least once.
- if (isLaidOut()) {
- TransitionManager.beginDelayedTransition(CalculatorDisplay.this, mTransition);
- }
- mToolbar.setVisibility(View.INVISIBLE);
- }
- };
-
- private final AccessibilityManager mAccessibilityManager;
- private final GestureDetector mTapDetector;
-
- private Toolbar mToolbar;
- private Transition mTransition;
-
- private boolean mForceToolbarVisible;
-
- public CalculatorDisplay(Context context) {
- this(context, null /* attrs */);
- }
-
- public CalculatorDisplay(Context context, AttributeSet attrs) {
- this(context, attrs, 0 /* defStyleAttr */);
- }
-
- public CalculatorDisplay(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
-
- mAccessibilityManager =
- (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
-
- mTapDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
- @Override
- public boolean onDown(MotionEvent e) {
- // Remove callbacks to hide the toolbar.
- removeCallbacks(mHideToolbarRunnable);
-
- return true;
- }
-
- @Override
- public boolean onSingleTapConfirmed(MotionEvent e) {
- if (mToolbar.getVisibility() != View.VISIBLE) {
- showToolbar(true);
- } else {
- hideToolbar();
- }
-
- return true;
- }
- });
-
- // Draw the children in reverse order so that the toolbar is on top.
- setChildrenDrawingOrderEnabled(true);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- mToolbar = (Toolbar) findViewById(R.id.toolbar);
- mTransition = new Fade()
- .setDuration(FADE_DURATION)
- .addTarget(mToolbar);
- }
-
- @Override
- protected int getChildDrawingOrder(int childCount, int i) {
- // Reverse the normal drawing order.
- return (childCount - 1) - i;
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- mAccessibilityManager.addAccessibilityStateChangeListener(this);
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- mAccessibilityManager.removeAccessibilityStateChangeListener(this);
- }
-
- @Override
- public void onAccessibilityStateChanged(boolean enabled) {
- // Always show the toolbar whenever accessibility is enabled.
- showToolbar(true);
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent event) {
- mTapDetector.onTouchEvent(event);
- return super.onInterceptTouchEvent(event);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- return mTapDetector.onTouchEvent(event) || super.onTouchEvent(event);
- }
-
- /**
- * Returns {@code true} if the toolbar should remain visible.
- */
- public boolean getForceToolbarVisible() {
- return mForceToolbarVisible || mAccessibilityManager.isEnabled();
- }
-
- /**
- * Forces the toolbar to remain visible.
- *
- * @param forceToolbarVisible {@code true} to keep the toolbar visible
- */
- public void setForceToolbarVisible(boolean forceToolbarVisible) {
- if (mForceToolbarVisible != forceToolbarVisible) {
- mForceToolbarVisible = forceToolbarVisible;
- showToolbar(!forceToolbarVisible);
- }
- }
-
- /**
- * Shows the toolbar.
- * @param autoHide Automatically ide toolbar again after delay
- */
- public void showToolbar(boolean autoHide) {
- // Only animate if we have been laid out at least once.
- if (isLaidOut()) {
- TransitionManager.beginDelayedTransition(this, mTransition);
- }
- mToolbar.setVisibility(View.VISIBLE);
-
- // Remove callbacks to hide the toolbar.
- removeCallbacks(mHideToolbarRunnable);
-
- // Auto hide the toolbar after 3 seconds.
- if (autoHide && !getForceToolbarVisible()) {
- postDelayed(mHideToolbarRunnable, AUTO_HIDE_DELAY_MILLIS);
- }
- }
-
- /**
- * Hides the toolbar.
- */
- public void hideToolbar() {
- if (!getForceToolbarVisible()) {
- removeCallbacks(mHideToolbarRunnable);
- mHideToolbarRunnable.run();
- }
- }
-
- public boolean isToolbarVisible() {
- return mToolbar.getVisibility() == View.VISIBLE;
- }
-}
diff --git a/src/com/android/calculator2/CalculatorExpr.java b/src/com/android/calculator2/CalculatorExpr.java
deleted file mode 100644
index 75ab1c9..0000000
--- a/src/com/android/calculator2/CalculatorExpr.java
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.text.SpannableString;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.style.TtsSpan;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-
-/**
- * A mathematical expression represented as a sequence of "tokens".
- * Many tokens are represented by button ids for the corresponding operator.
- * A token may also represent the result of a previously evaluated expression.
- * The add() method adds a token to the end of the expression. The delete method() removes one.
- * Clear() deletes the entire expression contents. Eval() evaluates the expression,
- * producing a UnifiedReal result.
- * Expressions are parsed only during evaluation; no explicit parse tree is maintained.
- *
- * The write() method is used to save the current expression. Note that neither UnifiedReal
- * nor the underlying CR provide a serialization facility. Thus we save all previously
- * computed values by writing out the expression that was used to compute them, and reevaluate
- * when reading it back in.
- */
-class CalculatorExpr {
- /**
- * An interface for resolving expression indices in embedded subexpressions to
- * the associated CalculatorExpr, and associating a UnifiedReal result with it.
- * All methods are thread-safe in the strong sense; they may be called asynchronously
- * at any time from any thread.
- */
- public interface ExprResolver {
- /*
- * Retrieve the expression corresponding to index.
- */
- CalculatorExpr getExpr(long index);
- /*
- * Retrieve the degree mode associated with the expression at index i.
- */
- boolean getDegreeMode(long index);
- /*
- * Retrieve the stored result for the expression at index, or return null.
- */
- UnifiedReal getResult(long index);
- /*
- * Atomically test for an existing result, and set it if there was none.
- * Return the prior result if there was one, or the new one if there was not.
- * May only be called after getExpr.
- */
- UnifiedReal putResultIfAbsent(long index, UnifiedReal result);
- }
-
- private ArrayList<Token> mExpr; // The actual representation
- // as a list of tokens. Constant
- // tokens are always nonempty.
-
- private static enum TokenKind { CONSTANT, OPERATOR, PRE_EVAL };
- private static TokenKind[] tokenKindValues = TokenKind.values();
- private final static BigInteger BIG_MILLION = BigInteger.valueOf(1000000);
- private final static BigInteger BIG_BILLION = BigInteger.valueOf(1000000000);
-
- private static abstract class Token {
- abstract TokenKind kind();
-
- /**
- * Write token as either a very small Byte containing the TokenKind,
- * followed by data needed by subclass constructor,
- * or as a byte >= 0x20 directly describing the OPERATOR token.
- */
- abstract void write(DataOutput out) throws IOException;
-
- /**
- * Return a textual representation of the token.
- * The result is suitable for either display as part od the formula or TalkBack use.
- * It may be a SpannableString that includes added TalkBack information.
- * @param context context used for converting button ids to strings
- */
- abstract CharSequence toCharSequence(Context context);
- }
-
- /**
- * Representation of an operator token
- */
- private static class Operator extends Token {
- // TODO: rename id.
- public final int id; // We use the button resource id
- Operator(int resId) {
- id = resId;
- }
- Operator(byte op) throws IOException {
- id = KeyMaps.fromByte(op);
- }
- @Override
- void write(DataOutput out) throws IOException {
- out.writeByte(KeyMaps.toByte(id));
- }
- @Override
- public CharSequence toCharSequence(Context context) {
- String desc = KeyMaps.toDescriptiveString(context, id);
- if (desc != null) {
- SpannableString result = new SpannableString(KeyMaps.toString(context, id));
- Object descSpan = new TtsSpan.TextBuilder(desc).build();
- result.setSpan(descSpan, 0, result.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- return result;
- } else {
- return KeyMaps.toString(context, id);
- }
- }
- @Override
- TokenKind kind() { return TokenKind.OPERATOR; }
- }
-
- /**
- * Representation of a (possibly incomplete) numerical constant.
- * Supports addition and removal of trailing characters; hence mutable.
- */
- private static class Constant extends Token implements Cloneable {
- private boolean mSawDecimal;
- private String mWhole; // String preceding decimal point.
- private String mFraction; // String after decimal point.
- private int mExponent; // Explicit exponent, only generated through addExponent.
- private static int SAW_DECIMAL = 0x1;
- private static int HAS_EXPONENT = 0x2;
-
- Constant() {
- mWhole = "";
- mFraction = "";
- // mSawDecimal = false;
- // mExponent = 0;
- };
-
- Constant(DataInput in) throws IOException {
- mWhole = in.readUTF();
- byte flags = in.readByte();
- if ((flags & SAW_DECIMAL) != 0) {
- mSawDecimal = true;
- mFraction = in.readUTF();
- } else {
- // mSawDecimal = false;
- mFraction = "";
- }
- if ((flags & HAS_EXPONENT) != 0) {
- mExponent = in.readInt();
- }
- }
-
- @Override
- void write(DataOutput out) throws IOException {
- byte flags = (byte)((mSawDecimal ? SAW_DECIMAL : 0)
- | (mExponent != 0 ? HAS_EXPONENT : 0));
- out.writeByte(TokenKind.CONSTANT.ordinal());
- out.writeUTF(mWhole);
- out.writeByte(flags);
- if (mSawDecimal) {
- out.writeUTF(mFraction);
- }
- if (mExponent != 0) {
- out.writeInt(mExponent);
- }
- }
-
- // Given a button press, append corresponding digit.
- // We assume id is a digit or decimal point.
- // Just return false if this was the second (or later) decimal point
- // in this constant.
- // Assumes that this constant does not have an exponent.
- public boolean add(int id) {
- if (id == R.id.dec_point) {
- if (mSawDecimal || mExponent != 0) return false;
- mSawDecimal = true;
- return true;
- }
- int val = KeyMaps.digVal(id);
- if (mExponent != 0) {
- if (Math.abs(mExponent) <= 10000) {
- if (mExponent > 0) {
- mExponent = 10 * mExponent + val;
- } else {
- mExponent = 10 * mExponent - val;
- }
- return true;
- } else { // Too large; refuse
- return false;
- }
- }
- if (mSawDecimal) {
- mFraction += val;
- } else {
- mWhole += val;
- }
- return true;
- }
-
- public void addExponent(int exp) {
- // Note that adding a 0 exponent is a no-op. That's OK.
- mExponent = exp;
- }
-
- /**
- * Undo the last add or remove last exponent digit.
- * Assumes the constant is nonempty.
- */
- public void delete() {
- if (mExponent != 0) {
- mExponent /= 10;
- // Once zero, it can only be added back with addExponent.
- } else if (!mFraction.isEmpty()) {
- mFraction = mFraction.substring(0, mFraction.length() - 1);
- } else if (mSawDecimal) {
- mSawDecimal = false;
- } else {
- mWhole = mWhole.substring(0, mWhole.length() - 1);
- }
- }
-
- public boolean isEmpty() {
- return (mSawDecimal == false && mWhole.isEmpty());
- }
-
- /**
- * Produce human-readable string representation of constant, as typed.
- * We do add digit grouping separators to the whole number, even if not typed.
- * Result is internationalized.
- */
- @Override
- public String toString() {
- String result;
- if (mExponent != 0) {
- result = mWhole;
- } else {
- result = StringUtils.addCommas(mWhole, 0, mWhole.length());
- }
- if (mSawDecimal) {
- result += '.';
- result += mFraction;
- }
- if (mExponent != 0) {
- result += "E" + mExponent;
- }
- return KeyMaps.translateResult(result);
- }
-
- /**
- * Return BoundedRational representation of constant, if well-formed.
- * Result is never null.
- */
- public BoundedRational toRational() throws SyntaxException {
- String whole = mWhole;
- if (whole.isEmpty()) {
- if (mFraction.isEmpty()) {
- // Decimal point without digits.
- throw new SyntaxException();
- } else {
- whole = "0";
- }
- }
- BigInteger num = new BigInteger(whole + mFraction);
- BigInteger den = BigInteger.TEN.pow(mFraction.length());
- if (mExponent > 0) {
- num = num.multiply(BigInteger.TEN.pow(mExponent));
- }
- if (mExponent < 0) {
- den = den.multiply(BigInteger.TEN.pow(-mExponent));
- }
- return new BoundedRational(num, den);
- }
-
- @Override
- public CharSequence toCharSequence(Context context) {
- return toString();
- }
-
- @Override
- public TokenKind kind() {
- return TokenKind.CONSTANT;
- }
-
- // Override clone to make it public
- @Override
- public Object clone() {
- Constant result = new Constant();
- result.mWhole = mWhole;
- result.mFraction = mFraction;
- result.mSawDecimal = mSawDecimal;
- result.mExponent = mExponent;
- return result;
- }
- }
-
- /**
- * The "token" class for previously evaluated subexpressions.
- * We treat previously evaluated subexpressions as tokens. These are inserted when we either
- * continue an expression after evaluating some of it, or copy an expression and paste it back
- * in.
- * This only contains enough information to allow us to display the expression in a
- * formula, or reevaluate the expression with the aid of an ExprResolver; we no longer
- * cache the result. The expression corresponding to the index can be obtained through
- * the ExprResolver, which looks it up in a subexpression database.
- * The representation includes a UnifiedReal value. In order to
- * support saving and restoring, we also include the underlying expression itself, and the
- * context (currently just degree mode) used to evaluate it. The short string representation
- * is also stored in order to avoid potentially expensive recomputation in the UI thread.
- */
- private static class PreEval extends Token {
- public final long mIndex;
- private final String mShortRep; // Not internationalized.
- PreEval(long index, String shortRep) {
- mIndex = index;
- mShortRep = shortRep;
- }
- @Override
- // This writes out only a shallow representation of the result, without
- // information about subexpressions. To write out a deep representation, we
- // find referenced subexpressions, and iteratively write those as well.
- public void write(DataOutput out) throws IOException {
- out.writeByte(TokenKind.PRE_EVAL.ordinal());
- if (mIndex > Integer.MAX_VALUE || mIndex < Integer.MIN_VALUE) {
- // This would be millions of expressions per day for the life of the device.
- throw new AssertionError("Expression index too big");
- }
- out.writeInt((int)mIndex);
- out.writeUTF(mShortRep);
- }
- PreEval(DataInput in) throws IOException {
- mIndex = in.readInt();
- mShortRep = in.readUTF();
- }
- @Override
- public CharSequence toCharSequence(Context context) {
- return KeyMaps.translateResult(mShortRep);
- }
- @Override
- public TokenKind kind() {
- return TokenKind.PRE_EVAL;
- }
- public boolean hasEllipsis() {
- return mShortRep.lastIndexOf(KeyMaps.ELLIPSIS) != -1;
- }
- }
-
- /**
- * Read token from in.
- */
- public static Token newToken(DataInput in) throws IOException {
- byte kindByte = in.readByte();
- if (kindByte < 0x20) {
- TokenKind kind = tokenKindValues[kindByte];
- switch(kind) {
- case CONSTANT:
- return new Constant(in);
- case PRE_EVAL:
- PreEval pe = new PreEval(in);
- if (pe.mIndex == -1) {
- // Database corrupted by earlier bug.
- // Return a conspicuously wrong placeholder that won't lead to a crash.
- Constant result = new Constant();
- result.add(R.id.dec_point);
- return result;
- } else {
- return pe;
- }
- default: throw new IOException("Bad save file format");
- }
- } else {
- return new Operator(kindByte);
- }
- }
-
- CalculatorExpr() {
- mExpr = new ArrayList<Token>();
- }
-
- private CalculatorExpr(ArrayList<Token> expr) {
- mExpr = expr;
- }
-
- /**
- * Construct CalculatorExpr, by reading it from in.
- */
- CalculatorExpr(DataInput in) throws IOException {
- mExpr = new ArrayList<Token>();
- int size = in.readInt();
- for (int i = 0; i < size; ++i) {
- mExpr.add(newToken(in));
- }
- }
-
- /**
- * Write this expression to out.
- */
- public void write(DataOutput out) throws IOException {
- int size = mExpr.size();
- out.writeInt(size);
- for (int i = 0; i < size; ++i) {
- mExpr.get(i).write(out);
- }
- }
-
- /**
- * Use write() above to generate a byte array containing a serialized representation of
- * this expression.
- */
- public byte[] toBytes() {
- ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
- try (DataOutputStream out = new DataOutputStream(byteArrayStream)) {
- write(out);
- } catch (IOException e) {
- // Impossible; No IO involved.
- throw new AssertionError("Impossible IO exception", e);
- }
- return byteArrayStream.toByteArray();
- }
-
- /**
- * Does this expression end with a numeric constant?
- * As opposed to an operator or preevaluated expression.
- */
- boolean hasTrailingConstant() {
- int s = mExpr.size();
- if (s == 0) {
- return false;
- }
- Token t = mExpr.get(s-1);
- return t instanceof Constant;
- }
-
- /**
- * Does this expression end with a binary operator?
- */
- boolean hasTrailingBinary() {
- int s = mExpr.size();
- if (s == 0) return false;
- Token t = mExpr.get(s-1);
- if (!(t instanceof Operator)) return false;
- Operator o = (Operator)t;
- return (KeyMaps.isBinary(o.id));
- }
-
- /**
- * Append press of button with given id to expression.
- * If the insertion would clearly result in a syntax error, either just return false
- * and do nothing, or make an adjustment to avoid the problem. We do the latter only
- * for unambiguous consecutive binary operators, in which case we delete the first
- * operator.
- */
- boolean add(int id) {
- int s = mExpr.size();
- final int d = KeyMaps.digVal(id);
- final boolean binary = KeyMaps.isBinary(id);
- Token lastTok = s == 0 ? null : mExpr.get(s-1);
- int lastOp = lastTok instanceof Operator ? ((Operator) lastTok).id : 0;
- // Quietly replace a trailing binary operator with another one, unless the second
- // operator is minus, in which case we just allow it as a unary minus.
- if (binary && !KeyMaps.isPrefix(id)) {
- if (s == 0 || lastOp == R.id.lparen || KeyMaps.isFunc(lastOp)
- || KeyMaps.isPrefix(lastOp) && lastOp != R.id.op_sub) {
- return false;
- }
- while (hasTrailingBinary()) {
- delete();
- }
- // s invalid and not used below.
- }
- final boolean isConstPiece = (d != KeyMaps.NOT_DIGIT || id == R.id.dec_point);
- if (isConstPiece) {
- // Since we treat juxtaposition as multiplication, a constant can appear anywhere.
- if (s == 0) {
- mExpr.add(new Constant());
- s++;
- } else {
- Token last = mExpr.get(s-1);
- if(!(last instanceof Constant)) {
- if (last instanceof PreEval) {
- // Add explicit multiplication to avoid confusing display.
- mExpr.add(new Operator(R.id.op_mul));
- s++;
- }
- mExpr.add(new Constant());
- s++;
- }
- }
- return ((Constant)(mExpr.get(s-1))).add(id);
- } else {
- mExpr.add(new Operator(id));
- return true;
- }
- }
-
- /**
- * Add exponent to the constant at the end of the expression.
- * Assumes there is a constant at the end of the expression.
- */
- void addExponent(int exp) {
- Token lastTok = mExpr.get(mExpr.size() - 1);
- ((Constant) lastTok).addExponent(exp);
- }
-
- /**
- * Remove trailing op_add and op_sub operators.
- */
- void removeTrailingAdditiveOperators() {
- while (true) {
- int s = mExpr.size();
- if (s == 0) {
- break;
- }
- Token lastTok = mExpr.get(s-1);
- if (!(lastTok instanceof Operator)) {
- break;
- }
- int lastOp = ((Operator) lastTok).id;
- if (lastOp != R.id.op_add && lastOp != R.id.op_sub) {
- break;
- }
- delete();
- }
- }
-
- /**
- * Append the contents of the argument expression.
- * It is assumed that the argument expression will not change, and thus its pieces can be
- * reused directly.
- */
- public void append(CalculatorExpr expr2) {
- int s = mExpr.size();
- int s2 = expr2.mExpr.size();
- // Check that we're not concatenating Constant or PreEval tokens, since the result would
- // look like a single constant, with very mysterious results for the user.
- if (s != 0 && s2 != 0) {
- Token last = mExpr.get(s-1);
- Token first = expr2.mExpr.get(0);
- if (!(first instanceof Operator) && !(last instanceof Operator)) {
- // Fudge it by adding an explicit multiplication. We would have interpreted it as
- // such anyway, and this makes it recognizable to the user.
- mExpr.add(new Operator(R.id.op_mul));
- }
- }
- for (int i = 0; i < s2; ++i) {
- mExpr.add(expr2.mExpr.get(i));
- }
- }
-
- /**
- * Undo the last key addition, if any.
- * Or possibly remove a trailing exponent digit.
- */
- public void delete() {
- final int s = mExpr.size();
- if (s == 0) {
- return;
- }
- Token last = mExpr.get(s-1);
- if (last instanceof Constant) {
- Constant c = (Constant)last;
- c.delete();
- if (!c.isEmpty()) {
- return;
- }
- }
- mExpr.remove(s-1);
- }
-
- /**
- * Remove all tokens from the expression.
- */
- public void clear() {
- mExpr.clear();
- }
-
- public boolean isEmpty() {
- return mExpr.isEmpty();
- }
-
- /**
- * Returns a logical deep copy of the CalculatorExpr.
- * Operator and PreEval tokens are immutable, and thus aren't really copied.
- */
- public Object clone() {
- CalculatorExpr result = new CalculatorExpr();
- for (Token t : mExpr) {
- if (t instanceof Constant) {
- result.mExpr.add((Token)(((Constant)t).clone()));
- } else {
- result.mExpr.add(t);
- }
- }
- return result;
- }
-
- // Am I just a constant?
- public boolean isConstant() {
- if (mExpr.size() != 1) {
- return false;
- }
- return mExpr.get(0) instanceof Constant;
- }
-
- /**
- * Return a new expression consisting of a single token representing the current pre-evaluated
- * expression.
- * The caller supplies the expression index and short string representation.
- * The expression must have been previously evaluated.
- */
- public CalculatorExpr abbreviate(long index, String sr) {
- CalculatorExpr result = new CalculatorExpr();
- @SuppressWarnings("unchecked")
- Token t = new PreEval(index, sr);
- result.mExpr.add(t);
- return result;
- }
-
- /**
- * Internal evaluation functions return an EvalRet pair.
- * We compute rational (BoundedRational) results when possible, both as a performance
- * optimization, and to detect errors exactly when we can.
- */
- private static class EvalRet {
- public int pos; // Next position (expression index) to be parsed.
- public final UnifiedReal val; // Constructive Real result of evaluating subexpression.
- EvalRet(int p, UnifiedReal v) {
- pos = p;
- val = v;
- }
- }
-
- /**
- * Internal evaluation functions take an EvalContext argument.
- */
- private static class EvalContext {
- public final int mPrefixLength; // Length of prefix to evaluate. Not explicitly saved.
- public final boolean mDegreeMode;
- public final ExprResolver mExprResolver; // Reconstructed, not saved.
- // If we add any other kinds of evaluation modes, they go here.
- EvalContext(boolean degreeMode, int len, ExprResolver er) {
- mDegreeMode = degreeMode;
- mPrefixLength = len;
- mExprResolver = er;
- }
- EvalContext(DataInput in, int len, ExprResolver er) throws IOException {
- mDegreeMode = in.readBoolean();
- mPrefixLength = len;
- mExprResolver = er;
- }
- void write(DataOutput out) throws IOException {
- out.writeBoolean(mDegreeMode);
- }
- }
-
- private UnifiedReal toRadians(UnifiedReal x, EvalContext ec) {
- if (ec.mDegreeMode) {
- return x.multiply(UnifiedReal.RADIANS_PER_DEGREE);
- } else {
- return x;
- }
- }
-
- private UnifiedReal fromRadians(UnifiedReal x, EvalContext ec) {
- if (ec.mDegreeMode) {
- return x.divide(UnifiedReal.RADIANS_PER_DEGREE);
- } else {
- return x;
- }
- }
-
- // The following methods can all throw IndexOutOfBoundsException in the event of a syntax
- // error. We expect that to be caught in eval below.
-
- private boolean isOperatorUnchecked(int i, int op) {
- Token t = mExpr.get(i);
- if (!(t instanceof Operator)) {
- return false;
- }
- return ((Operator)(t)).id == op;
- }
-
- private boolean isOperator(int i, int op, EvalContext ec) {
- if (i >= ec.mPrefixLength) {
- return false;
- }
- return isOperatorUnchecked(i, op);
- }
-
- public static class SyntaxException extends Exception {
- public SyntaxException() {
- super();
- }
- public SyntaxException(String s) {
- super(s);
- }
- }
-
- // The following functions all evaluate some kind of expression starting at position i in
- // mExpr in a specified evaluation context. They return both the expression value (as
- // constructive real and, if applicable, as BoundedRational) and the position of the next token
- // that was not used as part of the evaluation.
- // This is essentially a simple recursive descent parser combined with expression evaluation.
-
- private EvalRet evalUnary(int i, EvalContext ec) throws SyntaxException {
- final Token t = mExpr.get(i);
- if (t instanceof Constant) {
- Constant c = (Constant)t;
- return new EvalRet(i+1,new UnifiedReal(c.toRational()));
- }
- if (t instanceof PreEval) {
- final long index = ((PreEval)t).mIndex;
- UnifiedReal res = ec.mExprResolver.getResult(index);
- if (res == null) {
- // We try to minimize this recursive evaluation case, but currently don't
- // completely avoid it.
- res = nestedEval(index, ec.mExprResolver);
- }
- return new EvalRet(i+1, res);
- }
- EvalRet argVal;
- switch(((Operator)(t)).id) {
- case R.id.const_pi:
- return new EvalRet(i+1, UnifiedReal.PI);
- case R.id.const_e:
- return new EvalRet(i+1, UnifiedReal.E);
- case R.id.op_sqrt:
- // Seems to have highest precedence.
- // Does not add implicit paren.
- // Does seem to accept a leading minus.
- if (isOperator(i+1, R.id.op_sub, ec)) {
- argVal = evalUnary(i+2, ec);
- return new EvalRet(argVal.pos, argVal.val.negate().sqrt());
- } else {
- argVal = evalUnary(i+1, ec);
- return new EvalRet(argVal.pos, argVal.val.sqrt());
- }
- case R.id.lparen:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, argVal.val);
- case R.id.fun_sin:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, toRadians(argVal.val, ec).sin());
- case R.id.fun_cos:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, toRadians(argVal.val,ec).cos());
- case R.id.fun_tan:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- UnifiedReal arg = toRadians(argVal.val, ec);
- return new EvalRet(argVal.pos, arg.sin().divide(arg.cos()));
- case R.id.fun_ln:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, argVal.val.ln());
- case R.id.fun_exp:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, argVal.val.exp());
- case R.id.fun_log:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, argVal.val.ln().divide(UnifiedReal.TEN.ln()));
- case R.id.fun_arcsin:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, fromRadians(argVal.val.asin(), ec));
- case R.id.fun_arccos:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, fromRadians(argVal.val.acos(), ec));
- case R.id.fun_arctan:
- argVal = evalExpr(i+1, ec);
- if (isOperator(argVal.pos, R.id.rparen, ec)) {
- argVal.pos++;
- }
- return new EvalRet(argVal.pos, fromRadians(argVal.val.atan(),ec));
- default:
- throw new SyntaxException("Unrecognized token in expression");
- }
- }
-
- private static final UnifiedReal ONE_HUNDREDTH = new UnifiedReal(100).inverse();
-
- private EvalRet evalSuffix(int i, EvalContext ec) throws SyntaxException {
- final EvalRet tmp = evalUnary(i, ec);
- int cpos = tmp.pos;
- UnifiedReal val = tmp.val;
-
- boolean isFact;
- boolean isSquared = false;
- while ((isFact = isOperator(cpos, R.id.op_fact, ec)) ||
- (isSquared = isOperator(cpos, R.id.op_sqr, ec)) ||
- isOperator(cpos, R.id.op_pct, ec)) {
- if (isFact) {
- val = val.fact();
- } else if (isSquared) {
- val = val.multiply(val);
- } else /* percent */ {
- val = val.multiply(ONE_HUNDREDTH);
- }
- ++cpos;
- }
- return new EvalRet(cpos, val);
- }
-
- private EvalRet evalFactor(int i, EvalContext ec) throws SyntaxException {
- final EvalRet result1 = evalSuffix(i, ec);
- int cpos = result1.pos; // current position
- UnifiedReal val = result1.val; // value so far
- if (isOperator(cpos, R.id.op_pow, ec)) {
- final EvalRet exp = evalSignedFactor(cpos + 1, ec);
- cpos = exp.pos;
- val = val.pow(exp.val);
- }
- return new EvalRet(cpos, val);
- }
-
- private EvalRet evalSignedFactor(int i, EvalContext ec) throws SyntaxException {
- final boolean negative = isOperator(i, R.id.op_sub, ec);
- int cpos = negative ? i + 1 : i;
- EvalRet tmp = evalFactor(cpos, ec);
- cpos = tmp.pos;
- final UnifiedReal result = negative ? tmp.val.negate() : tmp.val;
- return new EvalRet(cpos, result);
- }
-
- private boolean canStartFactor(int i) {
- if (i >= mExpr.size()) return false;
- Token t = mExpr.get(i);
- if (!(t instanceof Operator)) return true;
- int id = ((Operator)(t)).id;
- if (KeyMaps.isBinary(id)) return false;
- switch (id) {
- case R.id.op_fact:
- case R.id.rparen:
- return false;
- default:
- return true;
- }
- }
-
- private EvalRet evalTerm(int i, EvalContext ec) throws SyntaxException {
- EvalRet tmp = evalSignedFactor(i, ec);
- boolean is_mul = false;
- boolean is_div = false;
- int cpos = tmp.pos; // Current position in expression.
- UnifiedReal val = tmp.val; // Current value.
- while ((is_mul = isOperator(cpos, R.id.op_mul, ec))
- || (is_div = isOperator(cpos, R.id.op_div, ec))
- || canStartFactor(cpos)) {
- if (is_mul || is_div) ++cpos;
- tmp = evalSignedFactor(cpos, ec);
- if (is_div) {
- val = val.divide(tmp.val);
- } else {
- val = val.multiply(tmp.val);
- }
- cpos = tmp.pos;
- is_mul = is_div = false;
- }
- return new EvalRet(cpos, val);
- }
-
- /**
- * Is the subexpression starting at pos a simple percent constant?
- * This is used to recognize exppressions like 200+10%, which we handle specially.
- * This is defined as a Constant or PreEval token, followed by a percent sign, and followed
- * by either nothing or an additive operator.
- * Note that we are intentionally far more restrictive in recognizing such expressions than
- * e.g. http://blogs.msdn.com/b/oldnewthing/archive/2008/01/10/7047497.aspx .
- * When in doubt, we fall back to the the naive interpretation of % as 1/100.
- * Note that 100+(10)% yields 100.1 while 100+10% yields 110. This may be controversial,
- * but is consistent with Google web search.
- */
- private boolean isPercent(int pos) {
- if (mExpr.size() < pos + 2 || !isOperatorUnchecked(pos + 1, R.id.op_pct)) {
- return false;
- }
- Token number = mExpr.get(pos);
- if (number instanceof Operator) {
- return false;
- }
- if (mExpr.size() == pos + 2) {
- return true;
- }
- if (!(mExpr.get(pos + 2) instanceof Operator)) {
- return false;
- }
- Operator op = (Operator) mExpr.get(pos + 2);
- return op.id == R.id.op_add || op.id == R.id.op_sub || op.id == R.id.rparen;
- }
-
- /**
- * Compute the multiplicative factor corresponding to an N% addition or subtraction.
- * @param pos position of Constant or PreEval expression token corresponding to N.
- * @param isSubtraction this is a subtraction, as opposed to addition.
- * @param ec usable evaluation contex; only length matters.
- * @return UnifiedReal value and position, which is pos + 2, i.e. after percent sign
- */
- private EvalRet getPercentFactor(int pos, boolean isSubtraction, EvalContext ec)
- throws SyntaxException {
- EvalRet tmp = evalUnary(pos, ec);
- UnifiedReal val = isSubtraction ? tmp.val.negate() : tmp.val;
- val = UnifiedReal.ONE.add(val.multiply(ONE_HUNDREDTH));
- return new EvalRet(pos + 2 /* after percent sign */, val);
- }
-
- private EvalRet evalExpr(int i, EvalContext ec) throws SyntaxException {
- EvalRet tmp = evalTerm(i, ec);
- boolean is_plus;
- int cpos = tmp.pos;
- UnifiedReal val = tmp.val;
- while ((is_plus = isOperator(cpos, R.id.op_add, ec))
- || isOperator(cpos, R.id.op_sub, ec)) {
- if (isPercent(cpos + 1)) {
- tmp = getPercentFactor(cpos + 1, !is_plus, ec);
- val = val.multiply(tmp.val);
- } else {
- tmp = evalTerm(cpos + 1, ec);
- if (is_plus) {
- val = val.add(tmp.val);
- } else {
- val = val.subtract(tmp.val);
- }
- }
- cpos = tmp.pos;
- }
- return new EvalRet(cpos, val);
- }
-
- /**
- * Return the starting position of the sequence of trailing binary operators.
- */
- private int trailingBinaryOpsStart() {
- int result = mExpr.size();
- while (result > 0) {
- Token last = mExpr.get(result - 1);
- if (!(last instanceof Operator)) break;
- Operator o = (Operator)last;
- if (!KeyMaps.isBinary(o.id)) break;
- --result;
- }
- return result;
- }
-
- /**
- * Is the current expression worth evaluating?
- */
- public boolean hasInterestingOps() {
- final int last = trailingBinaryOpsStart();
- int first = 0;
- if (last > first && isOperatorUnchecked(first, R.id.op_sub)) {
- // Leading minus is not by itself interesting.
- first++;
- }
- for (int i = first; i < last; ++i) {
- Token t1 = mExpr.get(i);
- if (t1 instanceof Operator
- || t1 instanceof PreEval && ((PreEval)t1).hasEllipsis()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Does the expression contain trig operations?
- */
- public boolean hasTrigFuncs() {
- for (Token t : mExpr) {
- if (t instanceof Operator) {
- Operator o = (Operator)t;
- if (KeyMaps.isTrigFunc(o.id)) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Add the indices of unevaluated PreEval expressions embedded in the current expression to
- * argument. This includes only directly referenced expressions e, not those indirectly
- * referenced by e. If the index was already present, it is not added. If the argument
- * contained no duplicates, the result will not either. New indices are added to the end of
- * the list.
- */
- private void addReferencedExprs(ArrayList<Long> list, ExprResolver er) {
- for (Token t : mExpr) {
- if (t instanceof PreEval) {
- Long index = ((PreEval) t).mIndex;
- if (er.getResult(index) == null && !list.contains(index)) {
- list.add(index);
- }
- }
- }
- }
-
- /**
- * Return a list of unevaluated expressions transitively referenced by the current one.
- * All expressions in the resulting list will have had er.getExpr() called on them.
- * The resulting list is ordered such that evaluating expressions in list order
- * should trigger few recursive evaluations.
- */
- public ArrayList<Long> getTransitivelyReferencedExprs(ExprResolver er) {
- // We could avoid triggering any recursive evaluations by actually building the
- // dependency graph and topologically sorting it. Note that sorting by index works
- // for positive and negative indices separately, but not their union. Currently we
- // just settle for reverse breadth-first-search order, which handles the common case
- // of simple dependency chains well.
- ArrayList<Long> list = new ArrayList<Long>();
- int scanned = 0; // We've added expressions referenced by [0, scanned) to the list
- addReferencedExprs(list, er);
- while (scanned != list.size()) {
- er.getExpr(list.get(scanned++)).addReferencedExprs(list, er);
- }
- Collections.reverse(list);
- return list;
- }
-
- /**
- * Evaluate the expression at the given index to a UnifiedReal.
- * Both saves and returns the result.
- */
- UnifiedReal nestedEval(long index, ExprResolver er) throws SyntaxException {
- CalculatorExpr nestedExpr = er.getExpr(index);
- EvalContext newEc = new EvalContext(er.getDegreeMode(index),
- nestedExpr.trailingBinaryOpsStart(), er);
- EvalRet new_res = nestedExpr.evalExpr(0, newEc);
- return er.putResultIfAbsent(index, new_res.val);
- }
-
- /**
- * Evaluate the expression excluding trailing binary operators.
- * Errors result in exceptions, most of which are unchecked. Should not be called
- * concurrently with modification of the expression. May take a very long time; avoid calling
- * from UI thread.
- *
- * @param degreeMode use degrees rather than radians
- */
- UnifiedReal eval(boolean degreeMode, ExprResolver er) throws SyntaxException
- // And unchecked exceptions thrown by UnifiedReal, CR,
- // and BoundedRational.
- {
- // First evaluate all indirectly referenced expressions in increasing index order.
- // This ensures that subsequent evaluation never encounters an embedded PreEval
- // expression that has not been previously evaluated.
- // We could do the embedded evaluations recursively, but that risks running out of
- // stack space.
- ArrayList<Long> referenced = getTransitivelyReferencedExprs(er);
- for (long index : referenced) {
- nestedEval(index, er);
- }
- try {
- // We currently never include trailing binary operators, but include other trailing
- // operators. Thus we usually, but not always, display results for prefixes of valid
- // expressions, and don't generate an error where we previously displayed an instant
- // result. This reflects the Android L design.
- int prefixLen = trailingBinaryOpsStart();
- EvalContext ec = new EvalContext(degreeMode, prefixLen, er);
- EvalRet res = evalExpr(0, ec);
- if (res.pos != prefixLen) {
- throw new SyntaxException("Failed to parse full expression");
- }
- return res.val;
- } catch (IndexOutOfBoundsException e) {
- throw new SyntaxException("Unexpected expression end");
- }
- }
-
- // Produce a string representation of the expression itself
- SpannableStringBuilder toSpannableStringBuilder(Context context) {
- SpannableStringBuilder ssb = new SpannableStringBuilder();
- for (Token t : mExpr) {
- ssb.append(t.toCharSequence(context));
- }
- return ssb;
- }
-}
diff --git a/src/com/android/calculator2/CalculatorFormula.java b/src/com/android/calculator2/CalculatorFormula.java
deleted file mode 100644
index 2911df8..0000000
--- a/src/com/android/calculator2/CalculatorFormula.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Copyright (C) 2015 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.annotation.TargetApi;
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Rect;
-import android.os.Build;
-import android.text.Layout;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.ActionMode;
-import android.view.ContextMenu;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.TextView;
-
-/**
- * TextView adapted for displaying the formula and allowing pasting.
- */
-public class CalculatorFormula extends AlignedTextView implements MenuItem.OnMenuItemClickListener,
- ClipboardManager.OnPrimaryClipChangedListener {
-
- public static final String TAG_ACTION_MODE = "ACTION_MODE";
-
- // Temporary paint for use in layout methods.
- private final TextPaint mTempPaint = new TextPaint();
-
- private final float mMaximumTextSize;
- private final float mMinimumTextSize;
- private final float mStepTextSize;
-
- private final ClipboardManager mClipboardManager;
-
- private int mWidthConstraint = -1;
- private ActionMode mActionMode;
- private ActionMode.Callback mPasteActionModeCallback;
- private ContextMenu mContextMenu;
- private OnTextSizeChangeListener mOnTextSizeChangeListener;
- private OnFormulaContextMenuClickListener mOnContextMenuClickListener;
- private Calculator.OnDisplayMemoryOperationsListener mOnDisplayMemoryOperationsListener;
-
- public CalculatorFormula(Context context) {
- this(context, null /* attrs */);
- }
-
- public CalculatorFormula(Context context, AttributeSet attrs) {
- this(context, attrs, 0 /* defStyleAttr */);
- }
-
- public CalculatorFormula(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
-
- mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
-
- final TypedArray a = context.obtainStyledAttributes(
- attrs, R.styleable.CalculatorFormula, defStyleAttr, 0);
- mMaximumTextSize = a.getDimension(
- R.styleable.CalculatorFormula_maxTextSize, getTextSize());
- mMinimumTextSize = a.getDimension(
- R.styleable.CalculatorFormula_minTextSize, getTextSize());
- mStepTextSize = a.getDimension(R.styleable.CalculatorFormula_stepTextSize,
- (mMaximumTextSize - mMinimumTextSize) / 3);
- a.recycle();
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- setupActionMode();
- } else {
- setupContextMenu();
- }
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- if (!isLaidOut()) {
- // Prevent shrinking/resizing with our variable textSize.
- setTextSizeInternal(TypedValue.COMPLEX_UNIT_PX, mMaximumTextSize,
- false /* notifyListener */);
- setMinimumHeight(getLineHeight() + getCompoundPaddingBottom()
- + getCompoundPaddingTop());
- }
-
- // Ensure we are at least as big as our parent.
- final int width = MeasureSpec.getSize(widthMeasureSpec);
- if (getMinimumWidth() != width) {
- setMinimumWidth(width);
- }
-
- // Re-calculate our textSize based on new width.
- mWidthConstraint = MeasureSpec.getSize(widthMeasureSpec)
- - getPaddingLeft() - getPaddingRight();
- final float textSize = getVariableTextSize(getText());
- if (getTextSize() != textSize) {
- setTextSizeInternal(TypedValue.COMPLEX_UNIT_PX, textSize, false /* notifyListener */);
- }
-
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- mClipboardManager.addPrimaryClipChangedListener(this);
- onPrimaryClipChanged();
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
-
- mClipboardManager.removePrimaryClipChangedListener(this);
- }
-
- @Override
- protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
- super.onTextChanged(text, start, lengthBefore, lengthAfter);
-
- setTextSize(TypedValue.COMPLEX_UNIT_PX, getVariableTextSize(text.toString()));
- }
-
- private void setTextSizeInternal(int unit, float size, boolean notifyListener) {
- final float oldTextSize = getTextSize();
- super.setTextSize(unit, size);
- if (notifyListener && mOnTextSizeChangeListener != null && getTextSize() != oldTextSize) {
- mOnTextSizeChangeListener.onTextSizeChanged(this, oldTextSize);
- }
- }
-
- @Override
- public void setTextSize(int unit, float size) {
- setTextSizeInternal(unit, size, true);
- }
-
- public float getMinimumTextSize() {
- return mMinimumTextSize;
- }
-
- public float getMaximumTextSize() {
- return mMaximumTextSize;
- }
-
- public float getVariableTextSize(CharSequence text) {
- if (mWidthConstraint < 0 || mMaximumTextSize <= mMinimumTextSize) {
- // Not measured, bail early.
- return getTextSize();
- }
-
- // Capture current paint state.
- mTempPaint.set(getPaint());
-
- // Step through increasing text sizes until the text would no longer fit.
- float lastFitTextSize = mMinimumTextSize;
- while (lastFitTextSize < mMaximumTextSize) {
- mTempPaint.setTextSize(Math.min(lastFitTextSize + mStepTextSize, mMaximumTextSize));
- if (Layout.getDesiredWidth(text, mTempPaint) > mWidthConstraint) {
- break;
- }
- lastFitTextSize = mTempPaint.getTextSize();
- }
-
- return lastFitTextSize;
- }
-
- /**
- * Functionally equivalent to setText(), but explicitly announce changes.
- * If the new text is an extension of the old one, announce the addition.
- * Otherwise, e.g. after deletion, announce the entire new text.
- */
- public void changeTextTo(CharSequence newText) {
- final CharSequence oldText = getText();
- final char separator = KeyMaps.translateResult(",").charAt(0);
- final CharSequence added = StringUtils.getExtensionIgnoring(newText, oldText, separator);
- if (added != null) {
- if (added.length() == 1) {
- // The algorithm for pronouncing a single character doesn't seem
- // to respect our hints. Don't give it the choice.
- final char c = added.charAt(0);
- final int id = KeyMaps.keyForChar(c);
- final String descr = KeyMaps.toDescriptiveString(getContext(), id);
- if (descr != null) {
- announceForAccessibility(descr);
- } else {
- announceForAccessibility(String.valueOf(c));
- }
- } else if (added.length() != 0) {
- announceForAccessibility(added);
- }
- } else {
- announceForAccessibility(newText);
- }
- setText(newText, BufferType.SPANNABLE);
- }
-
- public boolean stopActionModeOrContextMenu() {
- if (mActionMode != null) {
- mActionMode.finish();
- return true;
- }
- if (mContextMenu != null) {
- mContextMenu.close();
- return true;
- }
- return false;
- }
-
- public void setOnTextSizeChangeListener(OnTextSizeChangeListener listener) {
- mOnTextSizeChangeListener = listener;
- }
-
- public void setOnContextMenuClickListener(OnFormulaContextMenuClickListener listener) {
- mOnContextMenuClickListener = listener;
- }
-
- public void setOnDisplayMemoryOperationsListener(
- Calculator.OnDisplayMemoryOperationsListener listener) {
- mOnDisplayMemoryOperationsListener = listener;
- }
-
- /**
- * Use ActionMode for paste support on M and higher.
- */
- @TargetApi(Build.VERSION_CODES.M)
- private void setupActionMode() {
- mPasteActionModeCallback = new ActionMode.Callback2() {
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- if (onMenuItemClick(item)) {
- mode.finish();
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- mode.setTag(TAG_ACTION_MODE);
- final MenuInflater inflater = mode.getMenuInflater();
- return createContextMenu(inflater, menu);
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- return false;
- }
-
- @Override
- public void onDestroyActionMode(ActionMode mode) {
- mActionMode = null;
- }
-
- @Override
- public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
- super.onGetContentRect(mode, view, outRect);
- outRect.top += getTotalPaddingTop();
- outRect.right -= getTotalPaddingRight();
- outRect.bottom -= getTotalPaddingBottom();
- // Encourage menu positioning over the rightmost 10% of the screen.
- outRect.left = (int) (outRect.right * 0.9f);
- }
- };
- setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- mActionMode = startActionMode(mPasteActionModeCallback, ActionMode.TYPE_FLOATING);
- return true;
- }
- });
- }
-
- /**
- * Use ContextMenu for paste support on L and lower.
- */
- private void setupContextMenu() {
- setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
- @Override
- public void onCreateContextMenu(ContextMenu contextMenu, View view,
- ContextMenu.ContextMenuInfo contextMenuInfo) {
- final MenuInflater inflater = new MenuInflater(getContext());
- createContextMenu(inflater, contextMenu);
- mContextMenu = contextMenu;
- for (int i = 0; i < contextMenu.size(); i++) {
- contextMenu.getItem(i).setOnMenuItemClickListener(CalculatorFormula.this);
- }
- }
- });
- setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- return showContextMenu();
- }
- });
- }
-
- private boolean createContextMenu(MenuInflater inflater, Menu menu) {
- final boolean isPasteEnabled = isPasteEnabled();
- final boolean isMemoryEnabled = isMemoryEnabled();
- if (!isPasteEnabled && !isMemoryEnabled) {
- return false;
- }
-
- bringPointIntoView(length());
- inflater.inflate(R.menu.menu_formula, menu);
- final MenuItem pasteItem = menu.findItem(R.id.menu_paste);
- final MenuItem memoryRecallItem = menu.findItem(R.id.memory_recall);
- pasteItem.setEnabled(isPasteEnabled);
- memoryRecallItem.setEnabled(isMemoryEnabled);
- return true;
- }
-
- private void paste() {
- final ClipData primaryClip = mClipboardManager.getPrimaryClip();
- if (primaryClip != null && mOnContextMenuClickListener != null) {
- mOnContextMenuClickListener.onPaste(primaryClip);
- }
- }
-
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.memory_recall:
- mOnContextMenuClickListener.onMemoryRecall();
- return true;
- case R.id.menu_paste:
- paste();
- return true;
- default:
- return false;
- }
- }
-
- @Override
- public void onPrimaryClipChanged() {
- setLongClickable(isPasteEnabled() || isMemoryEnabled());
- }
-
- public void onMemoryStateChanged() {
- setLongClickable(isPasteEnabled() || isMemoryEnabled());
- }
-
- private boolean isMemoryEnabled() {
- return mOnDisplayMemoryOperationsListener != null
- && mOnDisplayMemoryOperationsListener.shouldDisplayMemory();
- }
-
- private boolean isPasteEnabled() {
- final ClipData clip = mClipboardManager.getPrimaryClip();
- if (clip == null || clip.getItemCount() == 0) {
- return false;
- }
- CharSequence clipText = null;
- try {
- clipText = clip.getItemAt(0).coerceToText(getContext());
- } catch (Exception e) {
- Log.i("Calculator", "Error reading clipboard:", e);
- }
- return !TextUtils.isEmpty(clipText);
- }
-
- public interface OnTextSizeChangeListener {
- void onTextSizeChanged(TextView textView, float oldSize);
- }
-
- public interface OnFormulaContextMenuClickListener {
- boolean onPaste(ClipData clip);
- void onMemoryRecall();
- }
-}
diff --git a/src/com/android/calculator2/CalculatorPadViewPager.java b/src/com/android/calculator2/CalculatorPadViewPager.java
deleted file mode 100644
index 0f430b0..0000000
--- a/src/com/android/calculator2/CalculatorPadViewPager.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.graphics.Color;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.GestureDetector;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-
-public class CalculatorPadViewPager extends ViewPager {
-
- private final PagerAdapter mStaticPagerAdapter = new PagerAdapter() {
- @Override
- public int getCount() {
- return getChildCount();
- }
-
- @Override
- public View instantiateItem(ViewGroup container, final int position) {
- final View child = getChildAt(position);
-
- // Set a OnClickListener to scroll to item's position when it isn't the current item.
- child.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- setCurrentItem(position, true /* smoothScroll */);
- }
- });
- // Set an OnTouchListener to always return true for onTouch events so that a touch
- // sequence cannot pass through the item to the item below.
- child.setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- v.onTouchEvent(event);
- return true;
- }
- });
-
- // Set an OnHoverListener to always return true for onHover events so that focus cannot
- // pass through the item to the item below.
- child.setOnHoverListener(new OnHoverListener() {
- @Override
- public boolean onHover(View v, MotionEvent event) {
- v.onHoverEvent(event);
- return true;
- }
- });
- // Make the item focusable so it can be selected via a11y.
- child.setFocusable(true);
- // Set the content description of the item which will be used by a11y to identify it.
- child.setContentDescription(getPageTitle(position));
-
- return child;
- }
-
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- removeViewAt(position);
- }
-
- @Override
- public boolean isViewFromObject(View view, Object object) {
- return view == object;
- }
-
- @Override
- public float getPageWidth(int position) {
- return position == 1 ? 7.0f / 9.0f : 1.0f;
- }
-
- @Override
- public CharSequence getPageTitle(int position) {
- final String[] pageDescriptions = getContext().getResources()
- .getStringArray(R.array.desc_pad_pages);
- return pageDescriptions[position];
- }
- };
-
- private final OnPageChangeListener mOnPageChangeListener = new SimpleOnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- for (int i = getChildCount() - 1; i >= 0; --i) {
- final View child = getChildAt(i);
- // Only the "peeking" or covered page should be clickable.
- child.setClickable(i != position);
-
- // Prevent clicks and accessibility focus from going through to descendants of
- // other pages which are covered by the current page.
- if (child instanceof ViewGroup) {
- final ViewGroup childViewGroup = (ViewGroup) child;
- for (int j = childViewGroup.getChildCount() - 1; j >= 0; --j) {
- childViewGroup.getChildAt(j)
- .setImportantForAccessibility(i == position
- ? IMPORTANT_FOR_ACCESSIBILITY_AUTO
- : IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
- }
- }
- }
- }
- };
-
- private final PageTransformer mPageTransformer = new PageTransformer() {
- @Override
- public void transformPage(View view, float position) {
- if (position < 0.0f) {
- // Pin the left page to the left side.
- view.setTranslationX(getWidth() * -position);
- view.setAlpha(Math.max(1.0f + position, 0.0f));
- } else {
- // Use the default slide transition when moving to the next page.
- view.setTranslationX(0.0f);
- view.setAlpha(1.0f);
- }
- }
- };
-
- private final GestureDetector.SimpleOnGestureListener mGestureWatcher =
- new GestureDetector.SimpleOnGestureListener() {
- @Override
- public boolean onDown(MotionEvent e) {
- // Return true so calls to onSingleTapUp are not blocked.
- return true;
- }
-
- @Override
- public boolean onSingleTapUp(MotionEvent ev) {
- if (mClickedItemIndex != -1) {
- getChildAt(mClickedItemIndex).performClick();
- mClickedItemIndex = -1;
- return true;
- }
- return super.onSingleTapUp(ev);
- }
- };
-
- private final GestureDetector mGestureDetector;
-
- private int mClickedItemIndex = -1;
-
- public CalculatorPadViewPager(Context context) {
- this(context, null /* attrs */);
- }
-
- public CalculatorPadViewPager(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- mGestureDetector = new GestureDetector(context, mGestureWatcher);
- mGestureDetector.setIsLongpressEnabled(false);
-
- setAdapter(mStaticPagerAdapter);
- setBackgroundColor(Color.BLACK);
- setPageMargin(-getResources().getDimensionPixelSize(R.dimen.pad_page_margin));
- setPageTransformer(false, mPageTransformer);
- addOnPageChangeListener(mOnPageChangeListener);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- // Invalidate the adapter's data set since children may have been added during inflation.
- getAdapter().notifyDataSetChanged();
-
- // Let page change listener know about our initial position.
- mOnPageChangeListener.onPageSelected(getCurrentItem());
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- try {
- // Always intercept touch events when a11y focused since otherwise they will be
- // incorrectly offset by a11y before being dispatched to children.
- if (isAccessibilityFocused() || super.onInterceptTouchEvent(ev)) {
- return true;
- }
-
- // Only allow the current item to receive touch events.
- final int action = ev.getActionMasked();
- if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) {
- // If a child is a11y focused then we must always intercept the touch event
- // since it will be incorrectly offset by a11y.
- final int childCount = getChildCount();
- for (int childIndex = childCount - 1; childIndex >= 0; --childIndex) {
- if (getChildAt(childIndex).isAccessibilityFocused()) {
- mClickedItemIndex = childIndex;
- return true;
- }
- }
-
- if (action == MotionEvent.ACTION_DOWN) {
- mClickedItemIndex = -1;
- }
-
- // Otherwise if touch is on a non-current item then intercept.
- final int actionIndex = ev.getActionIndex();
- final float x = ev.getX(actionIndex) + getScrollX();
- final float y = ev.getY(actionIndex) + getScrollY();
- for (int i = childCount - 1; i >= 0; --i) {
- final int childIndex = getChildDrawingOrder(childCount, i);
- final View child = getChildAt(childIndex);
- if (child.getVisibility() == VISIBLE
- && x >= child.getLeft() && x < child.getRight()
- && y >= child.getTop() && y < child.getBottom()) {
- if (action == MotionEvent.ACTION_DOWN) {
- mClickedItemIndex = childIndex;
- }
- return childIndex != getCurrentItem();
- }
- }
- }
-
- return false;
- } catch (IllegalArgumentException e) {
- Log.e("Calculator", "Error intercepting touch event", e);
- return false;
- }
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- try {
- // Allow both the gesture detector and super to handle the touch event so they both see
- // the full sequence of events. This should be safe since the gesture detector only
- // handle clicks and super only handles swipes.
- mGestureDetector.onTouchEvent(ev);
- return super.onTouchEvent(ev);
- } catch (IllegalArgumentException e) {
- Log.e("Calculator", "Error processing touch event", e);
- return false;
- }
- }
-}
diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java
deleted file mode 100644
index 8fa698b..0000000
--- a/src/com/android/calculator2/CalculatorResult.java
+++ /dev/null
@@ -1,1180 +0,0 @@
-/*
- * Copyright (C) 2016 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.annotation.TargetApi;
-import android.content.ClipData;
-import android.content.ClipDescription;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.Build;
-import androidx.annotation.IntDef;
-import androidx.core.content.ContextCompat;
-import androidx.core.os.BuildCompat;
-import android.text.Layout;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.Spanned;
-import android.text.TextPaint;
-import android.text.style.BackgroundColorSpan;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.RelativeSizeSpan;
-import android.util.AttributeSet;
-import android.view.ActionMode;
-import android.view.ContextMenu;
-import android.view.GestureDetector;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.widget.OverScroller;
-import android.widget.Toast;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-// A text widget that is "infinitely" scrollable to the right,
-// and obtains the text to display via a callback to Logic.
-public class CalculatorResult extends AlignedTextView implements MenuItem.OnMenuItemClickListener,
- Evaluator.EvaluationListener, Evaluator.CharMetricsInfo {
- static final int MAX_RIGHT_SCROLL = 10000000;
- static final int INVALID = MAX_RIGHT_SCROLL + 10000;
- // A larger value is unlikely to avoid running out of space
- final OverScroller mScroller;
- final GestureDetector mGestureDetector;
- private long mIndex; // Index of expression we are displaying.
- private Evaluator mEvaluator;
- private boolean mScrollable = false;
- // A scrollable result is currently displayed.
- private boolean mValid = false;
- // The result holds a valid number (not an error message).
- // A suffix of "Pos" denotes a pixel offset. Zero represents a scroll position
- // in which the decimal point is just barely visible on the right of the display.
- private int mCurrentPos;// Position of right of display relative to decimal point, in pixels.
- // Large positive values mean the decimal point is scrolled off the
- // left of the display. Zero means decimal point is barely displayed
- // on the right.
- private int mLastPos; // Position already reflected in display. Pixels.
- private int mMinPos; // Minimum position to avoid unnecessary blanks on the left. Pixels.
- private int mMaxPos; // Maximum position before we start displaying the infinite
- // sequence of trailing zeroes on the right. Pixels.
- private int mWholeLen; // Length of the whole part of current result.
- // In the following, we use a suffix of Offset to denote a character position in a numeric
- // string relative to the decimal point. Positive is to the right and negative is to
- // the left. 1 = tenths position, -1 = units. Integer.MAX_VALUE is sometimes used
- // for the offset of the last digit in an a nonterminating decimal expansion.
- // We use the suffix "Index" to denote a zero-based index into a string representing a
- // result.
- private int mMaxCharOffset; // Character offset from decimal point of rightmost digit
- // that should be displayed, plus the length of any exponent
- // needed to display that digit.
- // Limited to MAX_RIGHT_SCROLL. Often the same as:
- private int mLsdOffset; // Position of least-significant digit in result
- private int mLastDisplayedOffset; // Offset of last digit actually displayed after adding
- // exponent.
- private boolean mWholePartFits; // Scientific notation not needed for initial display.
- private float mNoExponentCredit;
- // Fraction of digit width saved by avoiding scientific notation.
- // Only accessed from UI thread.
- private boolean mAppendExponent;
- // The result fits entirely in the display, even with an exponent,
- // but not with grouping separators. Since the result is not
- // scrollable, and we do not add the exponent to max. scroll position,
- // append an exponent insteadd of replacing trailing digits.
- private final Object mWidthLock = new Object();
- // Protects the next five fields. These fields are only
- // updated by the UI thread, and read accesses by the UI thread
- // sometimes do not acquire the lock.
- private int mWidthConstraint = 0;
- // Our total width in pixels minus space for ellipsis.
- // 0 ==> uninitialized.
- private float mCharWidth = 1;
- // Maximum character width. For now we pretend that all characters
- // have this width.
- // TODO: We're not really using a fixed width font. But it appears
- // to be close enough for the characters we use that the difference
- // is not noticeable.
- private float mGroupingSeparatorWidthRatio;
- // Fraction of digit width occupied by a digit separator.
- private float mDecimalCredit;
- // Fraction of digit width saved by replacing digit with decimal point.
- private float mNoEllipsisCredit;
- // Fraction of digit width saved by both replacing ellipsis with digit
- // and avoiding scientific notation.
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({SHOULD_REQUIRE, SHOULD_EVALUATE, SHOULD_NOT_EVALUATE})
- public @interface EvaluationRequest {}
- public static final int SHOULD_REQUIRE = 2;
- public static final int SHOULD_EVALUATE = 1;
- public static final int SHOULD_NOT_EVALUATE = 0;
- @EvaluationRequest private int mEvaluationRequest = SHOULD_REQUIRE;
- // Should we evaluate when layout completes, and how?
- private Evaluator.EvaluationListener mEvaluationListener = this;
- // Listener to use if/when evaluation is requested.
- public static final int MAX_LEADING_ZEROES = 6;
- // Maximum number of leading zeroes after decimal point before we
- // switch to scientific notation with negative exponent.
- public static final int MAX_TRAILING_ZEROES = 6;
- // Maximum number of trailing zeroes before the decimal point before
- // we switch to scientific notation with positive exponent.
- private static final int SCI_NOTATION_EXTRA = 1;
- // Extra digits for standard scientific notation. In this case we
- // have a decimal point and no ellipsis.
- // We assume that we do not drop digits to make room for the decimal
- // point in ordinary scientific notation. Thus >= 1.
- private static final int MAX_COPY_EXTRA = 100;
- // The number of extra digits we are willing to compute to copy
- // a result as an exact number.
- private static final int MAX_RECOMPUTE_DIGITS = 2000;
- // The maximum number of digits we're willing to recompute in the UI
- // thread. We only do this for known rational results, where we
- // can bound the computation cost.
- private final ForegroundColorSpan mExponentColorSpan;
- private final BackgroundColorSpan mHighlightSpan;
-
- private ActionMode mActionMode;
- private ActionMode.Callback mCopyActionModeCallback;
- private ContextMenu mContextMenu;
-
- // The user requested that the result currently being evaluated should be stored to "memory".
- private boolean mStoreToMemoryRequested = false;
-
- public CalculatorResult(Context context, AttributeSet attrs) {
- super(context, attrs);
- mScroller = new OverScroller(context);
- mHighlightSpan = new BackgroundColorSpan(getHighlightColor());
- mExponentColorSpan = new ForegroundColorSpan(
- ContextCompat.getColor(context, R.color.display_result_exponent_text_color));
- mGestureDetector = new GestureDetector(context,
- new GestureDetector.SimpleOnGestureListener() {
- @Override
- public boolean onDown(MotionEvent e) {
- return true;
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- if (!mScroller.isFinished()) {
- mCurrentPos = mScroller.getFinalX();
- }
- mScroller.forceFinished(true);
- stopActionModeOrContextMenu();
- CalculatorResult.this.cancelLongPress();
- // Ignore scrolls of error string, etc.
- if (!mScrollable) return true;
- mScroller.fling(mCurrentPos, 0, - (int) velocityX, 0 /* horizontal only */,
- mMinPos, mMaxPos, 0, 0);
- postInvalidateOnAnimation();
- return true;
- }
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
- int distance = (int)distanceX;
- if (!mScroller.isFinished()) {
- mCurrentPos = mScroller.getFinalX();
- }
- mScroller.forceFinished(true);
- stopActionModeOrContextMenu();
- CalculatorResult.this.cancelLongPress();
- if (!mScrollable) return true;
- if (mCurrentPos + distance < mMinPos) {
- distance = mMinPos - mCurrentPos;
- } else if (mCurrentPos + distance > mMaxPos) {
- distance = mMaxPos - mCurrentPos;
- }
- int duration = (int)(e2.getEventTime() - e1.getEventTime());
- if (duration < 1 || duration > 100) duration = 10;
- mScroller.startScroll(mCurrentPos, 0, distance, 0, (int)duration);
- postInvalidateOnAnimation();
- return true;
- }
- @Override
- public void onLongPress(MotionEvent e) {
- if (mValid) {
- performLongClick();
- }
- }
- });
-
- final int slop = ViewConfiguration.get(context).getScaledTouchSlop();
- setOnTouchListener(new View.OnTouchListener() {
-
- // Used to determine whether a touch event should be intercepted.
- private float mInitialDownX;
- private float mInitialDownY;
-
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- final int action = event.getActionMasked();
-
- final float x = event.getX();
- final float y = event.getY();
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- mInitialDownX = x;
- mInitialDownY = y;
- break;
- case MotionEvent.ACTION_MOVE:
- final float deltaX = Math.abs(x - mInitialDownX);
- final float deltaY = Math.abs(y - mInitialDownY);
- if (deltaX > slop && deltaX > deltaY) {
- // Prevent the DragLayout from intercepting horizontal scrolls.
- getParent().requestDisallowInterceptTouchEvent(true);
- }
- }
- return mGestureDetector.onTouchEvent(event);
- }
- });
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- setupActionMode();
- } else {
- setupContextMenu();
- }
-
- setCursorVisible(false);
- setLongClickable(false);
- setContentDescription(context.getString(R.string.desc_result));
- }
-
- void setEvaluator(Evaluator evaluator, long index) {
- mEvaluator = evaluator;
- mIndex = index;
- requestLayout();
- }
-
- // Compute maximum digit width the hard way.
- private static float getMaxDigitWidth(TextPaint paint) {
- // Compute the maximum advance width for each digit, thus accounting for between-character
- // spaces. If we ever support other kinds of digits, we may have to avoid kerning effects
- // that could reduce the advance width within this particular string.
- final String allDigits = "0123456789";
- final float[] widths = new float[allDigits.length()];
- paint.getTextWidths(allDigits, widths);
- float maxWidth = 0;
- for (float x : widths) {
- maxWidth = Math.max(x, maxWidth);
- }
- return maxWidth;
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- if (!isLaidOut()) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- // Set a minimum height so scaled error messages won't affect our layout.
- setMinimumHeight(getLineHeight() + getCompoundPaddingBottom()
- + getCompoundPaddingTop());
- }
-
- final TextPaint paint = getPaint();
- final Context context = getContext();
- final float newCharWidth = getMaxDigitWidth(paint);
- // Digits are presumed to have no more than newCharWidth.
- // There are two instances when we know that the result is otherwise narrower than
- // expected:
- // 1. For standard scientific notation (our type 1), we know that we have a norrow decimal
- // point and no (usually wide) ellipsis symbol. We allow one extra digit
- // (SCI_NOTATION_EXTRA) to compensate, and consider that in determining available width.
- // 2. If we are using digit grouping separators and a decimal point, we give ourselves
- // a fractional extra space for those separators, the value of which depends on whether
- // there is also an ellipsis.
- //
- // Maximum extra space we need in various cases:
- // Type 1 scientific notation, assuming ellipsis, minus sign and E are wider than a digit:
- // Two minus signs + "E" + "." - 3 digits.
- // Type 2 scientific notation:
- // Ellipsis + "E" + "-" - 3 digits.
- // In the absence of scientific notation, we may need a little less space.
- // We give ourselves a bit of extra credit towards comma insertion and give
- // ourselves more if we have either
- // No ellipsis, or
- // A decimal separator.
-
- // Calculate extra space we need to reserve, in addition to character count.
- final float decimalSeparatorWidth = Layout.getDesiredWidth(
- context.getString(R.string.dec_point), paint);
- final float minusWidth = Layout.getDesiredWidth(context.getString(R.string.op_sub), paint);
- final float minusExtraWidth = Math.max(minusWidth - newCharWidth, 0.0f);
- final float ellipsisWidth = Layout.getDesiredWidth(KeyMaps.ELLIPSIS, paint);
- final float ellipsisExtraWidth = Math.max(ellipsisWidth - newCharWidth, 0.0f);
- final float expWidth = Layout.getDesiredWidth(KeyMaps.translateResult("e"), paint);
- final float expExtraWidth = Math.max(expWidth - newCharWidth, 0.0f);
- final float type1Extra = 2 * minusExtraWidth + expExtraWidth + decimalSeparatorWidth;
- final float type2Extra = ellipsisExtraWidth + expExtraWidth + minusExtraWidth;
- final float extraWidth = Math.max(type1Extra, type2Extra);
- final int intExtraWidth = (int) Math.ceil(extraWidth) + 1 /* to cover rounding sins */;
- final int newWidthConstraint = MeasureSpec.getSize(widthMeasureSpec)
- - (getPaddingLeft() + getPaddingRight()) - intExtraWidth;
-
- // Calculate other width constants we need to handle grouping separators.
- final float groupingSeparatorW =
- Layout.getDesiredWidth(KeyMaps.translateResult(","), paint);
- // Credits in the absence of any scientific notation:
- float noExponentCredit = extraWidth - Math.max(ellipsisExtraWidth, minusExtraWidth);
- final float noEllipsisCredit = extraWidth - minusExtraWidth; // includes noExponentCredit.
- final float decimalCredit = Math.max(newCharWidth - decimalSeparatorWidth, 0.0f);
-
- mNoExponentCredit = noExponentCredit / newCharWidth;
- synchronized(mWidthLock) {
- mWidthConstraint = newWidthConstraint;
- mCharWidth = newCharWidth;
- mNoEllipsisCredit = noEllipsisCredit / newCharWidth;
- mDecimalCredit = decimalCredit / newCharWidth;
- mGroupingSeparatorWidthRatio = groupingSeparatorW / newCharWidth;
- }
-
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- super.onLayout(changed, left, top, right, bottom);
-
- if (mEvaluator != null && mEvaluationRequest != SHOULD_NOT_EVALUATE) {
- final CalculatorExpr expr = mEvaluator.getExpr(mIndex);
- if (expr != null && expr.hasInterestingOps()) {
- if (mEvaluationRequest == SHOULD_REQUIRE) {
- mEvaluator.requireResult(mIndex, mEvaluationListener, this);
- } else {
- mEvaluator.evaluateAndNotify(mIndex, mEvaluationListener, this);
- }
- }
- }
- }
-
- /**
- * Specify whether we should evaluate result on layout.
- * @param should one of SHOULD_REQUIRE, SHOULD_EVALUATE, SHOULD_NOT_EVALUATE
- */
- public void setShouldEvaluateResult(@EvaluationRequest int request,
- Evaluator.EvaluationListener listener) {
- mEvaluationListener = listener;
- mEvaluationRequest = request;
- }
-
- // From Evaluator.CharMetricsInfo.
- @Override
- public float separatorChars(String s, int len) {
- int start = 0;
- while (start < len && !Character.isDigit(s.charAt(start))) {
- ++start;
- }
- // We assume the rest consists of digits, and for consistency with the rest
- // of the code, we assume all digits have width mCharWidth.
- final int nDigits = len - start;
- // We currently insert a digit separator every three digits.
- final int nSeparators = (nDigits - 1) / 3;
- synchronized(mWidthLock) {
- // Always return an upper bound, even in the presence of rounding errors.
- return nSeparators * mGroupingSeparatorWidthRatio;
- }
- }
-
- // From Evaluator.CharMetricsInfo.
- @Override
- public float getNoEllipsisCredit() {
- synchronized(mWidthLock) {
- return mNoEllipsisCredit;
- }
- }
-
- // From Evaluator.CharMetricsInfo.
- @Override
- public float getDecimalCredit() {
- synchronized(mWidthLock) {
- return mDecimalCredit;
- }
- }
-
- // Return the length of the exponent representation for the given exponent, in
- // characters.
- private final int expLen(int exp) {
- if (exp == 0) return 0;
- final int abs_exp_digits = (int) Math.ceil(Math.log10(Math.abs((double)exp))
- + 0.0000000001d /* Round whole numbers to next integer */);
- return abs_exp_digits + (exp >= 0 ? 1 : 2);
- }
-
- /**
- * Initiate display of a new result.
- * Only called from UI thread.
- * The parameters specify various properties of the result.
- * @param index Index of expression that was just evaluated. Currently ignored, since we only
- * expect notification for the expression result being displayed.
- * @param initPrec Initial display precision computed by evaluator. (1 = tenths digit)
- * @param msd Position of most significant digit. Offset from left of string.
- Evaluator.INVALID_MSD if unknown.
- * @param leastDigPos Position of least significant digit (1 = tenths digit)
- * or Integer.MAX_VALUE.
- * @param truncatedWholePart Result up to but not including decimal point.
- Currently we only use the length.
- */
- @Override
- public void onEvaluate(long index, int initPrec, int msd, int leastDigPos,
- String truncatedWholePart) {
- initPositions(initPrec, msd, leastDigPos, truncatedWholePart);
-
- if (mStoreToMemoryRequested) {
- mEvaluator.copyToMemory(index);
- mStoreToMemoryRequested = false;
- }
- redisplay();
- }
-
- /**
- * Store the result for this index if it is available.
- * If it is unavailable, set mStoreToMemoryRequested to indicate that we should store
- * when evaluation is complete.
- */
- public void onMemoryStore() {
- if (mEvaluator.hasResult(mIndex)) {
- mEvaluator.copyToMemory(mIndex);
- } else {
- mStoreToMemoryRequested = true;
- mEvaluator.requireResult(mIndex, this /* listener */, this /* CharMetricsInfo */);
- }
- }
-
- /**
- * Add the result to the value currently in memory.
- */
- public void onMemoryAdd() {
- mEvaluator.addToMemory(mIndex);
- }
-
- /**
- * Subtract the result from the value currently in memory.
- */
- public void onMemorySubtract() {
- mEvaluator.subtractFromMemory(mIndex);
- }
-
- /**
- * Set up scroll bounds (mMinPos, mMaxPos, etc.) and determine whether the result is
- * scrollable, based on the supplied information about the result.
- * This is unfortunately complicated because we need to predict whether trailing digits
- * will eventually be replaced by an exponent.
- * Just appending the exponent during formatting would be simpler, but would produce
- * jumpier results during transitions.
- * Only called from UI thread.
- */
- private void initPositions(int initPrecOffset, int msdIndex, int lsdOffset,
- String truncatedWholePart) {
- int maxChars = getMaxChars();
- mWholeLen = truncatedWholePart.length();
- // Allow a tiny amount of slop for associativity/rounding differences in length
- // calculation. If getPreferredPrec() decided it should fit, we want to make it fit, too.
- // We reserved one extra pixel, so the extra length is OK.
- final int nSeparatorChars = (int) Math.ceil(
- separatorChars(truncatedWholePart, truncatedWholePart.length())
- - getNoEllipsisCredit() - 0.0001f);
- mWholePartFits = mWholeLen + nSeparatorChars <= maxChars;
- mLastPos = INVALID;
- mLsdOffset = lsdOffset;
- mAppendExponent = false;
- // Prevent scrolling past initial position, which is calculated to show leading digits.
- mCurrentPos = mMinPos = (int) Math.round(initPrecOffset * mCharWidth);
- if (msdIndex == Evaluator.INVALID_MSD) {
- // Possible zero value
- if (lsdOffset == Integer.MIN_VALUE) {
- // Definite zero value.
- mMaxPos = mMinPos;
- mMaxCharOffset = (int) Math.round(mMaxPos/mCharWidth);
- mScrollable = false;
- } else {
- // May be very small nonzero value. Allow user to find out.
- mMaxPos = mMaxCharOffset = MAX_RIGHT_SCROLL;
- mMinPos -= mCharWidth; // Allow for future minus sign.
- mScrollable = true;
- }
- return;
- }
- int negative = truncatedWholePart.charAt(0) == '-' ? 1 : 0;
- if (msdIndex > mWholeLen && msdIndex <= mWholeLen + 3) {
- // Avoid tiny negative exponent; pretend msdIndex is just to the right of decimal point.
- msdIndex = mWholeLen - 1;
- }
- // Set to position of leftmost significant digit relative to dec. point. Usually negative.
- int minCharOffset = msdIndex - mWholeLen;
- if (minCharOffset > -1 && minCharOffset < MAX_LEADING_ZEROES + 2) {
- // Small number of leading zeroes, avoid scientific notation.
- minCharOffset = -1;
- }
- if (lsdOffset < MAX_RIGHT_SCROLL) {
- mMaxCharOffset = lsdOffset;
- if (mMaxCharOffset < -1 && mMaxCharOffset > -(MAX_TRAILING_ZEROES + 2)) {
- mMaxCharOffset = -1;
- }
- // lsdOffset is positive or negative, never 0.
- int currentExpLen = 0; // Length of required standard scientific notation exponent.
- if (mMaxCharOffset < -1) {
- currentExpLen = expLen(-minCharOffset - 1);
- } else if (minCharOffset > -1 || mMaxCharOffset >= maxChars) {
- // Number is either entirely to the right of decimal point, or decimal point is
- // not visible when scrolled to the right.
- currentExpLen = expLen(-minCharOffset);
- }
- // Exponent length does not included added decimal point. But whenever we add a
- // decimal point, we allow an extra character (SCI_NOTATION_EXTRA).
- final int separatorLength = mWholePartFits && minCharOffset < -3 ? nSeparatorChars : 0;
- mScrollable = (mMaxCharOffset + currentExpLen + separatorLength - minCharOffset
- + negative >= maxChars);
- // Now adjust mMaxCharOffset for any required exponent.
- int newMaxCharOffset;
- if (currentExpLen > 0) {
- if (mScrollable) {
- // We'll use exponent corresponding to leastDigPos when scrolled to right.
- newMaxCharOffset = mMaxCharOffset + expLen(-lsdOffset);
- } else {
- newMaxCharOffset = mMaxCharOffset + currentExpLen;
- }
- if (mMaxCharOffset <= -1 && newMaxCharOffset > -1) {
- // Very unlikely; just drop exponent.
- mMaxCharOffset = -1;
- } else {
- mMaxCharOffset = Math.min(newMaxCharOffset, MAX_RIGHT_SCROLL);
- }
- mMaxPos = Math.min((int) Math.round(mMaxCharOffset * mCharWidth),
- MAX_RIGHT_SCROLL);
- } else if (!mWholePartFits && !mScrollable) {
- // Corner case in which entire number fits, but not with grouping separators. We
- // will use an exponent in un-scrolled position, which may hide digits. Scrolling
- // by one character will remove the exponent and reveal the last digits. Note
- // that in the forced scientific notation case, the exponent length is not
- // factored into mMaxCharOffset, since we do not want such an increase to impact
- // scrolling behavior. In the unscrollable case, we thus have to append the
- // exponent at the end using the forcePrecision argument to formatResult, in order
- // to ensure that we get the entire result.
- mScrollable = (mMaxCharOffset + expLen(-minCharOffset - 1) - minCharOffset
- + negative >= maxChars);
- if (mScrollable) {
- mMaxPos = (int) Math.ceil(mMinPos + mCharWidth);
- // Single character scroll will remove exponent and show remaining piece.
- } else {
- mMaxPos = mMinPos;
- mAppendExponent = true;
- }
- } else {
- mMaxPos = Math.min((int) Math.round(mMaxCharOffset * mCharWidth),
- MAX_RIGHT_SCROLL);
- }
- if (!mScrollable) {
- // Position the number consistently with our assumptions to make sure it
- // actually fits.
- mCurrentPos = mMaxPos;
- }
- } else {
- mMaxPos = mMaxCharOffset = MAX_RIGHT_SCROLL;
- mScrollable = true;
- }
- }
-
- /**
- * Display error message indicated by resourceId.
- * UI thread only.
- */
- @Override
- public void onError(long index, int resourceId) {
- mStoreToMemoryRequested = false;
- mValid = false;
- setLongClickable(false);
- mScrollable = false;
- final String msg = getContext().getString(resourceId);
- final float measuredWidth = Layout.getDesiredWidth(msg, getPaint());
- if (measuredWidth > mWidthConstraint) {
- // Multiply by .99 to avoid rounding effects.
- final float scaleFactor = 0.99f * mWidthConstraint / measuredWidth;
- final RelativeSizeSpan smallTextSpan = new RelativeSizeSpan(scaleFactor);
- final SpannableString scaledMsg = new SpannableString(msg);
- scaledMsg.setSpan(smallTextSpan, 0, msg.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- setText(scaledMsg);
- } else {
- setText(msg);
- }
- }
-
- private final int MAX_COPY_SIZE = 1000000;
-
- /*
- * Return the most significant digit position in the given string or Evaluator.INVALID_MSD.
- * Unlike Evaluator.getMsdIndexOf, we treat a final 1 as significant.
- * Pure function; callable from anywhere.
- */
- public static int getNaiveMsdIndexOf(String s) {
- final int len = s.length();
- for (int i = 0; i < len; ++i) {
- char c = s.charAt(i);
- if (c != '-' && c != '.' && c != '0') {
- return i;
- }
- }
- return Evaluator.INVALID_MSD;
- }
-
- /**
- * Format a result returned by Evaluator.getString() into a single line containing ellipses
- * (if appropriate) and an exponent (if appropriate).
- * We add two distinct kinds of exponents:
- * (1) If the final result contains the leading digit we use standard scientific notation.
- * (2) If not, we add an exponent corresponding to an interpretation of the final result as
- * an integer.
- * We add an ellipsis on the left if the result was truncated.
- * We add ellipses and exponents in a way that leaves most digits in the position they
- * would have been in had we not done so. This minimizes jumps as a result of scrolling.
- * Result is NOT internationalized, uses "E" for exponent.
- * Called only from UI thread; We sometimes omit locking for fields.
- * @param precOffset The value that was passed to getString. Identifies the significance of
- the rightmost digit. A value of 1 means the rightmost digits corresponds to tenths.
- * @param maxDigs The maximum number of characters in the result
- * @param truncated The in parameter was already truncated, beyond possibly removing the
- minus sign.
- * @param negative The in parameter represents a negative result. (Minus sign may be removed
- without setting truncated.)
- * @param lastDisplayedOffset If not null, we set lastDisplayedOffset[0] to the offset of
- the last digit actually appearing in the display.
- * @param forcePrecision If true, we make sure that the last displayed digit corresponds to
- precOffset, and allow maxDigs to be exceeded in adding the exponent and commas.
- * @param forceSciNotation Force scientific notation. May be set because we don't have
- space for grouping separators, but whole number otherwise fits.
- * @param insertCommas Insert commas (literally, not internationalized) as digit separators.
- We only ever do this for the integral part of a number, and only when no
- exponent is displayed in the initial position. The combination of which means
- that we only do it when no exponent is displayed.
- We insert commas in a way that does consider the width of the actual localized digit
- separator. Commas count towards maxDigs as the appropriate fraction of a digit.
- */
- private String formatResult(String in, int precOffset, int maxDigs, boolean truncated,
- boolean negative, int lastDisplayedOffset[], boolean forcePrecision,
- boolean forceSciNotation, boolean insertCommas) {
- final int minusSpace = negative ? 1 : 0;
- final int msdIndex = truncated ? -1 : getNaiveMsdIndexOf(in); // INVALID_MSD is OK.
- String result = in;
- boolean needEllipsis = false;
- if (truncated || (negative && result.charAt(0) != '-')) {
- needEllipsis = true;
- result = KeyMaps.ELLIPSIS + result.substring(1, result.length());
- // Ellipsis may be removed again in the type(1) scientific notation case.
- }
- final int decIndex = result.indexOf('.');
- if (lastDisplayedOffset != null) {
- lastDisplayedOffset[0] = precOffset;
- }
- if (forceSciNotation || (decIndex == -1 || msdIndex != Evaluator.INVALID_MSD
- && msdIndex - decIndex > MAX_LEADING_ZEROES + 1) && precOffset != -1) {
- // Either:
- // 1) No decimal point displayed, and it's not just to the right of the last digit, or
- // 2) we are at the front of a number whos integral part is too large to allow
- // comma insertion, or
- // 3) we should suppress leading zeroes.
- // Add an exponent to let the user track which digits are currently displayed.
- // Start with type (2) exponent if we dropped no digits. -1 accounts for decimal point.
- // We currently never show digit separators together with an exponent.
- final int initExponent = precOffset > 0 ? -precOffset : -precOffset - 1;
- int exponent = initExponent;
- boolean hasPoint = false;
- if (!truncated && msdIndex < maxDigs - 1
- && result.length() - msdIndex + 1 + minusSpace
- <= maxDigs + SCI_NOTATION_EXTRA) {
- // Type (1) exponent computation and transformation:
- // Leading digit is in display window. Use standard calculator scientific notation
- // with one digit to the left of the decimal point. Insert decimal point and
- // delete leading zeroes.
- // We try to keep leading digits roughly in position, and never
- // lengthen the result by more than SCI_NOTATION_EXTRA.
- if (decIndex > msdIndex) {
- // In the forceSciNotation, we can have a decimal point in the relevant digit
- // range. Remove it.
- result = result.substring(0, decIndex)
- + result.substring(decIndex + 1, result.length());
- // msdIndex and precOffset unaffected.
- }
- final int resLen = result.length();
- String fraction = result.substring(msdIndex + 1, resLen);
- result = (negative ? "-" : "") + result.substring(msdIndex, msdIndex + 1)
- + "." + fraction;
- // Original exp was correct for decimal point at right of fraction.
- // Adjust by length of fraction.
- exponent = initExponent + resLen - msdIndex - 1;
- hasPoint = true;
- }
- // Exponent can't be zero.
- // Actually add the exponent of either type:
- if (!forcePrecision) {
- int dropDigits; // Digits to drop to make room for exponent.
- if (hasPoint) {
- // Type (1) exponent.
- // Drop digits even if there is room. Otherwise the scrolling gets jumpy.
- dropDigits = expLen(exponent);
- if (dropDigits >= result.length() - 1) {
- // Jumpy is better than no mantissa. Probably impossible anyway.
- dropDigits = Math.max(result.length() - 2, 0);
- }
- } else {
- // Type (2) exponent.
- // Exponent depends on the number of digits we drop, which depends on
- // exponent ...
- for (dropDigits = 2; expLen(initExponent + dropDigits) > dropDigits;
- ++dropDigits) {}
- exponent = initExponent + dropDigits;
- if (precOffset - dropDigits > mLsdOffset) {
- // This can happen if e.g. result = 10^40 + 10^10
- // It turns out we would otherwise display ...10e9 because it takes
- // the same amount of space as ...1e10 but shows one more digit.
- // But we don't want to display a trailing zero, even if it's free.
- ++dropDigits;
- ++exponent;
- }
- }
- if (dropDigits >= result.length() - 1) {
- // Display too small to show meaningful result.
- return KeyMaps.ELLIPSIS + "E" + KeyMaps.ELLIPSIS;
- }
- result = result.substring(0, result.length() - dropDigits);
- if (lastDisplayedOffset != null) {
- lastDisplayedOffset[0] -= dropDigits;
- }
- }
- result = result + "E" + Integer.toString(exponent);
- } else if (insertCommas) {
- // Add commas to the whole number section, and then truncate on left to fit,
- // counting commas as a fractional digit.
- final int wholeStart = needEllipsis ? 1 : 0;
- int orig_length = result.length();
- final float nCommaChars;
- if (decIndex != -1) {
- nCommaChars = separatorChars(result, decIndex);
- result = StringUtils.addCommas(result, wholeStart, decIndex)
- + result.substring(decIndex, orig_length);
- } else {
- nCommaChars = separatorChars(result, orig_length);
- result = StringUtils.addCommas(result, wholeStart, orig_length);
- }
- if (needEllipsis) {
- orig_length -= 1; // Exclude ellipsis.
- }
- final float len = orig_length + nCommaChars;
- int deletedChars = 0;
- final float ellipsisCredit = getNoEllipsisCredit();
- final float decimalCredit = getDecimalCredit();
- final float effectiveLen = len - (decIndex == -1 ? 0 : getDecimalCredit());
- final float ellipsisAdjustment =
- needEllipsis ? mNoExponentCredit : getNoEllipsisCredit();
- // As above, we allow for a tiny amount of extra length here, for consistency with
- // getPreferredPrec().
- if (effectiveLen - ellipsisAdjustment > (float) (maxDigs - wholeStart) + 0.0001f
- && !forcePrecision) {
- float deletedWidth = 0.0f;
- while (effectiveLen - mNoExponentCredit - deletedWidth
- > (float) (maxDigs - 1 /* for ellipsis */)) {
- if (result.charAt(deletedChars) == ',') {
- deletedWidth += mGroupingSeparatorWidthRatio;
- } else {
- deletedWidth += 1.0f;
- }
- deletedChars++;
- }
- }
- if (deletedChars > 0) {
- result = KeyMaps.ELLIPSIS + result.substring(deletedChars, result.length());
- } else if (needEllipsis) {
- result = KeyMaps.ELLIPSIS + result;
- }
- }
- return result;
- }
-
- /**
- * Get formatted, but not internationalized, result from mEvaluator.
- * @param precOffset requested position (1 = tenths) of last included digit
- * @param maxSize maximum number of characters (more or less) in result
- * @param lastDisplayedOffset zeroth entry is set to actual offset of last included digit,
- * after adjusting for exponent, etc. May be null.
- * @param forcePrecision Ensure that last included digit is at pos, at the expense
- * of treating maxSize as a soft limit.
- * @param forceSciNotation Force scientific notation, even if not required by maxSize.
- * @param insertCommas Insert commas as digit separators.
- */
- private String getFormattedResult(int precOffset, int maxSize, int lastDisplayedOffset[],
- boolean forcePrecision, boolean forceSciNotation, boolean insertCommas) {
- final boolean truncated[] = new boolean[1];
- final boolean negative[] = new boolean[1];
- final int requestedPrecOffset[] = {precOffset};
- final String rawResult = mEvaluator.getString(mIndex, requestedPrecOffset, mMaxCharOffset,
- maxSize, truncated, negative, this);
- return formatResult(rawResult, requestedPrecOffset[0], maxSize, truncated[0], negative[0],
- lastDisplayedOffset, forcePrecision, forceSciNotation, insertCommas);
- }
-
- /**
- * Return entire result (within reason) up to current displayed precision.
- * @param withSeparators Add digit separators
- */
- public String getFullText(boolean withSeparators) {
- if (!mValid) return "";
- if (!mScrollable) return getText().toString();
- return KeyMaps.translateResult(getFormattedResult(mLastDisplayedOffset, MAX_COPY_SIZE,
- null, true /* forcePrecision */, false /* forceSciNotation */, withSeparators));
- }
-
- /**
- * Did the above produce a correct result?
- * UI thread only.
- */
- public boolean fullTextIsExact() {
- return !mScrollable || (getCharOffset(mMaxPos) == getCharOffset(mCurrentPos)
- && mMaxCharOffset != MAX_RIGHT_SCROLL);
- }
-
- /**
- * Get entire result up to current displayed precision, or up to MAX_COPY_EXTRA additional
- * digits, if it will lead to an exact result.
- */
- public String getFullCopyText() {
- if (!mValid
- || mLsdOffset == Integer.MAX_VALUE
- || fullTextIsExact()
- || mWholeLen > MAX_RECOMPUTE_DIGITS
- || mWholeLen + mLsdOffset > MAX_RECOMPUTE_DIGITS
- || mLsdOffset - mLastDisplayedOffset > MAX_COPY_EXTRA) {
- return getFullText(false /* withSeparators */);
- }
- // It's reasonable to compute and copy the exact result instead.
- int fractionLsdOffset = Math.max(0, mLsdOffset);
- String rawResult = mEvaluator.getResult(mIndex).toStringTruncated(fractionLsdOffset);
- if (mLsdOffset <= -1) {
- // Result has trailing decimal point. Remove it.
- rawResult = rawResult.substring(0, rawResult.length() - 1);
- fractionLsdOffset = -1;
- }
- final String formattedResult = formatResult(rawResult, fractionLsdOffset, MAX_COPY_SIZE,
- false, rawResult.charAt(0) == '-', null, true /* forcePrecision */,
- false /* forceSciNotation */, false /* insertCommas */);
- return KeyMaps.translateResult(formattedResult);
- }
-
- /**
- * Return the maximum number of characters that will fit in the result display.
- * May be called asynchronously from non-UI thread. From Evaluator.CharMetricsInfo.
- * Returns zero if measurement hasn't completed.
- */
- @Override
- public int getMaxChars() {
- int result;
- synchronized(mWidthLock) {
- return (int) Math.floor(mWidthConstraint / mCharWidth);
- }
- }
-
- /**
- * @return {@code true} if the currently displayed result is scrollable
- */
- public boolean isScrollable() {
- return mScrollable;
- }
-
- /**
- * Map pixel position to digit offset.
- * UI thread only.
- */
- int getCharOffset(int pos) {
- return (int) Math.round(pos / mCharWidth); // Lock not needed.
- }
-
- void clear() {
- mValid = false;
- mScrollable = false;
- setText("");
- setLongClickable(false);
- }
-
- @Override
- public void onCancelled(long index) {
- clear();
- mStoreToMemoryRequested = false;
- }
-
- /**
- * Refresh display.
- * Only called in UI thread. Index argument is currently ignored.
- */
- @Override
- public void onReevaluate(long index) {
- redisplay();
- }
-
- public void redisplay() {
- int maxChars = getMaxChars();
- if (maxChars < 4) {
- // Display currently too small to display a reasonable result. Punt to avoid crash.
- return;
- }
- if (mScroller.isFinished() && length() > 0) {
- setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE);
- }
- int currentCharOffset = getCharOffset(mCurrentPos);
- int lastDisplayedOffset[] = new int[1];
- String result = getFormattedResult(currentCharOffset, maxChars, lastDisplayedOffset,
- mAppendExponent /* forcePrecision; preserve entire result */,
- !mWholePartFits
- && currentCharOffset == getCharOffset(mMinPos) /* forceSciNotation */,
- mWholePartFits /* insertCommas */ );
- int expIndex = result.indexOf('E');
- result = KeyMaps.translateResult(result);
- if (expIndex > 0 && result.indexOf('.') == -1) {
- // Gray out exponent if used as position indicator
- SpannableString formattedResult = new SpannableString(result);
- formattedResult.setSpan(mExponentColorSpan, expIndex, result.length(),
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- setText(formattedResult);
- } else {
- setText(result);
- }
- mLastDisplayedOffset = lastDisplayedOffset[0];
- mValid = true;
- setLongClickable(true);
- }
-
- @Override
- protected void onTextChanged(java.lang.CharSequence text, int start, int lengthBefore,
- int lengthAfter) {
- super.onTextChanged(text, start, lengthBefore, lengthAfter);
-
- if (!mScrollable || mScroller.isFinished()) {
- if (lengthBefore == 0 && lengthAfter > 0) {
- setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE);
- setContentDescription(null);
- } else if (lengthBefore > 0 && lengthAfter == 0) {
- setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_NONE);
- setContentDescription(getContext().getString(R.string.desc_result));
- }
- }
- }
-
- @Override
- public void computeScroll() {
- if (!mScrollable) {
- return;
- }
-
- if (mScroller.computeScrollOffset()) {
- mCurrentPos = mScroller.getCurrX();
- if (getCharOffset(mCurrentPos) != getCharOffset(mLastPos)) {
- mLastPos = mCurrentPos;
- redisplay();
- }
- }
-
- if (!mScroller.isFinished()) {
- postInvalidateOnAnimation();
- setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_NONE);
- } else if (length() > 0){
- setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE);
- }
- }
-
- /**
- * Use ActionMode for copy/memory support on M and higher.
- */
- @TargetApi(Build.VERSION_CODES.M)
- private void setupActionMode() {
- mCopyActionModeCallback = new ActionMode.Callback2() {
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- final MenuInflater inflater = mode.getMenuInflater();
- return createContextMenu(inflater, menu);
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- return false; // Return false if nothing is done
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- if (onMenuItemClick(item)) {
- mode.finish();
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public void onDestroyActionMode(ActionMode mode) {
- unhighlightResult();
- mActionMode = null;
- }
-
- @Override
- public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
- super.onGetContentRect(mode, view, outRect);
-
- outRect.left += view.getPaddingLeft();
- outRect.top += view.getPaddingTop();
- outRect.right -= view.getPaddingRight();
- outRect.bottom -= view.getPaddingBottom();
- final int width = (int) Layout.getDesiredWidth(getText(), getPaint());
- if (width < outRect.width()) {
- outRect.left = outRect.right - width;
- }
-
- if (!BuildCompat.isAtLeastN()) {
- // The CAB (prior to N) only takes the translation of a view into account, so
- // if a scale is applied to the view then the offset outRect will end up being
- // positioned incorrectly. We workaround that limitation by manually applying
- // the scale to the outRect, which the CAB will then offset to the correct
- // position.
- final float scaleX = view.getScaleX();
- final float scaleY = view.getScaleY();
- outRect.left *= scaleX;
- outRect.right *= scaleX;
- outRect.top *= scaleY;
- outRect.bottom *= scaleY;
- }
- }
- };
- setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- if (mValid) {
- mActionMode = startActionMode(mCopyActionModeCallback,
- ActionMode.TYPE_FLOATING);
- return true;
- }
- return false;
- }
- });
- }
-
- /**
- * Use ContextMenu for copy/memory support on L and lower.
- */
- private void setupContextMenu() {
- setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
- @Override
- public void onCreateContextMenu(ContextMenu contextMenu, View view,
- ContextMenu.ContextMenuInfo contextMenuInfo) {
- final MenuInflater inflater = new MenuInflater(getContext());
- createContextMenu(inflater, contextMenu);
- mContextMenu = contextMenu;
- for (int i = 0; i < contextMenu.size(); i ++) {
- contextMenu.getItem(i).setOnMenuItemClickListener(CalculatorResult.this);
- }
- }
- });
- setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- if (mValid) {
- return showContextMenu();
- }
- return false;
- }
- });
- }
-
- private boolean createContextMenu(MenuInflater inflater, Menu menu) {
- inflater.inflate(R.menu.menu_result, menu);
- final boolean displayMemory = mEvaluator.getMemoryIndex() != 0;
- final MenuItem memoryAddItem = menu.findItem(R.id.memory_add);
- final MenuItem memorySubtractItem = menu.findItem(R.id.memory_subtract);
- memoryAddItem.setEnabled(displayMemory);
- memorySubtractItem.setEnabled(displayMemory);
- highlightResult();
- return true;
- }
-
- public boolean stopActionModeOrContextMenu() {
- if (mActionMode != null) {
- mActionMode.finish();
- return true;
- }
- if (mContextMenu != null) {
- unhighlightResult();
- mContextMenu.close();
- return true;
- }
- return false;
- }
-
- private void highlightResult() {
- final Spannable text = (Spannable) getText();
- text.setSpan(mHighlightSpan, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
-
- private void unhighlightResult() {
- final Spannable text = (Spannable) getText();
- text.removeSpan(mHighlightSpan);
- }
-
- private void setPrimaryClip(ClipData clip) {
- ClipboardManager clipboard = (ClipboardManager) getContext().
- getSystemService(Context.CLIPBOARD_SERVICE);
- clipboard.setPrimaryClip(clip);
- }
-
- private void copyContent() {
- final CharSequence text = getFullCopyText();
- ClipboardManager clipboard =
- (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
- // We include a tag URI, to allow us to recognize our own results and handle them
- // specially.
- ClipData.Item newItem = new ClipData.Item(text, null, mEvaluator.capture(mIndex));
- String[] mimeTypes = new String[] {ClipDescription.MIMETYPE_TEXT_PLAIN};
- ClipData cd = new ClipData("calculator result", mimeTypes, newItem);
- clipboard.setPrimaryClip(cd);
- Toast.makeText(getContext(), R.string.text_copied_toast, Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.memory_add:
- onMemoryAdd();
- return true;
- case R.id.memory_subtract:
- onMemorySubtract();
- return true;
- case R.id.memory_store:
- onMemoryStore();
- return true;
- case R.id.menu_copy:
- if (mEvaluator.evaluationInProgress(mIndex)) {
- // Refuse to copy placeholder characters.
- return false;
- } else {
- copyContent();
- unhighlightResult();
- return true;
- }
- default:
- return false;
- }
- }
-
- @Override
- protected void onDetachedFromWindow() {
- stopActionModeOrContextMenu();
- super.onDetachedFromWindow();
- }
-}
diff --git a/src/com/android/calculator2/CalculatorScrollView.java b/src/com/android/calculator2/CalculatorScrollView.java
deleted file mode 100644
index 018ad10..0000000
--- a/src/com/android/calculator2/CalculatorScrollView.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.HorizontalScrollView;
-
-import static android.view.View.MeasureSpec.UNSPECIFIED;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-
-public class CalculatorScrollView extends HorizontalScrollView {
-
- public CalculatorScrollView(Context context) {
- this(context, null /* attrs */);
- }
-
- public CalculatorScrollView(Context context, AttributeSet attrs) {
- this(context, attrs, 0 /* defStyleAttr */);
- }
-
- public CalculatorScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- private static int getChildMeasureSpecCompat(int spec, int padding, int childDimension) {
- if (MeasureSpec.getMode(spec) == UNSPECIFIED
- && (childDimension == MATCH_PARENT || childDimension == WRAP_CONTENT)) {
- final int size = Math.max(0, MeasureSpec.getSize(spec) - padding);
- return MeasureSpec.makeMeasureSpec(size, UNSPECIFIED);
- }
- return ViewGroup.getChildMeasureSpec(spec, padding, childDimension);
- }
-
- @Override
- protected void measureChild(View child, int parentWidthMeasureSpec,
- int parentHeightMeasureSpec) {
- // Allow child to be as wide as they want.
- parentWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
- MeasureSpec.getSize(parentWidthMeasureSpec), UNSPECIFIED);
-
- final ViewGroup.LayoutParams lp = child.getLayoutParams();
- final int childWidthMeasureSpec = getChildMeasureSpecCompat(parentWidthMeasureSpec,
- 0 /* padding */, lp.width);
- final int childHeightMeasureSpec = getChildMeasureSpecCompat(parentHeightMeasureSpec,
- getPaddingTop() + getPaddingBottom(), lp.height);
-
- child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
- }
-
- @Override
- protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed,
- int parentHeightMeasureSpec, int heightUsed) {
- // Allow child to be as wide as they want.
- parentWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
- MeasureSpec.getSize(parentWidthMeasureSpec), UNSPECIFIED);
-
- final MarginLayoutParams lp = (MarginLayoutParams) child.getLayoutParams();
- final int childWidthMeasureSpec = getChildMeasureSpecCompat(parentWidthMeasureSpec,
- lp.leftMargin + lp.rightMargin, lp.width);
- final int childHeightMeasureSpec = getChildMeasureSpecCompat(parentHeightMeasureSpec,
- getPaddingTop() + getPaddingBottom() + lp.topMargin + lp.bottomMargin, lp.height);
-
- child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
- }
-}
diff --git a/src/com/android/calculator2/DragController.java b/src/com/android/calculator2/DragController.java
deleted file mode 100644
index 5b9b1c6..0000000
--- a/src/com/android/calculator2/DragController.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * Copyright (C) 2016 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.animation.ArgbEvaluator;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.View;
-import android.widget.TextView;
-
-/**
- * Contains the logic for animating the recyclerview elements on drag.
- */
-public final class DragController {
-
- private static final String TAG = "DragController";
-
- private static final ArgbEvaluator mColorEvaluator = new ArgbEvaluator();
-
- // References to views from the Calculator Display.
- private CalculatorFormula mDisplayFormula;
- private CalculatorResult mDisplayResult;
- private View mToolbar;
-
- private int mFormulaTranslationY;
- private int mFormulaTranslationX;
- private float mFormulaScale;
- private float mResultScale;
-
- private float mResultTranslationY;
- private int mResultTranslationX;
-
- private int mDisplayHeight;
-
- private int mFormulaStartColor;
- private int mFormulaEndColor;
-
- private int mResultStartColor;
- private int mResultEndColor;
-
- // The padding at the bottom of the RecyclerView itself.
- private int mBottomPaddingHeight;
-
- private boolean mAnimationInitialized;
-
- private boolean mOneLine;
- private boolean mIsDisplayEmpty;
-
- private AnimationController mAnimationController;
-
- private Evaluator mEvaluator;
-
- public void setEvaluator(Evaluator evaluator) {
- mEvaluator = evaluator;
- }
-
- public void initializeController(boolean isResult, boolean oneLine, boolean isDisplayEmpty) {
- mOneLine = oneLine;
- mIsDisplayEmpty = isDisplayEmpty;
- if (mIsDisplayEmpty) {
- // Empty display
- mAnimationController = new EmptyAnimationController();
- } else if (isResult) {
- // Result
- mAnimationController = new ResultAnimationController();
- } else {
- // There is something in the formula field. There may or may not be
- // a quick result.
- mAnimationController = new AnimationController();
- }
- }
-
- public void setDisplayFormula(CalculatorFormula formula) {
- mDisplayFormula = formula;
- }
-
- public void setDisplayResult(CalculatorResult result) {
- mDisplayResult = result;
- }
-
- public void setToolbar(View toolbar) {
- mToolbar = toolbar;
- }
-
- public void animateViews(float yFraction, RecyclerView recyclerView) {
- if (mDisplayFormula == null
- || mDisplayResult == null
- || mToolbar == null
- || mEvaluator == null) {
- // Bail if we aren't yet initialized.
- return;
- }
-
- final HistoryAdapter.ViewHolder vh =
- (HistoryAdapter.ViewHolder) recyclerView.findViewHolderForAdapterPosition(0);
- if (yFraction > 0 && vh != null) {
- recyclerView.setVisibility(View.VISIBLE);
- }
- if (vh != null && !mIsDisplayEmpty
- && vh.getItemViewType() == HistoryAdapter.HISTORY_VIEW_TYPE) {
- final AlignedTextView formula = vh.getFormula();
- final CalculatorResult result = vh.getResult();
- final TextView date = vh.getDate();
- final View divider = vh.getDivider();
-
- if (!mAnimationInitialized) {
- mBottomPaddingHeight = recyclerView.getPaddingBottom();
-
- mAnimationController.initializeScales(formula, result);
-
- mAnimationController.initializeColorAnimators(formula, result);
-
- mAnimationController.initializeFormulaTranslationX(formula);
-
- mAnimationController.initializeFormulaTranslationY(formula, result);
-
- mAnimationController.initializeResultTranslationX(result);
-
- mAnimationController.initializeResultTranslationY(result);
-
- mAnimationInitialized = true;
- }
-
- result.setScaleX(mAnimationController.getResultScale(yFraction));
- result.setScaleY(mAnimationController.getResultScale(yFraction));
-
- formula.setScaleX(mAnimationController.getFormulaScale(yFraction));
- formula.setScaleY(mAnimationController.getFormulaScale(yFraction));
-
- formula.setPivotX(formula.getWidth() - formula.getPaddingEnd());
- formula.setPivotY(formula.getHeight() - formula.getPaddingBottom());
-
- result.setPivotX(result.getWidth() - result.getPaddingEnd());
- result.setPivotY(result.getHeight() - result.getPaddingBottom());
-
- formula.setTranslationX(mAnimationController.getFormulaTranslationX(yFraction));
- formula.setTranslationY(mAnimationController.getFormulaTranslationY(yFraction));
-
- result.setTranslationX(mAnimationController.getResultTranslationX(yFraction));
- result.setTranslationY(mAnimationController.getResultTranslationY(yFraction));
-
- formula.setTextColor((int) mColorEvaluator.evaluate(yFraction, mFormulaStartColor,
- mFormulaEndColor));
-
- result.setTextColor((int) mColorEvaluator.evaluate(yFraction, mResultStartColor,
- mResultEndColor));
-
- date.setTranslationY(mAnimationController.getDateTranslationY(yFraction));
- divider.setTranslationY(mAnimationController.getDateTranslationY(yFraction));
- } else if (mIsDisplayEmpty) {
- // There is no current expression but we still need to collect information
- // to translate the other viewholders.
- if (!mAnimationInitialized) {
- mAnimationController.initializeDisplayHeight();
- mAnimationInitialized = true;
- }
- }
-
- // Move up all ViewHolders above the current expression; if there is no current expression,
- // we're translating all the viewholders.
- for (int i = recyclerView.getChildCount() - 1;
- i >= mAnimationController.getFirstTranslatedViewHolderIndex();
- --i) {
- final RecyclerView.ViewHolder vh2 =
- recyclerView.getChildViewHolder(recyclerView.getChildAt(i));
- if (vh2 != null) {
- final View view = vh2.itemView;
- if (view != null) {
- view.setTranslationY(
- mAnimationController.getHistoryElementTranslationY(yFraction));
- }
- }
- }
- }
-
- /**
- * Reset all initialized values.
- */
- public void initializeAnimation(boolean isResult, boolean oneLine, boolean isDisplayEmpty) {
- mAnimationInitialized = false;
- initializeController(isResult, oneLine, isDisplayEmpty);
- }
-
- public interface AnimateTextInterface {
-
- void initializeDisplayHeight();
-
- void initializeColorAnimators(AlignedTextView formula, CalculatorResult result);
-
- void initializeScales(AlignedTextView formula, CalculatorResult result);
-
- void initializeFormulaTranslationX(AlignedTextView formula);
-
- void initializeFormulaTranslationY(AlignedTextView formula, CalculatorResult result);
-
- void initializeResultTranslationX(CalculatorResult result);
-
- void initializeResultTranslationY(CalculatorResult result);
-
- float getResultTranslationX(float yFraction);
-
- float getResultTranslationY(float yFraction);
-
- float getResultScale(float yFraction);
-
- float getFormulaScale(float yFraction);
-
- float getFormulaTranslationX(float yFraction);
-
- float getFormulaTranslationY(float yFraction);
-
- float getDateTranslationY(float yFraction);
-
- float getHistoryElementTranslationY(float yFraction);
-
- // Return the lowest index of the first Viewholder to be translated upwards.
- // If there is no current expression, we translate all the viewholders; otherwise,
- // we start at index 1.
- int getFirstTranslatedViewHolderIndex();
- }
-
- // The default AnimationController when Display is in INPUT state and DisplayFormula is not
- // empty. There may or may not be a quick result.
- public class AnimationController implements DragController.AnimateTextInterface {
-
- public void initializeDisplayHeight() {
- // no-op
- }
-
- public void initializeColorAnimators(AlignedTextView formula, CalculatorResult result) {
- mFormulaStartColor = mDisplayFormula.getCurrentTextColor();
- mFormulaEndColor = formula.getCurrentTextColor();
-
- mResultStartColor = mDisplayResult.getCurrentTextColor();
- mResultEndColor = result.getCurrentTextColor();
- }
-
- public void initializeScales(AlignedTextView formula, CalculatorResult result) {
- // Calculate the scale for the text
- mFormulaScale = mDisplayFormula.getTextSize() / formula.getTextSize();
- }
-
- public void initializeFormulaTranslationY(AlignedTextView formula,
- CalculatorResult result) {
- if (mOneLine) {
- // Disregard result since we set it to GONE in the one-line case.
- mFormulaTranslationY =
- mDisplayFormula.getPaddingBottom() - formula.getPaddingBottom()
- - mBottomPaddingHeight;
- } else {
- // Baseline of formula moves by the difference in formula bottom padding and the
- // difference in result height.
- mFormulaTranslationY =
- mDisplayFormula.getPaddingBottom() - formula.getPaddingBottom()
- + mDisplayResult.getHeight() - result.getHeight()
- - mBottomPaddingHeight;
- }
- }
-
- public void initializeFormulaTranslationX(AlignedTextView formula) {
- // Right border of formula moves by the difference in formula end padding.
- mFormulaTranslationX = mDisplayFormula.getPaddingEnd() - formula.getPaddingEnd();
- }
-
- public void initializeResultTranslationY(CalculatorResult result) {
- // Baseline of result moves by the difference in result bottom padding.
- mResultTranslationY = mDisplayResult.getPaddingBottom() - result.getPaddingBottom()
- - mBottomPaddingHeight;
- }
-
- public void initializeResultTranslationX(CalculatorResult result) {
- mResultTranslationX = mDisplayResult.getPaddingEnd() - result.getPaddingEnd();
- }
-
- public float getResultTranslationX(float yFraction) {
- return mResultTranslationX * (yFraction - 1f);
- }
-
- public float getResultTranslationY(float yFraction) {
- return mResultTranslationY * (yFraction - 1f);
- }
-
- public float getResultScale(float yFraction) {
- return 1f;
- }
-
- public float getFormulaScale(float yFraction) {
- return mFormulaScale + (1f - mFormulaScale) * yFraction;
- }
-
- public float getFormulaTranslationX(float yFraction) {
- return mFormulaTranslationX * (yFraction - 1f);
- }
-
- public float getFormulaTranslationY(float yFraction) {
- // Scale linearly between -FormulaTranslationY and 0.
- return mFormulaTranslationY * (yFraction - 1f);
- }
-
- public float getDateTranslationY(float yFraction) {
- // We also want the date to start out above the visible screen with
- // this distance decreasing as it's pulled down.
- // Account for the scaled formula height.
- return -mToolbar.getHeight() * (1f - yFraction)
- + getFormulaTranslationY(yFraction)
- - mDisplayFormula.getHeight() /getFormulaScale(yFraction) * (1f - yFraction);
- }
-
- public float getHistoryElementTranslationY(float yFraction) {
- return getDateTranslationY(yFraction);
- }
-
- public int getFirstTranslatedViewHolderIndex() {
- return 1;
- }
- }
-
- // The default AnimationController when Display is in RESULT state.
- public class ResultAnimationController extends AnimationController
- implements DragController.AnimateTextInterface {
- @Override
- public void initializeScales(AlignedTextView formula, CalculatorResult result) {
- final float textSize = mDisplayResult.getTextSize() * mDisplayResult.getScaleX();
- mResultScale = textSize / result.getTextSize();
- mFormulaScale = 1f;
- }
-
- @Override
- public void initializeFormulaTranslationY(AlignedTextView formula,
- CalculatorResult result) {
- // Baseline of formula moves by the difference in formula bottom padding and the
- // difference in the result height.
- mFormulaTranslationY = mDisplayFormula.getPaddingBottom() - formula.getPaddingBottom()
- + mDisplayResult.getHeight() - result.getHeight()
- - mBottomPaddingHeight;
- }
-
- @Override
- public void initializeFormulaTranslationX(AlignedTextView formula) {
- // Right border of formula moves by the difference in formula end padding.
- mFormulaTranslationX = mDisplayFormula.getPaddingEnd() - formula.getPaddingEnd();
- }
-
- @Override
- public void initializeResultTranslationY(CalculatorResult result) {
- // Baseline of result moves by the difference in result bottom padding.
- mResultTranslationY = mDisplayResult.getPaddingBottom() - result.getPaddingBottom()
- - mDisplayResult.getTranslationY()
- - mBottomPaddingHeight;
- }
-
- @Override
- public void initializeResultTranslationX(CalculatorResult result) {
- mResultTranslationX = mDisplayResult.getPaddingEnd() - result.getPaddingEnd();
- }
-
- @Override
- public float getResultTranslationX(float yFraction) {
- return (mResultTranslationX * yFraction) - mResultTranslationX;
- }
-
- @Override
- public float getResultTranslationY(float yFraction) {
- return (mResultTranslationY * yFraction) - mResultTranslationY;
- }
-
- @Override
- public float getFormulaTranslationX(float yFraction) {
- return (mFormulaTranslationX * yFraction) -
- mFormulaTranslationX;
- }
-
- @Override
- public float getFormulaTranslationY(float yFraction) {
- return getDateTranslationY(yFraction);
- }
-
- @Override
- public float getResultScale(float yFraction) {
- return mResultScale - (mResultScale * yFraction) + yFraction;
- }
-
- @Override
- public float getFormulaScale(float yFraction) {
- return 1f;
- }
-
- @Override
- public float getDateTranslationY(float yFraction) {
- // We also want the date to start out above the visible screen with
- // this distance decreasing as it's pulled down.
- return -mToolbar.getHeight() * (1f - yFraction)
- + (mResultTranslationY * yFraction) - mResultTranslationY
- - mDisplayFormula.getPaddingTop() +
- (mDisplayFormula.getPaddingTop() * yFraction);
- }
-
- @Override
- public int getFirstTranslatedViewHolderIndex() {
- return 1;
- }
- }
-
- // The default AnimationController when Display is completely empty.
- public class EmptyAnimationController extends AnimationController
- implements DragController.AnimateTextInterface {
- @Override
- public void initializeDisplayHeight() {
- mDisplayHeight = mToolbar.getHeight() + mDisplayResult.getHeight()
- + mDisplayFormula.getHeight();
- }
-
- @Override
- public void initializeScales(AlignedTextView formula, CalculatorResult result) {
- // no-op
- }
-
- @Override
- public void initializeFormulaTranslationY(AlignedTextView formula,
- CalculatorResult result) {
- // no-op
- }
-
- @Override
- public void initializeFormulaTranslationX(AlignedTextView formula) {
- // no-op
- }
-
- @Override
- public void initializeResultTranslationY(CalculatorResult result) {
- // no-op
- }
-
- @Override
- public void initializeResultTranslationX(CalculatorResult result) {
- // no-op
- }
-
- @Override
- public float getResultTranslationX(float yFraction) {
- return 0f;
- }
-
- @Override
- public float getResultTranslationY(float yFraction) {
- return 0f;
- }
-
- @Override
- public float getFormulaScale(float yFraction) {
- return 1f;
- }
-
- @Override
- public float getDateTranslationY(float yFraction) {
- return 0f;
- }
-
- @Override
- public float getHistoryElementTranslationY(float yFraction) {
- return -mDisplayHeight * (1f - yFraction) - mBottomPaddingHeight;
- }
-
- @Override
- public int getFirstTranslatedViewHolderIndex() {
- return 0;
- }
- }
-}
diff --git a/src/com/android/calculator2/DragLayout.java b/src/com/android/calculator2/DragLayout.java
deleted file mode 100644
index 74b0a8e..0000000
--- a/src/com/android/calculator2/DragLayout.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright (C) 2016 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.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.graphics.PointF;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.os.Parcelable;
-import androidx.core.view.ViewCompat;
-import androidx.customview.widget.ViewDragHelper;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-public class DragLayout extends ViewGroup {
-
- private static final double AUTO_OPEN_SPEED_LIMIT = 600.0;
- private static final String KEY_IS_OPEN = "IS_OPEN";
- private static final String KEY_SUPER_STATE = "SUPER_STATE";
-
- private FrameLayout mHistoryFrame;
- private ViewDragHelper mDragHelper;
-
- // No concurrency; allow modifications while iterating.
- private final List<DragCallback> mDragCallbacks = new CopyOnWriteArrayList<>();
- private CloseCallback mCloseCallback;
-
- private final Map<Integer, PointF> mLastMotionPoints = new HashMap<>();
- private final Rect mHitRect = new Rect();
-
- private int mVerticalRange;
- private boolean mIsOpen;
-
- public DragLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- mDragHelper = ViewDragHelper.create(this, 1.0f, new DragHelperCallback());
- mHistoryFrame = (FrameLayout) findViewById(R.id.history_frame);
- super.onFinishInflate();
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- measureChildren(widthMeasureSpec, heightMeasureSpec);
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- int displayHeight = 0;
- for (DragCallback c : mDragCallbacks) {
- displayHeight = Math.max(displayHeight, c.getDisplayHeight());
- }
- mVerticalRange = getHeight() - displayHeight;
-
- final int childCount = getChildCount();
- for (int i = 0; i < childCount; ++i) {
- final View child = getChildAt(i);
-
- int top = 0;
- if (child == mHistoryFrame) {
- if (mDragHelper.getCapturedView() == mHistoryFrame
- && mDragHelper.getViewDragState() != ViewDragHelper.STATE_IDLE) {
- top = child.getTop();
- } else {
- top = mIsOpen ? 0 : -mVerticalRange;
- }
- }
- child.layout(0, top, child.getMeasuredWidth(), top + child.getMeasuredHeight());
- }
- }
-
- @Override
- protected Parcelable onSaveInstanceState() {
- final Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_SUPER_STATE, super.onSaveInstanceState());
- bundle.putBoolean(KEY_IS_OPEN, mIsOpen);
- return bundle;
- }
-
- @Override
- protected void onRestoreInstanceState(Parcelable state) {
- if (state instanceof Bundle) {
- final Bundle bundle = (Bundle) state;
- mIsOpen = bundle.getBoolean(KEY_IS_OPEN);
- mHistoryFrame.setVisibility(mIsOpen ? View.VISIBLE : View.INVISIBLE);
- for (DragCallback c : mDragCallbacks) {
- c.onInstanceStateRestored(mIsOpen);
- }
-
- state = bundle.getParcelable(KEY_SUPER_STATE);
- }
- super.onRestoreInstanceState(state);
- }
-
- private void saveLastMotion(MotionEvent event) {
- final int action = event.getActionMasked();
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- case MotionEvent.ACTION_POINTER_DOWN: {
- final int actionIndex = event.getActionIndex();
- final int pointerId = event.getPointerId(actionIndex);
- final PointF point = new PointF(event.getX(actionIndex), event.getY(actionIndex));
- mLastMotionPoints.put(pointerId, point);
- break;
- }
- case MotionEvent.ACTION_MOVE: {
- for (int i = event.getPointerCount() - 1; i >= 0; --i) {
- final int pointerId = event.getPointerId(i);
- final PointF point = mLastMotionPoints.get(pointerId);
- if (point != null) {
- point.set(event.getX(i), event.getY(i));
- }
- }
- break;
- }
- case MotionEvent.ACTION_POINTER_UP: {
- final int actionIndex = event.getActionIndex();
- final int pointerId = event.getPointerId(actionIndex);
- mLastMotionPoints.remove(pointerId);
- break;
- }
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL: {
- mLastMotionPoints.clear();
- break;
- }
- }
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent event) {
- saveLastMotion(event);
- return mDragHelper.shouldInterceptTouchEvent(event);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- // Workaround: do not process the error case where multi-touch would cause a crash.
- if (event.getActionMasked() == MotionEvent.ACTION_MOVE
- && mDragHelper.getViewDragState() == ViewDragHelper.STATE_DRAGGING
- && mDragHelper.getActivePointerId() != ViewDragHelper.INVALID_POINTER
- && event.findPointerIndex(mDragHelper.getActivePointerId()) == -1) {
- mDragHelper.cancel();
- return false;
- }
-
- saveLastMotion(event);
-
- mDragHelper.processTouchEvent(event);
- return true;
- }
-
- @Override
- public void computeScroll() {
- if (mDragHelper.continueSettling(true)) {
- ViewCompat.postInvalidateOnAnimation(this);
- }
- }
-
- private void onStartDragging() {
- for (DragCallback c : mDragCallbacks) {
- c.onStartDraggingOpen();
- }
- mHistoryFrame.setVisibility(VISIBLE);
- }
-
- public boolean isViewUnder(View view, int x, int y) {
- view.getHitRect(mHitRect);
- offsetDescendantRectToMyCoords((View) view.getParent(), mHitRect);
- return mHitRect.contains(x, y);
- }
-
- public boolean isMoving() {
- final int draggingState = mDragHelper.getViewDragState();
- return draggingState == ViewDragHelper.STATE_DRAGGING
- || draggingState == ViewDragHelper.STATE_SETTLING;
- }
-
- public boolean isOpen() {
- return mIsOpen;
- }
-
- public void setClosed() {
- mIsOpen = false;
- mHistoryFrame.setVisibility(View.INVISIBLE);
- if (mCloseCallback != null) {
- mCloseCallback.onClose();
- }
- }
-
- public Animator createAnimator(boolean toOpen) {
- if (mIsOpen == toOpen) {
- return ValueAnimator.ofFloat(0f, 1f).setDuration(0L);
- }
-
- mIsOpen = toOpen;
- mHistoryFrame.setVisibility(VISIBLE);
-
- final ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(Animator animation) {
- mDragHelper.cancel();
- mDragHelper.smoothSlideViewTo(mHistoryFrame, 0, mIsOpen ? 0 : -mVerticalRange);
- }
- });
-
- return animator;
- }
-
- public void setCloseCallback(CloseCallback callback) {
- mCloseCallback = callback;
- }
-
- public void addDragCallback(DragCallback callback) {
- mDragCallbacks.add(callback);
- }
-
- public void removeDragCallback(DragCallback callback) {
- mDragCallbacks.remove(callback);
- }
-
- /**
- * Callback when the layout is closed.
- * We use this to pop the HistoryFragment off the backstack.
- * We can't use a method in DragCallback because we get ConcurrentModificationExceptions on
- * mDragCallbacks when executePendingTransactions() is called for popping the fragment off the
- * backstack.
- */
- public interface CloseCallback {
- void onClose();
- }
-
- /**
- * Callbacks for coordinating with the RecyclerView or HistoryFragment.
- */
- public interface DragCallback {
- // Callback when a drag to open begins.
- void onStartDraggingOpen();
-
- // Callback in onRestoreInstanceState.
- void onInstanceStateRestored(boolean isOpen);
-
- // Animate the RecyclerView text.
- void whileDragging(float yFraction);
-
- // Whether we should allow the view to be dragged.
- boolean shouldCaptureView(View view, int x, int y);
-
- int getDisplayHeight();
- }
-
- public class DragHelperCallback extends ViewDragHelper.Callback {
- @Override
- public void onViewDragStateChanged(int state) {
- // The view stopped moving.
- if (state == ViewDragHelper.STATE_IDLE
- && mDragHelper.getCapturedView().getTop() < -(mVerticalRange / 2)) {
- setClosed();
- }
- }
-
- @Override
- public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
- for (DragCallback c : mDragCallbacks) {
- // Top is between [-mVerticalRange, 0].
- c.whileDragging(1f + (float) top / mVerticalRange);
- }
- }
-
- @Override
- public int getViewVerticalDragRange(View child) {
- return mVerticalRange;
- }
-
- @Override
- public boolean tryCaptureView(View view, int pointerId) {
- final PointF point = mLastMotionPoints.get(pointerId);
- if (point == null) {
- return false;
- }
-
- final int x = (int) point.x;
- final int y = (int) point.y;
-
- for (DragCallback c : mDragCallbacks) {
- if (!c.shouldCaptureView(view, x, y)) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public int clampViewPositionVertical(View child, int top, int dy) {
- return Math.max(Math.min(top, 0), -mVerticalRange);
- }
-
- @Override
- public void onViewCaptured(View capturedChild, int activePointerId) {
- super.onViewCaptured(capturedChild, activePointerId);
-
- if (!mIsOpen) {
- mIsOpen = true;
- onStartDragging();
- }
- }
-
- @Override
- public void onViewReleased(View releasedChild, float xvel, float yvel) {
- final boolean settleToOpen;
- if (yvel > AUTO_OPEN_SPEED_LIMIT) {
- // Speed has priority over position.
- settleToOpen = true;
- } else if (yvel < -AUTO_OPEN_SPEED_LIMIT) {
- settleToOpen = false;
- } else {
- settleToOpen = releasedChild.getTop() > -(mVerticalRange / 2);
- }
-
- // If the view is not visible, then settle it closed, not open.
- if (mDragHelper.settleCapturedViewAt(0, settleToOpen && mIsOpen ? 0
- : -mVerticalRange)) {
- ViewCompat.postInvalidateOnAnimation(DragLayout.this);
- }
- }
- }
-}
diff --git a/src/com/android/calculator2/Evaluator.java b/src/com/android/calculator2/Evaluator.java
deleted file mode 100644
index eee9fa8..0000000
--- a/src/com/android/calculator2/Evaluator.java
+++ /dev/null
@@ -1,1963 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.calculator2;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Handler;
-import android.preference.PreferenceManager;
-import androidx.annotation.NonNull;
-import androidx.annotation.StringRes;
-import androidx.annotation.VisibleForTesting;
-import android.text.Spannable;
-import android.util.Log;
-
-import com.hp.creals.CR;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Random;
-import java.util.TimeZone;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * This implements the calculator evaluation logic.
- * Logically this maintains a signed integer indexed set of expressions, one of which
- * is distinguished as the main expression.
- * The main expression is constructed and edited with append(), delete(), etc.
- * An evaluation an then be started with a call to evaluateAndNotify() or requireResult().
- * This starts an asynchronous computation, which requests display of the initial result, when
- * available. When initial evaluation is complete, it calls the associated listener's
- * onEvaluate() method. This occurs in a separate event, possibly quite a bit later. Once a
- * result has been computed, and before the underlying expression is modified, the
- * getString(index) method may be used to produce Strings that represent approximations to various
- * precisions.
- *
- * Actual expressions being evaluated are represented as {@link CalculatorExpr}s.
- *
- * The Evaluator holds the expressions and all associated state needed for evaluating
- * them. It provides functionality for saving and restoring this state. However the underlying
- * CalculatorExprs are exposed to the client, and may be directly accessed after cancelling any
- * in-progress computations by invoking the cancelAll() method.
- *
- * When evaluation is requested, we invoke the eval() method on the CalculatorExpr from a
- * background AsyncTask. A subsequent getString() call for the same expression index returns
- * immediately, though it may return a result containing placeholder ' ' characters. If we had to
- * return palceholder characters, we start a background task, which invokes the onReevaluate()
- * callback when it completes. In either case, the background task computes the appropriate
- * result digits by evaluating the UnifiedReal returned by CalculatorExpr.eval() to the required
- * precision.
- *
- * We cache the best decimal approximation we have already computed. We compute generously to
- * allow for some scrolling without recomputation and to minimize the chance of digits flipping
- * from "0000" to "9999". The best known result approximation is maintained as a string by
- * mResultString (and often in a different format by the CR representation of the result). When
- * we are in danger of not having digits to display in response to further scrolling, we also
- * initiate a background computation to higher precision, as if we had generated placeholder
- * characters.
- *
- * The code is designed to ensure that the error in the displayed result (excluding any
- * placeholder characters) is always strictly less than 1 in the last displayed digit. Typically
- * we actually display a prefix of a result that has this property and additionally is computed to
- * a significantly higher precision. Thus we almost always round correctly towards zero. (Fully
- * correct rounding towards zero is not computable, at least given our representation.)
- *
- * Initial expression evaluation may time out. This may happen in the case of domain errors such
- * as division by zero, or for large computations. We do not currently time out reevaluations to
- * higher precision, since the original evaluation precluded a domain error that could result in
- * non-termination. (We may discover that a presumed zero result is actually slightly negative
- * when re-evaluated; but that results in an exception, which we can handle.) The user can abort
- * either kind of computation.
- *
- * We ensure that only one evaluation of either kind (AsyncEvaluator or AsyncReevaluator) is
- * running at a time.
- */
-public class Evaluator implements CalculatorExpr.ExprResolver {
-
- private static Evaluator evaluator;
-
- public static String TIMEOUT_DIALOG_TAG = "timeout";
-
- @NonNull
- public static Evaluator getInstance(Context context) {
- if (evaluator == null) {
- evaluator = new Evaluator(context.getApplicationContext());
- }
- return evaluator;
- }
-
- public interface EvaluationListener {
- /**
- * Called if evaluation was explicitly cancelled or evaluation timed out.
- */
- public void onCancelled(long index);
- /**
- * Called if evaluation resulted in an error.
- */
- public void onError(long index, int errorId);
- /**
- * Called if evaluation completed normally.
- * @param index index of expression whose evaluation completed
- * @param initPrecOffset the offset used for initial evaluation
- * @param msdIndex index of first non-zero digit in the computed result string
- * @param lsdOffset offset of last digit in result if result has finite decimal
- * expansion
- * @param truncatedWholePart the integer part of the result
- */
- public void onEvaluate(long index, int initPrecOffset, int msdIndex, int lsdOffset,
- String truncatedWholePart);
- /**
- * Called in response to a reevaluation request, once more precision is available.
- * Typically the listener wil respond by calling getString() to retrieve the new
- * better approximation.
- */
- public void onReevaluate(long index); // More precision is now available; please redraw.
- }
-
- /**
- * A query interface for derived information based on character widths.
- * This provides information we need to calculate the "preferred precision offset" used
- * to display the initial result. It's used to compute the number of digits we can actually
- * display. All methods are callable from any thread.
- */
- public interface CharMetricsInfo {
- /**
- * Return the maximum number of (adjusted, digit-width) characters that will fit in the
- * result display. May be called asynchronously from non-UI thread.
- */
- public int getMaxChars();
- /**
- * Return the number of additional digit widths required to add digit separators to
- * the supplied string prefix.
- * The prefix consists of the first len characters of string s, which is presumed to
- * represent a whole number. Callable from non-UI thread.
- * Returns zero if metrics information is not yet available.
- */
- public float separatorChars(String s, int len);
- /**
- * Return extra width credit for presence of a decimal point, as fraction of a digit width.
- * May be called by non-UI thread.
- */
- public float getDecimalCredit();
- /**
- * Return extra width credit for absence of ellipsis, as fraction of a digit width.
- * May be called by non-UI thread.
- */
- public float getNoEllipsisCredit();
- }
-
- /**
- * A CharMetricsInfo that can be used when we are really only interested in computing
- * short representations to be embedded on formulas.
- */
- private class DummyCharMetricsInfo implements CharMetricsInfo {
- @Override
- public int getMaxChars() {
- return SHORT_TARGET_LENGTH + 10;
- }
- @Override
- public float separatorChars(String s, int len) {
- return 0;
- }
- @Override
- public float getDecimalCredit() {
- return 0;
- }
- @Override
- public float getNoEllipsisCredit() {
- return 0;
- }
- }
-
- private final DummyCharMetricsInfo mDummyCharMetricsInfo = new DummyCharMetricsInfo();
-
- public static final long MAIN_INDEX = 0; // Index of main expression.
- // Once final evaluation of an expression is complete, or when we need to save
- // a partial result, we copy the main expression to a non-zero index.
- // At that point, the expression no longer changes, and is preserved
- // until the entire history is cleared. Only expressions at nonzero indices
- // may be embedded in other expressions.
- // Each expression index can only have one outstanding evaluation request at a time.
- // To avoid conflicts between the history and main View, we copy the main expression
- // to allow independent evaluation by both.
- public static final long HISTORY_MAIN_INDEX = -1; // Read-only copy of main expression.
- // To update e.g. "memory" contents, we copy the corresponding expression to a permanent
- // index, and then remember that index.
- private long mSavedIndex; // Index of "saved" expression mirroring clipboard. 0 if unused.
- private long mMemoryIndex; // Index of "memory" expression. 0 if unused.
-
- // When naming variables and fields, "Offset" denotes a character offset in a string
- // representing a decimal number, where the offset is relative to the decimal point. 1 =
- // tenths position, -1 = units position. Integer.MAX_VALUE is sometimes used for the offset
- // of the last digit in an a nonterminating decimal expansion. We use the suffix "Index" to
- // denote a zero-based absolute index into such a string. (In other contexts, like above,
- // we also use "index" to refer to the key in mExprs below, the list of all known
- // expressions.)
-
- private static final String KEY_PREF_DEGREE_MODE = "degree_mode";
- private static final String KEY_PREF_SAVED_INDEX = "saved_index";
- private static final String KEY_PREF_MEMORY_INDEX = "memory_index";
- private static final String KEY_PREF_SAVED_NAME = "saved_name";
-
- // The minimum number of extra digits we always try to compute to improve the chance of
- // producing a correctly-rounded-towards-zero result. The extra digits can be displayed to
- // avoid generating placeholder digits, but should only be displayed briefly while computing.
- private static final int EXTRA_DIGITS = 20;
-
- // We adjust EXTRA_DIGITS by adding the length of the previous result divided by
- // EXTRA_DIVISOR. This helps hide recompute latency when long results are requested;
- // We start the recomputation substantially before the need is likely to be visible.
- private static final int EXTRA_DIVISOR = 5;
-
- // In addition to insisting on extra digits (see above), we minimize reevaluation
- // frequency by precomputing an extra PRECOMPUTE_DIGITS
- // + <current_precision_offset>/PRECOMPUTE_DIVISOR digits, whenever we are forced to
- // reevaluate. The last term is dropped if prec < 0.
- private static final int PRECOMPUTE_DIGITS = 30;
- private static final int PRECOMPUTE_DIVISOR = 5;
-
- // Initial evaluation precision. Enough to guarantee that we can compute the short
- // representation, and that we rarely have to evaluate nonzero results to MAX_MSD_PREC_OFFSET.
- // It also helps if this is at least EXTRA_DIGITS + display width, so that we don't
- // immediately need a second evaluation.
- private static final int INIT_PREC = 50;
-
- // The largest number of digits to the right of the decimal point to which we will evaluate to
- // compute proper scientific notation for values close to zero. Chosen to ensure that we
- // always to better than IEEE double precision at identifying nonzeros. And then some.
- // This is used only when we cannot a priori determine the most significant digit position, as
- // we always can if we have a rational representation.
- private static final int MAX_MSD_PREC_OFFSET = 1100;
-
- // If we can replace an exponent by this many leading zeroes, we do so. Also used in
- // estimating exponent size for truncating short representation.
- private static final int EXP_COST = 3;
-
- // Listener that reports changes to the state (empty/filled) of memory. Protected for testing.
- private Callback mCallback;
-
- // Context for database helper.
- private Context mContext;
-
- // A hopefully unique name associated with mSaved.
- private String mSavedName;
-
- // The main expression may have changed since the last evaluation in ways that would affect its
- // value.
- private boolean mChangedValue;
-
- // The main expression contains trig functions.
- private boolean mHasTrigFuncs;
-
- public static final int INVALID_MSD = Integer.MAX_VALUE;
-
- // Used to represent an erroneous result or a required evaluation. Not displayed.
- private static final String ERRONEOUS_RESULT = "ERR";
-
- /**
- * An individual CalculatorExpr, together with its evaluation state.
- * Only the main expression may be changed in-place. The HISTORY_MAIN_INDEX expression is
- * periodically reset to be a fresh immutable copy of the main expression.
- * All other expressions are only added and never removed. The expressions themselves are
- * never modified.
- * All fields other than mExpr and mVal are touched only by the UI thread.
- * For MAIN_INDEX, mExpr and mVal may change, but are also only ever touched by the UI thread.
- * For all other expressions, mExpr does not change once the ExprInfo has been (atomically)
- * added to mExprs. mVal may be asynchronously set by any thread, but we take care that it
- * does not change after that. mDegreeMode is handled exactly like mExpr.
- */
- private class ExprInfo {
- public CalculatorExpr mExpr; // The expression itself.
- public boolean mDegreeMode; // Evaluating in degree, not radian, mode.
- public ExprInfo(CalculatorExpr expr, boolean dm) {
- mExpr = expr;
- mDegreeMode = dm;
- mVal = new AtomicReference<UnifiedReal>();
- }
-
- // Currently running expression evaluator, if any. This is either an AsyncEvaluator
- // (if mResultString == null or it's obsolete), or an AsyncReevaluator.
- // We arrange that only one evaluator is active at a time, in part by maintaining
- // two separate ExprInfo structure for the main and history view, so that they can
- // arrange for independent evaluators.
- public AsyncTask mEvaluator;
-
- // The remaining fields are valid only if an evaluation completed successfully.
- // mVal always points to an AtomicReference, but that may be null.
- public AtomicReference<UnifiedReal> mVal;
- // We cache the best known decimal result in mResultString. Whenever that is
- // non-null, it is computed to exactly mResultStringOffset, which is always > 0.
- // Valid only if mResultString is non-null and (for the main expression) !mChangedValue.
- // ERRONEOUS_RESULT indicates evaluation resulted in an error.
- public String mResultString;
- public int mResultStringOffset = 0;
- // Number of digits to which (possibly incomplete) evaluation has been requested.
- // Only accessed by UI thread.
- public int mResultStringOffsetReq = 0;
- // Position of most significant digit in current cached result, if determined. This is just
- // the index in mResultString holding the msd.
- public int mMsdIndex = INVALID_MSD;
- // Long timeout needed for evaluation?
- public boolean mLongTimeout = false;
- public long mTimeStamp;
- }
-
- private ConcurrentHashMap<Long, ExprInfo> mExprs = new ConcurrentHashMap<Long, ExprInfo>();
-
- // The database holding persistent expressions.
- private ExpressionDB mExprDB;
-
- private ExprInfo mMainExpr; // == mExprs.get(MAIN_INDEX)
-
- private SharedPreferences mSharedPrefs;
-
- private final Handler mTimeoutHandler; // Used to schedule evaluation timeouts.
-
- private void setMainExpr(ExprInfo expr) {
- mMainExpr = expr;
- mExprs.put(MAIN_INDEX, expr);
- }
-
- Evaluator(Context context) {
- mContext = context;
- setMainExpr(new ExprInfo(new CalculatorExpr(), false));
- mSavedName = "none";
- mTimeoutHandler = new Handler();
-
- mExprDB = new ExpressionDB(context);
- mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
- mMainExpr.mDegreeMode = mSharedPrefs.getBoolean(KEY_PREF_DEGREE_MODE, false);
- long savedIndex = mSharedPrefs.getLong(KEY_PREF_SAVED_INDEX, 0L);
- long memoryIndex = mSharedPrefs.getLong(KEY_PREF_MEMORY_INDEX, 0L);
- if (savedIndex != 0 && savedIndex != -1 /* Recover from old corruption */) {
- setSavedIndexWhenEvaluated(savedIndex);
- }
- if (memoryIndex != 0 && memoryIndex != -1) {
- setMemoryIndexWhenEvaluated(memoryIndex, false /* no need to persist again */);
- }
- mSavedName = mSharedPrefs.getString(KEY_PREF_SAVED_NAME, "none");
- }
-
- /**
- * Retrieve minimum expression index.
- * This is the minimum over all expressions, including uncached ones residing only
- * in the data base. If no expressions with negative indices were preserved, this will
- * return a small negative predefined constant.
- * May be called from any thread, but will block until the database is opened.
- */
- public long getMinIndex() {
- return mExprDB.getMinIndex();
- }
-
- /**
- * Retrieve maximum expression index.
- * This is the maximum over all expressions, including uncached ones residing only
- * in the data base. If no expressions with positive indices were preserved, this will
- * return 0.
- * May be called from any thread, but will block until the database is opened.
- */
- public long getMaxIndex() {
- return mExprDB.getMaxIndex();
- }
-
- /**
- * Set the Callback for showing dialogs and notifying the UI about memory state changes.
- * @param callback
- */
- public void setCallback(Callback callback) {
- mCallback = callback;
- }
-
- /**
- * Does the expression index refer to a transient and mutable expression?
- */
- private boolean isMutableIndex(long index) {
- return index == MAIN_INDEX || index == HISTORY_MAIN_INDEX;
- }
-
- /**
- * Result of initial asynchronous result computation.
- * Represents either an error or a result computed to an initial evaluation precision.
- */
- private static class InitialResult {
- public final int errorResourceId; // Error string or INVALID_RES_ID.
- public final UnifiedReal val; // Constructive real value.
- public final String newResultString; // Null iff it can't be computed.
- public final int newResultStringOffset;
- public final int initDisplayOffset;
- InitialResult(UnifiedReal v, String s, int p, int idp) {
- errorResourceId = Calculator.INVALID_RES_ID;
- val = v;
- newResultString = s;
- newResultStringOffset = p;
- initDisplayOffset = idp;
- }
- InitialResult(int errorId) {
- errorResourceId = errorId;
- val = UnifiedReal.ZERO;
- newResultString = "BAD";
- newResultStringOffset = 0;
- initDisplayOffset = 0;
- }
- boolean isError() {
- return errorResourceId != Calculator.INVALID_RES_ID;
- }
- }
-
- private void displayCancelledMessage() {
- if (mCallback != null) {
- mCallback.showMessageDialog(0, R.string.cancelled, 0, null);
- }
- }
-
- // Timeout handling.
- // Expressions are evaluated with a sort timeout or a long timeout.
- // Each implies different maxima on both computation time and bit length.
- // We recheck bit length separetly to avoid wasting time on decimal conversions that are
- // destined to fail.
-
- /**
- * Return the timeout in milliseconds.
- * @param longTimeout a long timeout is in effect
- */
- private long getTimeout(boolean longTimeout) {
- return longTimeout ? 15000 : 2000;
- // Exceeding a few tens of seconds increases the risk of running out of memory
- // and impacting the rest of the system.
- }
-
- /**
- * Return the maximum number of bits in the result. Longer results are assumed to time out.
- * @param longTimeout a long timeout is in effect
- */
- private int getMaxResultBits(boolean longTimeout) {
- return longTimeout ? 700000 : 240000;
- }
-
- /**
- * Timeout for unrequested, speculative evaluations, in milliseconds.
- */
- private static final long QUICK_TIMEOUT = 1000;
-
- /**
- * Timeout for non-MAIN expressions. Note that there may be many such evaluations in
- * progress on the same thread or core. Thus the evaluation latency may include that needed
- * to complete previously enqueued evaluations. Thus the longTimeout flag is not very
- * meaningful, and currently ignored.
- * Since this is only used for expressions that we have previously successfully evaluated,
- * these timeouts hsould never trigger.
- */
- private static final long NON_MAIN_TIMEOUT = 100000;
-
- /**
- * Maximum result bit length for unrequested, speculative evaluations.
- * Also used to bound evaluation precision for small non-zero fractions.
- */
- private static final int QUICK_MAX_RESULT_BITS = 150000;
-
- private void displayTimeoutMessage(boolean longTimeout) {
- if (mCallback != null) {
- mCallback.showMessageDialog(R.string.dialog_timeout, R.string.timeout,
- longTimeout ? 0 : R.string.ok_remove_timeout, TIMEOUT_DIALOG_TAG);
- }
- }
-
- public void setLongTimeout() {
- mMainExpr.mLongTimeout = true;
- }
-
- /**
- * Compute initial cache contents and result when we're good and ready.
- * We leave the expression display up, with scrolling disabled, until this computation
- * completes. Can result in an error display if something goes wrong. By default we set a
- * timeout to catch runaway computations.
- */
- class AsyncEvaluator extends AsyncTask<Void, Void, InitialResult> {
- private boolean mDm; // degrees
- public boolean mRequired; // Result was requested by user.
- private boolean mQuiet; // Suppress cancellation message.
- private Runnable mTimeoutRunnable = null;
- private EvaluationListener mListener; // Completion callback.
- private CharMetricsInfo mCharMetricsInfo; // Where to get result size information.
- private long mIndex; // Expression index.
- private ExprInfo mExprInfo; // Current expression.
-
- AsyncEvaluator(long index, EvaluationListener listener, CharMetricsInfo cmi, boolean dm,
- boolean required) {
- mIndex = index;
- mListener = listener;
- mCharMetricsInfo = cmi;
- mDm = dm;
- mRequired = required;
- mQuiet = !required || mIndex != MAIN_INDEX;
- mExprInfo = mExprs.get(mIndex);
- if (mExprInfo.mEvaluator != null) {
- throw new AssertionError("Evaluation already in progress!");
- }
- }
-
- private void handleTimeout() {
- // Runs in UI thread.
- boolean running = (getStatus() != AsyncTask.Status.FINISHED);
- if (running && cancel(true)) {
- mExprs.get(mIndex).mEvaluator = null;
- if (mRequired && mIndex == MAIN_INDEX) {
- // Replace mExpr with clone to avoid races if task still runs for a while.
- mMainExpr.mExpr = (CalculatorExpr)mMainExpr.mExpr.clone();
- suppressCancelMessage();
- displayTimeoutMessage(mExprInfo.mLongTimeout);
- }
- }
- }
-
- private void suppressCancelMessage() {
- mQuiet = true;
- }
-
- @Override
- protected void onPreExecute() {
- long timeout = mRequired ? getTimeout(mExprInfo.mLongTimeout) : QUICK_TIMEOUT;
- if (mIndex != MAIN_INDEX) {
- // We evaluated the expression before with the current timeout, so this shouldn't
- // ever time out. We evaluate it with a ridiculously long timeout to avoid running
- // down the battery if something does go wrong. But we only log such timeouts, and
- // invoke the listener with onCancelled.
- timeout = NON_MAIN_TIMEOUT;
- }
- mTimeoutRunnable = new Runnable() {
- @Override
- public void run() {
- handleTimeout();
- }
- };
- mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
- mTimeoutHandler.postDelayed(mTimeoutRunnable, timeout);
- }
-
- /**
- * Is a computed result too big for decimal conversion?
- */
- private boolean isTooBig(UnifiedReal res) {
- final int maxBits = mRequired ? getMaxResultBits(mExprInfo.mLongTimeout)
- : QUICK_MAX_RESULT_BITS;
- return res.approxWholeNumberBitsGreaterThan(maxBits);
- }
-
- @Override
- protected InitialResult doInBackground(Void... nothing) {
- try {
- // mExpr does not change while we are evaluating; thus it's OK to read here.
- UnifiedReal res = mExprInfo.mVal.get();
- if (res == null) {
- try {
- res = mExprInfo.mExpr.eval(mDm, Evaluator.this);
- if (isCancelled()) {
- // TODO: This remains very slightly racey. Fix this.
- throw new CR.AbortedException();
- }
- res = putResultIfAbsent(mIndex, res);
- } catch (StackOverflowError e) {
- // Absurdly large integer exponents can cause this. There might be other
- // examples as well. Treat it as a timeout.
- return new InitialResult(R.string.timeout);
- }
- }
- if (isTooBig(res)) {
- // Avoid starting a long uninterruptible decimal conversion.
- return new InitialResult(R.string.timeout);
- }
- int precOffset = INIT_PREC;
- String initResult = res.toStringTruncated(precOffset);
- int msd = getMsdIndexOf(initResult);
- if (msd == INVALID_MSD) {
- int leadingZeroBits = res.leadingBinaryZeroes();
- if (leadingZeroBits < QUICK_MAX_RESULT_BITS) {
- // Enough initial nonzero digits for most displays.
- precOffset = 30 +
- (int)Math.ceil(Math.log(2.0d) / Math.log(10.0d) * leadingZeroBits);
- initResult = res.toStringTruncated(precOffset);
- msd = getMsdIndexOf(initResult);
- if (msd == INVALID_MSD) {
- throw new AssertionError("Impossible zero result");
- }
- } else {
- // Just try once more at higher fixed precision.
- precOffset = MAX_MSD_PREC_OFFSET;
- initResult = res.toStringTruncated(precOffset);
- msd = getMsdIndexOf(initResult);
- }
- }
- final int lsdOffset = getLsdOffset(res, initResult, initResult.indexOf('.'));
- final int initDisplayOffset = getPreferredPrec(initResult, msd, lsdOffset,
- mCharMetricsInfo);
- final int newPrecOffset = initDisplayOffset + EXTRA_DIGITS;
- if (newPrecOffset > precOffset) {
- precOffset = newPrecOffset;
- initResult = res.toStringTruncated(precOffset);
- }
- return new InitialResult(res, initResult, precOffset, initDisplayOffset);
- } catch (CalculatorExpr.SyntaxException e) {
- return new InitialResult(R.string.error_syntax);
- } catch (UnifiedReal.ZeroDivisionException e) {
- return new InitialResult(R.string.error_zero_divide);
- } catch(ArithmeticException e) {
- return new InitialResult(R.string.error_nan);
- } catch(CR.PrecisionOverflowException e) {
- // Extremely unlikely unless we're actually dividing by zero or the like.
- return new InitialResult(R.string.error_overflow);
- } catch(CR.AbortedException e) {
- return new InitialResult(R.string.error_aborted);
- }
- }
-
- @Override
- protected void onPostExecute(InitialResult result) {
- mExprInfo.mEvaluator = null;
- mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
- if (result.isError()) {
- if (result.errorResourceId == R.string.timeout) {
- // Emulating timeout due to large result.
- if (mRequired && mIndex == MAIN_INDEX) {
- displayTimeoutMessage(mExprs.get(mIndex).mLongTimeout);
- }
- mListener.onCancelled(mIndex);
- } else {
- if (mRequired) {
- mExprInfo.mResultString = ERRONEOUS_RESULT;
- }
- mListener.onError(mIndex, result.errorResourceId);
- }
- return;
- }
- // mExprInfo.mVal was already set asynchronously by child thread.
- mExprInfo.mResultString = result.newResultString;
- mExprInfo.mResultStringOffset = result.newResultStringOffset;
- final int dotIndex = mExprInfo.mResultString.indexOf('.');
- String truncatedWholePart = mExprInfo.mResultString.substring(0, dotIndex);
- // Recheck display precision; it may change, since display dimensions may have been
- // unknow the first time. In that case the initial evaluation precision should have
- // been conservative.
- // TODO: Could optimize by remembering display size and checking for change.
- int initPrecOffset = result.initDisplayOffset;
- mExprInfo.mMsdIndex = getMsdIndexOf(mExprInfo.mResultString);
- final int leastDigOffset = getLsdOffset(result.val, mExprInfo.mResultString,
- dotIndex);
- final int newInitPrecOffset = getPreferredPrec(mExprInfo.mResultString,
- mExprInfo.mMsdIndex, leastDigOffset, mCharMetricsInfo);
- if (newInitPrecOffset < initPrecOffset) {
- initPrecOffset = newInitPrecOffset;
- } else {
- // They should be equal. But nothing horrible should happen if they're not. e.g.
- // because CalculatorResult.MAX_WIDTH was too small.
- }
- mListener.onEvaluate(mIndex, initPrecOffset, mExprInfo.mMsdIndex, leastDigOffset,
- truncatedWholePart);
- }
-
- @Override
- protected void onCancelled(InitialResult result) {
- // Invoker resets mEvaluator.
- mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
- if (!mQuiet) {
- displayCancelledMessage();
- } // Otherwise, if mRequired, timeout processing displayed message.
- mListener.onCancelled(mIndex);
- // Just drop the evaluation; Leave expression displayed.
- return;
- }
- }
-
- /**
- * Check whether a new higher precision result flips previously computed trailing 9s
- * to zeroes. If so, flip them back. Return the adjusted result.
- * Assumes newPrecOffset >= oldPrecOffset > 0.
- * Since our results are accurate to < 1 ulp, this can only happen if the true result
- * is less than the new result with trailing zeroes, and thus appending 9s to the
- * old result must also be correct. Such flips are impossible if the newly computed
- * digits consist of anything other than zeroes.
- * It is unclear that there are real cases in which this is necessary,
- * but we have failed to prove there aren't such cases.
- */
- @VisibleForTesting
- public static String unflipZeroes(String oldDigs, int oldPrecOffset, String newDigs,
- int newPrecOffset) {
- final int oldLen = oldDigs.length();
- if (oldDigs.charAt(oldLen - 1) != '9') {
- return newDigs;
- }
- final int newLen = newDigs.length();
- final int precDiff = newPrecOffset - oldPrecOffset;
- final int oldLastInNew = newLen - 1 - precDiff;
- if (newDigs.charAt(oldLastInNew) != '0') {
- return newDigs;
- }
- // Earlier digits could not have changed without a 0 to 9 or 9 to 0 flip at end.
- // The former is OK.
- if (!newDigs.substring(newLen - precDiff).equals(StringUtils.repeat('0', precDiff))) {
- throw new AssertionError("New approximation invalidates old one!");
- }
- return oldDigs + StringUtils.repeat('9', precDiff);
- }
-
- /**
- * Result of asynchronous reevaluation.
- */
- private static class ReevalResult {
- public final String newResultString;
- public final int newResultStringOffset;
- ReevalResult(String s, int p) {
- newResultString = s;
- newResultStringOffset = p;
- }
- }
-
- /**
- * Compute new mResultString contents to prec digits to the right of the decimal point.
- * Ensure that onReevaluate() is called after doing so. If the evaluation fails for reasons
- * other than a timeout, ensure that onError() is called.
- * This assumes that initial evaluation of the expression has been successfully
- * completed.
- */
- private class AsyncReevaluator extends AsyncTask<Integer, Void, ReevalResult> {
- private long mIndex; // Index of expression to evaluate.
- private EvaluationListener mListener;
- private ExprInfo mExprInfo;
-
- AsyncReevaluator(long index, EvaluationListener listener) {
- mIndex = index;
- mListener = listener;
- mExprInfo = mExprs.get(mIndex);
- }
-
- @Override
- protected ReevalResult doInBackground(Integer... prec) {
- try {
- final int precOffset = prec[0].intValue();
- return new ReevalResult(mExprInfo.mVal.get().toStringTruncated(precOffset),
- precOffset);
- } catch(ArithmeticException e) {
- return null;
- } catch(CR.PrecisionOverflowException e) {
- return null;
- } catch(CR.AbortedException e) {
- // Should only happen if the task was cancelled, in which case we don't look at
- // the result.
- return null;
- }
- }
-
- @Override
- protected void onPostExecute(ReevalResult result) {
- if (result == null) {
- // This should only be possible in the extremely rare case of encountering a
- // domain error while reevaluating or in case of a precision overflow. We don't
- // know of a way to get the latter with a plausible amount of user input.
- mExprInfo.mResultString = ERRONEOUS_RESULT;
- mListener.onError(mIndex, R.string.error_nan);
- } else {
- if (result.newResultStringOffset < mExprInfo.mResultStringOffset) {
- throw new AssertionError("Unexpected onPostExecute timing");
- }
- mExprInfo.mResultString = unflipZeroes(mExprInfo.mResultString,
- mExprInfo.mResultStringOffset, result.newResultString,
- result.newResultStringOffset);
- mExprInfo.mResultStringOffset = result.newResultStringOffset;
- mListener.onReevaluate(mIndex);
- }
- mExprInfo.mEvaluator = null;
- }
- // On cancellation we do nothing; invoker should have left no trace of us.
- }
-
- /**
- * If necessary, start an evaluation of the expression at the given index to precOffset.
- * If we start an evaluation the listener is notified on completion.
- * Only called if prior evaluation succeeded.
- */
- private void ensureCachePrec(long index, int precOffset, EvaluationListener listener) {
- ExprInfo ei = mExprs.get(index);
- if (ei.mResultString != null && ei.mResultStringOffset >= precOffset
- || ei.mResultStringOffsetReq >= precOffset) return;
- if (ei.mEvaluator != null) {
- // Ensure we only have one evaluation running at a time.
- ei.mEvaluator.cancel(true);
- ei.mEvaluator = null;
- }
- AsyncReevaluator reEval = new AsyncReevaluator(index, listener);
- ei.mEvaluator = reEval;
- ei.mResultStringOffsetReq = precOffset + PRECOMPUTE_DIGITS;
- if (ei.mResultString != null) {
- ei.mResultStringOffsetReq += ei.mResultStringOffsetReq / PRECOMPUTE_DIVISOR;
- }
- reEval.execute(ei.mResultStringOffsetReq);
- }
-
- /**
- * Return the rightmost nonzero digit position, if any.
- * @param val UnifiedReal value of result.
- * @param cache Current cached decimal string representation of result.
- * @param decIndex Index of decimal point in cache.
- * @result Position of rightmost nonzero digit relative to decimal point.
- * Integer.MIN_VALUE if we cannot determine. Integer.MAX_VALUE if there is no lsd,
- * or we cannot determine it.
- */
- static int getLsdOffset(UnifiedReal val, String cache, int decIndex) {
- if (val.definitelyZero()) return Integer.MIN_VALUE;
- int result = val.digitsRequired();
- if (result == 0) {
- int i;
- for (i = -1; decIndex + i > 0 && cache.charAt(decIndex + i) == '0'; --i) { }
- result = i;
- }
- return result;
- }
-
- // TODO: We may want to consistently specify the position of the current result
- // window using the left-most visible digit index instead of the offset for the rightmost one.
- // It seems likely that would simplify the logic.
-
- /**
- * Retrieve the preferred precision "offset" for the currently displayed result.
- * May be called from non-UI thread.
- * @param cache Current approximation as string.
- * @param msd Position of most significant digit in result. Index in cache.
- * Can be INVALID_MSD if we haven't found it yet.
- * @param lastDigitOffset Position of least significant digit (1 = tenths digit)
- * or Integer.MAX_VALUE.
- */
- private static int getPreferredPrec(String cache, int msd, int lastDigitOffset,
- CharMetricsInfo cm) {
- final int lineLength = cm.getMaxChars();
- final int wholeSize = cache.indexOf('.');
- final float rawSepChars = cm.separatorChars(cache, wholeSize);
- final float rawSepCharsNoDecimal = rawSepChars - cm.getNoEllipsisCredit();
- final float rawSepCharsWithDecimal = rawSepCharsNoDecimal - cm.getDecimalCredit();
- final int sepCharsNoDecimal = (int) Math.ceil(Math.max(rawSepCharsNoDecimal, 0.0f));
- final int sepCharsWithDecimal = (int) Math.ceil(Math.max(rawSepCharsWithDecimal, 0.0f));
- final int negative = cache.charAt(0) == '-' ? 1 : 0;
- // Don't display decimal point if result is an integer.
- if (lastDigitOffset == 0) {
- lastDigitOffset = -1;
- }
- if (lastDigitOffset != Integer.MAX_VALUE) {
- if (wholeSize <= lineLength - sepCharsNoDecimal && lastDigitOffset <= 0) {
- // Exact integer. Prefer to display as integer, without decimal point.
- return -1;
- }
- if (lastDigitOffset >= 0
- && wholeSize + lastDigitOffset + 1 /* decimal pt. */
- <= lineLength - sepCharsWithDecimal) {
- // Display full exact number without scientific notation.
- return lastDigitOffset;
- }
- }
- if (msd > wholeSize && msd <= wholeSize + EXP_COST + 1) {
- // Display number without scientific notation. Treat leading zero as msd.
- msd = wholeSize - 1;
- }
- if (msd > QUICK_MAX_RESULT_BITS) {
- // Display a probable but uncertain 0 as "0.000000000", without exponent. That's a
- // judgment call, but less likely to confuse naive users. A more informative and
- // confusing option would be to use a large negative exponent.
- // Treat extremely large msd values as unknown to avoid slow computations.
- return lineLength - 2;
- }
- // Return position corresponding to having msd at left, effectively presuming scientific
- // notation that preserves the left part of the result.
- // After adjustment for the space required by an exponent, evaluating to the resulting
- // precision should not overflow the display.
- int result = msd - wholeSize + lineLength - negative - 1;
- if (wholeSize <= lineLength - sepCharsNoDecimal) {
- // Fits without scientific notation; will need space for separators.
- if (wholeSize < lineLength - sepCharsWithDecimal) {
- result -= sepCharsWithDecimal;
- } else {
- result -= sepCharsNoDecimal;
- }
- }
- return result;
- }
-
- private static final int SHORT_TARGET_LENGTH = 8;
- private static final String SHORT_UNCERTAIN_ZERO = "0.00000" + KeyMaps.ELLIPSIS;
-
- /**
- * Get a short representation of the value represented by the string cache.
- * We try to match the CalculatorResult code when the result is finite
- * and small enough to suit our needs.
- * The result is not internationalized.
- * @param cache String approximation of value. Assumed to be long enough
- * that if it doesn't contain enough significant digits, we can
- * reasonably abbreviate as SHORT_UNCERTAIN_ZERO.
- * @param msdIndex Index of most significant digit in cache, or INVALID_MSD.
- * @param lsdOffset Position of least significant digit in finite representation,
- * relative to decimal point, or MAX_VALUE.
- */
- private static String getShortString(String cache, int msdIndex, int lsdOffset) {
- // This somewhat mirrors the display formatting code, but
- // - The constants are different, since we don't want to use the whole display.
- // - This is an easier problem, since we don't support scrolling and the length
- // is a bit flexible.
- // TODO: Think about refactoring this to remove partial redundancy with CalculatorResult.
- final int dotIndex = cache.indexOf('.');
- final int negative = cache.charAt(0) == '-' ? 1 : 0;
- final String negativeSign = negative == 1 ? "-" : "";
-
- // Ensure we don't have to worry about running off the end of cache.
- if (msdIndex >= cache.length() - SHORT_TARGET_LENGTH) {
- msdIndex = INVALID_MSD;
- }
- if (msdIndex == INVALID_MSD) {
- if (lsdOffset < INIT_PREC) {
- return "0";
- } else {
- return SHORT_UNCERTAIN_ZERO;
- }
- }
- // Avoid scientific notation for small numbers of zeros.
- // Instead stretch significant digits to include decimal point.
- if (lsdOffset < -1 && dotIndex - msdIndex + negative <= SHORT_TARGET_LENGTH
- && lsdOffset >= -CalculatorResult.MAX_TRAILING_ZEROES - 1) {
- // Whole number that fits in allotted space.
- // CalculatorResult would not use scientific notation either.
- lsdOffset = -1;
- }
- if (msdIndex > dotIndex) {
- if (msdIndex <= dotIndex + EXP_COST + 1) {
- // Preferred display format in this case is with leading zeroes, even if
- // it doesn't fit entirely. Replicate that here.
- msdIndex = dotIndex - 1;
- } else if (lsdOffset <= SHORT_TARGET_LENGTH - negative - 2
- && lsdOffset <= CalculatorResult.MAX_LEADING_ZEROES + 1) {
- // Fraction that fits entirely in allotted space.
- // CalculatorResult would not use scientific notation either.
- msdIndex = dotIndex -1;
- }
- }
- int exponent = dotIndex - msdIndex;
- if (exponent > 0) {
- // Adjust for the fact that the decimal point itself takes space.
- exponent--;
- }
- if (lsdOffset != Integer.MAX_VALUE) {
- final int lsdIndex = dotIndex + lsdOffset;
- final int totalDigits = lsdIndex - msdIndex + negative + 1;
- if (totalDigits <= SHORT_TARGET_LENGTH && dotIndex > msdIndex && lsdOffset >= -1) {
- // Fits, no exponent needed.
- final String wholeWithCommas = StringUtils.addCommas(cache, msdIndex, dotIndex);
- return negativeSign + wholeWithCommas + cache.substring(dotIndex, lsdIndex + 1);
- }
- if (totalDigits <= SHORT_TARGET_LENGTH - 3) {
- return negativeSign + cache.charAt(msdIndex) + "."
- + cache.substring(msdIndex + 1, lsdIndex + 1) + "E" + exponent;
- }
- }
- // We need to abbreviate.
- if (dotIndex > msdIndex && dotIndex < msdIndex + SHORT_TARGET_LENGTH - negative - 1) {
- final String wholeWithCommas = StringUtils.addCommas(cache, msdIndex, dotIndex);
- return negativeSign + wholeWithCommas
- + cache.substring(dotIndex, msdIndex + SHORT_TARGET_LENGTH - negative - 1)
- + KeyMaps.ELLIPSIS;
- }
- // Need abbreviation + exponent
- return negativeSign + cache.charAt(msdIndex) + "."
- + cache.substring(msdIndex + 1, msdIndex + SHORT_TARGET_LENGTH - negative - 4)
- + KeyMaps.ELLIPSIS + "E" + exponent;
- }
-
- /**
- * Return the most significant digit index in the given numeric string.
- * Return INVALID_MSD if there are not enough digits to prove the numeric value is
- * different from zero. As usual, we assume an error of strictly less than 1 ulp.
- */
- public static int getMsdIndexOf(String s) {
- final int len = s.length();
- int nonzeroIndex = -1;
- for (int i = 0; i < len; ++i) {
- char c = s.charAt(i);
- if (c != '-' && c != '.' && c != '0') {
- nonzeroIndex = i;
- break;
- }
- }
- if (nonzeroIndex >= 0 && (nonzeroIndex < len - 1 || s.charAt(nonzeroIndex) != '1')) {
- return nonzeroIndex;
- } else {
- return INVALID_MSD;
- }
- }
-
- /**
- * Return most significant digit index for the result of the expressin at the given index.
- * Returns an index in the result character array. Return INVALID_MSD if the current result
- * is too close to zero to determine the result.
- * Result is almost consistent through reevaluations: It may increase by one, once.
- */
- private int getMsdIndex(long index) {
- ExprInfo ei = mExprs.get(index);
- if (ei.mMsdIndex != INVALID_MSD) {
- // 0.100000... can change to 0.0999999... We may have to correct once by one digit.
- if (ei.mResultString.charAt(ei.mMsdIndex) == '0') {
- ei.mMsdIndex++;
- }
- return ei.mMsdIndex;
- }
- if (ei.mVal.get().definitelyZero()) {
- return INVALID_MSD; // None exists
- }
- int result = INVALID_MSD;
- if (ei.mResultString != null) {
- result = ei.mMsdIndex = getMsdIndexOf(ei.mResultString);
- }
- return result;
- }
-
- // Refuse to scroll past the point at which this many digits from the whole number
- // part of the result are still displayed. Avoids sily displays like 1E1.
- private static final int MIN_DISPLAYED_DIGS = 5;
-
- /**
- * Return result to precOffset[0] digits to the right of the decimal point.
- * PrecOffset[0] is updated if the original value is out of range. No exponent or other
- * indication of precision is added. The result is returned immediately, based on the current
- * cache contents, but it may contain blanks for unknown digits. It may also use
- * uncertain digits within EXTRA_DIGITS. If either of those occurred, schedule a reevaluation
- * and redisplay operation. Uncertain digits never appear to the left of the decimal point.
- * PrecOffset[0] may be negative to only retrieve digits to the left of the decimal point.
- * (precOffset[0] = 0 means we include the decimal point, but nothing to the right.
- * precOffset[0] = -1 means we drop the decimal point and start at the ones position. Should
- * not be invoked before the onEvaluate() callback is received. This essentially just returns
- * a substring of the full result; a leading minus sign or leading digits can be dropped.
- * Result uses US conventions; is NOT internationalized. Use getResult() and UnifiedReal
- * operations to determine whether the result is exact, or whether we dropped trailing digits.
- *
- * @param index Index of expression to approximate
- * @param precOffset Zeroth element indicates desired and actual precision
- * @param maxPrecOffset Maximum adjusted precOffset[0]
- * @param maxDigs Maximum length of result
- * @param truncated Zeroth element is set if leading nonzero digits were dropped
- * @param negative Zeroth element is set of the result is negative.
- * @param listener EvaluationListener to notify when reevaluation is complete.
- */
- public String getString(long index, int[] precOffset, int maxPrecOffset, int maxDigs,
- boolean[] truncated, boolean[] negative, EvaluationListener listener) {
- ExprInfo ei = mExprs.get(index);
- int currentPrecOffset = precOffset[0];
- // Make sure we eventually get a complete answer
- if (ei.mResultString == null) {
- ensureCachePrec(index, currentPrecOffset + EXTRA_DIGITS, listener);
- // Nothing else to do now; seems to happen on rare occasion with weird user input
- // timing; Will repair itself in a jiffy.
- return " ";
- } else {
- ensureCachePrec(index, currentPrecOffset + EXTRA_DIGITS + ei.mResultString.length()
- / EXTRA_DIVISOR, listener);
- }
- // Compute an appropriate substring of mResultString. Pad if necessary.
- final int len = ei.mResultString.length();
- final boolean myNegative = ei.mResultString.charAt(0) == '-';
- negative[0] = myNegative;
- // Don't scroll left past leftmost digits in mResultString unless that still leaves an
- // integer.
- int integralDigits = len - ei.mResultStringOffset;
- // includes 1 for dec. pt
- if (myNegative) {
- --integralDigits;
- }
- int minPrecOffset = Math.min(MIN_DISPLAYED_DIGS - integralDigits, -1);
- currentPrecOffset = Math.min(Math.max(currentPrecOffset, minPrecOffset),
- maxPrecOffset);
- precOffset[0] = currentPrecOffset;
- int extraDigs = ei.mResultStringOffset - currentPrecOffset; // trailing digits to drop
- int deficit = 0; // The number of digits we're short
- if (extraDigs < 0) {
- extraDigs = 0;
- deficit = Math.min(currentPrecOffset - ei.mResultStringOffset, maxDigs);
- }
- int endIndex = len - extraDigs;
- if (endIndex < 1) {
- return " ";
- }
- int startIndex = Math.max(endIndex + deficit - maxDigs, 0);
- truncated[0] = (startIndex > getMsdIndex(index));
- String result = ei.mResultString.substring(startIndex, endIndex);
- if (deficit > 0) {
- result += StringUtils.repeat(' ', deficit);
- // Blank character is replaced during translation.
- // Since we always compute past the decimal point, this never fills in the spot
- // where the decimal point should go, and we can otherwise treat placeholders
- // as though they were digits.
- }
- return result;
- }
-
- /**
- * Clear the cache for the main expression.
- */
- private void clearMainCache() {
- mMainExpr.mVal.set(null);
- mMainExpr.mResultString = null;
- mMainExpr.mResultStringOffset = mMainExpr.mResultStringOffsetReq = 0;
- mMainExpr.mMsdIndex = INVALID_MSD;
- }
-
-
- public void clearMain() {
- mMainExpr.mExpr.clear();
- mHasTrigFuncs = false;
- clearMainCache();
- mMainExpr.mLongTimeout = false;
- }
-
- public void clearEverything() {
- boolean dm = mMainExpr.mDegreeMode;
- cancelAll(true);
- setSavedIndex(0);
- setMemoryIndex(0);
- mExprDB.eraseAll();
- mExprs.clear();
- setMainExpr(new ExprInfo(new CalculatorExpr(), dm));
- }
-
- /**
- * Start asynchronous evaluation.
- * Invoke listener on successful completion. If the result is required, invoke
- * onCancelled() if cancelled.
- * @param index index of expression to be evaluated.
- * @param required result was explicitly requested by user.
- */
- private void evaluateResult(long index, EvaluationListener listener, CharMetricsInfo cmi,
- boolean required) {
- ExprInfo ei = mExprs.get(index);
- if (index == MAIN_INDEX) {
- clearMainCache();
- } // Otherwise the expression is immutable.
- AsyncEvaluator eval = new AsyncEvaluator(index, listener, cmi, ei.mDegreeMode, required);
- ei.mEvaluator = eval;
- eval.execute();
- if (index == MAIN_INDEX) {
- mChangedValue = false;
- }
- }
-
- /**
- * Notify listener of a previously completed evaluation.
- */
- void notifyImmediately(long index, ExprInfo ei, EvaluationListener listener,
- CharMetricsInfo cmi) {
- final int dotIndex = ei.mResultString.indexOf('.');
- final String truncatedWholePart = ei.mResultString.substring(0, dotIndex);
- final int leastDigOffset = getLsdOffset(ei.mVal.get(), ei.mResultString, dotIndex);
- final int msdIndex = getMsdIndex(index);
- final int preferredPrecOffset = getPreferredPrec(ei.mResultString, msdIndex,
- leastDigOffset, cmi);
- listener.onEvaluate(index, preferredPrecOffset, msdIndex, leastDigOffset,
- truncatedWholePart);
- }
-
- /**
- * Start optional evaluation of expression and display when ready.
- * @param index of expression to be evaluated.
- * Can quietly time out without a listener callback.
- * No-op if cmi.getMaxChars() == 0.
- */
- public void evaluateAndNotify(long index, EvaluationListener listener, CharMetricsInfo cmi) {
- if (cmi.getMaxChars() == 0) {
- // Probably shouldn't happen. If it does, we didn't promise to do anything anyway.
- return;
- }
- ExprInfo ei = ensureExprIsCached(index);
- if (ei.mResultString != null && ei.mResultString != ERRONEOUS_RESULT
- && !(index == MAIN_INDEX && mChangedValue)) {
- // Already done. Just notify.
- notifyImmediately(MAIN_INDEX, mMainExpr, listener, cmi);
- return;
- } else if (ei.mEvaluator != null) {
- // We only allow a single listener per expression, so this request must be redundant.
- return;
- }
- evaluateResult(index, listener, cmi, false);
- }
-
- /**
- * Start required evaluation of expression at given index and call back listener when ready.
- * If index is MAIN_INDEX, we may also directly display a timeout message.
- * Uses longer timeouts than optional evaluation.
- * Requires cmi.getMaxChars() != 0.
- */
- public void requireResult(long index, EvaluationListener listener, CharMetricsInfo cmi) {
- if (cmi.getMaxChars() == 0) {
- throw new AssertionError("requireResult called too early");
- }
- ExprInfo ei = ensureExprIsCached(index);
- if (ei.mResultString == null || (index == MAIN_INDEX && mChangedValue)) {
- if (index == HISTORY_MAIN_INDEX) {
- // We don't want to compute a result for HISTORY_MAIN_INDEX that was
- // not already computed for the main expression. Pretend we timed out.
- // The error case doesn't get here.
- listener.onCancelled(index);
- } else if ((ei.mEvaluator instanceof AsyncEvaluator)
- && ((AsyncEvaluator)(ei.mEvaluator)).mRequired) {
- // Duplicate request; ignore.
- } else {
- // (Re)start evaluator in requested mode, i.e. with longer timeout.
- cancel(ei, true);
- evaluateResult(index, listener, cmi, true);
- }
- } else if (ei.mResultString == ERRONEOUS_RESULT) {
- // Just re-evaluate to generate a new notification.
- cancel(ei, true);
- evaluateResult(index, listener, cmi, true);
- } else {
- notifyImmediately(index, ei, listener, cmi);
- }
- }
-
- /**
- * Whether this expression has explicitly been evaluated (User pressed "=")
- */
- public boolean hasResult(long index) {
- final ExprInfo ei = ensureExprIsCached(index);
- return ei.mResultString != null;
- }
-
- /**
- * Is a reevaluation still in progress?
- */
- public boolean evaluationInProgress(long index) {
- ExprInfo ei = mExprs.get(index);
- return ei != null && ei.mEvaluator != null;
- }
-
- /**
- * Cancel any current background task associated with the given ExprInfo.
- * @param quiet suppress cancellation message
- * @return true if we cancelled an initial evaluation
- */
- private boolean cancel(ExprInfo expr, boolean quiet) {
- if (expr.mEvaluator != null) {
- if (quiet && (expr.mEvaluator instanceof AsyncEvaluator)) {
- ((AsyncEvaluator)(expr.mEvaluator)).suppressCancelMessage();
- }
- // Reevaluation in progress.
- if (expr.mVal.get() != null) {
- expr.mEvaluator.cancel(true);
- expr.mResultStringOffsetReq = expr.mResultStringOffset;
- // Backgound computation touches only constructive reals.
- // OK not to wait.
- expr.mEvaluator = null;
- } else {
- expr.mEvaluator.cancel(true);
- if (expr == mMainExpr) {
- // The expression is modifiable, and the AsyncTask is reading it.
- // There seems to be no good way to wait for cancellation.
- // Give ourselves a new copy to work on instead.
- mMainExpr.mExpr = (CalculatorExpr)mMainExpr.mExpr.clone();
- // Approximation of constructive reals should be thread-safe,
- // so we can let that continue until it notices the cancellation.
- mChangedValue = true; // Didn't do the expected evaluation.
- }
- expr.mEvaluator = null;
- return true;
- }
- }
- return false;
- }
-
- /**
- * Cancel any current background task associated with the given ExprInfo.
- * @param quiet suppress cancellation message
- * @return true if we cancelled an initial evaluation
- */
- public boolean cancel(long index, boolean quiet)
- {
- ExprInfo ei = mExprs.get(index);
- if (ei == null) {
- return false;
- } else {
- return cancel(ei, quiet);
- }
- }
-
- public void cancelAll(boolean quiet) {
- // TODO: May want to keep active evaluators in a HashSet to avoid traversing
- // all expressions we've looked at.
- for (ExprInfo expr: mExprs.values()) {
- cancel(expr, quiet);
- }
- }
-
- /**
- * Quietly cancel all evaluations associated with expressions other than the main one.
- * These are currently the evaluations associated with the history fragment.
- */
- public void cancelNonMain() {
- // TODO: May want to keep active evaluators in a HashSet to avoid traversing
- // all expressions we've looked at.
- for (ExprInfo expr: mExprs.values()) {
- if (expr != mMainExpr) {
- cancel(expr, true);
- }
- }
- }
-
- /**
- * Restore the evaluator state, including the current expression.
- */
- public void restoreInstanceState(DataInput in) {
- mChangedValue = true;
- try {
- mMainExpr.mDegreeMode = in.readBoolean();
- mMainExpr.mLongTimeout = in.readBoolean();
- mMainExpr.mExpr = new CalculatorExpr(in);
- mHasTrigFuncs = hasTrigFuncs();
- } catch (IOException e) {
- Log.v("Calculator", "Exception while restoring:\n" + e);
- }
- }
-
- /**
- * Save the evaluator state, including the expression and any saved value.
- */
- public void saveInstanceState(DataOutput out) {
- try {
- out.writeBoolean(mMainExpr.mDegreeMode);
- out.writeBoolean(mMainExpr.mLongTimeout);
- mMainExpr.mExpr.write(out);
- } catch (IOException e) {
- Log.v("Calculator", "Exception while saving state:\n" + e);
- }
- }
-
-
- /**
- * Append a button press to the main expression.
- * @param id Button identifier for the character or operator to be added.
- * @return false if we rejected the insertion due to obvious syntax issues, and the expression
- * is unchanged; true otherwise
- */
- public boolean append(int id) {
- if (id == R.id.fun_10pow) {
- add10pow(); // Handled as macro expansion.
- return true;
- } else {
- mChangedValue = mChangedValue || !KeyMaps.isBinary(id);
- if (mMainExpr.mExpr.add(id)) {
- if (!mHasTrigFuncs) {
- mHasTrigFuncs = KeyMaps.isTrigFunc(id);
- }
- return true;
- } else {
- return false;
- }
- }
- }
-
- /**
- * Delete last taken from main expression.
- */
- public void delete() {
- mChangedValue = true;
- mMainExpr.mExpr.delete();
- if (mMainExpr.mExpr.isEmpty()) {
- mMainExpr.mLongTimeout = false;
- }
- mHasTrigFuncs = hasTrigFuncs();
- }
-
- /**
- * Set degree mode for main expression.
- */
- public void setDegreeMode(boolean degreeMode) {
- mChangedValue = true;
- mMainExpr.mDegreeMode = degreeMode;
-
- mSharedPrefs.edit()
- .putBoolean(KEY_PREF_DEGREE_MODE, degreeMode)
- .apply();
- }
-
- /**
- * Return an ExprInfo for a copy of the expression with the given index.
- * We remove trailing binary operators in the copy.
- * mTimeStamp is not copied.
- */
- private ExprInfo copy(long index, boolean copyValue) {
- ExprInfo fromEi = mExprs.get(index);
- ExprInfo ei = new ExprInfo((CalculatorExpr)fromEi.mExpr.clone(), fromEi.mDegreeMode);
- while (ei.mExpr.hasTrailingBinary()) {
- ei.mExpr.delete();
- }
- if (copyValue) {
- ei.mVal = new AtomicReference<UnifiedReal>(fromEi.mVal.get());
- ei.mResultString = fromEi.mResultString;
- ei.mResultStringOffset = ei.mResultStringOffsetReq = fromEi.mResultStringOffset;
- ei.mMsdIndex = fromEi.mMsdIndex;
- }
- ei.mLongTimeout = fromEi.mLongTimeout;
- return ei;
- }
-
- /**
- * Return an ExprInfo corresponding to the sum of the expressions at the
- * two indices.
- * index1 should correspond to an immutable expression, and should thus NOT
- * be MAIN_INDEX. Index2 may be MAIN_INDEX. Both expressions are presumed
- * to have been evaluated. The result is unevaluated.
- * Can return null if evaluation resulted in an error (a very unlikely case).
- */
- private ExprInfo sum(long index1, long index2) {
- return generalized_sum(index1, index2, R.id.op_add);
- }
-
- /**
- * Return an ExprInfo corresponding to the subtraction of the value at the subtrahend index
- * from value at the minuend index (minuend - subtrahend = result). Both are presumed to have
- * been previously evaluated. The result is unevaluated. Can return null.
- */
- private ExprInfo difference(long minuendIndex, long subtrahendIndex) {
- return generalized_sum(minuendIndex, subtrahendIndex, R.id.op_sub);
- }
-
- private ExprInfo generalized_sum(long index1, long index2, int op) {
- // TODO: Consider not collapsing expr2, to save database space.
- // Note that this is a bit tricky, since our expressions can contain unbalanced lparens.
- CalculatorExpr result = new CalculatorExpr();
- CalculatorExpr collapsed1 = getCollapsedExpr(index1);
- CalculatorExpr collapsed2 = getCollapsedExpr(index2);
- if (collapsed1 == null || collapsed2 == null) {
- return null;
- }
- result.append(collapsed1);
- result.add(op);
- result.append(collapsed2);
- ExprInfo resultEi = new ExprInfo(result, false /* dont care about degrees/radians */);
- resultEi.mLongTimeout = mExprs.get(index1).mLongTimeout
- || mExprs.get(index2).mLongTimeout;
- return resultEi;
- }
-
- /**
- * Add the expression described by the argument to the database.
- * Returns the new row id in the database.
- * Fills in timestamp in ei, if it was not previously set.
- * If in_history is true, add it with a positive index, so it will appear in the history.
- */
- private long addToDB(boolean in_history, ExprInfo ei) {
- byte[] serializedExpr = ei.mExpr.toBytes();
- ExpressionDB.RowData rd = new ExpressionDB.RowData(serializedExpr, ei.mDegreeMode,
- ei.mLongTimeout, 0);
- long resultIndex = mExprDB.addRow(!in_history, rd);
- if (mExprs.get(resultIndex) != null) {
- throw new AssertionError("result slot already occupied! + Slot = " + resultIndex);
- }
- // Add newly assigned date to the cache.
- ei.mTimeStamp = rd.mTimeStamp;
- if (resultIndex == MAIN_INDEX) {
- throw new AssertionError("Should not store main expression");
- }
- mExprs.put(resultIndex, ei);
- return resultIndex;
- }
-
- /**
- * Preserve a copy of the expression at old_index at a new index.
- * This is useful only of old_index is MAIN_INDEX or HISTORY_MAIN_INDEX.
- * This assumes that initial evaluation completed suceessfully.
- * @param in_history use a positive index so the result appears in the history.
- * @return the new index
- */
- public long preserve(long old_index, boolean in_history) {
- ExprInfo ei = copy(old_index, true);
- if (ei.mResultString == null || ei.mResultString == ERRONEOUS_RESULT) {
- throw new AssertionError("Preserving unevaluated expression");
- }
- return addToDB(in_history, ei);
- }
-
- /**
- * Preserve a copy of the current main expression as the most recent history entry,
- * assuming it is already in the database, but may have been lost from the cache.
- */
- public void represerve() {
- long resultIndex = getMaxIndex();
- // This requires database access only if the local state was preserved, but we
- // recreated the Evaluator. That excludes the common cases of device rotation, etc.
- // TODO: Revisit once we deal with database failures. We could just copy from
- // MAIN_INDEX instead, but that loses the timestamp.
- ensureExprIsCached(resultIndex);
- }
-
- /**
- * Discard previous expression in HISTORY_MAIN_INDEX and replace it by a fresh copy
- * of the main expression. Note that the HISTORY_MAIN_INDEX expresssion is not preserved
- * in the database or anywhere else; it is always reconstructed when needed.
- */
- public void copyMainToHistory() {
- cancel(HISTORY_MAIN_INDEX, true /* quiet */);
- ExprInfo ei = copy(MAIN_INDEX, true);
- mExprs.put(HISTORY_MAIN_INDEX, ei);
- }
-
- /**
- * @return the {@link CalculatorExpr} representation of the result of the given
- * expression.
- * The resulting expression contains a single "token" with the pre-evaluated result.
- * The client should ensure that this is never invoked unless initial evaluation of the
- * expression has been completed.
- */
- private CalculatorExpr getCollapsedExpr(long index) {
- long real_index = isMutableIndex(index) ? preserve(index, false) : index;
- final ExprInfo ei = mExprs.get(real_index);
- final String rs = ei.mResultString;
- // An error can occur here only under extremely unlikely conditions.
- // Check anyway, and just refuse.
- // rs *should* never be null, but it happens. Check as a workaround to protect against
- // crashes until we find the root cause (b/34801142)
- if (rs == ERRONEOUS_RESULT || rs == null) {
- return null;
- }
- final int dotIndex = rs.indexOf('.');
- final int leastDigOffset = getLsdOffset(ei.mVal.get(), rs, dotIndex);
- return ei.mExpr.abbreviate(real_index,
- getShortString(rs, getMsdIndexOf(rs), leastDigOffset));
- }
-
- /**
- * Abbreviate the indicated expression to a pre-evaluated expression node,
- * and use that as the new main expression.
- * This should not be called unless the expression was previously evaluated and produced a
- * non-error result. Pre-evaluated expressions can never represent an expression for which
- * evaluation to a constructive real diverges. Subsequent re-evaluation will also not
- * diverge, though it may generate errors of various kinds. E.g. sqrt(-10^-1000) .
- */
- public void collapse(long index) {
- final boolean longTimeout = mExprs.get(index).mLongTimeout;
- final CalculatorExpr abbrvExpr = getCollapsedExpr(index);
- clearMain();
- mMainExpr.mExpr.append(abbrvExpr);
- mMainExpr.mLongTimeout = longTimeout;
- mChangedValue = true;
- mHasTrigFuncs = false; // Degree mode no longer affects expression value.
- }
-
- /**
- * Mark the expression as changed, preventing next evaluation request from being ignored.
- */
- public void touch() {
- mChangedValue = true;
- }
-
- private abstract class SetWhenDoneListener implements EvaluationListener {
- private void badCall() {
- throw new AssertionError("unexpected callback");
- }
- abstract void setNow();
- @Override
- public void onCancelled(long index) {} // Extremely unlikely; leave unset.
- @Override
- public void onError(long index, int errorId) {} // Extremely unlikely; leave unset.
- @Override
- public void onEvaluate(long index, int initPrecOffset, int msdIndex, int lsdOffset,
- String truncatedWholePart) {
- setNow();
- }
- @Override
- public void onReevaluate(long index) {
- badCall();
- }
- }
-
- private class SetMemoryWhenDoneListener extends SetWhenDoneListener {
- final long mIndex;
- final boolean mPersist;
- SetMemoryWhenDoneListener(long index, boolean persist) {
- mIndex = index;
- mPersist = persist;
- }
- @Override
- void setNow() {
- if (mMemoryIndex != 0) {
- throw new AssertionError("Overwriting nonzero memory index");
- }
- if (mPersist) {
- setMemoryIndex(mIndex);
- } else {
- mMemoryIndex = mIndex;
- }
- }
- }
-
- private class SetSavedWhenDoneListener extends SetWhenDoneListener {
- final long mIndex;
- SetSavedWhenDoneListener(long index) {
- mIndex = index;
- }
- @Override
- void setNow() {
- mSavedIndex = mIndex;
- }
- }
-
- /**
- * Set the local and persistent memory index.
- */
- private void setMemoryIndex(long index) {
- mMemoryIndex = index;
- mSharedPrefs.edit()
- .putLong(KEY_PREF_MEMORY_INDEX, index)
- .apply();
-
- if (mCallback != null) {
- mCallback.onMemoryStateChanged();
- }
- }
-
- /**
- * Set the local and persistent saved index.
- */
- private void setSavedIndex(long index) {
- mSavedIndex = index;
- mSharedPrefs.edit()
- .putLong(KEY_PREF_SAVED_INDEX, index)
- .apply();
- }
-
- /**
- * Set mMemoryIndex (possibly including the persistent version) to index when we finish
- * evaluating the corresponding expression.
- */
- void setMemoryIndexWhenEvaluated(long index, boolean persist) {
- requireResult(index, new SetMemoryWhenDoneListener(index, persist), mDummyCharMetricsInfo);
- }
-
- /**
- * Set mSavedIndex (not the persistent version) to index when we finish evaluating
- * the corresponding expression.
- */
- void setSavedIndexWhenEvaluated(long index) {
- requireResult(index, new SetSavedWhenDoneListener(index), mDummyCharMetricsInfo);
- }
-
- /**
- * Save an immutable version of the expression at the given index as the saved value.
- * mExpr is left alone. Return false if result is unavailable.
- */
- private boolean copyToSaved(long index) {
- if (mExprs.get(index).mResultString == null
- || mExprs.get(index).mResultString == ERRONEOUS_RESULT) {
- return false;
- }
- setSavedIndex(isMutableIndex(index) ? preserve(index, false) : index);
- return true;
- }
-
- /**
- * Save an immutable version of the expression at the given index as the "memory" value.
- * The expression at index is presumed to have been evaluated.
- */
- public void copyToMemory(long index) {
- setMemoryIndex(isMutableIndex(index) ? preserve(index, false) : index);
- }
-
- /**
- * Save an an expression representing the sum of "memory" and the expression with the
- * given index. Make mMemoryIndex point to it when we complete evaluating.
- */
- public void addToMemory(long index) {
- ExprInfo newEi = sum(mMemoryIndex, index);
- if (newEi != null) {
- long newIndex = addToDB(false, newEi);
- mMemoryIndex = 0; // Invalidate while we're evaluating.
- setMemoryIndexWhenEvaluated(newIndex, true /* persist */);
- }
- }
-
- /**
- * Save an an expression representing the subtraction of the expression with the given index
- * from "memory." Make mMemoryIndex point to it when we complete evaluating.
- */
- public void subtractFromMemory(long index) {
- ExprInfo newEi = difference(mMemoryIndex, index);
- if (newEi != null) {
- long newIndex = addToDB(false, newEi);
- mMemoryIndex = 0; // Invalidate while we're evaluating.
- setMemoryIndexWhenEvaluated(newIndex, true /* persist */);
- }
- }
-
- /**
- * Return index of "saved" expression, or 0.
- */
- public long getSavedIndex() {
- return mSavedIndex;
- }
-
- /**
- * Return index of "memory" expression, or 0.
- */
- public long getMemoryIndex() {
- return mMemoryIndex;
- }
-
- private Uri uriForSaved() {
- return new Uri.Builder().scheme("tag")
- .encodedOpaquePart(mSavedName)
- .build();
- }
-
- /**
- * Save the index expression as the saved location and return a URI describing it.
- * The URI is used to distinguish this particular result from others we may generate.
- */
- public Uri capture(long index) {
- if (!copyToSaved(index)) return null;
- // Generate a new (entirely private) URI for this result.
- // Attempt to conform to RFC4151, though it's unclear it matters.
- final TimeZone tz = TimeZone.getDefault();
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
- df.setTimeZone(tz);
- final String isoDate = df.format(new Date());
- mSavedName = "calculator2.android.com," + isoDate + ":"
- + (new Random().nextInt() & 0x3fffffff);
- mSharedPrefs.edit()
- .putString(KEY_PREF_SAVED_NAME, mSavedName)
- .apply();
- return uriForSaved();
- }
-
- public boolean isLastSaved(Uri uri) {
- return mSavedIndex != 0 && uri.equals(uriForSaved());
- }
-
- /**
- * Append the expression at index as a pre-evaluated expression to the main expression.
- */
- public void appendExpr(long index) {
- ExprInfo ei = mExprs.get(index);
- mChangedValue = true;
- mMainExpr.mLongTimeout |= ei.mLongTimeout;
- CalculatorExpr collapsed = getCollapsedExpr(index);
- if (collapsed != null) {
- mMainExpr.mExpr.append(getCollapsedExpr(index));
- }
- }
-
- /**
- * Add the power of 10 operator to the main expression.
- * This is treated essentially as a macro expansion.
- */
- private void add10pow() {
- CalculatorExpr ten = new CalculatorExpr();
- ten.add(R.id.digit_1);
- ten.add(R.id.digit_0);
- mChangedValue = true; // For consistency. Reevaluation is probably not useful.
- mMainExpr.mExpr.append(ten);
- mMainExpr.mExpr.add(R.id.op_pow);
- }
-
- /**
- * Ensure that the expression with the given index is in mExprs.
- * We assume that if it's either already in mExprs or mExprDB.
- * When we're done, the expression in mExprs may still contain references to other
- * subexpressions that are not yet cached.
- */
- private ExprInfo ensureExprIsCached(long index) {
- ExprInfo ei = mExprs.get(index);
- if (ei != null) {
- return ei;
- }
- if (index == MAIN_INDEX) {
- throw new AssertionError("Main expression should be cached");
- }
- ExpressionDB.RowData row = mExprDB.getRow(index);
- DataInputStream serializedExpr =
- new DataInputStream(new ByteArrayInputStream(row.mExpression));
- try {
- ei = new ExprInfo(new CalculatorExpr(serializedExpr), row.degreeMode());
- ei.mTimeStamp = row.mTimeStamp;
- ei.mLongTimeout = row.longTimeout();
- } catch(IOException e) {
- throw new AssertionError("IO Exception without real IO:" + e);
- }
- ExprInfo newEi = mExprs.putIfAbsent(index, ei);
- return newEi == null ? ei : newEi;
- }
-
- @Override
- public CalculatorExpr getExpr(long index) {
- return ensureExprIsCached(index).mExpr;
- }
-
- /*
- * Return timestamp associated with the expression in milliseconds since epoch.
- * Yields zero if the expression has not been written to or read from the database.
- */
- public long getTimeStamp(long index) {
- return ensureExprIsCached(index).mTimeStamp;
- }
-
- @Override
- public boolean getDegreeMode(long index) {
- return ensureExprIsCached(index).mDegreeMode;
- }
-
- @Override
- public UnifiedReal getResult(long index) {
- return ensureExprIsCached(index).mVal.get();
- }
-
- @Override
- public UnifiedReal putResultIfAbsent(long index, UnifiedReal result) {
- ExprInfo ei = mExprs.get(index);
- if (ei.mVal.compareAndSet(null, result)) {
- return result;
- } else {
- // Cannot change once non-null.
- return ei.mVal.get();
- }
- }
-
- /**
- * Does the current main expression contain trig functions?
- * Might its value depend on DEG/RAD mode?
- */
- public boolean hasTrigFuncs() {
- return mHasTrigFuncs;
- }
-
- /**
- * Maximum number of characters in a scientific notation exponent.
- */
- private static final int MAX_EXP_CHARS = 8;
-
- /**
- * Return the index of the character after the exponent starting at s[offset].
- * Return offset if there is no exponent at that position.
- * Exponents have syntax E[-]digit* . "E2" and "E-2" are valid. "E+2" and "e2" are not.
- * We allow any Unicode digits, and either of the commonly used minus characters.
- */
- public static int exponentEnd(String s, int offset) {
- int i = offset;
- int len = s.length();
- if (i >= len - 1 || s.charAt(i) != 'E') {
- return offset;
- }
- ++i;
- if (KeyMaps.keyForChar(s.charAt(i)) == R.id.op_sub) {
- ++i;
- }
- if (i == len || !Character.isDigit(s.charAt(i))) {
- return offset;
- }
- ++i;
- while (i < len && Character.isDigit(s.charAt(i))) {
- ++i;
- if (i > offset + MAX_EXP_CHARS) {
- return offset;
- }
- }
- return i;
- }
-
- /**
- * Add the exponent represented by s[begin..end) to the constant at the end of current
- * expression.
- * The end of the current expression must be a constant. Exponents have the same syntax as
- * for exponentEnd().
- */
- public void addExponent(String s, int begin, int end) {
- int sign = 1;
- int exp = 0;
- int i = begin + 1;
- // We do the decimal conversion ourselves to exactly match exponentEnd() conventions
- // and handle various kinds of digits on input. Also avoids allocation.
- if (KeyMaps.keyForChar(s.charAt(i)) == R.id.op_sub) {
- sign = -1;
- ++i;
- }
- for (; i < end; ++i) {
- exp = 10 * exp + Character.digit(s.charAt(i), 10);
- }
- mMainExpr.mExpr.addExponent(sign * exp);
- mChangedValue = true;
- }
-
- /**
- * Generate a String representation of the expression at the given index.
- * This has the side effect of adding the expression to mExprs.
- * The expression must exist in the database.
- */
- public String getExprAsString(long index) {
- return getExprAsSpannable(index).toString();
- }
-
- public Spannable getExprAsSpannable(long index) {
- return getExpr(index).toSpannableStringBuilder(mContext);
- }
-
- /**
- * Generate a String representation of all expressions in the database.
- * Debugging only.
- */
- public String historyAsString() {
- final long startIndex = getMinIndex();
- final long endIndex = getMaxIndex();
- final StringBuilder sb = new StringBuilder();
- for (long i = getMinIndex(); i < ExpressionDB.MAXIMUM_MIN_INDEX; ++i) {
- sb.append(i).append(": ").append(getExprAsString(i)).append("\n");
- }
- for (long i = 1; i < getMaxIndex(); ++i) {
- sb.append(i).append(": ").append(getExprAsString(i)).append("\n");
- }
- sb.append("Memory index = ").append(getMemoryIndex());
- sb.append(" Saved index = ").append(getSavedIndex()).append("\n");
- return sb.toString();
- }
-
- /**
- * Wait for pending writes to the database to complete.
- */
- public void waitForWrites() {
- mExprDB.waitForWrites();
- }
-
- /**
- * Destroy the current evaluator, forcing getEvaluator to allocate a new one.
- * This is needed for testing, since Robolectric apparently doesn't let us preserve
- * an open databse across tests. Cf. https://github.com/robolectric/robolectric/issues/1890 .
- */
- public void destroyEvaluator() {
- mExprDB.close();
- evaluator = null;
- }
-
- public interface Callback {
- void onMemoryStateChanged();
- void showMessageDialog(@StringRes int title, @StringRes int message,
- @StringRes int positiveButtonLabel, String tag);
- }
-}
diff --git a/src/com/android/calculator2/ExpressionDB.java b/src/com/android/calculator2/ExpressionDB.java
deleted file mode 100644
index 9a0f8ec..0000000
--- a/src/com/android/calculator2/ExpressionDB.java
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-// We make some strong assumptions about the databases we manipulate.
-// We maintain a single table containg expressions, their indices in the sequence of
-// expressions, and some data associated with each expression.
-// All indices are used, except for a small gap around zero. New rows are added
-// either just below the current minimum (negative) index, or just above the current
-// maximum index. Currently no rows are deleted unless we clear the whole table.
-
-// TODO: Especially if we notice serious performance issues on rotation in the history
-// view, we may need to use a CursorLoader or some other scheme to preserve the database
-// across rotations.
-// TODO: We may want to switch to a scheme in which all expressions saved in the database have
-// a positive index, and a flag indicates whether the expression is displayed as part of
-// the history or not. That would avoid potential thrashing between CursorWindows when accessing
-// with a negative index. It would also make it easy to sort expressions in dependency order,
-// which helps with avoiding deep recursion during evaluation. But it makes the history UI
-// implementation more complicated. It should be possible to make this change without a
-// database version bump.
-
-// This ensures strong thread-safety, i.e. each call looks atomic to other threads. We need some
-// such property, since expressions may be read by one thread while the main thread is updating
-// another expression.
-
-package com.android.calculator2;
-
-import android.app.Activity;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.AbstractWindowedCursor;
-import android.database.Cursor;
-import android.database.CursorWindow;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.os.AsyncTask;
-import android.provider.BaseColumns;
-import android.util.Log;
-import android.view.View;
-
-public class ExpressionDB {
- private final boolean CONTINUE_WITH_BAD_DB = false;
-
- /* Table contents */
- public static class ExpressionEntry implements BaseColumns {
- public static final String TABLE_NAME = "expressions";
- public static final String COLUMN_NAME_EXPRESSION = "expression";
- public static final String COLUMN_NAME_FLAGS = "flags";
- // Time stamp as returned by currentTimeMillis().
- public static final String COLUMN_NAME_TIMESTAMP = "timeStamp";
- }
-
- /* Data to be written to or read from a row in the table */
- public static class RowData {
- private static final int DEGREE_MODE = 2;
- private static final int LONG_TIMEOUT = 1;
- public final byte[] mExpression;
- public final int mFlags;
- public long mTimeStamp; // 0 ==> this and next field to be filled in when written.
- private static int flagsFromDegreeAndTimeout(Boolean DegreeMode, Boolean LongTimeout) {
- return (DegreeMode ? DEGREE_MODE : 0) | (LongTimeout ? LONG_TIMEOUT : 0);
- }
- private boolean degreeModeFromFlags(int flags) {
- return (flags & DEGREE_MODE) != 0;
- }
- private boolean longTimeoutFromFlags(int flags) {
- return (flags & LONG_TIMEOUT) != 0;
- }
- private static final int MILLIS_IN_15_MINS = 15 * 60 * 1000;
- private RowData(byte[] expr, int flags, long timeStamp) {
- mExpression = expr;
- mFlags = flags;
- mTimeStamp = timeStamp;
- }
- /**
- * More client-friendly constructor that hides implementation ugliness.
- * utcOffset here is uncompressed, in milliseconds.
- * A zero timestamp will cause it to be automatically filled in.
- */
- public RowData(byte[] expr, boolean degreeMode, boolean longTimeout, long timeStamp) {
- this(expr, flagsFromDegreeAndTimeout(degreeMode, longTimeout), timeStamp);
- }
- public boolean degreeMode() {
- return degreeModeFromFlags(mFlags);
- }
- public boolean longTimeout() {
- return longTimeoutFromFlags(mFlags);
- }
- /**
- * Return a ContentValues object representing the current data.
- */
- public ContentValues toContentValues() {
- ContentValues cvs = new ContentValues();
- cvs.put(ExpressionEntry.COLUMN_NAME_EXPRESSION, mExpression);
- cvs.put(ExpressionEntry.COLUMN_NAME_FLAGS, mFlags);
- if (mTimeStamp == 0) {
- mTimeStamp = System.currentTimeMillis();
- }
- cvs.put(ExpressionEntry.COLUMN_NAME_TIMESTAMP, mTimeStamp);
- return cvs;
- }
- }
-
- private static final String SQL_CREATE_ENTRIES =
- "CREATE TABLE " + ExpressionEntry.TABLE_NAME + " ("
- + ExpressionEntry._ID + " INTEGER PRIMARY KEY,"
- + ExpressionEntry.COLUMN_NAME_EXPRESSION + " BLOB,"
- + ExpressionEntry.COLUMN_NAME_FLAGS + " INTEGER,"
- + ExpressionEntry.COLUMN_NAME_TIMESTAMP + " INTEGER)";
- private static final String SQL_DROP_TABLE =
- "DROP TABLE IF EXISTS " + ExpressionEntry.TABLE_NAME;
- private static final String SQL_GET_MIN = "SELECT MIN(" + ExpressionEntry._ID
- + ") FROM " + ExpressionEntry.TABLE_NAME;
- private static final String SQL_GET_MAX = "SELECT MAX(" + ExpressionEntry._ID
- + ") FROM " + ExpressionEntry.TABLE_NAME;
- private static final String SQL_GET_ROW = "SELECT * FROM " + ExpressionEntry.TABLE_NAME
- + " WHERE " + ExpressionEntry._ID + " = ?";
- private static final String SQL_GET_ALL = "SELECT * FROM " + ExpressionEntry.TABLE_NAME
- + " WHERE " + ExpressionEntry._ID + " <= ? AND " +
- ExpressionEntry._ID + " >= ?" + " ORDER BY " + ExpressionEntry._ID + " DESC ";
- // We may eventually need an index by timestamp. We don't use it yet.
- private static final String SQL_CREATE_TIMESTAMP_INDEX =
- "CREATE INDEX timestamp_index ON " + ExpressionEntry.TABLE_NAME + "("
- + ExpressionEntry.COLUMN_NAME_TIMESTAMP + ")";
- private static final String SQL_DROP_TIMESTAMP_INDEX = "DROP INDEX IF EXISTS timestamp_index";
-
- private class ExpressionDBHelper extends SQLiteOpenHelper {
- // If you change the database schema, you must increment the database version.
- public static final int DATABASE_VERSION = 1;
- public static final String DATABASE_NAME = "Expressions.db";
-
- public ExpressionDBHelper(Context context) {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
- }
- public void onCreate(SQLiteDatabase db) {
- db.execSQL(SQL_CREATE_ENTRIES);
- db.execSQL(SQL_CREATE_TIMESTAMP_INDEX);
- }
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // For now just throw away history on database version upgrade/downgrade.
- db.execSQL(SQL_DROP_TIMESTAMP_INDEX);
- db.execSQL(SQL_DROP_TABLE);
- onCreate(db);
- }
- public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- onUpgrade(db, oldVersion, newVersion);
- }
- }
-
- private ExpressionDBHelper mExpressionDBHelper;
-
- private SQLiteDatabase mExpressionDB; // Constant after initialization.
-
- // Expression indices between mMinAccessible and mMaxAccessible inclusive can be accessed.
- // We set these to more interesting values if a database access fails.
- // We punt on writes outside this range. We should never read outside this range.
- // If higher layers refer to an index outside this range, it will already be cached.
- // This also somewhat limits the size of the database, but only to an unreasonably
- // huge value.
- private long mMinAccessible = -10000000L;
- private long mMaxAccessible = 10000000L;
-
- // Never allocate new negative indicees (row ids) >= MAXIMUM_MIN_INDEX.
- public static final long MAXIMUM_MIN_INDEX = -10;
-
- // Minimum index value in DB.
- private long mMinIndex;
- // Maximum index value in DB.
- private long mMaxIndex;
-
- // A cursor that refers to the whole table, in reverse order.
- private AbstractWindowedCursor mAllCursor;
-
- // Expression index corresponding to a zero absolute offset for mAllCursor.
- // This is the argument we passed to the query.
- // We explicitly query only for entries that existed when we started, to avoid
- // interference from updates as we're running. It's unclear whether or not this matters.
- private int mAllCursorBase;
-
- // Database has been opened, mMinIndex and mMaxIndex are correct, mAllCursorBase and
- // mAllCursor have been set.
- private boolean mDBInitialized;
-
- // Gap between negative and positive row ids in the database.
- // Expressions with index [MAXIMUM_MIN_INDEX .. 0] are not stored.
- private static final long GAP = -MAXIMUM_MIN_INDEX + 1;
-
- // mLock protects mExpressionDB, mMinAccessible, and mMaxAccessible, mAllCursor,
- // mAllCursorBase, mMinIndex, mMaxIndex, and mDBInitialized. We access mExpressionDB without
- // synchronization after it's known to be initialized. Used to wait for database
- // initialization.
- private Object mLock = new Object();
-
- public ExpressionDB(Context context) {
- mExpressionDBHelper = new ExpressionDBHelper(context);
- AsyncInitializer initializer = new AsyncInitializer();
- // All calls that create background database accesses are made from the UI thread, and
- // use a SERIAL_EXECUTOR. Thus they execute in order.
- initializer.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, mExpressionDBHelper);
- }
-
- // Is database completely unusable?
- private boolean isDBBad() {
- if (!CONTINUE_WITH_BAD_DB) {
- return false;
- }
- synchronized(mLock) {
- return mMinAccessible > mMaxAccessible;
- }
- }
-
- // Is the index in the accessible range of the database?
- private boolean inAccessibleRange(long index) {
- if (!CONTINUE_WITH_BAD_DB) {
- return true;
- }
- synchronized(mLock) {
- return index >= mMinAccessible && index <= mMaxAccessible;
- }
- }
-
-
- private void setBadDB() {
- if (!CONTINUE_WITH_BAD_DB) {
- Log.e("Calculator", "Database access failed");
- throw new RuntimeException("Database access failed");
- }
- displayDatabaseWarning();
- synchronized(mLock) {
- mMinAccessible = 1L;
- mMaxAccessible = -1L;
- }
- }
-
- /**
- * Initialize the database in the background.
- */
- private class AsyncInitializer extends AsyncTask<ExpressionDBHelper, Void, SQLiteDatabase> {
- @Override
- protected SQLiteDatabase doInBackground(ExpressionDBHelper... helper) {
- try {
- SQLiteDatabase db = helper[0].getWritableDatabase();
- synchronized(mLock) {
- mExpressionDB = db;
- try (Cursor minResult = db.rawQuery(SQL_GET_MIN, null)) {
- if (!minResult.moveToFirst()) {
- // Empty database.
- mMinIndex = MAXIMUM_MIN_INDEX;
- } else {
- mMinIndex = Math.min(minResult.getLong(0), MAXIMUM_MIN_INDEX);
- }
- }
- try (Cursor maxResult = db.rawQuery(SQL_GET_MAX, null)) {
- if (!maxResult.moveToFirst()) {
- // Empty database.
- mMaxIndex = 0L;
- } else {
- mMaxIndex = Math.max(maxResult.getLong(0), 0L);
- }
- }
- if (mMaxIndex > Integer.MAX_VALUE) {
- throw new AssertionError("Expression index absurdly large");
- }
- mAllCursorBase = (int)mMaxIndex;
- if (mMaxIndex != 0L || mMinIndex != MAXIMUM_MIN_INDEX) {
- // Set up a cursor for reading the entire database.
- String args[] = new String[]
- { Long.toString(mAllCursorBase), Long.toString(mMinIndex) };
- mAllCursor = (AbstractWindowedCursor) db.rawQuery(SQL_GET_ALL, args);
- if (!mAllCursor.moveToFirst()) {
- setBadDB();
- return null;
- }
- }
- mDBInitialized = true;
- // We notify here, since there are unlikely cases in which the UI thread
- // may be blocked on us, preventing onPostExecute from running.
- mLock.notifyAll();
- }
- return db;
- } catch(SQLiteException e) {
- Log.e("Calculator", "Database initialization failed.\n", e);
- synchronized(mLock) {
- setBadDB();
- mLock.notifyAll();
- }
- return null;
- }
- }
-
- @Override
- protected void onPostExecute(SQLiteDatabase result) {
- if (result == null) {
- displayDatabaseWarning();
- } // else doInBackground already set expressionDB.
- }
- // On cancellation we do nothing;
- }
-
- private boolean databaseWarningIssued;
-
- /**
- * Display a warning message that a database access failed.
- * Do this only once. TODO: Replace with a real UI message.
- */
- void displayDatabaseWarning() {
- if (!databaseWarningIssued) {
- Log.e("Calculator", "Calculator restarting due to database error");
- databaseWarningIssued = true;
- }
- }
-
- /**
- * Wait until the database and mAllCursor, etc. have been initialized.
- */
- private void waitForDBInitialized() {
- synchronized(mLock) {
- // InterruptedExceptions are inconvenient here. Defer.
- boolean caught = false;
- while (!mDBInitialized && !isDBBad()) {
- try {
- mLock.wait();
- } catch(InterruptedException e) {
- caught = true;
- }
- }
- if (caught) {
- Thread.currentThread().interrupt();
- }
- }
- }
-
- /**
- * Erase the entire database. Assumes no other accesses to the database are
- * currently in progress
- * These tasks must be executed on a serial executor to avoid reordering writes.
- */
- private class AsyncEraser extends AsyncTask<Void, Void, Void> {
- @Override
- protected Void doInBackground(Void... nothings) {
- mExpressionDB.execSQL(SQL_DROP_TIMESTAMP_INDEX);
- mExpressionDB.execSQL(SQL_DROP_TABLE);
- try {
- mExpressionDB.execSQL("VACUUM");
- } catch(Exception e) {
- Log.v("Calculator", "Database VACUUM failed\n", e);
- // Should only happen with concurrent execution, which should be impossible.
- }
- mExpressionDB.execSQL(SQL_CREATE_ENTRIES);
- mExpressionDB.execSQL(SQL_CREATE_TIMESTAMP_INDEX);
- return null;
- }
- @Override
- protected void onPostExecute(Void nothing) {
- synchronized(mLock) {
- // Reinitialize everything to an empty and fully functional database.
- mMinAccessible = -10000000L;
- mMaxAccessible = 10000000L;
- mMinIndex = MAXIMUM_MIN_INDEX;
- mMaxIndex = mAllCursorBase = 0;
- mDBInitialized = true;
- mLock.notifyAll();
- }
- }
- // On cancellation we do nothing;
- }
-
- /**
- * Erase ALL database entries.
- * This is currently only safe if expressions that may refer to them are also erased.
- * Should only be called when concurrent references to the database are impossible.
- * TODO: Look at ways to more selectively clear the database.
- */
- public void eraseAll() {
- waitForDBInitialized();
- synchronized(mLock) {
- mDBInitialized = false;
- }
- AsyncEraser eraser = new AsyncEraser();
- eraser.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
- }
-
- // We track the number of outstanding writes to prevent onSaveInstanceState from
- // completing with in-flight database writes.
-
- private int mIncompleteWrites = 0;
- private Object mWriteCountsLock = new Object(); // Protects the preceding field.
-
- private void writeCompleted() {
- synchronized(mWriteCountsLock) {
- if (--mIncompleteWrites == 0) {
- mWriteCountsLock.notifyAll();
- }
- }
- }
-
- private void writeStarted() {
- synchronized(mWriteCountsLock) {
- ++mIncompleteWrites;
- }
- }
-
- /**
- * Wait for in-flight writes to complete.
- * This is not safe to call from one of our background tasks, since the writing
- * tasks may be waiting for the same underlying thread that we're using, resulting
- * in deadlock.
- */
- public void waitForWrites() {
- synchronized(mWriteCountsLock) {
- boolean caught = false;
- while (mIncompleteWrites != 0) {
- try {
- mWriteCountsLock.wait();
- } catch (InterruptedException e) {
- caught = true;
- }
- }
- if (caught) {
- Thread.currentThread().interrupt();
- }
- }
- }
-
- /**
- * Insert the given row in the database without blocking the UI thread.
- * These tasks must be executed on a serial executor to avoid reordering writes.
- */
- private class AsyncWriter extends AsyncTask<ContentValues, Void, Long> {
- @Override
- protected Long doInBackground(ContentValues... cvs) {
- long index = cvs[0].getAsLong(ExpressionEntry._ID);
- long result = mExpressionDB.insert(ExpressionEntry.TABLE_NAME, null, cvs[0]);
- writeCompleted();
- // Return 0 on success, row id on failure.
- if (result == -1) {
- return index;
- } else if (result != index) {
- throw new AssertionError("Expected row id " + index + ", got " + result);
- } else {
- return 0L;
- }
- }
- @Override
- protected void onPostExecute(Long result) {
- if (result != 0) {
- synchronized(mLock) {
- if (result > 0) {
- mMaxAccessible = result - 1;
- } else {
- mMinAccessible = result + 1;
- }
- }
- displayDatabaseWarning();
- }
- }
- // On cancellation we do nothing;
- }
-
- /**
- * Add a row with index outside existing range.
- * The returned index will be just larger than any existing index unless negative_index is true.
- * In that case it will be smaller than any existing index and smaller than MAXIMUM_MIN_INDEX.
- * This ensures that prior additions have completed, but does not wait for this insertion
- * to complete.
- */
- public long addRow(boolean negativeIndex, RowData data) {
- long result;
- long newIndex;
- waitForDBInitialized();
- synchronized(mLock) {
- if (negativeIndex) {
- newIndex = mMinIndex - 1;
- mMinIndex = newIndex;
- } else {
- newIndex = mMaxIndex + 1;
- mMaxIndex = newIndex;
- }
- if (!inAccessibleRange(newIndex)) {
- // Just drop it, but go ahead and return a new index to use for the cache.
- // So long as reads of previously written expressions continue to work,
- // we should be fine. When the application is restarted, history will revert
- // to just include values between mMinAccessible and mMaxAccessible.
- return newIndex;
- }
- writeStarted();
- ContentValues cvs = data.toContentValues();
- cvs.put(ExpressionEntry._ID, newIndex);
- AsyncWriter awriter = new AsyncWriter();
- // Ensure that writes are executed in order.
- awriter.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, cvs);
- }
- return newIndex;
- }
-
- /**
- * Generate a fake database row that's good enough to hopefully prevent crashes,
- * but bad enough to avoid confusion with real data. In particular, the result
- * will fail to evaluate.
- */
- RowData makeBadRow() {
- CalculatorExpr badExpr = new CalculatorExpr();
- badExpr.add(R.id.lparen);
- badExpr.add(R.id.rparen);
- return new RowData(badExpr.toBytes(), false, false, 0);
- }
-
- /**
- * Retrieve the row with the given index using a direct query.
- * Such a row must exist.
- * We assume that the database has been initialized, and the argument has been range checked.
- */
- private RowData getRowDirect(long index) {
- RowData result;
- String args[] = new String[] { Long.toString(index) };
- try (Cursor resultC = mExpressionDB.rawQuery(SQL_GET_ROW, args)) {
- if (!resultC.moveToFirst()) {
- setBadDB();
- return makeBadRow();
- } else {
- result = new RowData(resultC.getBlob(1), resultC.getInt(2) /* flags */,
- resultC.getLong(3) /* timestamp */);
- }
- }
- return result;
- }
-
- /**
- * Retrieve the row at the given offset from mAllCursorBase.
- * Note the argument is NOT an expression index!
- * We assume that the database has been initialized, and the argument has been range checked.
- */
- private RowData getRowFromCursor(int offset) {
- RowData result;
- synchronized(mLock) {
- if (!mAllCursor.moveToPosition(offset)) {
- Log.e("Calculator", "Failed to move cursor to position " + offset);
- setBadDB();
- return makeBadRow();
- }
- return new RowData(mAllCursor.getBlob(1), mAllCursor.getInt(2) /* flags */,
- mAllCursor.getLong(3) /* timestamp */);
- }
- }
-
- /**
- * Retrieve the database row at the given index.
- * We currently assume that we never read data that we added since we initialized the database.
- * This makes sense, since we cache it anyway. And we should always cache recently added data.
- */
- public RowData getRow(long index) {
- waitForDBInitialized();
- if (!inAccessibleRange(index)) {
- // Even if something went wrong opening or writing the database, we should
- // not see such read requests, unless they correspond to a persistently
- // saved index, and we can't retrieve that expression.
- displayDatabaseWarning();
- return makeBadRow();
- }
- int position = mAllCursorBase - (int)index;
- // We currently assume that the only gap between expression indices is the one around 0.
- if (index < 0) {
- position -= GAP;
- }
- if (position < 0) {
- throw new AssertionError("Database access out of range, index = " + index
- + " rel. pos. = " + position);
- }
- if (index < 0) {
- // Avoid using mAllCursor to read data that's far away from the current position,
- // since we're likely to have to return to the current position.
- // This is a heuristic; we don't worry about doing the "wrong" thing in the race case.
- int endPosition;
- synchronized(mLock) {
- CursorWindow window = mAllCursor.getWindow();
- endPosition = window.getStartPosition() + window.getNumRows();
- }
- if (position >= endPosition) {
- return getRowDirect(index);
- }
- }
- // In the positive index case, it's probably OK to cross a cursor boundary, since
- // we're much more likely to stay in the new window.
- return getRowFromCursor(position);
- }
-
- public long getMinIndex() {
- waitForDBInitialized();
- synchronized(mLock) {
- return mMinIndex;
- }
- }
-
- public long getMaxIndex() {
- waitForDBInitialized();
- synchronized(mLock) {
- return mMaxIndex;
- }
- }
-
- public void close() {
- mExpressionDBHelper.close();
- }
-
-}
diff --git a/src/com/android/calculator2/HistoryAdapter.java b/src/com/android/calculator2/HistoryAdapter.java
deleted file mode 100644
index be50050..0000000
--- a/src/com/android/calculator2/HistoryAdapter.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2016 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 androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-
-/**
- * Adapter for RecyclerView of HistoryItems.
- */
-public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {
-
- private static final String TAG = "HistoryAdapter";
-
- private static final int EMPTY_VIEW_TYPE = 0;
- public static final int HISTORY_VIEW_TYPE = 1;
-
- private Evaluator mEvaluator;
-
- private final Calendar mCalendar = Calendar.getInstance();
-
- private List<HistoryItem> mDataSet;
-
- private boolean mIsResultLayout;
- private boolean mIsOneLine;
- private boolean mIsDisplayEmpty;
-
- public HistoryAdapter(ArrayList<HistoryItem> dataSet) {
- mDataSet = dataSet;
- setHasStableIds(true);
- }
-
- @Override
- public HistoryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- final View v;
- if (viewType == HISTORY_VIEW_TYPE) {
- v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.history_item, parent, false);
- } else {
- v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.empty_history_view, parent, false);
- }
- return new ViewHolder(v, viewType);
- }
-
- @Override
- public void onBindViewHolder(final HistoryAdapter.ViewHolder holder, int position) {
- final HistoryItem item = getItem(position);
-
- if (item.isEmptyView()) {
- return;
- }
-
- holder.mFormula.setText(item.getFormula());
- // Note: HistoryItems that are not the current expression will always have interesting ops.
- holder.mResult.setEvaluator(mEvaluator, item.getEvaluatorIndex());
- if (item.getEvaluatorIndex() == Evaluator.HISTORY_MAIN_INDEX) {
- holder.mDate.setText(R.string.title_current_expression);
- holder.mResult.setVisibility(mIsOneLine ? View.GONE : View.VISIBLE);
- } else {
- // If the previous item occurred on the same date, the current item does not need
- // a date header.
- if (shouldShowHeader(position, item)) {
- holder.mDate.setText(item.getDateString());
- // Special case -- very first item should not have a divider above it.
- holder.mDivider.setVisibility(position == getItemCount() - 1
- ? View.GONE : View.VISIBLE);
- } else {
- holder.mDate.setVisibility(View.GONE);
- holder.mDivider.setVisibility(View.INVISIBLE);
- }
- }
- }
-
- @Override
- public void onViewRecycled(ViewHolder holder) {
- if (holder.getItemViewType() == EMPTY_VIEW_TYPE) {
- return;
- }
- mEvaluator.cancel(holder.getItemId(), true);
-
- holder.mDate.setVisibility(View.VISIBLE);
- holder.mDivider.setVisibility(View.VISIBLE);
- holder.mDate.setText(null);
- holder.mFormula.setText(null);
- holder.mResult.setText(null);
-
- super.onViewRecycled(holder);
- }
-
- @Override
- public long getItemId(int position) {
- return getItem(position).getEvaluatorIndex();
- }
-
- @Override
- public int getItemViewType(int position) {
- return getItem(position).isEmptyView() ? EMPTY_VIEW_TYPE : HISTORY_VIEW_TYPE;
- }
-
- @Override
- public int getItemCount() {
- return mDataSet.size();
- }
-
- public void setDataSet(ArrayList<HistoryItem> dataSet) {
- mDataSet = dataSet;
- }
-
- public void setIsResultLayout(boolean isResult) {
- mIsResultLayout = isResult;
- }
-
- public void setIsOneLine(boolean isOneLine) {
- mIsOneLine = isOneLine;
- }
-
- public void setIsDisplayEmpty(boolean isDisplayEmpty) {
- mIsDisplayEmpty = isDisplayEmpty;
- }
-
- public void setEvaluator(Evaluator evaluator) {
- mEvaluator = evaluator;
- }
-
- private int getEvaluatorIndex(int position) {
- if (mIsDisplayEmpty || mIsResultLayout) {
- return (int) (mEvaluator.getMaxIndex() - position);
- } else {
- // Account for the additional "Current Expression" with the +1.
- return (int) (mEvaluator.getMaxIndex() - position + 1);
- }
- }
-
- private boolean shouldShowHeader(int position, HistoryItem item) {
- if (position == getItemCount() - 1) {
- // First/oldest element should always show the header.
- return true;
- }
- final HistoryItem prevItem = getItem(position + 1);
- // We need to use Calendars to determine this because of Daylight Savings.
- mCalendar.setTimeInMillis(item.getTimeInMillis());
- final int year = mCalendar.get(Calendar.YEAR);
- final int day = mCalendar.get(Calendar.DAY_OF_YEAR);
- mCalendar.setTimeInMillis(prevItem.getTimeInMillis());
- final int prevYear = mCalendar.get(Calendar.YEAR);
- final int prevDay = mCalendar.get(Calendar.DAY_OF_YEAR);
- return year != prevYear || day != prevDay;
- }
-
- /**
- * Gets the HistoryItem from mDataSet, lazy-filling the dataSet if necessary.
- */
- private HistoryItem getItem(int position) {
- HistoryItem item = mDataSet.get(position);
- // Lazy-fill the data set.
- if (item == null) {
- final int evaluatorIndex = getEvaluatorIndex(position);
- item = new HistoryItem(evaluatorIndex,
- mEvaluator.getTimeStamp(evaluatorIndex),
- mEvaluator.getExprAsSpannable(evaluatorIndex));
- mDataSet.set(position, item);
- }
- return item;
- }
-
- public static class ViewHolder extends RecyclerView.ViewHolder {
-
- private TextView mDate;
- private AlignedTextView mFormula;
- private CalculatorResult mResult;
- private View mDivider;
-
- public ViewHolder(View v, int viewType) {
- super(v);
- if (viewType == EMPTY_VIEW_TYPE) {
- return;
- }
- mDate = (TextView) v.findViewById(R.id.history_date);
- mFormula = (AlignedTextView) v.findViewById(R.id.history_formula);
- mResult = (CalculatorResult) v.findViewById(R.id.history_result);
- mDivider = v.findViewById(R.id.history_divider);
- }
-
- public AlignedTextView getFormula() {
- return mFormula;
- }
-
- public CalculatorResult getResult() {
- return mResult;
- }
-
- public TextView getDate() {
- return mDate;
- }
-
- public View getDivider() {
- return mDivider;
- }
- }
-} \ No newline at end of file
diff --git a/src/com/android/calculator2/HistoryFragment.java b/src/com/android/calculator2/HistoryFragment.java
deleted file mode 100644
index eb2a325..0000000
--- a/src/com/android/calculator2/HistoryFragment.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2016 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.animation.Animator;
-import android.app.Fragment;
-import android.os.Bundle;
-import androidx.core.content.ContextCompat;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Toolbar;
-
-import java.util.ArrayList;
-
-import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_DRAGGING;
-
-public class HistoryFragment extends Fragment implements DragLayout.DragCallback {
-
- public static final String TAG = "HistoryFragment";
- public static final String CLEAR_DIALOG_TAG = "clear";
-
- private final DragController mDragController = new DragController();
-
- private RecyclerView mRecyclerView;
- private HistoryAdapter mAdapter;
- private DragLayout mDragLayout;
-
- private Evaluator mEvaluator;
-
- private ArrayList<HistoryItem> mDataSet = new ArrayList<>();
-
- private boolean mIsDisplayEmpty;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mAdapter = new HistoryAdapter(mDataSet);
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- final View view = inflater.inflate(
- R.layout.fragment_history, container, false /* attachToRoot */);
-
- mDragLayout = (DragLayout) container.getRootView().findViewById(R.id.drag_layout);
- mDragLayout.addDragCallback(this);
-
- mRecyclerView = (RecyclerView) view.findViewById(R.id.history_recycler_view);
- mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- if (newState == SCROLL_STATE_DRAGGING) {
- stopActionModeOrContextMenu();
- }
- super.onScrollStateChanged(recyclerView, newState);
- }
- });
-
- // The size of the RecyclerView is not affected by the adapter's contents.
- mRecyclerView.setHasFixedSize(true);
- mRecyclerView.setAdapter(mAdapter);
-
- final Toolbar toolbar = (Toolbar) view.findViewById(R.id.history_toolbar);
- toolbar.inflateMenu(R.menu.fragment_history);
- toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- if (item.getItemId() == R.id.menu_clear_history) {
- final Calculator calculator = (Calculator) getActivity();
- AlertDialogFragment.showMessageDialog(calculator, "" /* title */,
- getString(R.string.dialog_clear),
- getString(R.string.menu_clear_history),
- CLEAR_DIALOG_TAG);
- return true;
- }
- return onOptionsItemSelected(item);
- }
- });
- toolbar.setNavigationOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- getActivity().onBackPressed();
- }
- });
- return view;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- final Calculator activity = (Calculator) getActivity();
- mEvaluator = Evaluator.getInstance(activity);
- mAdapter.setEvaluator(mEvaluator);
-
- final boolean isResultLayout = activity.isResultLayout();
- final boolean isOneLine = activity.isOneLine();
-
- // Snapshot display state here. For the rest of the lifecycle of this current
- // HistoryFragment, this is what we will consider the display state.
- // In rare cases, the display state can change after our adapter is initialized.
- final CalculatorExpr mainExpr = mEvaluator.getExpr(Evaluator.MAIN_INDEX);
- mIsDisplayEmpty = mainExpr == null || mainExpr.isEmpty();
-
- initializeController(isResultLayout, isOneLine, mIsDisplayEmpty);
-
- final long maxIndex = mEvaluator.getMaxIndex();
-
- final ArrayList<HistoryItem> newDataSet = new ArrayList<>();
-
- if (!mIsDisplayEmpty && !isResultLayout) {
- // Add the current expression as the first element in the list (the layout is
- // reversed and we want the current expression to be the last one in the
- // RecyclerView).
- // If we are in the result state, the result will animate to the last history
- // element in the list and there will be no "Current Expression."
- mEvaluator.copyMainToHistory();
- newDataSet.add(new HistoryItem(Evaluator.HISTORY_MAIN_INDEX,
- System.currentTimeMillis(), mEvaluator.getExprAsSpannable(0)));
- }
- for (long i = 0; i < maxIndex; ++i) {
- newDataSet.add(null);
- }
- final boolean isEmpty = newDataSet.isEmpty();
- mRecyclerView.setBackgroundColor(ContextCompat.getColor(activity,
- isEmpty ? R.color.empty_history_color : R.color.display_background_color));
- if (isEmpty) {
- newDataSet.add(new HistoryItem());
- }
- mDataSet = newDataSet;
- mAdapter.setDataSet(mDataSet);
- mAdapter.setIsResultLayout(isResultLayout);
- mAdapter.setIsOneLine(activity.isOneLine());
- mAdapter.setIsDisplayEmpty(mIsDisplayEmpty);
- mAdapter.notifyDataSetChanged();
- }
-
- @Override
- public void onStart() {
- super.onStart();
-
- final Calculator activity = (Calculator) getActivity();
- mDragController.initializeAnimation(activity.isResultLayout(), activity.isOneLine(),
- mIsDisplayEmpty);
- }
-
- @Override
- public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {
- return mDragLayout.createAnimator(enter);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- if (mDragLayout != null) {
- mDragLayout.removeDragCallback(this);
- }
-
- if (mEvaluator != null) {
- // Note that the view is destroyed when the fragment backstack is popped, so
- // these are essentially called when the DragLayout is closed.
- mEvaluator.cancelNonMain();
- }
- }
-
- private void initializeController(boolean isResult, boolean isOneLine, boolean isDisplayEmpty) {
- mDragController.setDisplayFormula(
- (CalculatorFormula) getActivity().findViewById(R.id.formula));
- mDragController.setDisplayResult(
- (CalculatorResult) getActivity().findViewById(R.id.result));
- mDragController.setToolbar(getActivity().findViewById(R.id.toolbar));
- mDragController.setEvaluator(mEvaluator);
- mDragController.initializeController(isResult, isOneLine, isDisplayEmpty);
- }
-
- public boolean stopActionModeOrContextMenu() {
- if (mRecyclerView == null) {
- return false;
- }
- for (int i = 0; i < mRecyclerView.getChildCount(); i++) {
- final View view = mRecyclerView.getChildAt(i);
- final HistoryAdapter.ViewHolder viewHolder =
- (HistoryAdapter.ViewHolder) mRecyclerView.getChildViewHolder(view);
- if (viewHolder != null && viewHolder.getResult() != null
- && viewHolder.getResult().stopActionModeOrContextMenu()) {
- return true;
- }
- }
- return false;
- }
-
- /* Begin override DragCallback methods. */
-
- @Override
- public void onStartDraggingOpen() {
- // no-op
- }
-
- @Override
- public void onInstanceStateRestored(boolean isOpen) {
- if (isOpen) {
- mRecyclerView.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- public void whileDragging(float yFraction) {
- if (isVisible() || isRemoving()) {
- mDragController.animateViews(yFraction, mRecyclerView);
- }
- }
-
- @Override
- public boolean shouldCaptureView(View view, int x, int y) {
- return !mRecyclerView.canScrollVertically(1 /* scrolling down */);
- }
-
- @Override
- public int getDisplayHeight() {
- return 0;
- }
-
- /* End override DragCallback methods. */
-}
diff --git a/src/com/android/calculator2/HistoryItem.java b/src/com/android/calculator2/HistoryItem.java
deleted file mode 100644
index f20d1a7..0000000
--- a/src/com/android/calculator2/HistoryItem.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2016 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.text.Spannable;
-import android.text.format.DateUtils;
-
-public class HistoryItem {
-
- private long mEvaluatorIndex;
- /** Date in millis */
- private long mTimeInMillis;
- private Spannable mFormula;
-
- /** This is true only for the "empty history" view. */
- private final boolean mIsEmpty;
-
- public HistoryItem(long evaluatorIndex, long millis, Spannable formula) {
- mEvaluatorIndex = evaluatorIndex;
- mTimeInMillis = millis;
- mFormula = formula;
- mIsEmpty = false;
- }
-
- public long getEvaluatorIndex() {
- return mEvaluatorIndex;
- }
-
- public HistoryItem() {
- mIsEmpty = true;
- }
-
- public boolean isEmptyView() {
- return mIsEmpty;
- }
-
- /**
- * @return String in format "n days ago"
- * For n > 7, the date is returned.
- */
- public CharSequence getDateString() {
- return DateUtils.getRelativeTimeSpanString(mTimeInMillis, System.currentTimeMillis(),
- DateUtils.DAY_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
- }
-
- public long getTimeInMillis() {
- return mTimeInMillis;
- }
-
- public Spannable getFormula() {
- return mFormula;
- }
-} \ No newline at end of file
diff --git a/src/com/android/calculator2/KeyMaps.java b/src/com/android/calculator2/KeyMaps.java
deleted file mode 100644
index cdfe4e4..0000000
--- a/src/com/android/calculator2/KeyMaps.java
+++ /dev/null
@@ -1,683 +0,0 @@
-/*
- * Copyright (C) 2015 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.res.Resources;
-import android.content.Context;
-import android.app.Activity;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-
-import java.text.DecimalFormatSymbols;
-import java.util.HashMap;
-import java.util.Locale;
-
-/**
- * Collection of mapping functions between key ids, characters, internationalized
- * and non-internationalized characters, etc.
- * <p>
- * KeyMap instances are not meaningful; everything here is static.
- * All functions are either pure, or are assumed to be called only from a single UI thread.
- */
-public class KeyMaps {
- /**
- * Map key id to corresponding (internationalized) display string.
- * Pure function.
- */
- public static String toString(Context context, int id) {
- switch(id) {
- case R.id.const_pi:
- return context.getString(R.string.const_pi);
- case R.id.const_e:
- return context.getString(R.string.const_e);
- case R.id.op_sqrt:
- return context.getString(R.string.op_sqrt);
- case R.id.op_fact:
- return context.getString(R.string.op_fact);
- case R.id.op_pct:
- return context.getString(R.string.op_pct);
- case R.id.fun_sin:
- return context.getString(R.string.fun_sin) + context.getString(R.string.lparen);
- case R.id.fun_cos:
- return context.getString(R.string.fun_cos) + context.getString(R.string.lparen);
- case R.id.fun_tan:
- return context.getString(R.string.fun_tan) + context.getString(R.string.lparen);
- case R.id.fun_arcsin:
- return context.getString(R.string.fun_arcsin) + context.getString(R.string.lparen);
- case R.id.fun_arccos:
- return context.getString(R.string.fun_arccos) + context.getString(R.string.lparen);
- case R.id.fun_arctan:
- return context.getString(R.string.fun_arctan) + context.getString(R.string.lparen);
- case R.id.fun_ln:
- return context.getString(R.string.fun_ln) + context.getString(R.string.lparen);
- case R.id.fun_log:
- return context.getString(R.string.fun_log) + context.getString(R.string.lparen);
- case R.id.fun_exp:
- // Button label doesn't work.
- return context.getString(R.string.exponential) + context.getString(R.string.lparen);
- case R.id.lparen:
- return context.getString(R.string.lparen);
- case R.id.rparen:
- return context.getString(R.string.rparen);
- case R.id.op_pow:
- return context.getString(R.string.op_pow);
- case R.id.op_mul:
- return context.getString(R.string.op_mul);
- case R.id.op_div:
- return context.getString(R.string.op_div);
- case R.id.op_add:
- return context.getString(R.string.op_add);
- case R.id.op_sub:
- return context.getString(R.string.op_sub);
- case R.id.op_sqr:
- // Button label doesn't work.
- return context.getString(R.string.squared);
- case R.id.dec_point:
- return context.getString(R.string.dec_point);
- case R.id.digit_0:
- return context.getString(R.string.digit_0);
- case R.id.digit_1:
- return context.getString(R.string.digit_1);
- case R.id.digit_2:
- return context.getString(R.string.digit_2);
- case R.id.digit_3:
- return context.getString(R.string.digit_3);
- case R.id.digit_4:
- return context.getString(R.string.digit_4);
- case R.id.digit_5:
- return context.getString(R.string.digit_5);
- case R.id.digit_6:
- return context.getString(R.string.digit_6);
- case R.id.digit_7:
- return context.getString(R.string.digit_7);
- case R.id.digit_8:
- return context.getString(R.string.digit_8);
- case R.id.digit_9:
- return context.getString(R.string.digit_9);
- default:
- return "";
- }
- }
-
- /**
- * Map key id to a single byte, somewhat human readable, description.
- * Used to serialize expressions in the database.
- * The result is in the range 0x20-0x7f.
- */
- public static byte toByte(int id) {
- char result;
- // We only use characters with single-byte UTF8 encodings in the range 0x20-0x7F.
- switch(id) {
- case R.id.const_pi:
- result = 'p';
- break;
- case R.id.const_e:
- result = 'e';
- break;
- case R.id.op_sqrt:
- result = 'r';
- break;
- case R.id.op_fact:
- result = '!';
- break;
- case R.id.op_pct:
- result = '%';
- break;
- case R.id.fun_sin:
- result = 's';
- break;
- case R.id.fun_cos:
- result = 'c';
- break;
- case R.id.fun_tan:
- result = 't';
- break;
- case R.id.fun_arcsin:
- result = 'S';
- break;
- case R.id.fun_arccos:
- result = 'C';
- break;
- case R.id.fun_arctan:
- result = 'T';
- break;
- case R.id.fun_ln:
- result = 'l';
- break;
- case R.id.fun_log:
- result = 'L';
- break;
- case R.id.fun_exp:
- result = 'E';
- break;
- case R.id.lparen:
- result = '(';
- break;
- case R.id.rparen:
- result = ')';
- break;
- case R.id.op_pow:
- result = '^';
- break;
- case R.id.op_mul:
- result = '*';
- break;
- case R.id.op_div:
- result = '/';
- break;
- case R.id.op_add:
- result = '+';
- break;
- case R.id.op_sub:
- result = '-';
- break;
- case R.id.op_sqr:
- result = '2';
- break;
- default:
- throw new AssertionError("Unexpected key id");
- }
- return (byte)result;
- }
-
- /**
- * Map single byte encoding generated by key id generated by toByte back to
- * key id.
- */
- public static int fromByte(byte b) {
- switch((char)b) {
- case 'p':
- return R.id.const_pi;
- case 'e':
- return R.id.const_e;
- case 'r':
- return R.id.op_sqrt;
- case '!':
- return R.id.op_fact;
- case '%':
- return R.id.op_pct;
- case 's':
- return R.id.fun_sin;
- case 'c':
- return R.id.fun_cos;
- case 't':
- return R.id.fun_tan;
- case 'S':
- return R.id.fun_arcsin;
- case 'C':
- return R.id.fun_arccos;
- case 'T':
- return R.id.fun_arctan;
- case 'l':
- return R.id.fun_ln;
- case 'L':
- return R.id.fun_log;
- case 'E':
- return R.id.fun_exp;
- case '(':
- return R.id.lparen;
- case ')':
- return R.id.rparen;
- case '^':
- return R.id.op_pow;
- case '*':
- return R.id.op_mul;
- case '/':
- return R.id.op_div;
- case '+':
- return R.id.op_add;
- case '-':
- return R.id.op_sub;
- case '2':
- return R.id.op_sqr;
- default:
- throw new AssertionError("Unexpected single byte operator encoding");
- }
- }
-
- /**
- * Map key id to corresponding (internationalized) descriptive string that can be used
- * to correctly read back a formula.
- * Only used for operators and individual characters; not used inside constants.
- * Returns null when we don't need a descriptive string.
- * Pure function.
- */
- public static String toDescriptiveString(Context context, int id) {
- switch(id) {
- case R.id.op_fact:
- return context.getString(R.string.desc_op_fact);
- case R.id.fun_sin:
- return context.getString(R.string.desc_fun_sin)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_cos:
- return context.getString(R.string.desc_fun_cos)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_tan:
- return context.getString(R.string.desc_fun_tan)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_arcsin:
- return context.getString(R.string.desc_fun_arcsin)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_arccos:
- return context.getString(R.string.desc_fun_arccos)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_arctan:
- return context.getString(R.string.desc_fun_arctan)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_ln:
- return context.getString(R.string.desc_fun_ln)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_log:
- return context.getString(R.string.desc_fun_log)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.fun_exp:
- return context.getString(R.string.desc_fun_exp)
- + " " + context.getString(R.string.desc_lparen);
- case R.id.lparen:
- return context.getString(R.string.desc_lparen);
- case R.id.rparen:
- return context.getString(R.string.desc_rparen);
- case R.id.op_pow:
- return context.getString(R.string.desc_op_pow);
- case R.id.dec_point:
- return context.getString(R.string.desc_dec_point);
- default:
- return null;
- }
- }
-
- /**
- * Does a button id correspond to a binary operator?
- * Pure function.
- */
- public static boolean isBinary(int id) {
- switch(id) {
- case R.id.op_pow:
- case R.id.op_mul:
- case R.id.op_div:
- case R.id.op_add:
- case R.id.op_sub:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * Does a button id correspond to a trig function?
- * Pure function.
- */
- public static boolean isTrigFunc(int id) {
- switch(id) {
- case R.id.fun_sin:
- case R.id.fun_cos:
- case R.id.fun_tan:
- case R.id.fun_arcsin:
- case R.id.fun_arccos:
- case R.id.fun_arctan:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * Does a button id correspond to a function that introduces an implicit lparen?
- * Pure function.
- */
- public static boolean isFunc(int id) {
- if (isTrigFunc(id)) {
- return true;
- }
- switch(id) {
- case R.id.fun_ln:
- case R.id.fun_log:
- case R.id.fun_exp:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * Does a button id correspond to a prefix operator?
- * Pure function.
- */
- public static boolean isPrefix(int id) {
- switch(id) {
- case R.id.op_sqrt:
- case R.id.op_sub:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * Does a button id correspond to a suffix operator?
- */
- public static boolean isSuffix(int id) {
- switch (id) {
- case R.id.op_fact:
- case R.id.op_pct:
- case R.id.op_sqr:
- return true;
- default:
- return false;
- }
- }
-
- public static final int NOT_DIGIT = 10;
-
- public static final String ELLIPSIS = "\u2026";
-
- public static final char MINUS_SIGN = '\u2212';
-
- /**
- * Map key id to digit or NOT_DIGIT
- * Pure function.
- */
- public static int digVal(int id) {
- switch (id) {
- case R.id.digit_0:
- return 0;
- case R.id.digit_1:
- return 1;
- case R.id.digit_2:
- return 2;
- case R.id.digit_3:
- return 3;
- case R.id.digit_4:
- return 4;
- case R.id.digit_5:
- return 5;
- case R.id.digit_6:
- return 6;
- case R.id.digit_7:
- return 7;
- case R.id.digit_8:
- return 8;
- case R.id.digit_9:
- return 9;
- default:
- return NOT_DIGIT;
- }
- }
-
- /**
- * Map digit to corresponding key. Inverse of above.
- * Pure function.
- */
- public static int keyForDigVal(int v) {
- switch(v) {
- case 0:
- return R.id.digit_0;
- case 1:
- return R.id.digit_1;
- case 2:
- return R.id.digit_2;
- case 3:
- return R.id.digit_3;
- case 4:
- return R.id.digit_4;
- case 5:
- return R.id.digit_5;
- case 6:
- return R.id.digit_6;
- case 7:
- return R.id.digit_7;
- case 8:
- return R.id.digit_8;
- case 9:
- return R.id.digit_9;
- default:
- return View.NO_ID;
- }
- }
-
- // The following two are only used for recognizing additional
- // input characters from a physical keyboard. They are not used
- // for output internationalization.
- private static char mDecimalPt;
-
- private static char mPiChar;
-
- /**
- * Character used as a placeholder for digits that are currently unknown in a result that
- * is being computed. We initially generate blanks, and then use this as a replacement
- * during final translation.
- * <p/>
- * Note: the character must correspond closely to the width of a digit,
- * otherwise the UI will visibly shift once the computation is finished.
- */
- private static final char CHAR_DIGIT_UNKNOWN = '\u2007';
-
- /**
- * Map typed function name strings to corresponding button ids.
- * We (now redundantly?) include both localized and English names.
- */
- private static HashMap<String, Integer> sKeyValForFun;
-
- /**
- * Result string corresponding to a character in the calculator result.
- * The string values in the map are expected to be one character long.
- */
- private static HashMap<Character, String> sOutputForResultChar;
-
- /**
- * Locale corresponding to preceding map and character constants.
- * We recompute the map if this is not the current locale.
- */
- private static Locale sLocaleForMaps = null;
-
- /**
- * Activity to use for looking up buttons.
- */
- private static Activity mActivity;
-
- /**
- * Set acttivity used for looking up button labels.
- * Call only from UI thread.
- */
- public static void setActivity(Activity a) {
- mActivity = a;
- }
-
- /**
- * Return the button id corresponding to the supplied character or return NO_ID.
- * Called only by UI thread.
- */
- public static int keyForChar(char c) {
- validateMaps();
- if (Character.isDigit(c)) {
- int i = Character.digit(c, 10);
- return KeyMaps.keyForDigVal(i);
- }
- switch (c) {
- case '.':
- case ',':
- return R.id.dec_point;
- case '-':
- case MINUS_SIGN:
- return R.id.op_sub;
- case '+':
- return R.id.op_add;
- case '*':
- case '\u00D7': // MULTIPLICATION SIGN
- return R.id.op_mul;
- case '/':
- case '\u00F7': // DIVISION SIGN
- return R.id.op_div;
- // We no longer localize function names, so they can't start with an 'e' or 'p'.
- case 'e':
- case 'E':
- return R.id.const_e;
- case 'p':
- case 'P':
- return R.id.const_pi;
- case '^':
- return R.id.op_pow;
- case '!':
- return R.id.op_fact;
- case '%':
- return R.id.op_pct;
- case '(':
- return R.id.lparen;
- case ')':
- return R.id.rparen;
- default:
- if (c == mDecimalPt) return R.id.dec_point;
- if (c == mPiChar) return R.id.const_pi;
- // pi is not translated, but it might be typable on a Greek keyboard,
- // or pasted in, so we check ...
- return View.NO_ID;
- }
- }
-
- /**
- * Add information corresponding to the given button id to sKeyValForFun, to be used
- * when mapping keyboard input to button ids.
- */
- static void addButtonToFunMap(int button_id) {
- Button button = (Button)mActivity.findViewById(button_id);
- sKeyValForFun.put(button.getText().toString(), button_id);
- }
-
- /**
- * Add information corresponding to the given button to sOutputForResultChar, to be used
- * when translating numbers on output.
- */
- static void addButtonToOutputMap(char c, int button_id) {
- Button button = (Button)mActivity.findViewById(button_id);
- sOutputForResultChar.put(c, button.getText().toString());
- }
-
- /**
- * Ensure that the preceding map and character constants correspond to the current locale.
- * Called only by UI thread.
- */
- static void validateMaps() {
- Locale locale = Locale.getDefault();
- if (!locale.equals(sLocaleForMaps)) {
- Log.v ("Calculator", "Setting locale to: " + locale.toLanguageTag());
- sKeyValForFun = new HashMap<String, Integer>();
- sKeyValForFun.put("sin", R.id.fun_sin);
- sKeyValForFun.put("cos", R.id.fun_cos);
- sKeyValForFun.put("tan", R.id.fun_tan);
- sKeyValForFun.put("arcsin", R.id.fun_arcsin);
- sKeyValForFun.put("arccos", R.id.fun_arccos);
- sKeyValForFun.put("arctan", R.id.fun_arctan);
- sKeyValForFun.put("asin", R.id.fun_arcsin);
- sKeyValForFun.put("acos", R.id.fun_arccos);
- sKeyValForFun.put("atan", R.id.fun_arctan);
- sKeyValForFun.put("ln", R.id.fun_ln);
- sKeyValForFun.put("log", R.id.fun_log);
- sKeyValForFun.put("sqrt", R.id.op_sqrt); // special treatment
- addButtonToFunMap(R.id.fun_sin);
- addButtonToFunMap(R.id.fun_cos);
- addButtonToFunMap(R.id.fun_tan);
- addButtonToFunMap(R.id.fun_arcsin);
- addButtonToFunMap(R.id.fun_arccos);
- addButtonToFunMap(R.id.fun_arctan);
- addButtonToFunMap(R.id.fun_ln);
- addButtonToFunMap(R.id.fun_log);
-
- // Set locale-dependent character "constants"
- mDecimalPt =
- DecimalFormatSymbols.getInstance().getDecimalSeparator();
- // We recognize this in keyboard input, even if we use
- // a different character.
- Resources res = mActivity.getResources();
- mPiChar = 0;
- String piString = res.getString(R.string.const_pi);
- if (piString.length() == 1) {
- mPiChar = piString.charAt(0);
- }
-
- sOutputForResultChar = new HashMap<Character, String>();
- sOutputForResultChar.put('e', "E");
- sOutputForResultChar.put('E', "E");
- sOutputForResultChar.put(' ', String.valueOf(CHAR_DIGIT_UNKNOWN));
- sOutputForResultChar.put(ELLIPSIS.charAt(0), ELLIPSIS);
- // Translate numbers for fraction display, but not the separating slash, which appears
- // to be universal. We also do not translate the ln, sqrt, pi
- sOutputForResultChar.put('/', "/");
- sOutputForResultChar.put('(', "(");
- sOutputForResultChar.put(')', ")");
- sOutputForResultChar.put('l', "l");
- sOutputForResultChar.put('n', "n");
- sOutputForResultChar.put(',',
- String.valueOf(DecimalFormatSymbols.getInstance().getGroupingSeparator()));
- sOutputForResultChar.put('\u221A', "\u221A"); // SQUARE ROOT
- sOutputForResultChar.put('\u03C0', "\u03C0"); // GREEK SMALL LETTER PI
- addButtonToOutputMap('-', R.id.op_sub);
- addButtonToOutputMap('.', R.id.dec_point);
- for (int i = 0; i <= 9; ++i) {
- addButtonToOutputMap((char)('0' + i), keyForDigVal(i));
- }
-
- sLocaleForMaps = locale;
-
- }
- }
-
- /**
- * Return function button id for the substring of s starting at pos and ending with
- * the next "(". Return NO_ID if there is none.
- * We currently check for both (possibly localized) button labels, and standard
- * English names. (They should currently be the same, and hence this is currently redundant.)
- * Callable only from UI thread.
- */
- public static int funForString(String s, int pos) {
- validateMaps();
- int parenPos = s.indexOf('(', pos);
- if (parenPos != -1) {
- String funString = s.substring(pos, parenPos);
- Integer keyValue = sKeyValForFun.get(funString);
- if (keyValue == null) return View.NO_ID;
- return keyValue;
- }
- return View.NO_ID;
- }
-
- /**
- * Return the localization of the string s representing a numeric answer.
- * Callable only from UI thread.
- * A trailing e is treated as the mathematical constant, not an exponent.
- */
- public static String translateResult(String s) {
- StringBuilder result = new StringBuilder();
- int len = s.length();
- validateMaps();
- for (int i = 0; i < len; ++i) {
- char c = s.charAt(i);
- if (i < len - 1 || c != 'e') {
- String translation = sOutputForResultChar.get(c);
- if (translation == null) {
- // Should not get here. Report if we do.
- Log.v("Calculator", "Bad character:" + c);
- result.append(String.valueOf(c));
- } else {
- result.append(translation);
- }
- }
- }
- return result.toString();
- }
-
-}
diff --git a/src/com/android/calculator2/Licenses.java b/src/com/android/calculator2/Licenses.java
deleted file mode 100644
index 4af1ea6..0000000
--- a/src/com/android/calculator2/Licenses.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.android.calculator2;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.MenuItem;
-import android.webkit.WebView;
-
-public class Licenses extends Activity {
-
- private static final String LICENSE_URL = "file:///android_asset/licenses.html";
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- final WebView webView = new WebView(this);
- webView.loadUrl(LICENSE_URL);
-
- setContentView(webView);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- onBackPressed();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/src/com/android/calculator2/StringUtils.java b/src/com/android/calculator2/StringUtils.java
deleted file mode 100644
index 4eef0e7..0000000
--- a/src/com/android/calculator2/StringUtils.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2016 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;
-
-/**
- * Some helpful methods operating on strings.
- */
-
-public class StringUtils {
-
- /**
- * Return a string with n copies of c.
- */
- public static String repeat(char c, int n) {
- final StringBuilder result = new StringBuilder();
- for (int i = 0; i < n; ++i) {
- result.append(c);
- }
- return result.toString();
- }
-
- /**
- * Return a copy of the supplied string with commas added every three digits.
- * The substring indicated by the supplied range is assumed to contain only
- * a whole number, with no decimal point.
- * Inserting a digit separator every 3 digits appears to be
- * at least somewhat acceptable, though not necessarily preferred, everywhere.
- * The grouping separator in the result is NOT localized.
- */
- public static String addCommas(String s, int begin, int end) {
- // Resist the temptation to use Java's NumberFormat, which converts to long or double
- // and hence doesn't handle very large numbers.
- StringBuilder result = new StringBuilder();
- int current = begin;
- while (current < end && (s.charAt(current) == '-' || s.charAt(current) == ' ')) {
- ++current;
- }
- result.append(s, begin, current);
- while (current < end) {
- result.append(s.charAt(current));
- ++current;
- if ((end - current) % 3 == 0 && end != current) {
- result.append(',');
- }
- }
- return result.toString();
- }
-
- /**
- * Ignoring all occurrences of c in both strings, check whether old is a prefix of new.
- * If so, return the remaining subsequence of whole. If not, return null.
- */
- public static CharSequence getExtensionIgnoring(CharSequence whole, CharSequence prefix,
- char c) {
- int wIndex = 0;
- int pIndex = 0;
- final int wLen = whole.length();
- final int pLen = prefix.length();
- while (true) {
- while (pIndex < pLen && prefix.charAt(pIndex) == c) {
- ++pIndex;
- }
- while (wIndex < wLen && whole.charAt(wIndex) == c) {
- ++wIndex;
- }
- if (pIndex == pLen) {
- break;
- }
- if (wIndex == wLen || whole.charAt(wIndex) != prefix.charAt(pIndex) ) {
- return null;
- }
- ++pIndex;
- ++wIndex;
- }
- while (wIndex < wLen && whole.charAt(wIndex) == c) {
- ++wIndex;
- }
- return whole.subSequence(wIndex, wLen);
- }
-}
diff --git a/src/com/android/calculator2/UnifiedReal.java b/src/com/android/calculator2/UnifiedReal.java
deleted file mode 100644
index f85dd3e..0000000
--- a/src/com/android/calculator2/UnifiedReal.java
+++ /dev/null
@@ -1,1285 +0,0 @@
-/*
- * Copyright (C) 2016 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 java.math.BigInteger;
-import com.hp.creals.CR;
-import com.hp.creals.UnaryCRFunction;
-
-/**
- * Computable real numbers, represented so that we can get exact decidable comparisons
- * for a number of interesting special cases, including rational computations.
- *
- * A real number is represented as the product of two numbers with different representations:
- * A) A BoundedRational that can only represent a subset of the rationals, but supports
- * exact computable comparisons.
- * B) A lazily evaluated "constructive real number" that provides operations to evaluate
- * itself to any requested number of digits.
- * Whenever possible, we choose (B) to be one of a small set of known constants about which we
- * know more. For example, whenever we can, we represent rationals such that (B) is 1.
- * This scheme allows us to do some very limited symbolic computation on numbers when both
- * have the same (B) value, as well as in some other situations. We try to maximize that
- * possibility.
- *
- * Arithmetic operations and operations that produce finite approximations may throw unchecked
- * exceptions produced by the underlying CR and BoundedRational packages, including
- * CR.PrecisionOverflowException and CR.AbortedException.
- */
-public class UnifiedReal {
-
- private final BoundedRational mRatFactor;
- private final CR mCrFactor;
- // TODO: It would be helpful to add flags to indicate whether the result is known
- // irrational, etc. This sometimes happens even if mCrFactor is not one of the known ones.
- // And exact comparisons between rationals and known irrationals are decidable.
-
- /**
- * Perform some nontrivial consistency checks.
- * @hide
- */
- public static boolean enableChecks = true;
-
- private static void check(boolean b) {
- if (!b) {
- throw new AssertionError();
- }
- }
-
- private UnifiedReal(BoundedRational rat, CR cr) {
- if (rat == null) {
- throw new ArithmeticException("Building UnifiedReal from null");
- }
- // We don't normally traffic in null CRs, and hence don't test explicitly.
- mCrFactor = cr;
- mRatFactor = rat;
- }
-
- public UnifiedReal(CR cr) {
- this(BoundedRational.ONE, cr);
- }
-
- public UnifiedReal(BoundedRational rat) {
- this(rat, CR_ONE);
- }
-
- public UnifiedReal(BigInteger n) {
- this(new BoundedRational(n));
- }
-
- public UnifiedReal(long n) {
- this(new BoundedRational(n));
- }
-
- public static UnifiedReal valueOf(double x) {
- if (x == 0.0 || x == 1.0) {
- return valueOf((long) x);
- }
- return new UnifiedReal(BoundedRational.valueOf(x));
- }
-
- public static UnifiedReal valueOf(long x) {
- if (x == 0) {
- return UnifiedReal.ZERO;
- } else if (x == 1) {
- return UnifiedReal.ONE;
- } else {
- return new UnifiedReal(BoundedRational.valueOf(x));
- }
- }
-
- // Various helpful constants
- private final static BigInteger BIG_24 = BigInteger.valueOf(24);
- private final static int DEFAULT_COMPARE_TOLERANCE = -1000;
-
- // Well-known CR constants we try to use in the mCrFactor position:
- private final static CR CR_ONE = CR.ONE;
- private final static CR CR_PI = CR.PI;
- private final static CR CR_E = CR.ONE.exp();
- private final static CR CR_SQRT2 = CR.valueOf(2).sqrt();
- private final static CR CR_SQRT3 = CR.valueOf(3).sqrt();
- private final static CR CR_LN2 = CR.valueOf(2).ln();
- private final static CR CR_LN3 = CR.valueOf(3).ln();
- private final static CR CR_LN5 = CR.valueOf(5).ln();
- private final static CR CR_LN6 = CR.valueOf(6).ln();
- private final static CR CR_LN7 = CR.valueOf(7).ln();
- private final static CR CR_LN10 = CR.valueOf(10).ln();
-
- // Square roots that we try to recognize.
- // We currently recognize only a small fixed collection, since the sqrt() function needs to
- // identify numbers of the form <SQRT[i]>*n^2, and we don't otherwise know of a good
- // algorithm for that.
- private final static CR sSqrts[] = {
- null,
- CR.ONE,
- CR_SQRT2,
- CR_SQRT3,
- null,
- CR.valueOf(5).sqrt(),
- CR.valueOf(6).sqrt(),
- CR.valueOf(7).sqrt(),
- null,
- null,
- CR.valueOf(10).sqrt() };
-
- // Natural logs of small integers that we try to recognize.
- private final static CR sLogs[] = {
- null,
- null,
- CR_LN2,
- CR_LN3,
- null,
- CR_LN5,
- CR_LN6,
- CR_LN7,
- null,
- null,
- CR_LN10 };
-
-
- // Some convenient UnifiedReal constants.
- public static final UnifiedReal PI = new UnifiedReal(CR_PI);
- public static final UnifiedReal E = new UnifiedReal(CR_E);
- public static final UnifiedReal ZERO = new UnifiedReal(BoundedRational.ZERO);
- public static final UnifiedReal ONE = new UnifiedReal(BoundedRational.ONE);
- public static final UnifiedReal MINUS_ONE = new UnifiedReal(BoundedRational.MINUS_ONE);
- public static final UnifiedReal TWO = new UnifiedReal(BoundedRational.TWO);
- public static final UnifiedReal MINUS_TWO = new UnifiedReal(BoundedRational.MINUS_TWO);
- public static final UnifiedReal HALF = new UnifiedReal(BoundedRational.HALF);
- public static final UnifiedReal MINUS_HALF = new UnifiedReal(BoundedRational.MINUS_HALF);
- public static final UnifiedReal TEN = new UnifiedReal(BoundedRational.TEN);
- public static final UnifiedReal RADIANS_PER_DEGREE
- = new UnifiedReal(new BoundedRational(1, 180), CR_PI);
- private static final UnifiedReal SIX = new UnifiedReal(6);
- private static final UnifiedReal HALF_SQRT2 = new UnifiedReal(BoundedRational.HALF, CR_SQRT2);
- private static final UnifiedReal SQRT3 = new UnifiedReal(CR_SQRT3);
- private static final UnifiedReal HALF_SQRT3 = new UnifiedReal(BoundedRational.HALF, CR_SQRT3);
- private static final UnifiedReal THIRD_SQRT3 = new UnifiedReal(BoundedRational.THIRD, CR_SQRT3);
- private static final UnifiedReal PI_OVER_2 = new UnifiedReal(BoundedRational.HALF, CR_PI);
- private static final UnifiedReal PI_OVER_3 = new UnifiedReal(BoundedRational.THIRD, CR_PI);
- private static final UnifiedReal PI_OVER_4 = new UnifiedReal(BoundedRational.QUARTER, CR_PI);
- private static final UnifiedReal PI_OVER_6 = new UnifiedReal(BoundedRational.SIXTH, CR_PI);
-
-
- /**
- * Given a constructive real cr, try to determine whether cr is the square root of
- * a small integer. If so, return its square as a BoundedRational. Otherwise return null.
- * We make this determination by simple table lookup, so spurious null returns are
- * entirely possible, or even likely.
- */
- private static BoundedRational getSquare(CR cr) {
- for (int i = 0; i < sSqrts.length; ++i) {
- if (sSqrts[i] == cr) {
- return new BoundedRational(i);
- }
- }
- return null;
- }
-
- /**
- * Given a constructive real cr, try to determine whether cr is the logarithm of a small
- * integer. If so, return exp(cr) as a BoundedRational. Otherwise return null.
- * We make this determination by simple table lookup, so spurious null returns are
- * entirely possible, or even likely.
- */
- private BoundedRational getExp(CR cr) {
- for (int i = 0; i < sLogs.length; ++i) {
- if (sLogs[i] == cr) {
- return new BoundedRational(i);
- }
- }
- return null;
- }
-
- /**
- * If the argument is a well-known constructive real, return its name.
- * The name of "CR_ONE" is the empty string.
- * No named constructive reals are rational multiples of each other.
- * Thus two UnifiedReals with different named mCrFactors can be equal only if both
- * mRatFactors are zero or possibly if one is CR_PI and the other is CR_E.
- * (The latter is apparently an open problem.)
- */
- private static String crName(CR cr) {
- if (cr == CR_ONE) {
- return "";
- }
- if (cr == CR_PI) {
- return "\u03C0"; // GREEK SMALL LETTER PI
- }
- if (cr == CR_E) {
- return "e";
- }
- for (int i = 0; i < sSqrts.length; ++i) {
- if (cr == sSqrts[i]) {
- return "\u221A" /* SQUARE ROOT */ + i;
- }
- }
- for (int i = 0; i < sLogs.length; ++i) {
- if (cr == sLogs[i]) {
- return "ln(" + i + ")";
- }
- }
- return null;
- }
-
- /**
- * Would crName() return non-Null?
- */
- private static boolean isNamed(CR cr) {
- if (cr == CR_ONE || cr == CR_PI || cr == CR_E) {
- return true;
- }
- for (CR r: sSqrts) {
- if (cr == r) {
- return true;
- }
- }
- for (CR r: sLogs) {
- if (cr == r) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Is cr known to be algebraic (as opposed to transcendental)?
- * Currently only produces meaningful results for the above known special
- * constructive reals.
- */
- private static boolean definitelyAlgebraic(CR cr) {
- return cr == CR_ONE || getSquare(cr) != null;
- }
-
- /**
- * Is this number known to be rational?
- */
- public boolean definitelyRational() {
- return mCrFactor == CR_ONE || mRatFactor.signum() == 0;
- }
-
- /**
- * Is this number known to be irrational?
- * TODO: We could track the fact that something is irrational with an explicit flag, which
- * could cover many more cases. Whether that matters in practice is TBD.
- */
- public boolean definitelyIrrational() {
- return !definitelyRational() && isNamed(mCrFactor);
- }
-
- /**
- * Is this number known to be algebraic?
- */
- public boolean definitelyAlgebraic() {
- return definitelyAlgebraic(mCrFactor) || mRatFactor.signum() == 0;
- }
-
- /**
- * Is this number known to be transcendental?
- */
- public boolean definitelyTranscendental() {
- return !definitelyAlgebraic() && isNamed(mCrFactor);
- }
-
-
- /**
- * Is it known that the two constructive reals differ by something other than a
- * a rational factor, i.e. is it known that two UnifiedReals
- * with those mCrFactors will compare unequal unless both mRatFactors are zero?
- * If this returns true, then a comparison of two UnifiedReals using those two
- * mCrFactors cannot diverge, though we don't know of a good runtime bound.
- */
- private static boolean definitelyIndependent(CR r1, CR r2) {
- // The question here is whether r1 = x*r2, where x is rational, where r1 and r2
- // are in our set of special known CRs, can have a solution.
- // This cannot happen if one is CR_ONE and the other is not.
- // (Since all others are irrational.)
- // This cannot happen for two named square roots, which have no repeated factors.
- // (To see this, square both sides of the equation and factor. Each prime
- // factor in the numerator and denominator occurs twice.)
- // This cannot happen for e or pi on one side, and a square root on the other.
- // (One is transcendental, the other is algebraic.)
- // This cannot happen for two of our special natural logs.
- // (Otherwise ln(m) = (a/b)ln(n) ==> m = n^(a/b) ==> m^b = n^a, which is impossible
- // because either m or n includes a prime factor not shared by the other.)
- // This cannot happen for a log and a square root.
- // (The Lindemann-Weierstrass theorem tells us, among other things, that if
- // a is algebraic, then exp(a) is transcendental. Thus if l in our finite
- // set of logs where algebraic, expl(l), must be transacendental.
- // But exp(l) is an integer. Thus the logs are transcendental. But of course the
- // square roots are algebraic. Thus they can't be rational multiples.)
- // Unfortunately, we do not know whether e/pi is rational.
- if (r1 == r2) {
- return false;
- }
- CR other;
- if (r1 == CR_E || r1 == CR_PI) {
- return definitelyAlgebraic(r2);
- }
- if (r2 == CR_E || r2 == CR_PI) {
- return definitelyAlgebraic(r1);
- }
- return isNamed(r1) && isNamed(r2);
- }
-
- /**
- * Convert to String reflecting raw representation.
- * Debug or log messages only, not pretty.
- */
- public String toString() {
- return mRatFactor.toString() + "*" + mCrFactor.toString();
- }
-
- /**
- * Convert to readable String.
- * Intended for user output. Produces exact expression when possible.
- */
- public String toNiceString() {
- if (mCrFactor == CR_ONE || mRatFactor.signum() == 0) {
- return mRatFactor.toNiceString();
- }
- String name = crName(mCrFactor);
- if (name != null) {
- BigInteger bi = BoundedRational.asBigInteger(mRatFactor);
- if (bi != null) {
- if (bi.equals(BigInteger.ONE)) {
- return name;
- }
- return mRatFactor.toNiceString() + name;
- }
- return "(" + mRatFactor.toNiceString() + ")" + name;
- }
- if (mRatFactor.equals(BoundedRational.ONE)) {
- return mCrFactor.toString();
- }
- return crValue().toString();
- }
-
- /**
- * Will toNiceString() produce an exact representation?
- */
- public boolean exactlyDisplayable() {
- return crName(mCrFactor) != null;
- }
-
- // Number of extra bits used in evaluation below to prefer truncation to rounding.
- // Must be <= 30.
- private final static int EXTRA_PREC = 10;
-
- /*
- * Returns a truncated representation of the result.
- * If exactlyTruncatable(), we round correctly towards zero. Otherwise the resulting digit
- * string may occasionally be rounded up instead.
- * Always includes a decimal point in the result.
- * The result includes n digits to the right of the decimal point.
- * @param n result precision, >= 0
- */
- public String toStringTruncated(int n) {
- if (mCrFactor == CR_ONE || mRatFactor == BoundedRational.ZERO) {
- return mRatFactor.toStringTruncated(n);
- }
- final CR scaled = CR.valueOf(BigInteger.TEN.pow(n)).multiply(crValue());
- boolean negative = false;
- BigInteger intScaled;
- if (exactlyTruncatable()) {
- intScaled = scaled.get_appr(0);
- if (intScaled.signum() < 0) {
- negative = true;
- intScaled = intScaled.negate();
- }
- if (CR.valueOf(intScaled).compareTo(scaled.abs()) > 0) {
- intScaled = intScaled.subtract(BigInteger.ONE);
- }
- check(CR.valueOf(intScaled).compareTo(scaled.abs()) < 0);
- } else {
- // Approximate case. Exact comparisons are impossible.
- intScaled = scaled.get_appr(-EXTRA_PREC);
- if (intScaled.signum() < 0) {
- negative = true;
- intScaled = intScaled.negate();
- }
- intScaled = intScaled.shiftRight(EXTRA_PREC);
- }
- String digits = intScaled.toString();
- int len = digits.length();
- if (len < n + 1) {
- digits = StringUtils.repeat('0', n + 1 - len) + digits;
- len = n + 1;
- }
- return (negative ? "-" : "") + digits.substring(0, len - n) + "."
- + digits.substring(len - n);
- }
-
- /*
- * Can we compute correctly truncated approximations of this number?
- */
- public boolean exactlyTruncatable() {
- // If the value is known rational, we can do exact comparisons.
- // If the value is known irrational, then we can safely compare to rational approximations;
- // equality is impossible; hence the comparison must converge.
- // The only problem cases are the ones in which we don't know.
- return mCrFactor == CR_ONE || mRatFactor == BoundedRational.ZERO || definitelyIrrational();
- }
-
- /**
- * Return a double approximation.
- * Rational arguments are currently rounded to nearest, with ties away from zero.
- * TODO: Improve rounding.
- */
- public double doubleValue() {
- if (mCrFactor == CR_ONE) {
- return mRatFactor.doubleValue(); // Hopefully correctly rounded
- } else {
- return crValue().doubleValue(); // Approximately correctly rounded
- }
- }
-
- public CR crValue() {
- return mRatFactor.crValue().multiply(mCrFactor);
- }
-
- /**
- * Are this and r exactly comparable?
- */
- public boolean isComparable(UnifiedReal u) {
- // We check for ONE only to speed up the common case.
- // The use of a tolerance here means we can spuriously return false, not true.
- return mCrFactor == u.mCrFactor
- && (isNamed(mCrFactor) || mCrFactor.signum(DEFAULT_COMPARE_TOLERANCE) != 0)
- || mRatFactor.signum() == 0 && u.mRatFactor.signum() == 0
- || definitelyIndependent(mCrFactor, u.mCrFactor)
- || crValue().compareTo(u.crValue(), DEFAULT_COMPARE_TOLERANCE) != 0;
- }
-
- /**
- * Return +1 if this is greater than r, -1 if this is less than r, or 0 of the two are
- * known to be equal.
- * May diverge if the two are equal and !isComparable(r).
- */
- public int compareTo(UnifiedReal u) {
- if (definitelyZero() && u.definitelyZero()) return 0;
- if (mCrFactor == u.mCrFactor) {
- int signum = mCrFactor.signum(); // Can diverge if mCRFactor == 0.
- return signum * mRatFactor.compareTo(u.mRatFactor);
- }
- return crValue().compareTo(u.crValue()); // Can also diverge.
- }
-
- /**
- * Return +1 if this is greater than r, -1 if this is less than r, or possibly 0 of the two are
- * within 2^a of each other.
- */
- public int compareTo(UnifiedReal u, int a) {
- if (isComparable(u)) {
- return compareTo(u);
- } else {
- return crValue().compareTo(u.crValue(), a);
- }
- }
-
- /**
- * Return compareTo(ZERO, a).
- */
- public int signum(int a) {
- return compareTo(ZERO, a);
- }
-
- /**
- * Return compareTo(ZERO).
- * May diverge for ZERO argument if !isComparable(ZERO).
- */
- public int signum() {
- return compareTo(ZERO);
- }
-
- /**
- * Equality comparison. May erroneously return true if values differ by less than 2^a,
- * and !isComparable(u).
- */
- public boolean approxEquals(UnifiedReal u, int a) {
- if (isComparable(u)) {
- if (definitelyIndependent(mCrFactor, u.mCrFactor)
- && (mRatFactor.signum() != 0 || u.mRatFactor.signum() != 0)) {
- // No need to actually evaluate, though we don't know which is larger.
- return false;
- } else {
- return compareTo(u) == 0;
- }
- }
- return crValue().compareTo(u.crValue(), a) == 0;
- }
-
- /**
- * Returns true if values are definitely known to be equal, false in all other cases.
- * This does not satisfy the contract for Object.equals().
- */
- public boolean definitelyEquals(UnifiedReal u) {
- return isComparable(u) && compareTo(u) == 0;
- }
-
- @Override
- public int hashCode() {
- // Better useless than wrong. Probably.
- return 0;
- }
-
- @Override
- public boolean equals(Object r) {
- if (r == null || !(r instanceof UnifiedReal)) {
- return false;
- }
- // This is almost certainly a programming error. Don't even try.
- throw new AssertionError("Can't compare UnifiedReals for exact equality");
- }
-
- /**
- * Returns true if values are definitely known not to be equal, false in all other cases.
- * Performs no approximate evaluation.
- */
- public boolean definitelyNotEquals(UnifiedReal u) {
- boolean isNamed = isNamed(mCrFactor);
- boolean uIsNamed = isNamed(u.mCrFactor);
- if (isNamed && uIsNamed) {
- if (definitelyIndependent(mCrFactor, u.mCrFactor)) {
- return mRatFactor.signum() != 0 || u.mRatFactor.signum() != 0;
- } else if (mCrFactor == u.mCrFactor) {
- return !mRatFactor.equals(u.mRatFactor);
- }
- return !mRatFactor.equals(u.mRatFactor);
- }
- if (mRatFactor.signum() == 0) {
- return uIsNamed && u.mRatFactor.signum() != 0;
- }
- if (u.mRatFactor.signum() == 0) {
- return isNamed && mRatFactor.signum() != 0;
- }
- return false;
- }
-
- // And some slightly faster convenience functions for special cases:
-
- public boolean definitelyZero() {
- return mRatFactor.signum() == 0;
- }
-
- /**
- * Can this number be determined to be definitely nonzero without performing approximate
- * evaluation?
- */
- public boolean definitelyNonZero() {
- return isNamed(mCrFactor) && mRatFactor.signum() != 0;
- }
-
- public boolean definitelyOne() {
- return mCrFactor == CR_ONE && mRatFactor.equals(BoundedRational.ONE);
- }
-
- /**
- * Return equivalent BoundedRational, if known to exist, null otherwise
- */
- public BoundedRational boundedRationalValue() {
- if (mCrFactor == CR_ONE || mRatFactor.signum() == 0) {
- return mRatFactor;
- }
- return null;
- }
-
- /**
- * Returns equivalent BigInteger result if it exists, null if not.
- */
- public BigInteger bigIntegerValue() {
- final BoundedRational r = boundedRationalValue();
- return BoundedRational.asBigInteger(r);
- }
-
- public UnifiedReal add(UnifiedReal u) {
- if (mCrFactor == u.mCrFactor) {
- BoundedRational nRatFactor = BoundedRational.add(mRatFactor, u.mRatFactor);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, mCrFactor);
- }
- }
- if (definitelyZero()) {
- // Avoid creating new mCrFactor, even if they don't currently match.
- return u;
- }
- if (u.definitelyZero()) {
- return this;
- }
- return new UnifiedReal(crValue().add(u.crValue()));
- }
-
- public UnifiedReal negate() {
- return new UnifiedReal(BoundedRational.negate(mRatFactor), mCrFactor);
- }
-
- public UnifiedReal subtract(UnifiedReal u) {
- return add(u.negate());
- }
-
- public UnifiedReal multiply(UnifiedReal u) {
- // Preserve a preexisting mCrFactor when we can.
- if (mCrFactor == CR_ONE) {
- BoundedRational nRatFactor = BoundedRational.multiply(mRatFactor, u.mRatFactor);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, u.mCrFactor);
- }
- }
- if (u.mCrFactor == CR_ONE) {
- BoundedRational nRatFactor = BoundedRational.multiply(mRatFactor, u.mRatFactor);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, mCrFactor);
- }
- }
- if (definitelyZero() || u.definitelyZero()) {
- return ZERO;
- }
- if (mCrFactor == u.mCrFactor) {
- BoundedRational square = getSquare(mCrFactor);
- if (square != null) {
- BoundedRational nRatFactor = BoundedRational.multiply(
- BoundedRational.multiply(square, mRatFactor), u.mRatFactor);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor);
- }
- }
- }
- // Probably a bit cheaper to multiply component-wise.
- BoundedRational nRatFactor = BoundedRational.multiply(mRatFactor, u.mRatFactor);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, mCrFactor.multiply(u.mCrFactor));
- }
- return new UnifiedReal(crValue().multiply(u.crValue()));
- }
-
- public static class ZeroDivisionException extends ArithmeticException {
- public ZeroDivisionException() {
- super("Division by zero");
- }
- }
-
- /**
- * Return the reciprocal.
- */
- public UnifiedReal inverse() {
- if (definitelyZero()) {
- throw new ZeroDivisionException();
- }
- BoundedRational square = getSquare(mCrFactor);
- if (square != null) {
- // 1/sqrt(n) = sqrt(n)/n
- BoundedRational nRatFactor = BoundedRational.inverse(
- BoundedRational.multiply(mRatFactor, square));
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, mCrFactor);
- }
- }
- return new UnifiedReal(BoundedRational.inverse(mRatFactor), mCrFactor.inverse());
- }
-
- public UnifiedReal divide(UnifiedReal u) {
- if (mCrFactor == u.mCrFactor) {
- if (u.definitelyZero()) {
- throw new ZeroDivisionException();
- }
- BoundedRational nRatFactor = BoundedRational.divide(mRatFactor, u.mRatFactor);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, CR_ONE);
- }
- }
- return multiply(u.inverse());
- }
-
- /**
- * Return the square root.
- * This may fail to return a known rational value, even when the result is rational.
- */
- public UnifiedReal sqrt() {
- if (definitelyZero()) {
- return ZERO;
- }
- if (mCrFactor == CR_ONE) {
- BoundedRational ratSqrt;
- // Check for all arguments of the form <perfect rational square> * small_int,
- // where small_int has a known sqrt. This includes the small_int = 1 case.
- for (int divisor = 1; divisor < sSqrts.length; ++divisor) {
- if (sSqrts[divisor] != null) {
- ratSqrt = BoundedRational.sqrt(
- BoundedRational.divide(mRatFactor, new BoundedRational(divisor)));
- if (ratSqrt != null) {
- return new UnifiedReal(ratSqrt, sSqrts[divisor]);
- }
- }
- }
- }
- return new UnifiedReal(crValue().sqrt());
- }
-
- /**
- * Return (this mod 2pi)/(pi/6) as a BigInteger, or null if that isn't easily possible.
- */
- private BigInteger getPiTwelfths() {
- if (definitelyZero()) return BigInteger.ZERO;
- if (mCrFactor == CR_PI) {
- BigInteger quotient = BoundedRational.asBigInteger(
- BoundedRational.multiply(mRatFactor, BoundedRational.TWELVE));
- if (quotient == null) {
- return null;
- }
- return quotient.mod(BIG_24);
- }
- return null;
- }
-
- /**
- * Computer the sin() for an integer multiple n of pi/12, if easily representable.
- * @param n value between 0 and 23 inclusive.
- */
- private static UnifiedReal sinPiTwelfths(int n) {
- if (n >= 12) {
- UnifiedReal negResult = sinPiTwelfths(n - 12);
- return negResult == null ? null : negResult.negate();
- }
- switch (n) {
- case 0:
- return ZERO;
- case 2: // 30 degrees
- return HALF;
- case 3: // 45 degrees
- return HALF_SQRT2;
- case 4: // 60 degrees
- return HALF_SQRT3;
- case 6:
- return ONE;
- case 8:
- return HALF_SQRT3;
- case 9:
- return HALF_SQRT2;
- case 10:
- return HALF;
- default:
- return null;
- }
- }
-
- public UnifiedReal sin() {
- BigInteger piTwelfths = getPiTwelfths();
- if (piTwelfths != null) {
- UnifiedReal result = sinPiTwelfths(piTwelfths.intValue());
- if (result != null) {
- return result;
- }
- }
- return new UnifiedReal(crValue().sin());
- }
-
- private static UnifiedReal cosPiTwelfths(int n) {
- int sinArg = n + 6;
- if (sinArg >= 24) {
- sinArg -= 24;
- }
- return sinPiTwelfths(sinArg);
- }
-
- public UnifiedReal cos() {
- BigInteger piTwelfths = getPiTwelfths();
- if (piTwelfths != null) {
- UnifiedReal result = cosPiTwelfths(piTwelfths.intValue());
- if (result != null) {
- return result;
- }
- }
- return new UnifiedReal(crValue().cos());
- }
-
- public UnifiedReal tan() {
- BigInteger piTwelfths = getPiTwelfths();
- if (piTwelfths != null) {
- int i = piTwelfths.intValue();
- if (i == 6 || i == 18) {
- throw new ArithmeticException("Tangent undefined");
- }
- UnifiedReal top = sinPiTwelfths(i);
- UnifiedReal bottom = cosPiTwelfths(i);
- if (top != null && bottom != null) {
- return top.divide(bottom);
- }
- }
- return sin().divide(cos());
- }
-
- // Throw an exception if the argument is definitely out of bounds for asin or acos.
- private void checkAsinDomain() {
- if (isComparable(ONE) && (compareTo(ONE) > 0 || compareTo(MINUS_ONE) < 0)) {
- throw new ArithmeticException("inverse trig argument out of range");
- }
- }
-
- /**
- * Return asin(n/2). n is between -2 and 2.
- */
- public static UnifiedReal asinHalves(int n){
- if (n < 0) {
- return (asinHalves(-n).negate());
- }
- switch (n) {
- case 0:
- return ZERO;
- case 1:
- return new UnifiedReal(BoundedRational.SIXTH, CR.PI);
- case 2:
- return new UnifiedReal(BoundedRational.HALF, CR.PI);
- }
- throw new AssertionError("asinHalves: Bad argument");
- }
-
- /**
- * Return asin of this, assuming this is not an integral multiple of a half.
- */
- public UnifiedReal asinNonHalves()
- {
- if (compareTo(ZERO, -10) < 0) {
- return negate().asinNonHalves().negate();
- }
- if (definitelyEquals(HALF_SQRT2)) {
- return new UnifiedReal(BoundedRational.QUARTER, CR_PI);
- }
- if (definitelyEquals(HALF_SQRT3)) {
- return new UnifiedReal(BoundedRational.THIRD, CR_PI);
- }
- return new UnifiedReal(crValue().asin());
- }
-
- public UnifiedReal asin() {
- checkAsinDomain();
- final BigInteger halves = multiply(TWO).bigIntegerValue();
- if (halves != null) {
- return asinHalves(halves.intValue());
- }
- if (mCrFactor == CR.ONE || mCrFactor != CR_SQRT2 ||mCrFactor != CR_SQRT3) {
- return asinNonHalves();
- }
- return new UnifiedReal(crValue().asin());
- }
-
- public UnifiedReal acos() {
- return PI_OVER_2.subtract(asin());
- }
-
- public UnifiedReal atan() {
- if (compareTo(ZERO, -10) < 0) {
- return negate().atan().negate();
- }
- final BigInteger asBI = bigIntegerValue();
- if (asBI != null && asBI.compareTo(BigInteger.ONE) <= 0) {
- final int asInt = asBI.intValue();
- // These seem to be all rational cases:
- switch (asInt) {
- case 0:
- return ZERO;
- case 1:
- return PI_OVER_4;
- default:
- throw new AssertionError("Impossible r_int");
- }
- }
- if (definitelyEquals(THIRD_SQRT3)) {
- return PI_OVER_6;
- }
- if (definitelyEquals(SQRT3)) {
- return PI_OVER_3;
- }
- return new UnifiedReal(UnaryCRFunction.atanFunction.execute(crValue()));
- }
-
- private static final BigInteger BIG_TWO = BigInteger.valueOf(2);
-
- // The (in abs value) integral exponent for which we attempt to use a recursive
- // algorithm for evaluating pow(). The recursive algorithm works independent of the sign of the
- // base, and can produce rational results. But it can become slow for very large exponents.
- private static final BigInteger RECURSIVE_POW_LIMIT = BigInteger.valueOf(1000);
- // The corresponding limit when we're using rational arithmetic. This should fail fast
- // anyway, but we avoid ridiculously deep recursion.
- private static final BigInteger HARD_RECURSIVE_POW_LIMIT = BigInteger.ONE.shiftLeft(1000);
-
- /**
- * Compute an integral power of a constructive real, using the standard recursive algorithm.
- * exp is known to be positive.
- */
- private static CR recursivePow(CR base, BigInteger exp) {
- if (exp.equals(BigInteger.ONE)) {
- return base;
- }
- if (exp.testBit(0)) {
- return base.multiply(recursivePow(base, exp.subtract(BigInteger.ONE)));
- }
- CR tmp = recursivePow(base, exp.shiftRight(1));
- if (Thread.interrupted()) {
- throw new CR.AbortedException();
- }
- return tmp.multiply(tmp);
- }
-
- /**
- * Compute an integral power of a constructive real, using the exp function when
- * we safely can. Use recursivePow when we can't. exp is known to be nozero.
- */
- private UnifiedReal expLnPow(BigInteger exp) {
- int sign = signum(DEFAULT_COMPARE_TOLERANCE);
- if (sign > 0) {
- // Safe to take the log. This avoids deep recursion for huge exponents, which
- // may actually make sense here.
- return new UnifiedReal(crValue().ln().multiply(CR.valueOf(exp)).exp());
- } else if (sign < 0) {
- CR result = crValue().negate().ln().multiply(CR.valueOf(exp)).exp();
- if (exp.testBit(0) /* odd exponent */) {
- result = result.negate();
- }
- return new UnifiedReal(result);
- } else {
- // Base of unknown sign with integer exponent. Use a recursive computation.
- // (Another possible option would be to use the absolute value of the base, and then
- // adjust the sign at the end. But that would have to be done in the CR
- // implementation.)
- if (exp.signum() < 0) {
- // This may be very expensive if exp.negate() is large.
- return new UnifiedReal(recursivePow(crValue(), exp.negate()).inverse());
- } else {
- return new UnifiedReal(recursivePow(crValue(), exp));
- }
- }
- }
-
-
- /**
- * Compute an integral power of this.
- * This recurses roughly as deeply as the number of bits in the exponent, and can, in
- * ridiculous cases, result in a stack overflow.
- */
- private UnifiedReal pow(BigInteger exp) {
- if (exp.equals(BigInteger.ONE)) {
- return this;
- }
- if (exp.signum() == 0) {
- // Questionable if base has undefined value or is 0.
- // Java.lang.Math.pow() returns 1 anyway, so we do the same.
- return ONE;
- }
- BigInteger absExp = exp.abs();
- if (mCrFactor == CR_ONE && absExp.compareTo(HARD_RECURSIVE_POW_LIMIT) <= 0) {
- final BoundedRational ratPow = mRatFactor.pow(exp);
- // We count on this to fail, e.g. for very large exponents, when it would
- // otherwise be too expensive.
- if (ratPow != null) {
- return new UnifiedReal(ratPow);
- }
- }
- if (absExp.compareTo(RECURSIVE_POW_LIMIT) > 0) {
- return expLnPow(exp);
- }
- BoundedRational square = getSquare(mCrFactor);
- if (square != null) {
- final BoundedRational nRatFactor =
- BoundedRational.multiply(mRatFactor.pow(exp), square.pow(exp.shiftRight(1)));
- if (nRatFactor != null) {
- if (exp.and(BigInteger.ONE).intValue() == 1) {
- // Odd power: Multiply by remaining square root.
- return new UnifiedReal(nRatFactor, mCrFactor);
- } else {
- return new UnifiedReal(nRatFactor);
- }
- }
- }
- return expLnPow(exp);
- }
-
- /**
- * Return this ^ expon.
- * This is really only well-defined for a positive base, particularly since
- * 0^x is not continuous at zero. (0^0 = 1 (as is epsilon^0), but 0^epsilon is 0.
- * We nonetheless try to do reasonable things at zero, when we recognize that case.
- */
- public UnifiedReal pow(UnifiedReal expon) {
- if (mCrFactor == CR_E) {
- if (mRatFactor.equals(BoundedRational.ONE)) {
- return expon.exp();
- } else {
- UnifiedReal ratPart = new UnifiedReal(mRatFactor).pow(expon);
- return expon.exp().multiply(ratPart);
- }
- }
- final BoundedRational expAsBR = expon.boundedRationalValue();
- if (expAsBR != null) {
- BigInteger expAsBI = BoundedRational.asBigInteger(expAsBR);
- if (expAsBI != null) {
- return pow(expAsBI);
- } else {
- // Check for exponent that is a multiple of a half.
- expAsBI = BoundedRational.asBigInteger(
- BoundedRational.multiply(BoundedRational.TWO, expAsBR));
- if (expAsBI != null) {
- return pow(expAsBI).sqrt();
- }
- }
- }
- // If the exponent were known zero, we would have handled it above.
- if (definitelyZero()) {
- return ZERO;
- }
- int sign = signum(DEFAULT_COMPARE_TOLERANCE);
- if (sign < 0) {
- throw new ArithmeticException("Negative base for pow() with non-integer exponent");
- }
- return new UnifiedReal(crValue().ln().multiply(expon.crValue()).exp());
- }
-
- /**
- * Raise the argument to the 16th power.
- */
- private static long pow16(int n) {
- if (n > 10) {
- throw new AssertionError("Unexpected pow16 argument");
- }
- long result = n*n;
- result *= result;
- result *= result;
- result *= result;
- return result;
- }
-
- /**
- * Return the integral log with respect to the given base if it exists, 0 otherwise.
- * n is presumed positive.
- */
- private static long getIntLog(BigInteger n, int base) {
- double nAsDouble = n.doubleValue();
- double approx = Math.log(nAsDouble)/Math.log(base);
- // A relatively quick test first.
- // Unfortunately, this doesn't help for values to big to fit in a Double.
- if (!Double.isInfinite(nAsDouble) && Math.abs(approx - Math.rint(approx)) > 1.0e-6) {
- return 0;
- }
- long result = 0;
- BigInteger remaining = n;
- BigInteger bigBase = BigInteger.valueOf(base);
- BigInteger base16th = null; // base^16, computed lazily
- while (n.mod(bigBase).signum() == 0) {
- if (Thread.interrupted()) {
- throw new CR.AbortedException();
- }
- n = n.divide(bigBase);
- ++result;
- // And try a slightly faster computation for large n:
- if (base16th == null) {
- base16th = BigInteger.valueOf(pow16(base));
- }
- while (n.mod(base16th).signum() == 0) {
- n = n.divide(base16th);
- result += 16;
- }
- }
- if (n.equals(BigInteger.ONE)) {
- return result;
- }
- return 0;
- }
-
- public UnifiedReal ln() {
- if (mCrFactor == CR_E) {
- return new UnifiedReal(mRatFactor, CR_ONE).ln().add(ONE);
- }
- if (isComparable(ZERO)) {
- if (signum() <= 0) {
- throw new ArithmeticException("log(non-positive)");
- }
- int compare1 = compareTo(ONE, DEFAULT_COMPARE_TOLERANCE);
- if (compare1 == 0) {
- if (definitelyEquals(ONE)) {
- return ZERO;
- }
- } else if (compare1 < 0) {
- return inverse().ln().negate();
- }
- final BigInteger bi = BoundedRational.asBigInteger(mRatFactor);
- if (bi != null) {
- if (mCrFactor == CR_ONE) {
- // Check for a power of a small integer. We can use sLogs[] to return
- // a more useful answer for those.
- for (int i = 0; i < sLogs.length; ++i) {
- if (sLogs[i] != null) {
- long intLog = getIntLog(bi, i);
- if (intLog != 0) {
- return new UnifiedReal(new BoundedRational(intLog), sLogs[i]);
- }
- }
- }
- } else {
- // Check for n^k * sqrt(n), for which we can also return a more useful answer.
- BoundedRational square = getSquare(mCrFactor);
- if (square != null) {
- int intSquare = square.intValue();
- if (sLogs[intSquare] != null) {
- long intLog = getIntLog(bi, intSquare);
- if (intLog != 0) {
- BoundedRational nRatFactor =
- BoundedRational.add(new BoundedRational(intLog),
- BoundedRational.HALF);
- if (nRatFactor != null) {
- return new UnifiedReal(nRatFactor, sLogs[intSquare]);
- }
- }
- }
- }
- }
- }
- }
- return new UnifiedReal(crValue().ln());
- }
-
- public UnifiedReal exp() {
- if (definitelyEquals(ZERO)) {
- return ONE;
- }
- if (definitelyEquals(ONE)) {
- // Avoid redundant computations, and ensure we recognize all instances as equal.
- return E;
- }
- final BoundedRational crExp = getExp(mCrFactor);
- if (crExp != null) {
- boolean needSqrt = false;
- BoundedRational ratExponent = mRatFactor;
- BigInteger asBI = BoundedRational.asBigInteger(ratExponent);
- if (asBI == null) {
- // check for multiple of one half.
- needSqrt = true;
- ratExponent = BoundedRational.multiply(ratExponent, BoundedRational.TWO);
- }
- BoundedRational nRatFactor = BoundedRational.pow(crExp, ratExponent);
- if (nRatFactor != null) {
- UnifiedReal result = new UnifiedReal(nRatFactor);
- if (needSqrt) {
- result = result.sqrt();
- }
- return result;
- }
- }
- return new UnifiedReal(crValue().exp());
- }
-
-
- /**
- * Generalized factorial.
- * Compute n * (n - step) * (n - 2 * step) * etc. This can be used to compute factorial a bit
- * faster, especially if BigInteger uses sub-quadratic multiplication.
- */
- private static BigInteger genFactorial(long n, long step) {
- if (n > 4 * step) {
- BigInteger prod1 = genFactorial(n, 2 * step);
- if (Thread.interrupted()) {
- throw new CR.AbortedException();
- }
- BigInteger prod2 = genFactorial(n - step, 2 * step);
- if (Thread.interrupted()) {
- throw new CR.AbortedException();
- }
- return prod1.multiply(prod2);
- } else {
- if (n == 0) {
- return BigInteger.ONE;
- }
- BigInteger res = BigInteger.valueOf(n);
- for (long i = n - step; i > 1; i -= step) {
- res = res.multiply(BigInteger.valueOf(i));
- }
- return res;
- }
- }
-
-
- /**
- * Factorial function.
- * Fails if argument is clearly not an integer.
- * May round to nearest integer if value is close.
- */
- public UnifiedReal fact() {
- BigInteger asBI = bigIntegerValue();
- if (asBI == null) {
- asBI = crValue().get_appr(0); // Correct if it was an integer.
- if (!approxEquals(new UnifiedReal(asBI), DEFAULT_COMPARE_TOLERANCE)) {
- throw new ArithmeticException("Non-integral factorial argument");
- }
- }
- if (asBI.signum() < 0) {
- throw new ArithmeticException("Negative factorial argument");
- }
- if (asBI.bitLength() > 20) {
- // Will fail. LongValue() may not work. Punt now.
- throw new ArithmeticException("Factorial argument too big");
- }
- BigInteger biResult = genFactorial(asBI.longValue(), 1);
- BoundedRational nRatFactor = new BoundedRational(biResult);
- return new UnifiedReal(nRatFactor);
- }
-
- /**
- * Return the number of decimal digits to the right of the decimal point required to represent
- * the argument exactly.
- * Return Integer.MAX_VALUE if that's not possible. Never returns a value less than zero, even
- * if r is a power of ten.
- */
- public int digitsRequired() {
- if (mCrFactor == CR_ONE || mRatFactor.signum() == 0) {
- return BoundedRational.digitsRequired(mRatFactor);
- } else {
- return Integer.MAX_VALUE;
- }
- }
-
- /**
- * Return an upper bound on the number of leading zero bits.
- * These are the number of 0 bits
- * to the right of the binary point and to the left of the most significant digit.
- * Return Integer.MAX_VALUE if we cannot bound it.
- */
- public int leadingBinaryZeroes() {
- if (isNamed(mCrFactor)) {
- // Only ln(2) is smaller than one, and could possibly add one zero bit.
- // Adding 3 gives us a somewhat sloppy upper bound.
- final int wholeBits = mRatFactor.wholeNumberBits();
- if (wholeBits == Integer.MIN_VALUE) {
- return Integer.MAX_VALUE;
- }
- if (wholeBits >= 3) {
- return 0;
- } else {
- return -wholeBits + 3;
- }
- }
- return Integer.MAX_VALUE;
- }
-
- /**
- * Is the number of bits to the left of the decimal point greater than bound?
- * The result is inexact: We roughly approximate the whole number bits.
- */
- public boolean approxWholeNumberBitsGreaterThan(int bound) {
- if (isNamed(mCrFactor)) {
- return mRatFactor.wholeNumberBits() > bound;
- } else {
- return crValue().get_appr(bound - 2).bitLength() > 2;
- }
- }
-}