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

Commit 182f5fec authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Fix: Context menu can contain obsolete suggestions.

When there are not enough number of suggestions, previously used
suggestions was continue to be used. This fixes it and simplifies code
by always allocating SuggestionInfo array.

Bug: 27602619
Change-Id: I9378315b8c810f126f65fade96ce9f6ff5271957
parent 330c57db
Loading
Loading
Loading
Loading
+15 −34
Original line number Diff line number Diff line
@@ -290,7 +290,6 @@ public class Editor {
    boolean mIsInsertionActionModeStartPending = false;

    private final SuggestionHelper mSuggestionHelper = new SuggestionHelper();
    private SuggestionInfo[] mSuggestionInfosInContextMenu;

    Editor(TextView textView) {
        mTextView = textView;
@@ -2454,21 +2453,24 @@ public class Editor {
        }

        if (shouldOfferToShowSuggestions()) {
            if (mSuggestionInfosInContextMenu == null) {
                mSuggestionInfosInContextMenu =
            final SuggestionInfo[] suggestionInfoArray =
                    new SuggestionInfo[SuggestionSpan.SUGGESTIONS_MAX_SIZE];
                for (int i = 0; i < mSuggestionInfosInContextMenu.length; i++) {
                    mSuggestionInfosInContextMenu[i] = new SuggestionInfo();
                }
            for (int i = 0; i < suggestionInfoArray.length; i++) {
                suggestionInfoArray[i] = new SuggestionInfo();
            }
            final SubMenu subMenu = menu.addSubMenu(Menu.NONE, Menu.NONE, MENU_ITEM_ORDER_REPLACE,
                    com.android.internal.R.string.replace);
            mSuggestionHelper.getSuggestionInfo(mSuggestionInfosInContextMenu);
            int i = 0;
            for (final SuggestionInfo info : mSuggestionInfosInContextMenu) {
                info.mSuggestionEnd = info.mText.length();
                subMenu.add(Menu.NONE, Menu.NONE, i++, info.mText)
                        .setOnMenuItemClickListener(mOnContextMenuReplaceItemClickListener);
            final int numItems = mSuggestionHelper.getSuggestionInfo(suggestionInfoArray);
            for (int i = 0; i < numItems; i++) {
                final SuggestionInfo info = suggestionInfoArray[i];
                subMenu.add(Menu.NONE, Menu.NONE, i, info.mText)
                        .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                            @Override
                            public boolean onMenuItemClick(MenuItem item) {
                                replaceWithSuggestion(info);
                                return true;
                            }
                        });
            }
        }

@@ -2609,27 +2611,6 @@ public class Editor {
        }
    };

    private final MenuItem.OnMenuItemClickListener mOnContextMenuReplaceItemClickListener =
            new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            int index = item.getOrder();
            if (index < 0 || index >= mSuggestionInfosInContextMenu.length) {
                clear();
                return false;
            }
            replaceWithSuggestion(mSuggestionInfosInContextMenu[index]);
            clear();
            return true;
        }

        private void clear() {
            for (final SuggestionInfo info : mSuggestionInfosInContextMenu) {
                info.clear();
            }
        }
    };

    /**
     * Controls the {@link EasyEditSpan} monitoring when it is added, and when the related
     * pop-up should be displayed.
+2 −0
Original line number Diff line number Diff line
@@ -143,6 +143,8 @@ public class TextViewActivityMouseTest extends ActivityInstrumentationTestCase2<

        onView(withId(R.id.textview)).check(hasSelection(""));
        onView(withId(R.id.textview)).check(hasInsertionPointerAtIndex(text.indexOf("i")));

        // TODO: Add tests for suggestions
    }

    @SmallTest