osfans / trime

同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
http://osfans.github.io/trime/
GNU General Public License v3.0
3.13k stars 375 forks source link

不能自動使用與 schema ID 對應的鍵盤佈局 #1463

Closed goofyz closed 1 month ago

goofyz commented 1 month ago

摘要 / Summary

我使用的輸入法 (e.g. "my_schema") 有對應的鍵盤 ("preset_keyboards/my_schema"),但是最近版本的 trime 不懂使用此鍵盤。

查看代碼後發現: https://github.com/osfans/trime/blob/9fbfe5684420c657a8057900659d6b135d00858a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt#L102

KeyboardWindow 認 schema 的方法是使用 schemaItemCached,但 schemaItemCached 只於 Rime.handleRimeNotification() 裏設定。 若我手動切換到 "my_schema"的話,鍵盤顯示正常。但在初次啟動 trime 時, schemaItemCached 則永遠為 .default,鍵盤也會切換為 .default

若我將 KeyboardWindow 的代碼改為 currentSchema() 取代 schemaItemCached

val currentSchema = rime.run { currentSchema() }

則一切回復正常。但我不肯定會否有其他 side effect 。

重现步骤 / Steps to Reproduce

  1. 新增 my_schema 輸入法配置
  2. 新增 preset_keyboard/my_schema
  3. 在 trime 人手選擇 my_schema,確認使用正確 keyboard
  4. 重新啟動裝置 (或殺掉 trime),直接輸入文字。輸入法雖然啟動,但會使用預設的 keyboard

预期行为 / Expected Behavior

第一次啟動時使用正確的 keyboard

日志 / Log

No response

截图 / Screenshot

No response

附加信息 / Additional Context

No response

系统版本 / OS Version

14

应用版本 / App Version

3.3.1

构建信息 / Build Information

Builder: Pull Request CI Git Repo: https://github.com/osfans/trime Build Git Hash: 058d9a7f2b509441128e991c550c6056b41a0535 Build Time: Sep 5, 2024 1:35:00 PM

WhiredPlanck commented 1 month ago

基本判断正确。不过 currentSchema 这个函数应该是 suspend 的,应该不能直接用 run 获取

stfy11 commented 1 month ago

下載了最新每夜版,問題仍存在,重現步驟為force stop trime,deploy後出現的是預設keyboard,得重新選擇一次schema, 自定義keyboard才生效。