From d06dd0ca1203f28e3af84f629800ce6332749cdc Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Thu, 20 Nov 2014 17:35:49 +0900
Subject: [PATCH] Add confidence.

Bug: 18063142
Bug: 18130489
Bug: 18132240
Bug: 18136721
Bug: 18200415
Change-Id: Ica09d11cb95308dd014c4e4e0d99a30dd66bfea9
---
 .../latin/DictionaryFacilitator.java          | 32 ++++++++++++-------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index b24fdea55d..2ee4068b66 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -138,6 +138,10 @@ public class DictionaryFacilitator {
 
         public final Locale mLocale;
         private Dictionary mMainDict;
+        // Confidence that the most probable language is actually the language the user is
+        // typing in. For now, this is simply the number of times a word from this language
+        // has been committed in a row.
+        private int mConfidence = 0;
         public float mWeightForTypingInLocale = WEIGHT_FOR_MOST_PROBABLE_LANGUAGE;
         public float mWeightForGesturingInLocale = WEIGHT_FOR_MOST_PROBABLE_LANGUAGE;
         public final ConcurrentHashMap<String, ExpandableBinaryDictionary> mSubDictMap =
@@ -260,8 +264,9 @@ public class DictionaryFacilitator {
     public void switchMostProbableLanguage(final Locale locale) {
         if (null == locale) {
             // In many cases, there is no locale to a committed word. For example, a typed word
-            // that does not auto-correct has no locale. In this case we simply do not change
-            // the most probable language.
+            // that is in none of the currently active dictionaries but still does not
+            // auto-correct to anything has no locale. In this case we simply do not change
+            // the most probable language and do not touch confidence.
             return;
         }
         final DictionaryGroup newMostProbableDictionaryGroup =
@@ -272,15 +277,20 @@ public class DictionaryFacilitator {
             // facilitator any more. In this case, just not changing things is fine.
             return;
         }
-        mMostProbableDictionaryGroup.mWeightForTypingInLocale =
-                DictionaryGroup.WEIGHT_FOR_TYPING_IN_NOT_MOST_PROBABLE_LANGUAGE;
-        mMostProbableDictionaryGroup.mWeightForGesturingInLocale =
-                DictionaryGroup.WEIGHT_FOR_GESTURING_IN_NOT_MOST_PROBABLE_LANGUAGE;
-        newMostProbableDictionaryGroup.mWeightForTypingInLocale =
-                DictionaryGroup.WEIGHT_FOR_MOST_PROBABLE_LANGUAGE;
-        newMostProbableDictionaryGroup.mWeightForGesturingInLocale =
-                DictionaryGroup.WEIGHT_FOR_MOST_PROBABLE_LANGUAGE;
-        mMostProbableDictionaryGroup = newMostProbableDictionaryGroup;
+        if (newMostProbableDictionaryGroup == mMostProbableDictionaryGroup) {
+            ++newMostProbableDictionaryGroup.mConfidence;
+        } else {
+            mMostProbableDictionaryGroup.mWeightForTypingInLocale =
+                    DictionaryGroup.WEIGHT_FOR_TYPING_IN_NOT_MOST_PROBABLE_LANGUAGE;
+            mMostProbableDictionaryGroup.mWeightForGesturingInLocale =
+                    DictionaryGroup.WEIGHT_FOR_GESTURING_IN_NOT_MOST_PROBABLE_LANGUAGE;
+            mMostProbableDictionaryGroup.mConfidence = 0;
+            newMostProbableDictionaryGroup.mWeightForTypingInLocale =
+                    DictionaryGroup.WEIGHT_FOR_MOST_PROBABLE_LANGUAGE;
+            newMostProbableDictionaryGroup.mWeightForGesturingInLocale =
+                    DictionaryGroup.WEIGHT_FOR_MOST_PROBABLE_LANGUAGE;
+            mMostProbableDictionaryGroup = newMostProbableDictionaryGroup;
+        }
     }
 
     @Nullable
-- 
GitLab