Skip to content

Commit 11bd1ec

Browse files
committed
Build fcitx5 emoji module and use it in androidkeyboard
1 parent 879137a commit 11bd1ec

File tree

9 files changed

+31
-6
lines changed

9 files changed

+31
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
/app/src/main/assets/usr/share/fcitx5/chttrans
55
/app/src/main/assets/usr/share/fcitx5/data
66
/app/src/main/assets/usr/share/fcitx5/default
7+
/app/src/main/assets/usr/share/fcitx5/emoji
78
/app/src/main/assets/usr/share/fcitx5/inputmethod
89
/app/src/main/assets/usr/share/fcitx5/lua
910
/app/src/main/assets/usr/share/fcitx5/punctuation

app/src/main/cpp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ target_link_libraries(native-lib
6767

6868
add_custom_target(copy-fcitx5-modules
6969
# fcitx5
70+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PROPERTY:fcitx5::emoji,IMPORTED_LOCATION> ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
7071
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PROPERTY:fcitx5::clipboard,IMPORTED_LOCATION> ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
7172
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PROPERTY:fcitx5::imselector,IMPORTED_LOCATION> ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
7273
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PROPERTY:fcitx5::quickphrase,IMPORTED_LOCATION> ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}

app/src/main/cpp/androidkeyboard/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
add_definitions(-DFCITX_GETTEXT_DOMAIN=\"fcitx5-android\")
22

33
add_library(androidkeyboard MODULE androidkeyboard.cpp)
4-
target_link_libraries(androidkeyboard Fcitx5::Core Fcitx5::Utils Fcitx5::Module::Spell)
4+
target_link_libraries(androidkeyboard Fcitx5::Core Fcitx5::Utils Fcitx5::Module::Spell Fcitx5::Module::Emoji)
55

66
configure_file(androidkeyboard.conf.in.in androidkeyboard.conf.in @ONLY)
77
fcitx5_translate_desktop_file(${CMAKE_CURRENT_BINARY_DIR}/androidkeyboard.conf.in androidkeyboard.conf)

app/src/main/cpp/androidkeyboard/androidkeyboard.conf.in.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ Configurable=True
88

99
[Addon/OptionalDependencies]
1010
0=spell
11-
1=quickphrase
11+
1=quickphrase
12+
2=emoji

app/src/main/cpp/androidkeyboard/androidkeyboard.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <fcitx/userinterfacemanager.h>
77

88
#include "spell_public.h"
9+
#include "emoji_public.h"
910
#include "../../../../../lib/fcitx5/src/main/cpp/fcitx5/src/im/keyboard/chardata.h" // dirty but works
1011

1112
#include "androidkeyboard.h"
@@ -252,6 +253,16 @@ void AndroidKeyboardEngine::updateCandidate(const InputMethodEntry &entry, Input
252253
state->buffer_.userInput(),
253254
SpellCandidateSize);
254255
}
256+
if (config_.enableEmoji.value() && emoji()) {
257+
auto emojiResults = emoji()->call<IEmoji::query>(entry.languageCode(), state->buffer_.userInput(), true);
258+
if (!emojiResults.empty()) {
259+
// don't show emoji as 1st candidate if there are other candidates
260+
int offset = results.empty() ? 0 : 1;
261+
std::for_each(emojiResults.rbegin(), emojiResults.rend(), [&](std::string &e) {
262+
results.insert(results.begin() + offset, {e, e});
263+
});
264+
}
265+
}
255266
auto candidateList = std::make_unique<CommonCandidateList>();
256267
for (const auto &result: results) {
257268
candidateList->append<AndroidKeyboardCandidateWord>(this, Text(result.first), result.second);
@@ -329,7 +340,9 @@ void AndroidKeyboardEngine::commitBuffer(InputContext *inputContext) {
329340

330341
bool AndroidKeyboardEngine::supportHint(const std::string &language) {
331342
const bool hasSpell = spell() && spell()->call<ISpell::checkDict>(language);
332-
return hasSpell;
343+
const bool hasEmoji = *config_.enableEmoji && emoji() &&
344+
emoji()->call<IEmoji::check>(language, true);
345+
return hasSpell || hasEmoji;
333346
}
334347

335348
std::pair<std::string, size_t> AndroidKeyboardEngine::preeditWithCursor(InputContext *inputContext) {

app/src/main/cpp/androidkeyboard/androidkeyboard.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ FCITX_CONFIGURATION(
2626
AndroidKeyboardEngineConfig,
2727
Option<bool>
2828
enableWordHint{this, "EnableWordHint", _("Enable word hint"), true};
29+
Option<bool>
30+
enableEmoji{this, "EnableEmoji", _("Enable emoji in hint"), true};
2931
Option<int, IntConstrain>
3032
pageSize{this, "PageSize", _("Word hint page size"), 5, IntConstrain(3, 10)};
3133
OptionWithAnnotation<ChooseModifier, ChooseModifierI18NAnnotation>
@@ -81,7 +83,7 @@ class AndroidKeyboardEngine final : public InputMethodEngineV3 {
8183
void resetState(InputContext *inputContext, bool fromCandidate = false);
8284

8385
FCITX_ADDON_DEPENDENCY_LOADER(spell, instance_->addonManager());
84-
// FCITX_ADDON_DEPENDENCY_LOADER(emoji, instance_->addonManager());
86+
FCITX_ADDON_DEPENDENCY_LOADER(emoji, instance_->addonManager());
8587
// FCITX_ADDON_DEPENDENCY_LOADER(quickphrase, instance_->addonManager());
8688

8789
void updateCandidate(const InputMethodEntry &entry, InputContext *inputContext);

lib/fcitx5/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ android {
2020
"Fcitx5Config",
2121
"Fcitx5Utils",
2222
// fcitx5 modules
23+
"emoji",
2324
"clipboard",
2425
"imselector",
2526
"notifications",
@@ -50,6 +51,10 @@ android {
5051
headers = "$headersPrefix/Utils"
5152
}
5253
val moduleHeadersPrefix = "$headersPrefix/Module/fcitx-module"
54+
create("emoji") {
55+
libraryName = "libemoji"
56+
headers = "$moduleHeadersPrefix/emoji"
57+
}
5358
create("clipboard") {
5459
libraryName = "libclipboard"
5560
headers = "$moduleHeadersPrefix/clipboard"

lib/fcitx5/src/main/cpp/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,5 @@ option(ENABLE_SERVER "" OFF)
4545
option(ENABLE_KEYBOARD "" OFF)
4646
option(USE_SYSTEMD "" OFF)
4747
option(ENABLE_XDGAUTOSTART "" OFF)
48-
option(ENABLE_EMOJI "" OFF)
4948
option(ENABLE_LIBUUID "" OFF)
5049
add_subdirectory(fcitx5)

lib/fcitx5/src/main/cpp/cmake/FindFcitx5Module.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ set(Fcitx5Module_FOUND TRUE)
33
# prefab dependency
44
find_package(fcitx5 REQUIRED CONFIG)
55

6-
set(FCITX5_MODULE_NAMES Clipboard IMSelector Notifications QuickPhrase Spell Unicode)
6+
set(FCITX5_MODULE_NAMES Emoji Clipboard IMSelector Notifications QuickPhrase Spell Unicode)
77
foreach(Mod IN LISTS FCITX5_MODULE_NAMES)
88
string(TOLOWER "${Mod}" mod)
99
set(MOD_INTERFACE "fcitx5-module-${mod}-interface")
@@ -18,6 +18,9 @@ foreach(Mod IN LISTS FCITX5_MODULE_NAMES)
1818
endif()
1919
endforeach()
2020

21+
# fix target dependency
22+
set_target_properties(fcitx5::emoji PROPERTIES INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
23+
2124
include(FindPackageHandleStandardArgs)
2225
find_package_handle_standard_args(Fcitx5Module
2326
FOUND_VAR

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy