Have TalkBack announce results and formula changes

Bug: 21048155
Bug: 19189356

Incrementally announce additions to the formula.

Explicitly announce result after hitting equals.

Announce when display is cleared.

Remove old FIXME comment after a bit more testing.

Change-Id: I836ff6672de3f891888b2724470290c8721d4fcf
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index 28d3312..5cb6685 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -444,13 +444,13 @@
     // Add the given button id to input expression.
     // If appropriate, clear the expression before doing so.
     private void addKeyToExpr(int id) {
-        // FIXME: Other states?
         if (mCurrentState == CalculatorState.ERROR) {
             setState(CalculatorState.INPUT);
         } else if (mCurrentState == CalculatorState.RESULT) {
             if (KeyMaps.isBinary(id) || KeyMaps.isSuffix(id)) {
                 mEvaluator.collapse();
             } else {
+                announceClearForAccessibility();
                 mEvaluator.clear();
             }
             setState(CalculatorState.INPUT);
@@ -544,9 +544,9 @@
             formatted.setSpan(new ForegroundColorSpan(Color.RED),
                               formula.length(), formatted.length(),
                               Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-            mFormulaText.setText(formatted);
+            mFormulaText.changeTextTo(formatted);
         } else {
-            mFormulaText.setText(formula);
+            mFormulaText.changeTextTo(formula);
         }
     }
 
@@ -711,11 +711,16 @@
         animatorSet.start();
     }
 
+    private void announceClearForAccessibility() {
+        mResultText.announceForAccessibility(getResources().getString(R.string.desc_clr));
+    }
+
     private void onClear() {
         if (mEvaluator.getExpr().isEmpty()) {
             return;
         }
         cancelIfEvaluating(true);
+        announceClearForAccessibility();
         reveal(mCurrentButton, R.color.calculator_accent_color, new AnimatorListenerAdapter() {
             @Override
             public void onAnimationEnd(Animator animation) {
@@ -732,6 +737,7 @@
     void onError(final int errorResourceId) {
         if (mCurrentState == CalculatorState.EVALUATE) {
             setState(CalculatorState.ANIMATE);
+            mResultText.announceForAccessibility(getResources().getString(errorResourceId));
             reveal(mCurrentButton, R.color.calculator_error_color,
                     new AnimatorListenerAdapter() {
                         @Override
@@ -783,6 +789,8 @@
         final int formulaTextColor = mFormulaText.getCurrentTextColor();
 
         if (animate) {
+            mResultText.announceForAccessibility(getResources().getString(R.string.desc_eq));
+            mResultText.announceForAccessibility(mResultText.getText());
             setState(CalculatorState.ANIMATE);
             final AnimatorSet animatorSet = new AnimatorSet();
             animatorSet.playTogether(