1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.inputmethod.latin.utils;
18
19import android.util.Log;
20
21import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
22import com.android.inputmethod.latin.define.DebugFlags;
23
24public final class AutoCorrectionUtils {
25    private static final boolean DBG = DebugFlags.DEBUG_ENABLED;
26    private static final String TAG = AutoCorrectionUtils.class.getSimpleName();
27
28    private AutoCorrectionUtils() {
29        // Purely static class: can't instantiate.
30    }
31
32    public static boolean suggestionExceedsThreshold(final SuggestedWordInfo suggestion,
33            final String consideredWord, final float threshold) {
34        if (null != suggestion) {
35            // Shortlist a whitelisted word
36            if (suggestion.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
37                return true;
38            }
39            // TODO: return suggestion.isAprapreateForAutoCorrection();
40            if (!suggestion.isAprapreateForAutoCorrection()) {
41                return false;
42            }
43            final int autoCorrectionSuggestionScore = suggestion.mScore;
44            // TODO: when the normalized score of the first suggestion is nearly equals to
45            //       the normalized score of the second suggestion, behave less aggressive.
46            final float normalizedScore = BinaryDictionaryUtils.calcNormalizedScore(
47                    consideredWord, suggestion.mWord, autoCorrectionSuggestionScore);
48            if (DBG) {
49                Log.d(TAG, "Normalized " + consideredWord + "," + suggestion + ","
50                        + autoCorrectionSuggestionScore + ", " + normalizedScore
51                        + "(" + threshold + ")");
52            }
53            if (normalizedScore >= threshold) {
54                if (DBG) {
55                    Log.d(TAG, "Exceeds threshold.");
56                }
57                return true;
58            }
59        }
60        return false;
61    }
62}
63