Change log from v3.3.11 to v3.3.12: v3.3.11...v3.3.12
- [98d74de] - chore: bump version to 3.3.12
- [29be1de] - feat: add input field for testing in
MainActivity - [db54cc9] - feat: adjust margin so keyboard won't hide content
- [f436827] - fix: loop
ContextWrapperchain to getFragmentActivitycorrectly - [3856302] - fix: start drawable to
startinstead ofleft - [9c25449] - fix: remove default tint color in vector drawable
- [71d61a0] - fix: restore
isAsciiModeafter leaving password field - [c96f50a] - refactor: polish TestInputPanel
- [f8799aa] - fix: binding keys for page turning couldn't turn candidate page continuously
- [a8c1cdb] - feat(MainActivity): synchronize animation with the software keyboard
- [32214e4] - feat(TestInputPanel): add fade-out animation for dismiss
- [9e5800c] - refactor: renew TestInputPanel background
- [fa4b60c] - fix: ensure input views aren't obscured by system UI bottom elements
- [757aad0] - refactor: avoid setting internal option via rime
- [00e13c5] - feat: allow ignoring system gesture insets
- [05d332b] - refactor: disable popup menu icon showing on Samsung OneUI
- [75ab3dd] - refactor: remove unused onRelease in keyboard action listener
- [1a0d42e] - refactor: optimize text key sequence parsing
- [f134bce] - refactor: improve KeyAction construction
- [d9d248c] - refactor: simplify KeyCode implementation
- [d4ed8f9] - fix: could not type uppercase letters in ascii mode
- [3548724] - refactor: simplify KeyCode conversions via generated mappings
- [bb7d01f] - fix(MainActivity): restore bottom margin after IME hides
- [bdd90db] - chore: update dependencies and migrate to AGP 9
- [8f65d10] - refactor: polish ToolButton implementation
- [ad48dae] - refactor: decouple ToolButton from RimeDaemon
- [ba68bf0] - fix: filter invalid key behavior tokens during keyboard parsing
- [9c7779f] - refactor: cache space key actions
- [d5adbc3] - refactor: derive clickability from key behaviors
- [40762bd] - refactor: don't bold toolbar labels by default
- [dfd4ca4] - refactor: merge Rime JNI queries to reduce boundary crossings
- [148ff93] - fix: clear stale input bar candidates on paging mode switch
- [0c26be8] - refactor: migrate key symbol/hint visibility to app prefs
- [824413a] - feat: recreate input view when keyboard press area setting changes
- [75ae385] - feat: add vertical reverse layout for paged candidates
- [8e01da8] - feat: wrap long candidate text in paged candidate items
- [a4751b0] - perf: query the candidate layout with the response
- [2a79963] - fix: uppercase key actions commit lowercase in ascii mode
- [c7f6ad4] - refactor: do not open unrolled candidate window when highlight move on
- [f144408] - fix: avoid oversized navigation bar inset (#2087)
- [231bd05] - feat: add strings for SAF storage and setup flow
- [c5589ab] - refactor: keep Rime user data under app-scoped storage
- [5ae2554] - refactor: extract DeployNotification for shared progress UI
- [7cbbd9f] - feat: add SAF tree walker and sync index
- [f2a3e4a] - feat: import and export Rime data via SAF
- [bef17a3] - refactor: remove external storage permissions
- [8443bf3] - feat: import from SAF before deploy and await deploy completion
- [f8d7c1a] - feat: export to SAF after background user-data sync
- [934cd7d] - feat: replace storage permission step with SAF folder selection
- [81ce045] - feat: manage SAF data path and storage mode in profile
- [bfa2217] - feat: sync theme and schema config with external SAF tree
- [db13f2d] - feat: skip "userdb" directory too during import
- [15663c2] - feat: serialize local directory creation during import
- [d329cef] - feat: import via temp file then atomic replace
- [9440d5c] - feat: export via temp SAF document then replace
- [c0185e6] - feat: one-time import of userdb on first migration
- [52592a9] - refactor: remove "reset data path" preference
- [c8caa22] - refactor: simplify picker intent logic
- [18759a0] - feat: show full directory path on "User Directory"
- [bbaf057] - refactor: refer to
installation.yamlin DataManager - [257fda3] - chore: spotlessApply
- [47be6f2] - fix: clear the SAF tree after a failed setup import
- [7188813] - fix: bind the sync index to the selected tree URI
- [b41b442] - fix: export after every Rime user-data sync
- [7c8a04e] - fix: use unique SAF temp and backup names
- [b0c7aac] - fix: stage local copies in unique files and keep the old dest
- [484a0fe] - fix: ui logic for storage mode change
- [a62f1a1] - refactor: refactor RimeLifecycle with StateFlow
- [7222121] - refactor: remove public MutableLiveData in steup UI
- [623c605] - fix(ui): prevent the close button of the clipboard prompt from automatically gaining focus
- [bf8869a] - fix(ui): prevent candidate words in the candidate bar from automatically gaining focus
- [b5125a5] - fix(ui): prevent the sides and bottom of the keyboard area from automatically gaining focus
- [4c63b2c] - fix(window): after switching the theme color scheme, the position of the candidate window is not set correctly
- [088136f] - fix(theme): check and set initialization before accessing _activeTheme
- [4d8a2af] - fix(ui): in some apps, the clipboard popupMenu and keyboard stealing focus lead to high-frequency flickering
- [942a750] - fix(ui): in some apps, the candidate popupMenu and keyboard stealing focus lead to high-frequency flickering
- [99f2303] - fix(keyboard): the keyboard can utilize the maximum available width when in landscape mode
- [679c734] - fix(keyboard): the font icon with the prefix "ic@" should not be controlled by "keyLongTextSize"
- [b6cb84a] - fix(ui): the issue of abnormal coloring of the entry icon for test input
- [93fbf9f] - feat(ui): restore the preedit UI root padding of #1933 and add top_start_radius
- [4748cb3] - feat(theme): complete state color params for key_border_color and key_symbol_color
- [b04e576] - ci: upgrade openjdk to 25
- [077a804] - ci: update github action
- [a9adebc] - fix(ui): the abnormal color of the "More" button on the user dictionary page
- [7b194c3] - fix(window): the issue where the container exceeds the screen when the content of the candidate window is too much
- [803e8d8] - fix(toolbar): clipboard content overflow when candidate_view_height is set to a certain threshold
- [00826ee] - ci: upgrade runner image to ubuntu-26.04
- [2d78c49] - chore: format with clang-format
- [49f353e] - chore: echo clang-format version
- [eec0626] - ci: move up code style lint step
- [c35a72f] - feat: make system to ask user to keep data on uninstall
- [ee0008c] - refactor: polish setup page creation
- [4a9d18f] - refactor: refine popup candidate window positioning
- [4ca2021] - fix(key): unify per-key color fallback for functional keys
- [3c7b7ee] - feat: import the external tree before user-data sync
- [e09ac71] - chore: add 3.3.12 changelog