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

Commit bf0f4d9c authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Remove dupes from suggestions. Fixes 2213629

Dupes are sometimes generated, especially for names, from Contacts
and main dictionary. Check for dupes before showing suggestions.
parent b04157a8
Loading
Loading
Loading
Loading
+31 −3
Original line number Diff line number Diff line
@@ -48,9 +48,9 @@ public class Suggest implements Dictionary.WordCallback {
    private int mPrefMaxSuggestions = 12;

    private int[] mPriorities = new int[mPrefMaxSuggestions];
    private List<CharSequence> mSuggestions = new ArrayList<CharSequence>();
    private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>();
    private boolean mIncludeTypedWordIfValid;
    private List<CharSequence> mStringPool = new ArrayList<CharSequence>();
    private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>();
    private Context mContext;
    private boolean mHaveCorrection;
    private CharSequence mOriginalWord;
@@ -219,9 +219,37 @@ public class Suggest implements Dictionary.WordCallback {
            i++;
        }

        removeDupes();
        return mSuggestions;
    }

    private void removeDupes() {
        final ArrayList<CharSequence> suggestions = mSuggestions;
        if (suggestions.size() < 2) return;
        int i = 1;
        // Don't cache suggestions.size(), since we may be removing items
        while (i < suggestions.size()) {
            final CharSequence cur = suggestions.get(i);
            // Compare each candidate with each previous candidate
            for (int j = 0; j < i; j++) {
                CharSequence previous = suggestions.get(j);
                if (TextUtils.equals(cur, previous)) {
                    removeFromSuggestions(i);
                    i--;
                    break;
                }
            }
            i++;
        }
    }

    private void removeFromSuggestions(int index) {
        CharSequence garbage = mSuggestions.remove(index);
        if (garbage != null && garbage instanceof StringBuilder) {
            mStringPool.add(garbage);
        }
    }

    public boolean hasMinimalCorrection() {
        return mHaveCorrection;
    }