Skip to content

Commit 908637e

Browse files
authored
feat: show variable length keys in liquid keyboard
1 parent 652a867 commit 908637e

File tree

4 files changed

+41
-12
lines changed

4 files changed

+41
-12
lines changed

app/src/main/java/com/osfans/trime/core/Rime.java

+7
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ public int getEnd() {
7676
public static class RimeCandidate {
7777
public String text;
7878
public String comment;
79+
80+
public RimeCandidate(String text, String comment) {
81+
this.text = text;
82+
this.comment = comment;
83+
}
84+
85+
public RimeCandidate() {}
7986
}
8087

8188
/** Rime候選區,包含多個{@link RimeCandidate 候選項} */

app/src/main/java/com/osfans/trime/ime/enums/SymbolKeyboardType.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ enum class SymbolKeyboardType {
3434
SHORT,
3535

3636
// 按键长度不固定,与展开候选的样式相同;与
37-
VAR,
37+
VAR_LENGTH,
3838

3939
// 长度较长,与草稿箱、剪贴板的样式相同,使用小号字体多行展示
4040
LONG,

app/src/main/java/com/osfans/trime/ime/symbol/CandidateAdapter.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,18 @@
1515
import com.google.android.flexbox.FlexboxLayoutManager;
1616
import com.osfans.trime.R;
1717
import com.osfans.trime.core.Rime;
18-
import com.osfans.trime.data.AppPrefs;
1918
import com.osfans.trime.data.Config;
20-
import com.osfans.trime.ime.core.Trime;
2119
import com.osfans.trime.ime.enums.PositionType;
2220
import com.osfans.trime.ime.text.TextInputManager;
21+
import java.util.List;
2322

23+
// 显示长度不固定,字体大小正常的内容。用于类型 CANDIDATE, VAR_LENGTH
2424
public class CandidateAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
2525
private final Context myContext;
2626
private final TextInputManager textInputManager;
2727

2828
// 候选词
2929
private Rime.RimeCandidate[] candidates;
30-
private Trime trime;
31-
private AppPrefs prefs;
3230

3331
private int keyMarginX, keyMarginTop;
3432
private Integer textColor, textColor2, commentColor;
@@ -42,22 +40,26 @@ public class CandidateAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
4240

4341
public CandidateAdapter(Context context) {
4442
myContext = context;
45-
trime = Trime.getService();
46-
prefs = AppPrefs.defaultInstance();
4743
candidates = new Rime.RimeCandidate[0];
4844
textInputManager = TextInputManager.Companion.getInstance();
4945
comment_position = 0;
5046
}
5147

5248
public int updateCandidates() {
53-
5449
candidates = Rime.getCandidatesWithoutSwitch();
5550
if (candidates == null) {
5651
candidates = new Rime.RimeCandidate[0];
5752
}
5853
return candidates.length;
5954
}
6055

56+
public void setCandidates(List<SimpleKeyBean> list) {
57+
candidates = new Rime.RimeCandidate[list.size()];
58+
for (int i = 0; i < list.size(); i++) {
59+
candidates[i] = new Rime.RimeCandidate(list.get(i).getText(), "");
60+
}
61+
}
62+
6163
@Override
6264
public int getItemCount() {
6365
return candidates.length;

app/src/main/java/com/osfans/trime/ime/symbol/LiquidKeyboard.java

+24-4
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,14 @@ public SymbolKeyboardType select(int i) {
9797
break;
9898
case CANDIDATE:
9999
TabManager.get().select(i);
100+
initCandidateAdapter();
100101
initCandidate();
101102
break;
103+
case VAR_LENGTH:
104+
TabManager.get().select(i);
105+
initCandidateAdapter();
106+
initVarLengthKeys(i);
107+
break;
102108
case HISTORY:
103109
case TABS:
104110
TabManager.get().select(i);
@@ -336,7 +342,7 @@ public void initDraftData() {
336342
});
337343
}
338344

339-
public void initCandidate() {
345+
public void initCandidateAdapter() {
340346
keyboardView.removeAllViews();
341347
simpleAdapter = null;
342348
mClipboardAdapter = null;
@@ -354,13 +360,13 @@ public void initCandidate() {
354360
flexboxLayoutManager.setJustifyContent(JustifyContent.FLEX_START); // 交叉轴的起点对齐。
355361
keyboardView.setLayoutManager(flexboxLayoutManager);
356362

357-
draft_max_size = Config.get(context).getDraftLimit();
358-
359-
draftBeanList = DraftDao.get().getAllSimpleBean(draft_max_size);
360363
candidateAdapter.configStyle(margin_x, margin_top);
361364

362365
keyboardView.setAdapter(candidateAdapter);
363366
keyboardView.setSelected(true);
367+
}
368+
369+
public void initCandidate() {
364370
candidateAdapter.updateCandidates();
365371

366372
candidateAdapter.setOnItemClickListener(
@@ -372,6 +378,20 @@ public void initCandidate() {
372378
});
373379
}
374380

381+
public void initVarLengthKeys(int i) {
382+
simpleKeyBeans.clear();
383+
simpleKeyBeans.addAll(TabManager.get().select(i));
384+
candidateAdapter.setCandidates(simpleKeyBeans);
385+
candidateAdapter.setOnItemClickListener(
386+
(view, position) -> {
387+
InputConnection ic = Trime.getService().getCurrentInputConnection();
388+
if (ic != null) {
389+
SimpleKeyBean bean = simpleKeyBeans.get(position);
390+
ic.commitText(bean.getText(), 1);
391+
}
392+
});
393+
}
394+
375395
public void updateCandidates() {
376396
candidateAdapter.updateCandidates();
377397
candidateAdapter.notifyDataSetChanged();

0 commit comments

Comments
 (0)