Next-word suggestion bit in keyboard settings.

This feature works in supported languages.
We don't need a user setting.

Bug 19596067.

Change-Id: Icdded772745f9816da47f8a5e3b87b733083b121
diff --git a/java/res/values/config-common.xml b/java/res/values/config-common.xml
index 36fd30a..be22cce 100644
--- a/java/res/values/config-common.xml
+++ b/java/res/values/config-common.xml
@@ -20,9 +20,6 @@
 
 <resources>
     <bool name="config_block_potentially_offensive">true</bool>
-    <!-- Default value for next word prediction: after entering a word and a space only, should we look
-         at input history to suggest a hopefully helpful suggestions for the next word? -->
-    <bool name="config_default_next_word_prediction">true</bool>
 
     <integer name="config_delay_in_milliseconds_to_update_shift_state">100</integer>
     <integer name="config_double_space_period_timeout">1100</integer>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 50aa4a7..c8060da 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -153,11 +153,6 @@
     <!-- Option to suggest auto correction suggestions very aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
     <string name="auto_correction_threshold_mode_very_aggressive">Very aggressive</string>
 
-    <!-- Option to enable using next word suggestions. After the user types a space, with this option on, the keyboard will try to predict the next word. -->
-    <string name="bigram_prediction">Next-word suggestions</string>
-    <!-- Description for "next word suggestion" option. This displays suggestions even when there is no input, based on the previous word. -->
-    <string name="bigram_prediction_summary">Use the previous word in making suggestions</string>
-
     <!-- Option to enable gesture input. The user can input a word by tracing the letters of a word without releasing the finger from the screen. [CHAR LIMIT=30]-->
     <string name="gesture_input">Enable gesture typing</string>
     <!-- Description for "gesture_input" option. The user can input a word by tracing the letters of a word without releasing the finger from the screen. [CHAR LIMIT=65]-->
diff --git a/java/res/xml/prefs_screen_correction.xml b/java/res/xml/prefs_screen_correction.xml
index dd5ba54..020d3af 100644
--- a/java/res/xml/prefs_screen_correction.xml
+++ b/java/res/xml/prefs_screen_correction.xml
@@ -67,10 +67,4 @@
         android:summary="@string/use_contacts_dict_summary"
         android:defaultValue="true"
         android:persistent="true" />
-    <CheckBoxPreference
-        android:key="next_word_prediction"
-        android:title="@string/bigram_prediction"
-        android:summary="@string/bigram_prediction_summary"
-        android:defaultValue="true"
-        android:persistent="true" />
 </PreferenceScreen>
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 65a8d66..d5bfe43 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1543,11 +1543,7 @@
     // punctuation suggestions (if it's disabled).
     @Override
     public void setNeutralSuggestionStrip() {
-        final SettingsValues currentSettings = mSettings.getCurrent();
-        final SuggestedWords neutralSuggestions = currentSettings.mBigramPredictionEnabled
-                ? SuggestedWords.getEmptyInstance()
-                : currentSettings.mSpacingAndPunctuations.mSuggestPuncList;
-        setSuggestedWords(neutralSuggestions);
+        setSuggestedWords(SuggestedWords.getEmptyInstance());
     }
 
     // TODO: Make this private
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 3f1646b..92bd606 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -1405,11 +1405,6 @@
             return;
         }
 
-        if (!mWordComposer.isComposingWord() && !settingsValues.mBigramPredictionEnabled) {
-            mSuggestionStripViewAccessor.setNeutralSuggestionStrip();
-            return;
-        }
-
         final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<>();
         mInputLogicHandler.getSuggestedWords(inputStyle, SuggestedWords.NOT_A_SEQUENCE_NUMBER,
                 new OnGetSuggestedWordsCallback() {
diff --git a/java/src/com/android/inputmethod/latin/settings/CorrectionSettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/CorrectionSettingsFragment.java
index ec29a7e..44c47fd 100644
--- a/java/src/com/android/inputmethod/latin/settings/CorrectionSettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/CorrectionSettingsFragment.java
@@ -19,12 +19,10 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.Build;
 import android.os.Bundle;
-import android.preference.ListPreference;
 import android.preference.Preference;
 
 import com.android.inputmethod.dictionarypack.DictionarySettingsActivity;
@@ -61,8 +59,6 @@
         final Context context = getActivity();
         final PackageManager pm = context.getPackageManager();
 
-        ensureConsistencyOfAutoCorrectionSettings();
-
         final Preference dictionaryLink = findPreference(Settings.PREF_CONFIGURE_DICTIONARIES_KEY);
         final Intent intent = dictionaryLink.getIntent();
         intent.setClassName(context.getPackageName(), DictionarySettingsActivity.class.getName());
@@ -82,21 +78,6 @@
         }
     }
 
-    @Override
-    public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
-        ensureConsistencyOfAutoCorrectionSettings();
-    }
-
-    private void ensureConsistencyOfAutoCorrectionSettings() {
-        final String autoCorrectionOff = getString(
-                R.string.auto_correction_threshold_mode_index_off);
-        final ListPreference autoCorrectionThresholdPref = (ListPreference)findPreference(
-                Settings.PREF_AUTO_CORRECTION_THRESHOLD);
-        final String currentSetting = autoCorrectionThresholdPref.getValue();
-        setPreferenceEnabled(
-                Settings.PREF_BIGRAM_PREDICTIONS, !currentSetting.equals(autoCorrectionOff));
-    }
-
     private void overwriteUserDictionaryPreference(final Preference userDictionaryPreference) {
         final Activity activity = getActivity();
         final TreeSet<String> localeList = UserDictionaryList.getUserDictionaryLocalesSet(activity);
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index 0ac19f7..6ece59d 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -80,7 +80,6 @@
     // TODO: consolidate key preview dismiss delay with the key preview animation parameters.
     public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY =
             "pref_key_preview_popup_dismiss_delay";
-    public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction";
     public static final String PREF_GESTURE_INPUT = "gesture_input";
     public static final String PREF_VIBRATION_DURATION_SETTINGS =
             "pref_vibration_duration_settings";
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
index 6224071..1d6199d 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
@@ -73,8 +73,6 @@
     public final boolean mUsePersonalizedDicts;
     public final boolean mUseDoubleSpacePeriod;
     public final boolean mBlockPotentiallyOffensive;
-    // Use bigrams to predict the next word when there is no input for it yet
-    public final boolean mBigramPredictionEnabled;
     public final boolean mGestureInputEnabled;
     public final boolean mGestureTrailEnabled;
     public final boolean mGestureFloatingPreviewTextEnabled;
@@ -152,7 +150,6 @@
                 && inputAttributes.mIsGeneralTextInput;
         mBlockPotentiallyOffensive = Settings.readBlockPotentiallyOffensive(prefs, res);
         mAutoCorrectEnabled = Settings.readAutoCorrectEnabled(autoCorrectionThresholdRawValue, res);
-        mBigramPredictionEnabled = readBigramPredictionEnabled(prefs, res);
         mDoubleSpacePeriodTimeout = res.getInteger(R.integer.config_double_space_period_timeout);
         mHasHardwareKeyboard = Settings.readHasHardwareKeyboard(res.getConfiguration());
         mEnableMetricsLogging = prefs.getBoolean(Settings.PREF_ENABLE_METRICS_LOGGING, true);
@@ -307,12 +304,6 @@
         return prefs.getBoolean(Settings.PREF_SHOW_SUGGESTIONS, true);
     }
 
-    private static boolean readBigramPredictionEnabled(final SharedPreferences prefs,
-            final Resources res) {
-        return prefs.getBoolean(Settings.PREF_BIGRAM_PREDICTIONS, res.getBoolean(
-                R.bool.config_default_next_word_prediction));
-    }
-
     private static float readAutoCorrectionThreshold(final Resources res,
             final String currentAutoCorrectionSetting) {
         final String[] autoCorrectionThresholdValues = res.getStringArray(
@@ -390,8 +381,6 @@
         sb.append("" + mUseDoubleSpacePeriod);
         sb.append("\n   mBlockPotentiallyOffensive = ");
         sb.append("" + mBlockPotentiallyOffensive);
-        sb.append("\n   mBigramPredictionEnabled = ");
-        sb.append("" + mBigramPredictionEnabled);
         sb.append("\n   mGestureInputEnabled = ");
         sb.append("" + mGestureInputEnabled);
         sb.append("\n   mGestureTrailEnabled = ");
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
index c76f6f4..7647773 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTests.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
@@ -504,9 +504,11 @@
         type(" ");
         sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS);
         runMessages();
-        // Test the predictions have been cleared
+        // Corrections have been replaced with predictions.
         SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest();
-        assertEquals("predictions cleared after double-space-to-period", suggestedWords.size(), 0);
+        String word = suggestedWords == null ? null : suggestedWords.getWord(0);
+        assertTrue("predictions after double-space-to-period is I or The",
+                "I".equals(word) || "The".equals(word));
         type(Constants.CODE_DELETE);
         sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS);
         runMessages();
@@ -529,23 +531,6 @@
                 suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
     }
 
-    public void testPredictionsAfterPeriod() {
-        mLatinIME.clearPersonalizedDictionariesForTest();
-        final String WORD_TO_TYPE = "Barack. ";
-        type(WORD_TO_TYPE);
-        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS);
-        runMessages();
-        SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest();
-        assertEquals("No prediction after period after inputting once.", 0, suggestedWords.size());
-
-        type(WORD_TO_TYPE);
-        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS);
-        runMessages();
-        suggestedWords = mLatinIME.getSuggestedWordsForTest();
-        assertEquals("Beginning-of-Sentence prediction after inputting 2 times.", "Barack",
-                suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
-    }
-
     public void testPredictionsAfterRecorrection() {
         final String PREFIX = "A ";
         final String WORD_TO_TYPE = "Barack";
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java b/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
index 3cfd0e2..fa39f31 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTestsNonEnglish.java
@@ -23,7 +23,6 @@
 
 @LargeTest
 public class InputLogicTestsNonEnglish extends InputTestsBase {
-    final String NEXT_WORD_PREDICTION_OPTION = "next_word_prediction";
 
     public void testAutoCorrectForFrench() {
         final String STRING_TO_TYPE = "irq ";
@@ -63,48 +62,28 @@
         final String WORD_TO_TYPE = "test ";
         final String PUNCTUATION_FROM_STRIP = "!";
         final String EXPECTED_RESULT = "test !!";
-        final boolean defaultNextWordPredictionOption =
-                mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_prediction);
-        final boolean previousNextWordPredictionOption =
-                setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, false,
-                        defaultNextWordPredictionOption);
-        try {
-            changeLanguage("fr");
-            type(WORD_TO_TYPE);
-            sleep(DELAY_TO_WAIT_FOR_UNDERLINE_MILLIS);
-            runMessages();
-            assertTrue("type word then type space should display punctuation strip",
-                    mLatinIME.getSuggestedWordsForTest().isPunctuationSuggestions());
-            pickSuggestionManually(PUNCTUATION_FROM_STRIP);
-            pickSuggestionManually(PUNCTUATION_FROM_STRIP);
-            assertEquals("type word then type space then punctuation from strip twice for French",
-                    EXPECTED_RESULT, mEditText.getText().toString());
-        } finally {
-            setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, previousNextWordPredictionOption,
-                    defaultNextWordPredictionOption);
-        }
+        changeLanguage("fr");
+        type(WORD_TO_TYPE);
+        sleep(DELAY_TO_WAIT_FOR_UNDERLINE_MILLIS);
+        runMessages();
+        assertTrue("type word then type space should display punctuation strip",
+                mLatinIME.getSuggestedWordsForTest().isPunctuationSuggestions());
+        pickSuggestionManually(PUNCTUATION_FROM_STRIP);
+        pickSuggestionManually(PUNCTUATION_FROM_STRIP);
+        assertEquals("type word then type space then punctuation from strip twice for French",
+                EXPECTED_RESULT, mEditText.getText().toString());
     }
 
     public void testWordThenSpaceDisplaysPredictions() {
         final String WORD_TO_TYPE = "beaujolais ";
         final String EXPECTED_RESULT = "nouveau";
-        final boolean defaultNextWordPredictionOption =
-                mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_prediction);
-        final boolean previousNextWordPredictionOption =
-                setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, true,
-                        defaultNextWordPredictionOption);
-        try {
-            changeLanguage("fr");
-            type(WORD_TO_TYPE);
-            sleep(DELAY_TO_WAIT_FOR_UNDERLINE_MILLIS);
-            runMessages();
-            final SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest();
-            assertEquals("type word then type space yields predictions for French",
-                    EXPECTED_RESULT, suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
-        } finally {
-            setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, previousNextWordPredictionOption,
-                    defaultNextWordPredictionOption);
-        }
+        changeLanguage("fr");
+        type(WORD_TO_TYPE);
+        sleep(DELAY_TO_WAIT_FOR_UNDERLINE_MILLIS);
+        runMessages();
+        final SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest();
+        assertEquals("type word then type space yields predictions for French",
+                EXPECTED_RESULT, suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
     }
 
     public void testAutoCorrectForGerman() {
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index 00e0b52..ea7823c 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -77,7 +77,6 @@
     protected MyEditText mEditText;
     protected View mInputView;
     protected InputConnection mInputConnection;
-    private boolean mPreviousBigramPredictionSettings;
     private String mPreviousAutoCorrectSetting;
 
     // A helper class to ease span tests
@@ -201,8 +200,6 @@
         setupService();
         mLatinIME = getService();
         setDebugMode(true);
-        mPreviousBigramPredictionSettings = setBooleanPreference(Settings.PREF_BIGRAM_PREDICTIONS,
-                true, true /* defaultValue */);
         mPreviousAutoCorrectSetting = setStringPreference(Settings.PREF_AUTO_CORRECTION_THRESHOLD,
                 DEFAULT_AUTO_CORRECTION_THRESHOLD, DEFAULT_AUTO_CORRECTION_THRESHOLD);
         mLatinIME.onCreate();
@@ -233,8 +230,6 @@
         mLatinIME.onFinishInput();
         runMessages();
         mLatinIME.mHandler.removeAllMessages();
-        setBooleanPreference(Settings.PREF_BIGRAM_PREDICTIONS, mPreviousBigramPredictionSettings,
-                true /* defaultValue */);
         setStringPreference(Settings.PREF_AUTO_CORRECTION_THRESHOLD, mPreviousAutoCorrectSetting,
                 DEFAULT_AUTO_CORRECTION_THRESHOLD);
         setDebugMode(false);
diff --git a/tests/src/com/android/inputmethod/latin/PunctuationTests.java b/tests/src/com/android/inputmethod/latin/PunctuationTests.java
index 3537918..9ac2204 100644
--- a/tests/src/com/android/inputmethod/latin/PunctuationTests.java
+++ b/tests/src/com/android/inputmethod/latin/PunctuationTests.java
@@ -19,37 +19,23 @@
 import android.provider.Settings.Secure;
 import android.test.suitebuilder.annotation.LargeTest;
 
-import com.android.inputmethod.latin.R;
-
 @LargeTest
 public class PunctuationTests extends InputTestsBase {
 
-    final String NEXT_WORD_PREDICTION_OPTION = "next_word_prediction";
-
     public void testWordThenSpaceThenPunctuationFromStripTwice() {
         final String WORD_TO_TYPE = "this ";
         final String PUNCTUATION_FROM_STRIP = "!";
         final String EXPECTED_RESULT = "this!! ";
-        final boolean defaultNextWordPredictionOption =
-                mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_prediction);
-        final boolean previousNextWordPredictionOption =
-                setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, false,
-                        defaultNextWordPredictionOption);
-        try {
-            mLatinIME.loadSettings();
-            type(WORD_TO_TYPE);
-            sleep(DELAY_TO_WAIT_FOR_UNDERLINE_MILLIS);
-            runMessages();
-            assertTrue("type word then type space should display punctuation strip",
-                    mLatinIME.getSuggestedWordsForTest().isPunctuationSuggestions());
-            pickSuggestionManually(PUNCTUATION_FROM_STRIP);
-            pickSuggestionManually(PUNCTUATION_FROM_STRIP);
-            assertEquals("type word then type space then punctuation from strip twice",
-                    EXPECTED_RESULT, mEditText.getText().toString());
-        } finally {
-            setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, previousNextWordPredictionOption,
-                    defaultNextWordPredictionOption);
-        }
+        mLatinIME.loadSettings();
+        type(WORD_TO_TYPE);
+        sleep(DELAY_TO_WAIT_FOR_UNDERLINE_MILLIS);
+        runMessages();
+        assertTrue("type word then type space should display punctuation strip",
+                mLatinIME.getSuggestedWordsForTest().isPunctuationSuggestions());
+        pickSuggestionManually(PUNCTUATION_FROM_STRIP);
+        pickSuggestionManually(PUNCTUATION_FROM_STRIP);
+        assertEquals("type word then type space then punctuation from strip twice",
+                EXPECTED_RESULT, mEditText.getText().toString());
     }
 
     public void testWordThenSpaceThenPunctuationFromKeyboardTwice() {