Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee35e69e authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Passing SpacingAndPunctuations to StringUtils.looksValidForDictionaryInsertion

This change must be checked in together with Iec437d6df0.

Change-Id: Idf745b8870965f3bdf690de7ff3b22f83f6204bf
parent 494e2d6c
Loading
Loading
Loading
Loading
+0 −48
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.content.res.Resources;
import android.util.Log;
import android.view.inputmethod.EditorInfo;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.AppWorkaroundsUtils;
import com.android.inputmethod.latin.InputAttributes;
import com.android.inputmethod.latin.R;
@@ -166,53 +165,6 @@ public final class SettingsValues {
        }
    }

    // TODO: Remove this constructor.
    // Only for tests
    private SettingsValues(final Locale locale) {
        // TODO: locale is saved, but not used yet. May have to change this if tests require.
        mLocale = locale;
        mDelayUpdateOldSuggestions = 0;
        mSpacingAndPunctuations = new SpacingAndPunctuations(locale);
        mHintToSaveText = "Touch again to save";
        mInputAttributes = new InputAttributes(null, false /* isFullscreenMode */);
        mAutoCap = true;
        mVibrateOn = true;
        mSoundOn = true;
        mKeyPreviewPopupOn = true;
        mSlidingKeyInputPreviewEnabled = true;
        mShowsVoiceInputKey = true;
        mIncludesOtherImesInLanguageSwitchList = false;
        mShowsLanguageSwitchKey = true;
        mUseContactsDict = true;
        mUsePersonalizedDicts = true;
        mUseDoubleSpacePeriod = true;
        mBlockPotentiallyOffensive = true;
        mAutoCorrectEnabled = true;
        mBigramPredictionEnabled = true;
        mKeyLongpressTimeout = 300;
        mKeypressVibrationDuration = 5;
        mKeypressSoundVolume = 1;
        mKeyPreviewPopupDismissDelay = 70;
        mAutoCorrectionThreshold = 1;
        mGestureInputEnabled = true;
        mGestureTrailEnabled = true;
        mGestureFloatingPreviewTextEnabled = true;
        mPhraseGestureEnabled = true;
        mCorrectionEnabled = mAutoCorrectEnabled && !mInputAttributes.mInputTypeNoAutoCorrect;
        mSuggestionVisibility = 0;
        mIsInternal = false;
        mUseOnlyPersonalizationDictionaryForDebug = false;
        mDisplayOrientation = Configuration.ORIENTATION_PORTRAIT;
        mAppWorkarounds = new AsyncResultHolder<AppWorkaroundsUtils>();
        mAppWorkarounds.set(null);
    }

    // TODO: Remove this method.
    @UsedForTesting
    public static SettingsValues makeDummySettingsValuesForTest(final Locale locale) {
        return new SettingsValues(locale);
    }

    public boolean isApplicationSpecifiedCompletionsOn() {
        return mInputAttributes.mApplicationSpecifiedCompletionOn;
    }
+0 −19
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.inputmethod.latin.settings;

import android.content.res.Resources;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.internal.KeySpecParser;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.Dictionary;
@@ -43,24 +42,6 @@ public final class SpacingAndPunctuations {
    public final boolean mCurrentLanguageHasSpaces;
    public final boolean mUsesAmericanTypography;

    // TODO: Remove this constructor.
    @UsedForTesting
    SpacingAndPunctuations(final Locale locale) {
        mSymbolsPrecededBySpace = new int[] { '(', '[', '{', '&' };
        Arrays.sort(mSymbolsPrecededBySpace);
        mSymbolsFollowedBySpace = new int[] { '.', ',', ';', ':', '!', '?', ')', ']', '}', '&' };
        Arrays.sort(mSymbolsFollowedBySpace);
        mWordConnectors = new int[] { '\'', '-' };
        Arrays.sort(mWordConnectors);
        mSentenceSeparator = Constants.CODE_PERIOD;
        mSentenceSeparatorAndSpace = ". ";
        final String[] suggestPuncsSpec = new String[] { "!", "?", ",", ":", ";" };
        mSuggestPuncList = createSuggestPuncList(suggestPuncsSpec);
        mWordSeparators = "&\t \n()[]{}*&<>+=|.,;:!?/_\"";
        mCurrentLanguageHasSpaces = true;
        mUsesAmericanTypography = Locale.ENGLISH.getLanguage().equals(locale.getLanguage());
    }

    public SpacingAndPunctuations(final Resources res) {
        mSymbolsPrecededBySpace =
                StringUtils.toCodePointArray(res.getString(R.string.symbols_preceded_by_space));
+3 −6
Original line number Diff line number Diff line
@@ -17,15 +17,12 @@
package com.android.inputmethod.latin.utils;

import android.text.TextUtils;
import android.util.Log;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.settings.SettingsValues;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public final class StringUtils {
@@ -270,7 +267,7 @@ public final class StringUtils {

    @UsedForTesting
    public static boolean looksValidForDictionaryInsertion(final CharSequence text,
            final SettingsValues settings) {
            final SpacingAndPunctuations spacingAndPunctuations) {
        if (TextUtils.isEmpty(text)) return false;
        final int length = text.length();
        int i = 0;
@@ -284,7 +281,7 @@ public final class StringUtils {
                digitCount += charCount;
                continue;
            }
            if (!settings.isWordCodePoint(codePoint)) return false;
            if (!spacingAndPunctuations.isWordCodePoint(codePoint)) return false;
        }
        // We reject strings entirely comprised of digits to avoid using PIN codes or credit
        // card numbers. It would come in handy for word prediction though; a good example is
+18 −11
Original line number Diff line number Diff line
@@ -16,11 +16,12 @@

package com.android.inputmethod.latin.utils;

import com.android.inputmethod.latin.settings.SettingsValues;

import android.content.res.Resources;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;

import com.android.inputmethod.latin.settings.SpacingAndPunctuations;

import java.util.Arrays;
import java.util.List;
import java.util.Locale;
@@ -209,15 +210,21 @@ public class StringAndJsonUtilsTests extends AndroidTestCase {
    }

    public void testLooksValidForDictionaryInsertion() {
        final SettingsValues settings =
                SettingsValues.makeDummySettingsValuesForTest(Locale.ENGLISH);
        assertTrue(StringUtils.looksValidForDictionaryInsertion("aochaueo", settings));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("", settings));
        assertTrue(StringUtils.looksValidForDictionaryInsertion("ao-ch'aueo", settings));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("2908743256", settings));
        assertTrue(StringUtils.looksValidForDictionaryInsertion("31aochaueo", settings));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("akeo  raeoch oerch .", settings));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("!!!", settings));
        final RunInLocale<SpacingAndPunctuations> job = new RunInLocale<SpacingAndPunctuations>() {
            @Override
            protected SpacingAndPunctuations job(final Resources res) {
                return new SpacingAndPunctuations(res);
            }
        };
        final Resources res = getContext().getResources();
        final SpacingAndPunctuations sp = job.runInLocale(res, Locale.ENGLISH);
        assertTrue(StringUtils.looksValidForDictionaryInsertion("aochaueo", sp));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("", sp));
        assertTrue(StringUtils.looksValidForDictionaryInsertion("ao-ch'aueo", sp));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("2908743256", sp));
        assertTrue(StringUtils.looksValidForDictionaryInsertion("31aochaueo", sp));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("akeo  raeoch oerch .", sp));
        assertFalse(StringUtils.looksValidForDictionaryInsertion("!!!", sp));
    }

    private static void checkCapitalize(final String src, final String dst, final String separators,