Fix bug #5262565 Need to remove CharCount TextDirectionHeuristics

- update unit tests too

Change-Id: I7c518f58a9f17cb679bc3913bdd38243f7ad2195
diff --git a/core/java/android/text/TextDirectionHeuristics.java b/core/java/android/text/TextDirectionHeuristics.java
index 18b4040..e5c1e5b 100644
--- a/core/java/android/text/TextDirectionHeuristics.java
+++ b/core/java/android/text/TextDirectionHeuristics.java
@@ -62,24 +62,6 @@
         new TextDirectionHeuristicInternal(AnyStrong.INSTANCE_RTL, false);
 
     /**
-     * Examines only the strong directional non-format characters, and if either
-     * left to right or right to left characters are 60% or more of this total,
-     * determines that the direction follows the majority of characters.  Falls
-     * back to left to right if neither direction meets this threshold.
-     */
-    public static final TextDirectionHeuristic CHARCOUNT_LTR =
-        new TextDirectionHeuristicInternal(CharCount.INSTANCE_DEFAULT, false);
-
-    /**
-     * Examines only the strong directional non-format characters, and if either
-     * left to right or right to left characters are 60% or more of this total,
-     * determines that the direction follows the majority of characters.  Falls
-     * back to right to left if neither direction meets this threshold.
-     */
-    public static final TextDirectionHeuristic CHARCOUNT_RTL =
-        new TextDirectionHeuristicInternal(CharCount.INSTANCE_DEFAULT, true);
-
-    /**
      * Force the paragraph direction to the Locale direction. Falls back to left to right.
      */
     public static final TextDirectionHeuristic LOCALE = TextDirectionHeuristicLocale.INSTANCE;
@@ -255,62 +237,6 @@
     }
 
     /**
-     * Algorithm that uses the relative proportion of strong directional
-     * characters (excluding LRE, LRO, RLE, RLO) to determine the direction
-     * of the paragraph, if the proportion exceeds a given threshold.
-     *
-     * @hide
-     */
-    public static class CharCount implements TextDirectionAlgorithm {
-        private final float mThreshold;
-
-        @Override
-        public TriState checkRtl(char[] text, int start, int count) {
-            int countLtr = 0;
-            int countRtl = 0;
-            for(int i = start, e = start + count; i < e; ++i) {
-                switch (isRtlText(Character.getDirectionality(text[i]))) {
-                    case TRUE:
-                        ++countLtr;
-                        break;
-                    case FALSE:
-                        ++countRtl;
-                        break;
-                    default:
-                        break;
-                }
-            }
-            int limit = (int)((countLtr + countRtl) * mThreshold);
-            if (limit > 0) {
-                if (countLtr > limit) {
-                    return TriState.FALSE;
-                }
-                if (countRtl > limit) {
-                    return TriState.TRUE;
-                }
-            }
-            return TriState.UNKNOWN;
-        }
-
-        private CharCount(float threshold) {
-            mThreshold = threshold;
-        }
-
-        public static CharCount withThreshold(float threshold) {
-            if (threshold < 0 || threshold > 1) {
-                throw new IllegalArgumentException();
-            }
-            if (threshold == DEFAULT_THRESHOLD) {
-                return INSTANCE_DEFAULT;
-            }
-            return new CharCount(threshold);
-        }
-
-        public static final float DEFAULT_THRESHOLD = 0.6f;
-        public static final CharCount INSTANCE_DEFAULT = new CharCount(DEFAULT_THRESHOLD);
-    }
-
-    /**
      * Algorithm that uses the Locale direction to force the direction of a paragraph.
      */
     public static class TextDirectionHeuristicLocale extends TextDirectionHeuristicImpl {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index fa1d249..35833b0 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -2568,26 +2568,18 @@
     public static final int TEXT_DIRECTION_ANY_RTL = 2;
 
     /**
-     * Text direction is the same as the one held by a 60% majority of the characters. If there is
-     * no majority then the paragraph direction is the resolved layout direction of the View.
-     *
-     * @hide
-     */
-    public static final int TEXT_DIRECTION_CHAR_COUNT = 3;
-
-    /**
      * Text direction is forced to LTR.
      *
      * @hide
      */
-    public static final int TEXT_DIRECTION_LTR = 4;
+    public static final int TEXT_DIRECTION_LTR = 3;
 
     /**
      * Text direction is forced to RTL.
      *
      * @hide
      */
-    public static final int TEXT_DIRECTION_RTL = 5;
+    public static final int TEXT_DIRECTION_RTL = 4;
 
     /**
      * Default text direction is inherited
@@ -2603,7 +2595,6 @@
             @ViewDebug.IntToString(from = TEXT_DIRECTION_INHERIT, to = "INHERIT"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_FIRST_STRONG, to = "FIRST_STRONG"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_ANY_RTL, to = "ANY_RTL"),
-            @ViewDebug.IntToString(from = TEXT_DIRECTION_CHAR_COUNT, to = "CHAR_COUNT"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_LTR, to = "LTR"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_RTL, to = "RTL")
     })
@@ -2621,7 +2612,6 @@
             @ViewDebug.IntToString(from = TEXT_DIRECTION_INHERIT, to = "INHERIT"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_FIRST_STRONG, to = "FIRST_STRONG"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_ANY_RTL, to = "ANY_RTL"),
-            @ViewDebug.IntToString(from = TEXT_DIRECTION_CHAR_COUNT, to = "CHAR_COUNT"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_LTR, to = "LTR"),
             @ViewDebug.IntToString(from = TEXT_DIRECTION_RTL, to = "RTL")
     })
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index abf1281..76de24a 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -11244,10 +11244,6 @@
             case TEXT_DIRECTION_ANY_RTL:
                 mTextDir = TextDirectionHeuristics.ANYRTL_LTR;
                 break;
-            case TEXT_DIRECTION_CHAR_COUNT:
-                mTextDir = (defaultIsRtl ? TextDirectionHeuristics.CHARCOUNT_RTL:
-                        TextDirectionHeuristics.CHARCOUNT_LTR);
-                break;
             case TEXT_DIRECTION_LTR:
                 mTextDir = TextDirectionHeuristics.LTR;
                 break;
diff --git a/core/tests/coretests/src/android/widget/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java
index 7dc95db..5f65faf 100644
--- a/core/tests/coretests/src/android/widget/TextViewTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewTest.java
@@ -198,40 +198,6 @@
     }
 
     @SmallTest
-    public void testCharCountHeuristic() {
-        LinearLayout ll = new LinearLayout(getActivity());
-        ll.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
-
-        TextView tv = new TextView(getActivity());
-        ll.addView(tv);
-
-        tv.setTextDirection(View.TEXT_DIRECTION_CHAR_COUNT);
-        tv.setText("this is a test");
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-         // resetResolvedTextDirection is not part of the public API so simply use setTextDirection
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        tv.setTextDirection(View.TEXT_DIRECTION_CHAR_COUNT);
-        tv.setText("\u05DD\u05DE"); // hebrew
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        tv.setTextDirection(View.TEXT_DIRECTION_CHAR_COUNT);
-        tv.setText("this is a test \u05DD\u05DE"); // latin more than 60% + hebrew
-        assertEquals(View.TEXT_DIRECTION_LTR, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        tv.setTextDirection(View.TEXT_DIRECTION_CHAR_COUNT);
-        tv.setText("t \u05DD\u05DE"); // latin + hebrew more than 60%
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-
-        tv.setTextDirection(View.TEXT_DIRECTION_LTR);
-        tv.setTextDirection(View.TEXT_DIRECTION_CHAR_COUNT);
-        tv.setText("ab \u05DD\u05DE"); // latin + hebrew at 50% each
-        assertEquals(View.TEXT_DIRECTION_RTL, tv.getResolvedTextDirection());
-    }
-
-    @SmallTest
     public void testResetTextDirection() {
         final TextViewTestActivity activity = getActivity();