Merge "Translate from translated languages to MATH." into jb-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 958a6c4..e5038a9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -59,11 +59,16 @@
     <string name="enter">\u2193</string>
     <!-- Displayed on buttons on screen for the sin function. -->
     <string name="sin">sin</string>
+    <!-- Do not translate. What we replace translated SIN with for calculating sin.-->
+    <string translate="false" name="sin_mathematical_value">sin</string>
     <!-- Displayed on buttons on screen for the cos function. -->
     <string name="cos">cos</string>
+    <!-- Do not translate. What we replace translated COS with for calculating cos. -->
+    <string translate="false" name="cos_mathematical_value">cos</string>
     <!-- Displayed on buttons on screen for the tan function. -->
     <string name="tan">tan</string>
-       
+    <!-- Do not translate. What we replace translated TAN with for calculating tan. -->
+    <string translate="false" name="tan_mathematical_value">tan</string>
     <!-- Do not translate. Unicode pi sign; don't translate. Displayed as button on screen. -->
     <string name="pi">\u03c0</string>
     <!-- Displayed on buttons on screen for the e function. -->
diff --git a/src/com/android/calculator2/Logic.java b/src/com/android/calculator2/Logic.java
index 690e892..e2657fe 100644
--- a/src/com/android/calculator2/Logic.java
+++ b/src/com/android/calculator2/Logic.java
@@ -22,12 +22,15 @@
 import android.view.KeyEvent;
 import android.widget.EditText;
 import android.content.Context;
+import android.content.res.Resources;
 
+import java.util.HashMap;
 import java.util.Locale;
+import java.util.Map.Entry;
+import java.util.Set;
 
 import org.javia.arity.Symbols;
 import org.javia.arity.SyntaxException;
-import org.javia.arity.Util;
 
 class Logic {
     private CalculatorDisplay mDisplay;
@@ -60,9 +63,12 @@
     }
 
     private Listener mListener;
+    private Context mContext;
+    private Set<Entry<String, String>> mTranslationsSet;
 
     Logic(Context context, History history, CalculatorDisplay display) {
-        mErrorString = context.getResources().getString(R.string.error);
+        mContext = context;
+        mErrorString = mContext.getResources().getString(R.string.error);
         mHistory = history;
         mDisplay = display;
         mDisplay.setLogic(this);
@@ -230,7 +236,8 @@
             input = input.substring(0, size - 1);
             --size;
         }
-
+        // Find and replace any translated mathematical functions.
+        input = replaceTranslations(input);
         double value = mSymbols.eval(input);
 
         String result = "";
@@ -243,6 +250,29 @@
         return result.replace('-', MINUS).replace(INFINITY, INFINITY_UNICODE);
     }
 
+    private void addTranslation(HashMap<String, String> map, int t, int m) {
+        Resources res = mContext.getResources();
+        String translated = res.getString(t);
+        String math = res.getString(m);
+        if (!TextUtils.equals(translated, math)) {
+            map.put(translated, math);
+        }
+    }
+
+    private String replaceTranslations(String input) {
+        if (mTranslationsSet == null) {
+            HashMap<String, String> map = new HashMap<String, String>();
+            addTranslation(map, R.string.sin, R.string.sin_mathematical_value);
+            addTranslation(map, R.string.cos, R.string.cos_mathematical_value);
+            addTranslation(map, R.string.tan, R.string.tan_mathematical_value);
+            mTranslationsSet = map.entrySet();
+        }
+        for (Entry<String, String> entry : mTranslationsSet) {
+            input = input.replace(entry.getKey(), entry.getValue());
+        }
+        return input;
+    }
+
     private String tryFormattingWithPrecision(double value, int precision) {
         // The standard scientific formatter is basically what we need. We will
         // start with what it produces and then massage it a bit.