Skip to content

Commit 8f47dab

Browse files
committed
Improve calculate position of popup suggestion
1 parent e7d3fa6 commit 8f47dab

File tree

8 files changed

+99
-161
lines changed

8 files changed

+99
-161
lines changed

.idea/misc.xml

Lines changed: 0 additions & 75 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/duy/ccppcompiler/ide/editor/CppIdeActivity.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import android.view.Menu;
2626
import android.view.MenuItem;
2727
import android.view.SubMenu;
28-
import android.widget.EditText;
2928
import android.widget.Toast;
3029

3130
import com.duy.ccppcompiler.R;
@@ -61,6 +60,7 @@
6160
import com.duy.ide.editor.EditorDelegate;
6261
import com.duy.ide.editor.IEditorDelegate;
6362
import com.duy.ide.editor.internal.suggestion.DefaultSuggestItem;
63+
import com.duy.ide.editor.internal.suggestion.Editor;
6464
import com.jecelyin.common.utils.UIUtils;
6565
import com.jecelyin.editor.v2.Preferences;
6666
import com.jecelyin.editor.v2.widget.menu.MenuDef;
@@ -137,13 +137,17 @@ public void onEditorViewCreated(@NonNull IEditorDelegate editorDelegate) {
137137

138138
editorDelegate.setSuggestionProvider(new SuggestionProvider() {
139139
@Override
140-
public ArrayList<SuggestItem> getSuggestions(EditText editor) {
140+
public ArrayList<SuggestItem> getSuggestions(Editor editor) {
141+
try {
142+
Thread.sleep(100);
143+
} catch (InterruptedException e) {
144+
e.printStackTrace();
145+
}
141146
ArrayList<SuggestItem> items = new ArrayList<>();
142-
items.add(new DefaultSuggestItem("Hello", "Desc", "dd", "s", 0));
143-
items.add(new DefaultSuggestItem("Hello", "Desc", "dd", "s", 0));
144-
items.add(new DefaultSuggestItem("Hello", "Desc", "dd", "s", 0));
145-
items.add(new DefaultSuggestItem("Hello", "Desc", "dd", "s", 0));
146-
items.add(new DefaultSuggestItem("Hello", "Desc", "dd", "s", 0));
147+
int size = (int) (Math.random() * 10);
148+
for (int i = 0; i <= size; i++) {
149+
items.add(new DefaultSuggestItem("toString", "", "int", "s", 0));
150+
}
147151
return items;
148152
}
149153
});
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.duy.ide.code.api;
22

3-
import android.widget.EditText;
3+
import com.duy.ide.editor.internal.suggestion.Editor;
44

55
import java.util.ArrayList;
66

77
public interface SuggestionProvider {
8-
ArrayList<SuggestItem> getSuggestions(EditText editor);
8+
ArrayList<SuggestItem> getSuggestions(Editor editor);
99
}

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import android.content.res.TypedArray;
2323
import android.graphics.Color;
2424
import android.os.Bundle;
25+
import android.os.Handler;
2526
import android.os.Parcel;
2627
import android.os.Parcelable;
2728
import android.support.annotation.MainThread;
@@ -71,15 +72,14 @@
7172
public class EditorDelegate implements TextWatcher, IEditorDelegate {
7273
public final static String KEY_CLUSTER = "is_cluster";
7374
private static final String TAG = "EditorDelegate";
75+
private final Handler mHandler = new Handler();
7476
private Context mContext;
7577
private Document mDocument;
7678
@NonNull
7779
private SavedState savedState;
78-
7980
private int mOrientation;
8081
private boolean loaded = true;
8182
private int findResultsKeywordColor;
82-
8383
@Nullable
8484
private IEditAreaView mEditText;
8585
@Nullable
@@ -88,6 +88,12 @@ public class EditorDelegate implements TextWatcher, IEditorDelegate {
8888
private SuggestionProvider mSuggestionProvider;
8989
@Nullable
9090
private GenerateSuggestDataTask mGenerateSuggestDataTask;
91+
private final Runnable mGetSuggestion = new Runnable() {
92+
@Override
93+
public void run() {
94+
performGetSuggestion();
95+
}
96+
};
9197

9298
EditorDelegate(@NonNull SavedState ss) {
9399
savedState = ss;
@@ -194,6 +200,10 @@ public void onCreate(IEditAreaView editorView) {
194200
}
195201

196202
public void onDestroy() {
203+
if (mGenerateSuggestDataTask != null) {
204+
mGenerateSuggestDataTask.cancel(true);
205+
}
206+
197207
if (isChanged() && Preferences.getInstance(getContext()).isAutoSave()) {
198208
saveInBackground();
199209
}
@@ -423,7 +433,6 @@ public void doCommand(Command command) {
423433
}
424434
}
425435

426-
427436
/**
428437
* Format current source
429438
*/
@@ -531,11 +540,17 @@ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
531540
@Override
532541
public void onTextChanged(CharSequence s, int start, int before, int count) {
533542
//now auto complete working
543+
mHandler.removeCallbacks(mGetSuggestion);
544+
mHandler.postDelayed(mGetSuggestion, 100);
545+
}
546+
547+
private void performGetSuggestion() {
534548
if (mSuggestionProvider != null && mEditText != null) {
535549
if (mGenerateSuggestDataTask != null) {
536550
mGenerateSuggestDataTask.cancel(true);
537551
}
538-
mGenerateSuggestDataTask = new GenerateSuggestDataTask((SuggestionEditor) mEditText,
552+
mGenerateSuggestDataTask = new GenerateSuggestDataTask(
553+
(SuggestionEditor) mEditText,
539554
mSuggestionProvider);
540555
mGenerateSuggestDataTask.execute();
541556
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.duy.ide.editor.internal.suggestion;
2+
3+
public class Editor {
4+
private String text;
5+
private int cursor;
6+
7+
public Editor(String text, int cursor) {
8+
this.text = text;
9+
this.cursor = cursor;
10+
}
11+
}

lib-n-ide/src/main/java/com/duy/ide/editor/internal/suggestion/GenerateSuggestDataTask.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class GenerateSuggestDataTask extends AsyncTask<Void, Void, ArrayList<Sug
1414
private static final String TAG = "GenerateSuggestDataTask";
1515
private SuggestionEditor mEditor;
1616
private SuggestionProvider mSuggestionProvider;
17+
private Editor mContent;
1718

1819
public GenerateSuggestDataTask(@NonNull SuggestionEditor editor,
1920
@NonNull SuggestionProvider provider) {
@@ -24,12 +25,15 @@ public GenerateSuggestDataTask(@NonNull SuggestionEditor editor,
2425
@Override
2526
protected void onPreExecute() {
2627
super.onPreExecute();
28+
String content = mEditor.getText().toString();
29+
int selectionStart = mEditor.getSelectionStart();
30+
mContent = new Editor(content, selectionStart);
2731
}
2832

2933
@Override
3034
protected ArrayList<SuggestItem> doInBackground(Void... params) {
3135
try {
32-
return mSuggestionProvider.getSuggestions(mEditor);
36+
return mSuggestionProvider.getSuggestions(mContent);
3337
} catch (Exception e) {
3438
e.printStackTrace();
3539
}

0 commit comments

Comments
 (0)