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

Commit 15acbdc9 authored by Jatin Matani's avatar Jatin Matani
Browse files

Nuke Amanatto

Change-Id: Ieff2cd37f869dca69abf53ac32a576c2e45cc1e3
parent 174da5c3
Loading
Loading
Loading
Loading
+0 −38
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.inputmethod.latin.personalization;

import android.content.Context;

import com.android.inputmethod.latin.DictionaryFacilitator;

@SuppressWarnings("unused")
public class ContextualDictionaryUpdater {
    public ContextualDictionaryUpdater(final Context context,
            final DictionaryFacilitator dictionaryFacilitator,
            final Runnable onUpdateRunnable) {
    }

    public void onLoadSettings(final boolean usePersonalizedDicts) {
    }

    public void onStartInputView(final String  packageName) {
    }

    public void onDestroy() {
    }
}
+0 −46
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.inputmethod.latin.personalization;

import android.content.Context;

import com.android.inputmethod.latin.DictionaryFacilitator;

@SuppressWarnings("unused")
public class PersonalizationDictionaryUpdater {
    final Context mContext;
    final DictionaryFacilitator mDictionaryFacilitator;
    boolean mDictCleared = false;

    public PersonalizationDictionaryUpdater(final Context context,
            final DictionaryFacilitator dictionaryFacilitator) {
        mContext = context;
        mDictionaryFacilitator = dictionaryFacilitator;
    }

    public void onLoadSettings(final boolean usePersonalizedDicts) {
        if (!mDictCleared) {
            // Clear and never update the personalization dictionary.
            PersonalizationHelper.removeAllPersonalizationDictionaries(mContext);
            mDictionaryFacilitator.clearPersonalizationDictionary();
            mDictCleared = true;
        }
    }

    public void onDestroy() {
    }
}
+2 −22
Original line number Diff line number Diff line
@@ -17,21 +17,18 @@
package com.android.inputmethod.latin;

import android.content.Context;
import android.view.inputmethod.InputMethodSubtype;
import android.util.Pair;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.ExpandableBinaryDictionary.UpdateEntriesForInputEventsCallback;
import com.android.inputmethod.latin.personalization.PersonalizationDataChunk;
import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.utils.SuggestionResults;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@@ -120,8 +117,6 @@ public interface DictionaryFacilitator {

    boolean hasPersonalizationDictionary();

    void flushPersonalizationDictionary();

    void waitForLoadingMainDictionaries(final long timeout, final TimeUnit unit)
            throws InterruptedException;

@@ -152,21 +147,6 @@ public interface DictionaryFacilitator {

    void clearUserHistoryDictionary();

    // This method gets called only when the IME receives a notification to remove the
    // personalization dictionary.
    void clearPersonalizationDictionary();

    void clearContextualDictionary();

    void addEntriesToPersonalizationDictionary(
            final PersonalizationDataChunk personalizationDataChunk,
            final SpacingAndPunctuations spacingAndPunctuations,
            final UpdateEntriesForInputEventsCallback callback);

    @UsedForTesting
    void addPhraseToContextualDictionary(final String[] phrase, final int probability,
            final int bigramProbabilityForWords, final int bigramProbabilityForPhrases);

    void dumpDictionaryForDebug(final String dictName);

    ArrayList<Pair<String, DictionaryStats>> getStatsOfEnabledSubDicts();
+0 −86
Original line number Diff line number Diff line
@@ -23,16 +23,11 @@ import android.util.Pair;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.ExpandableBinaryDictionary.UpdateEntriesForInputEventsCallback;
import com.android.inputmethod.latin.NgramContext.WordInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.common.Constants;
import com.android.inputmethod.latin.personalization.ContextualDictionary;
import com.android.inputmethod.latin.personalization.PersonalizationDataChunk;
import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.utils.DistracterFilter;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatchesAndSuggestions;
import com.android.inputmethod.latin.utils.DistracterFilterCheckingIsInDictionary;
@@ -83,16 +78,13 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
    // To synchronize assigning mDictionaryGroup to ensure closing dictionaries.
    private final Object mLock = new Object();
    private final DistracterFilter mDistracterFilter;
    private final PersonalizationHelperForDictionaryFacilitator mPersonalizationHelper;

    private static final String[] DICT_TYPES_ORDERED_TO_GET_SUGGESTIONS =
            new String[] {
                Dictionary.TYPE_MAIN,
                Dictionary.TYPE_USER_HISTORY,
                Dictionary.TYPE_PERSONALIZATION,
                Dictionary.TYPE_USER,
                Dictionary.TYPE_CONTACTS,
                Dictionary.TYPE_CONTEXTUAL
            };

    public static final Map<String, Class<? extends ExpandableBinaryDictionary>>
@@ -100,10 +92,8 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {

    static {
        DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER_HISTORY, UserHistoryDictionary.class);
        DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_PERSONALIZATION, PersonalizationDictionary.class);
        DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER, UserBinaryDictionary.class);
        DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_CONTACTS, ContactsBinaryDictionary.class);
        DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_CONTEXTUAL, ContextualDictionary.class);
    }

    private static final String DICT_FACTORY_METHOD_NAME = "getDictionary";
@@ -257,23 +247,18 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {

    public DictionaryFacilitatorImpl() {
        mDistracterFilter = DistracterFilter.EMPTY_DISTRACTER_FILTER;
        mPersonalizationHelper = null;
    }

    public DictionaryFacilitatorImpl(final Context context) {
        mDistracterFilter = new DistracterFilterCheckingExactMatchesAndSuggestions(context);
        mPersonalizationHelper =
                new PersonalizationHelperForDictionaryFacilitator(context, mDistracterFilter);
    }

    public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes) {
        mDistracterFilter.updateEnabledSubtypes(enabledSubtypes);
        mPersonalizationHelper.updateEnabledSubtypes(enabledSubtypes);
    }

    // TODO: remove this, it's confusing with seamless multiple language switching
    public void setIsMonolingualUser(final boolean isMonolingualUser) {
        mPersonalizationHelper.setIsMonolingualUser(isMonolingualUser);
    }

    public boolean isActive() {
@@ -586,9 +571,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
            }
        }
        mDistracterFilter.close();
        if (mPersonalizationHelper != null) {
            mPersonalizationHelper.close();
        }
    }

    @UsedForTesting
@@ -630,20 +612,6 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
        return false;
    }

    public void flushPersonalizationDictionary() {
        final HashSet<ExpandableBinaryDictionary> personalizationDictsUsedForSuggestion =
                new HashSet<>();
        final DictionaryGroup[] dictionaryGroups = mDictionaryGroups;
        for (final DictionaryGroup dictionaryGroup : dictionaryGroups) {
            final ExpandableBinaryDictionary personalizationDictUsedForSuggestion =
                    dictionaryGroup.getSubDict(Dictionary.TYPE_PERSONALIZATION);
            personalizationDictsUsedForSuggestion.add(personalizationDictUsedForSuggestion);
        }
        mPersonalizationHelper.flushPersonalizationDictionariesToUpdate(
                personalizationDictsUsedForSuggestion);
        mDistracterFilter.close();
    }

    public void waitForLoadingMainDictionaries(final long timeout, final TimeUnit unit)
            throws InterruptedException {
        mLatchForWaitingLoadingMainDictionaries.await(timeout, unit);
@@ -861,64 +829,10 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator {
        clearSubDictionary(Dictionary.TYPE_USER_HISTORY);
    }

    // This method gets called only when the IME receives a notification to remove the
    // personalization dictionary.
    public void clearPersonalizationDictionary() {
        clearSubDictionary(Dictionary.TYPE_PERSONALIZATION);
        mPersonalizationHelper.clearDictionariesToUpdate();
    }

    public void clearContextualDictionary() {
        clearSubDictionary(Dictionary.TYPE_CONTEXTUAL);
    }

    public void addEntriesToPersonalizationDictionary(
            final PersonalizationDataChunk personalizationDataChunk,
            final SpacingAndPunctuations spacingAndPunctuations,
            final UpdateEntriesForInputEventsCallback callback) {
        mPersonalizationHelper.updateEntriesOfPersonalizationDictionaries(
                getMostProbableLocale(), personalizationDataChunk, spacingAndPunctuations,
                callback);
    }

    @UsedForTesting
    public void addPhraseToContextualDictionary(final String[] phrase, final int probability,
            final int bigramProbabilityForWords, final int bigramProbabilityForPhrases) {
        // TODO: we're inserting the phrase into the dictionary for the active language. Rethink
        // this a bit from a theoretical point of view.
        final ExpandableBinaryDictionary contextualDict =
                getDictionaryGroupForMostProbableLanguage().getSubDict(Dictionary.TYPE_CONTEXTUAL);
        if (contextualDict == null) {
            return;
        }
        NgramContext ngramContext = NgramContext.BEGINNING_OF_SENTENCE;
        for (int i = 0; i < phrase.length; i++) {
            final String[] subPhrase = Arrays.copyOfRange(phrase, i /* start */, phrase.length);
            final String subPhraseStr = TextUtils.join(Constants.WORD_SEPARATOR, subPhrase);
            contextualDict.addUnigramEntryWithCheckingDistracter(
                    subPhraseStr, probability, null /* shortcutTarget */,
                    Dictionary.NOT_A_PROBABILITY /* shortcutFreq */,
                    false /* isNotAWord */, false /* isPossiblyOffensive */,
                    BinaryDictionary.NOT_A_VALID_TIMESTAMP,
                    DistracterFilter.EMPTY_DISTRACTER_FILTER);
            contextualDict.addNgramEntry(ngramContext, subPhraseStr,
                    bigramProbabilityForPhrases, BinaryDictionary.NOT_A_VALID_TIMESTAMP);

            if (i < phrase.length - 1) {
                contextualDict.addUnigramEntryWithCheckingDistracter(
                        phrase[i], probability, null /* shortcutTarget */,
                        Dictionary.NOT_A_PROBABILITY /* shortcutFreq */,
                        false /* isNotAWord */, false /* isPossiblyOffensive */,
                        BinaryDictionary.NOT_A_VALID_TIMESTAMP,
                        DistracterFilter.EMPTY_DISTRACTER_FILTER);
                contextualDict.addNgramEntry(ngramContext, phrase[i],
                        bigramProbabilityForWords, BinaryDictionary.NOT_A_VALID_TIMESTAMP);
            }
            ngramContext =
                    ngramContext.getNextNgramContext(new NgramContext.WordInfo(phrase[i]));
        }
    }

    public void dumpDictionaryForDebug(final String dictName) {
        final DictionaryGroup[] dictionaryGroups = mDictionaryGroups;
        for (final DictionaryGroup dictionaryGroup : dictionaryGroups) {
+2 −22
Original line number Diff line number Diff line
@@ -81,9 +81,7 @@ import com.android.inputmethod.latin.common.InputPointers;
import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.define.ProductionFlags;
import com.android.inputmethod.latin.inputlogic.InputLogic;
import com.android.inputmethod.latin.personalization.ContextualDictionaryUpdater;
import com.android.inputmethod.latin.personalization.DictionaryDecayBroadcastReciever;
import com.android.inputmethod.latin.personalization.PersonalizationDictionaryUpdater;
import com.android.inputmethod.latin.personalization.PersonalizationHelper;
import com.android.inputmethod.latin.settings.Settings;
import com.android.inputmethod.latin.settings.SettingsActivity;
@@ -141,17 +139,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    final Settings mSettings;
    private final DictionaryFacilitator mDictionaryFacilitator =
      DictionaryFacilitatorProvider.newDictionaryFacilitator(this /* context */);
    // TODO: Move from LatinIME.
    private final PersonalizationDictionaryUpdater mPersonalizationDictionaryUpdater =
            new PersonalizationDictionaryUpdater(this /* context */, mDictionaryFacilitator);
    private final ContextualDictionaryUpdater mContextualDictionaryUpdater =
            new ContextualDictionaryUpdater(this /* context */, mDictionaryFacilitator,
                    new Runnable() {
                        @Override
                        public void run() {
                            mHandler.postUpdateSuggestionStrip(SuggestedWords.INPUT_STYLE_NONE);
                        }
                    });
    final InputLogic mInputLogic = new InputLogic(this /* LatinIME */,
            this /* SuggestionStripViewAccessor */, mDictionaryFacilitator);
    // We expect to have only one decoder in almost all cases, hence the default capacity of 1.
@@ -642,11 +629,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

    private void refreshPersonalizationDictionarySession(
            final SettingsValues currentSettingsValues) {
        // TODO: Remove all existing personalized dictionaries.
        mDictionaryFacilitator.setIsMonolingualUser(
                mRichImm.isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes());
        mPersonalizationDictionaryUpdater.onLoadSettings(
                currentSettingsValues.mUsePersonalizedDicts);
        mContextualDictionaryUpdater.onLoadSettings(currentSettingsValues.mUsePersonalizedDicts);
        final boolean shouldKeepUserHistoryDictionaries;
        if (currentSettingsValues.mUsePersonalizedDicts) {
            shouldKeepUserHistoryDictionaries = true;
@@ -730,8 +715,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    @Override
    public void onDestroy() {
        mDictionaryFacilitator.closeDictionaries();
        mPersonalizationDictionaryUpdater.onDestroy();
        mContextualDictionaryUpdater.onDestroy();
        mSettings.onDestroy();
        NetworkConnectivityUtils.onDestroy(this /* context */);
        unregisterReceiver(mRingerModeChangeReceiver);
@@ -1050,8 +1033,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                currentSettingsValues.mGestureTrailEnabled,
                currentSettingsValues.mGestureFloatingPreviewTextEnabled);

        // Contextual dictionary should be updated for the current application.
        mContextualDictionaryUpdater.onStartInputView(editorInfo.packageName);
        if (TRACE) Debug.startMethodTracing("/data/trace/latinime");
    }

@@ -1943,7 +1924,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    @UsedForTesting
    /* package for test */ void clearPersonalizedDictionariesForTest() {
        mDictionaryFacilitator.clearUserHistoryDictionary();
        mDictionaryFacilitator.clearPersonalizationDictionary();
    }

    @UsedForTesting
Loading