Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/src/main/java/com/osfans/trime/core/Rime.kt
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ class Rime :
override suspend fun getCandidates(
startIndex: Int,
limit: Int,
): Array<CandidateItem> = withRimeContext {
): Array<CandidateProto> = withRimeContext {
getRimeCandidates(startIndex, limit)
}

Expand Down Expand Up @@ -490,7 +490,7 @@ class Rime :
external fun getRimeCandidates(
startIndex: Int,
limit: Int,
): Array<CandidateItem>
): Array<CandidateProto>

@JvmStatic
external fun getRimeBulkCandidates(): Array<Any>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/osfans/trime/core/RimeApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,5 @@ interface RimeApi {
suspend fun getCandidates(
startIndex: Int,
limit: Int,
): Array<CandidateItem>
): Array<CandidateProto>
}
4 changes: 2 additions & 2 deletions app/src/main/java/com/osfans/trime/core/RimeMessage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ sealed class RimeMessage<T>(
data class Data(
val total: Int = -1,
val highlighted: Int = 0,
val candidates: Array<CandidateItem> = arrayOf(),
val candidates: Array<CandidateProto> = arrayOf(),
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
Expand Down Expand Up @@ -196,7 +196,7 @@ sealed class RimeMessage<T>(
CandidateListMessage.Data(
params[0] as Int,
params[1] as Int,
params[2] as Array<CandidateItem>,
params[2] as Array<CandidateProto>,
),
)
MessageType.Key ->
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/osfans/trime/core/RimeProto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ data class CommitProto(

data class CandidateProto(
val text: String,
val comment: String?,
val comment: String,
val label: String,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,3 @@ data class SchemaItem(
val id: String,
val name: String = "",
)

data class CandidateItem(
val text: String,
val comment: String = "",
)
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import android.graphics.Color
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import com.osfans.trime.core.CandidateItem
import com.osfans.trime.core.CandidateProto
import com.osfans.trime.data.theme.ColorManager
import com.osfans.trime.data.theme.FontManager
import com.osfans.trime.data.theme.Theme
Expand Down Expand Up @@ -160,7 +160,7 @@ class CandidateItemUi(

@SuppressLint("UseKtx")
fun update(
item: CandidateItem,
item: CandidateProto,
highlighted: Boolean,
) {
val tColor = if (highlighted) hlTextColor else textColor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import android.view.ViewGroup
import androidx.core.view.updateLayoutParams
import com.chad.library.adapter4.BaseQuickAdapter
import com.google.android.flexbox.FlexboxLayoutManager
import com.osfans.trime.core.CandidateItem
import com.osfans.trime.core.CandidateProto
import com.osfans.trime.data.theme.Theme
import com.osfans.trime.ime.candidates.CandidateItemUi
import com.osfans.trime.ime.candidates.CandidateViewHolder
Expand All @@ -20,7 +20,7 @@ import splitties.views.dsl.core.wrapContent

open class CompactCandidateViewAdapter(
val theme: Theme,
) : BaseQuickAdapter<CandidateItem, CandidateViewHolder>() {
) : BaseQuickAdapter<CandidateProto, CandidateViewHolder>() {
init {
setHasStableIds(true)
}
Expand All @@ -45,7 +45,7 @@ open class CompactCandidateViewAdapter(
}

fun updateCandidates(
data: Array<CandidateItem>,
data: Array<CandidateProto>,
total: Int,
highlightedIndex: Int,
) {
Expand All @@ -70,7 +70,7 @@ open class CompactCandidateViewAdapter(
override fun onBindViewHolder(
holder: CandidateViewHolder,
position: Int,
item: CandidateItem?,
item: CandidateProto?,
) {
item ?: return
val isHighlighted = position == highlightedIdx
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class LabeledCandidateItemUi(
inSpanWith(labelFg, ctx.sp(labelSize), labelFont) { append(candidate.label) }
append(" ")
inSpanWith(textFg, ctx.sp(textSize), textFont) { append(candidate.text) }
if (!candidate.comment.isNullOrBlank()) {
if (candidate.comment.isNotBlank()) {
append(" ")
inSpanWith(commentFg, ctx.sp(commentSize), commentFont) { append(candidate.comment) }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ package com.osfans.trime.ime.candidates.unrolled

import androidx.paging.PagingSource
import androidx.paging.PagingState
import com.osfans.trime.core.CandidateItem
import com.osfans.trime.core.CandidateProto
import com.osfans.trime.daemon.RimeSession
import timber.log.Timber

class CandidatesPagingSource(
val rime: RimeSession,
val total: Int,
val offset: Int,
) : PagingSource<Int, CandidateItem>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, CandidateItem> {
) : PagingSource<Int, CandidateProto>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, CandidateProto> {
// use candidate index for key, null means load from beginning (including offset)
val startIndex = params.key ?: offset
val pageSize = params.loadSize
Expand All @@ -35,5 +35,5 @@ class CandidatesPagingSource(
}

// always reload from beginning
override fun getRefreshKey(state: PagingState<Int, CandidateItem>) = null
override fun getRefreshKey(state: PagingState<Int, CandidateProto>) = null
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,25 @@ package com.osfans.trime.ime.candidates.unrolled
import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import com.osfans.trime.core.CandidateItem
import com.osfans.trime.core.CandidateProto
import com.osfans.trime.data.theme.Theme
import com.osfans.trime.ime.candidates.CandidateItemUi
import com.osfans.trime.ime.candidates.CandidateViewHolder

open class PagingCandidateViewAdapter(
val theme: Theme,
) : PagingDataAdapter<CandidateItem, CandidateViewHolder>(diffCallback) {
) : PagingDataAdapter<CandidateProto, CandidateViewHolder>(diffCallback) {
companion object {
private val diffCallback =
object : DiffUtil.ItemCallback<CandidateItem>() {
object : DiffUtil.ItemCallback<CandidateProto>() {
override fun areItemsTheSame(
oldItem: CandidateItem,
newItem: CandidateItem,
oldItem: CandidateProto,
newItem: CandidateProto,
): Boolean = oldItem === newItem

override fun areContentsTheSame(
oldItem: CandidateItem,
newItem: CandidateItem,
oldItem: CandidateProto,
newItem: CandidateProto,
): Boolean = oldItem == newItem
}
}
Expand Down
18 changes: 5 additions & 13 deletions app/src/main/jni/librime_jni/helper-types.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,6 @@ class SchemaItem {
}
};

class CandidateItem {
public:
std::string text;
std::string comment;

explicit CandidateItem(const RimeCandidate& candidate)
: text(candidate.text),
comment(candidate.comment ? candidate.comment : "") {}
};

using CandidateList = std::vector<CandidateItem>;

class CommitProto {
public:
std::optional<std::string> text;
Expand All @@ -52,8 +40,12 @@ class CommitProto {
class CandidateProto {
public:
std::string text;
std::optional<std::string> comment;
std::string comment;
std::string label;

CandidateProto() = default;
explicit CandidateProto(const RimeCandidate& c)
: text(c.text), comment(c.comment ? c.comment : "") {}
Comment thread
WhiredPlanck marked this conversation as resolved.
};

class CompositionProto {
Expand Down
8 changes: 0 additions & 8 deletions app/src/main/jni/librime_jni/jni-utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,6 @@ class GlobalRefSingleton {
jclass Rime;
jmethodID HandleRimeMessage;

jclass CandidateItem;
jmethodID CandidateItemInit;

jclass CandidateProto;
jmethodID CandidateProtoInit;

Expand Down Expand Up @@ -153,11 +150,6 @@ class GlobalRefSingleton {
HandleRimeMessage = env->GetStaticMethodID(Rime, "handleRimeMessage",
"(I[Ljava/lang/Object;)V");

CandidateItem = reinterpret_cast<jclass>(env->NewGlobalRef(
env->FindClass("com/osfans/trime/core/CandidateItem")));
CandidateItemInit = env->GetMethodID(
CandidateItem, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");

CandidateProto = reinterpret_cast<jclass>(env->NewGlobalRef(
env->FindClass("com/osfans/trime/core/CandidateProto")));
CandidateProtoInit = env->GetMethodID(
Expand Down
33 changes: 13 additions & 20 deletions app/src/main/jni/librime_jni/objconv.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,6 @@ inline std::vector<std::string> stringArrayToStringVector(JNIEnv* env,
return std::move(result);
}

inline jobject rimeCandidateItemToJObject(JNIEnv* env,
const CandidateItem& item) {
return env->NewObject(GlobalRef->CandidateItem, GlobalRef->CandidateItemInit,
*JString(env, item.text), *JString(env, item.comment));
}

inline jobjectArray rimeCandidateListToJObjectArray(
JNIEnv* env, const std::vector<CandidateItem>& list) {
jobjectArray array = env->NewObjectArray(static_cast<int>(list.size()),
GlobalRef->CandidateItem, nullptr);
int i = 0;
for (const auto& item : list) {
auto jItem = JRef(env, rimeCandidateItemToJObject(env, item));
env->SetObjectArrayElement(array, i++, jItem);
}
return array;
}

inline jobjectArray stringVectorToJStringArray(
JNIEnv* env, const std::vector<std::string>& strings) {
jobjectArray array = env->NewObjectArray(static_cast<int>(strings.size()),
Expand All @@ -79,11 +61,22 @@ inline jobject rimeCandidateToJObject(JNIEnv* env,
const CandidateProto& candidate) {
return env->NewObject(
GlobalRef->CandidateProto, GlobalRef->CandidateProtoInit,
*JString(env, candidate.text),
candidate.comment ? *JString(env, *candidate.comment) : nullptr,
*JString(env, candidate.text), *JString(env, candidate.comment),
*JString(env, candidate.label));
}

inline jobjectArray rimeCandidateListToJObjectArray(
JNIEnv* env, const std::vector<CandidateProto>& list) {
jobjectArray array = env->NewObjectArray(static_cast<int>(list.size()),
GlobalRef->CandidateProto, nullptr);
int i = 0;
for (const auto& candidate : list) {
auto obj = JRef(env, rimeCandidateToJObject(env, candidate));
env->SetObjectArrayElement(array, i++, obj);
}
return array;
}

inline jobject rimeCompositionToJObject(JNIEnv* env,
const CompositionProto& composition) {
return env->NewObject(
Expand Down
9 changes: 4 additions & 5 deletions app/src/main/jni/librime_jni/rime_jni.cc
Original file line number Diff line number Diff line change
Expand Up @@ -172,24 +172,23 @@ class Rime {
return rime->change_page(session(), backward);
}

CandidateList getCandidates(int startIndex, int limit) {
CandidateList result;
std::vector<CandidateProto> getCandidates(int startIndex, int limit) {
std::vector<CandidateProto> result;
result.reserve(limit);
RimeCandidateListIterator iter{};
if (rime->candidate_list_from_index(session(), &iter, startIndex)) {
int count = 0;
while (rime->candidate_list_next(&iter)) {
if (count >= limit) break;
const CandidateItem item(iter.candidate);
result.emplace_back(item);
result.emplace_back(iter.candidate);
++count;
}
rime->candidate_list_end(&iter);
}
return std::move(result);
}

std::tuple<int, int, CandidateList> getBulkCandidates() {
std::tuple<int, int, std::vector<CandidateProto>> getBulkCandidates() {
constexpr int limit = 16;
auto list = getCandidates(0, limit);
// use -1 to indicate it's not sure how many candidates now
Comment thread
WhiredPlanck marked this conversation as resolved.
Expand Down
Loading