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

Commit 12474634 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Update personalization dict via dictionary facilitator.

Change-Id: I512c41e12d8d31f03b5df6ad03bf7711611c80f5
parent 118a4fc2
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.inputmethod.latin.personalization.PersonalizationHelper;
import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
import com.android.inputmethod.latin.settings.SettingsValues;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;

import java.io.File;
import java.util.ArrayList;
@@ -223,6 +224,10 @@ public class DictionaryFacilitatorForSuggest {
        return null != mMainDictionary && mMainDictionary.isInitialized();
    }

    public boolean hasPersonalizationDictionary() {
        return null != mPersonalizationDictionary;
    }

    public void waitForLoadingMainDictionary(final long timeout, final TimeUnit unit)
            throws InterruptedException {
        mLatchForWaitingLoadingMainDictionary.await(timeout, unit);
@@ -476,4 +481,26 @@ public class DictionaryFacilitatorForSuggest {
            oldDict.close();
        }
    }

    // This method gets called only when the IME receives a notification to remove the
    // personalization dictionary.
    public void clearPersonalizationDictionary() {
        if (!hasPersonalizationDictionary()) {
            return;
        }
        mPersonalizationDictionary.clearAndFlushDictionary();
    }

    public void addMultipleDictionaryEntriesToPersonalizationDictionary(
            final ArrayList<LanguageModelParam> languageModelParams,
            final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
        if (!hasPersonalizationDictionary()) {
            if (callback != null) {
                callback.onFinished();
            }
            return;
        }
        mPersonalizationDictionary.addMultipleDictionaryEntriesToDictionary(languageModelParams,
                callback);
    }
}
+0 −15
Original line number Diff line number Diff line
@@ -18,10 +18,8 @@ package com.android.inputmethod.latin.personalization;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.utils.CollectionUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.Locale;

import android.content.Context;
@@ -29,9 +27,6 @@ import android.content.Context;
public class PersonalizationDictionary extends DecayingExpandableBinaryDictionaryBase {
    /* package */ static final String NAME = PersonalizationDictionary.class.getSimpleName();

    private final ArrayList<PersonalizationDictionaryUpdateSession> mSessions =
            CollectionUtils.newArrayList();

    /* package */ PersonalizationDictionary(final Context context, final Locale locale) {
        super(context, locale, Dictionary.TYPE_PERSONALIZATION,
                getDictNameWithLocale(NAME, locale));
@@ -44,14 +39,4 @@ public class PersonalizationDictionary extends DecayingExpandableBinaryDictionar
        super(context, locale, Dictionary.TYPE_PERSONALIZATION, getDictNameWithLocale(NAME, locale),
                dictFile);
    }

    public void registerUpdateSession(PersonalizationDictionaryUpdateSession session) {
        session.setPredictionDictionary(this);
        mSessions.add(session);
        session.onDictionaryReady();
    }

    public void unRegisterUpdateSession(PersonalizationDictionaryUpdateSession session) {
        mSessions.remove(session);
    }
}
+0 −86
Original line number Diff line number Diff line
/*
 * Copyright (C) 2013 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.ExpandableBinaryDictionary;
import com.android.inputmethod.latin.utils.LanguageModelParam;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Locale;

/**
 * This class is a session where a data provider can communicate with a personalization
 * dictionary.
 */
public abstract class PersonalizationDictionaryUpdateSession {
    public WeakReference<PersonalizationDictionary> mDictionary;
    public final Locale mSystemLocale;

    public PersonalizationDictionaryUpdateSession(final Locale locale) {
        mSystemLocale = locale;
    }

    public abstract void onDictionaryReady();

    public abstract void onDictionaryClosed(final Context context);

    public void setPredictionDictionary(final PersonalizationDictionary dictionary) {
        mDictionary = new WeakReference<PersonalizationDictionary>(dictionary);
    }

    protected PersonalizationDictionary getDictionary() {
        return mDictionary == null ? null : mDictionary.get();
    }

    private void unsetDictionary() {
        final PersonalizationDictionary dictionary = getDictionary();
        if (dictionary == null) {
            return;
        }
        dictionary.unRegisterUpdateSession(this);
    }

    public void clearAndFlushDictionary() {
        final PersonalizationDictionary dictionary = getDictionary();
        if (dictionary == null) {
            return;
        }
        dictionary.clearAndFlushDictionary();
    }

    public void closeSession(final Context context) {
        unsetDictionary();
        onDictionaryClosed(context);
    }

    // TODO: Support multi locale.
    public void addMultipleDictionaryEntriesToDictionary(
            final ArrayList<LanguageModelParam> languageModelParams,
            final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
        final PersonalizationDictionary dictionary = getDictionary();
        if (dictionary == null) {
            if (callback != null) {
                callback.onFinished();
            }
            return;
        }
        dictionary.addMultipleDictionaryEntriesToDictionary(languageModelParams, callback);
    }
}
+0 −7
Original line number Diff line number Diff line
@@ -71,13 +71,6 @@ public class PersonalizationHelper {
        }
    }

    public static void registerPersonalizationDictionaryUpdateSession(final Context context,
            final PersonalizationDictionaryUpdateSession session, final Locale locale) {
        final PersonalizationDictionary personalizationDictionary =
                getPersonalizationDictionary(context, locale);
        personalizationDictionary.registerUpdateSession(session);
    }

    public static PersonalizationDictionary getPersonalizationDictionary(
            final Context context, final Locale locale) {
        final String localeStr = locale.toString();