Skip to content

Commit dfcf636

Browse files
committed
Support press enter to insert suggestion
1 parent bb820eb commit dfcf636

File tree

1 file changed

+61
-44
lines changed

1 file changed

+61
-44
lines changed

lib-n-ide/src/main/java/com/duy/ide/editor/view/SuggestionEditor.java

Lines changed: 61 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import android.view.ViewGroup;
1717
import android.view.WindowManager;
1818
import android.widget.AdapterView;
19+
import android.widget.ListView;
1920

2021
import com.duy.common.DLog;
2122
import com.duy.ide.code.api.SuggestItem;
@@ -28,14 +29,12 @@
2829
import java.util.ArrayList;
2930
import java.util.List;
3031

31-
public class SuggestionEditor extends EditActionSupportEditor {
32+
public class SuggestionEditor extends EditActionSupportEditor implements AdapterView.OnItemClickListener {
3233

3334
private static final String TAG = "SuggestionEditor";
3435
private final Rect mTmpRect = new Rect();
3536

3637
private SuggestionAdapter mAdapter;
37-
@Nullable
38-
private OnSuggestItemClickListener mOnSuggestItemClickListener;
3938

4039
/**
4140
* Small popup window to display list suggestion
@@ -52,15 +51,7 @@ public void run() {
5251
onPopupChangePosition();
5352
}
5453
};
55-
private AdapterView.OnItemClickListener mSuggestClickListener
56-
= new AdapterView.OnItemClickListener() {
57-
@Override
58-
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
59-
if (mAdapter != null) {
60-
performCompletion(position);
61-
}
62-
}
63-
};
54+
6455

6556
public SuggestionEditor(Context context) {
6657
super(context);
@@ -80,11 +71,13 @@ public SuggestionEditor(Context context, AttributeSet attrs, int defStyleAttr) {
8071

8172
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
8273
mAdapter = new SuggestionAdapter(getContext(), new ArrayList<SuggestItem>());
83-
mAdapter.setListener(mSuggestClickListener);
74+
// mAdapter.setListener(this);
8475

8576
mPopup = new ListPopupWindow(context, attrs, defStyleAttr, 0);
8677
mPopup.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
8778
mPopup.setAdapter(mAdapter);
79+
mAdapter.setListener(this);
80+
8881
if (getEditorTheme() != null) {
8982
setThemeForPopup(getEditorTheme());
9083
}
@@ -214,7 +207,11 @@ private void showDropDownImpl() {
214207
mPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);
215208
}
216209
mPopup.show();
217-
mPopup.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
210+
ListView list = mPopup.getListView();
211+
list.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
212+
if (mAdapter.getCount() > 0) {
213+
list.setSelection(0);
214+
}
218215
}
219216

220217

@@ -246,7 +243,6 @@ public void setSuggestData(@NonNull List<SuggestItem> data) {
246243

247244
@Override
248245
public void setOnSuggestItemClickListener(@Nullable OnSuggestItemClickListener listener) {
249-
this.mOnSuggestItemClickListener = listener;
250246
}
251247

252248
/**
@@ -414,25 +410,57 @@ protected boolean setFrame(final int l, int t, final int r, int b) {
414410

415411
@Override
416412
public boolean onKeyUp(int keyCode, KeyEvent event) {
417-
if (keyCode != KeyEvent.KEYCODE_TAB) {
418-
boolean consumed = mPopup.onKeyUp(keyCode, event);
419-
if (consumed) {
420-
switch (keyCode) {
421-
// if the list accepts the key events and the key event
422-
// was a click, the text view gets the selected item
423-
// from the drop down as its content
424-
case KeyEvent.KEYCODE_ENTER:
425-
case KeyEvent.KEYCODE_DPAD_CENTER:
426-
if (event.hasNoModifiers()) {
427-
performCompletion();
428-
}
429-
return true;
413+
if (isPopupShowing()) {
414+
//editor support press tab to insert tab character
415+
if (keyCode != KeyEvent.KEYCODE_TAB) {
416+
if (getSelectedItemPosition() >= 0) {
417+
switch (keyCode) {
418+
// if the list accepts the key events and the key event
419+
// was a click, the text view gets the selected item
420+
// from the drop down as its content
421+
case KeyEvent.KEYCODE_ENTER:
422+
case KeyEvent.KEYCODE_DPAD_CENTER:
423+
if (event.hasNoModifiers()) {
424+
performCompletion();
425+
}
426+
return true;
427+
}
430428
}
431429
}
432430
}
433431
return super.onKeyUp(keyCode, event);
434432
}
435433

434+
private int getSelectedItemPosition() {
435+
return mPopup.getListView().getSelectedItemPosition();
436+
}
437+
438+
@Override
439+
public boolean onKeyDown(int keyCode, KeyEvent event) {
440+
if (isPopupShowing()) {
441+
if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
442+
if (getSelectedItemPosition() >= 0) {
443+
//#onKeyUp will be perform completion
444+
return true;
445+
}
446+
}
447+
448+
//editor support press tab to insert tab character
449+
if (keyCode != KeyEvent.KEYCODE_TAB && mPopup.isShowing()) {
450+
if (mPopup.onKeyDown(keyCode, event)) {
451+
return true;
452+
}
453+
}
454+
boolean handled = super.onKeyDown(keyCode, event);
455+
if (handled) {
456+
clearListSelection();
457+
}
458+
return handled;
459+
} else {
460+
return super.onKeyDown(keyCode, event);
461+
}
462+
}
463+
436464
@SuppressLint("RestrictedApi")
437465
private void performCompletion() {
438466
performCompletion(-1);
@@ -459,22 +487,6 @@ private void performCompletion(int position) {
459487
}
460488
}
461489

462-
@Override
463-
public boolean onKeyDown(int keyCode, KeyEvent event) {
464-
if (keyCode != KeyEvent.KEYCODE_TAB) {
465-
if (mPopup.onKeyDown(keyCode, event)) {
466-
return true;
467-
}
468-
}
469-
boolean handled = super.onKeyDown(keyCode, event);
470-
471-
if (handled && isPopupShowing()) {
472-
clearListSelection();
473-
}
474-
475-
return handled;
476-
}
477-
478490
/**
479491
* <p>Clear the list selection. This may only be temporary, as user input will often bring
480492
* it back.
@@ -491,4 +503,9 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
491503
setSuggestEnable(mSuggestionEnable);
492504
}
493505
}
506+
507+
@Override
508+
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
509+
performCompletion(position);
510+
}
494511
}

0 commit comments

Comments
 (0)