<feed xmlns='http://www.w3.org/2005/Atom'>
<title>unexpected-keyboard/AndroidManifest.xml, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/'/>
<entry>
<title>Spell checking (#1137)</title>
<updated>2026-02-01T23:20:00+00:00</updated>
<author>
<name>Jules Aguillon</name>
</author>
<published>2026-02-01T23:20:00+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=77c4a27c4c37b3620defcab94ffd1b2f536c88cb'/>
<id>77c4a27c4c37b3620defcab94ffd1b2f536c88cb</id>
<content type='text'>
This adds dictionary-based spell checking to the keyboard. The keyboard looks at the word being typed and matches it against a dictionary to either complete the rest of the word or find alternative spellings.

The core of this feature is implemented in cdict, which is included as a
submodule in vendor/cidct.

Cdict is developped at https://github.com/Julow/cdict
The dictionaries are hosted at https://github.com/Julow/Unexpected-Keyboard-dictionaries/
The wordlists used to build the dictionaries are the same ones used by
HeliBoard from https://codeberg.org/Helium314/aosp-dictionaries

- Add an activity accessible from the launcher app that lists available
  dictionaries with a download button.
  The DictionaryListView view shows the list of available dictionaries and
  handles downloading and installing them.

- The Dictionaries class manages installed dictionaries. Dictionaries are
  installed as individual files into the app's private directory.

- Available dictionaries are listed in dictionaries.xml, which is generated
  when building Unexpected-Keyboard-dictionaries.
  method.xml mentions the dictionary name for each locales.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This adds dictionary-based spell checking to the keyboard. The keyboard looks at the word being typed and matches it against a dictionary to either complete the rest of the word or find alternative spellings.

The core of this feature is implemented in cdict, which is included as a
submodule in vendor/cidct.

Cdict is developped at https://github.com/Julow/cdict
The dictionaries are hosted at https://github.com/Julow/Unexpected-Keyboard-dictionaries/
The wordlists used to build the dictionaries are the same ones used by
HeliBoard from https://codeberg.org/Helium314/aosp-dictionaries

- Add an activity accessible from the launcher app that lists available
  dictionaries with a download button.
  The DictionaryListView view shows the list of available dictionaries and
  handles downloading and installing them.

- The Dictionaries class manages installed dictionaries. Dictionaries are
  installed as individual files into the app's private directory.

- Available dictionaries are listed in dictionaries.xml, which is generated
  when building Unexpected-Keyboard-dictionaries.
  method.xml mentions the dictionary name for each locales.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix various linting issues (#1146)</title>
<updated>2025-12-22T00:27:07+00:00</updated>
<author>
<name>Jules Aguillon</name>
</author>
<published>2025-12-22T00:27:07+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=b40be68773939d3d3b55a819cdfe1d9e9a60bc4e'/>
<id>b40be68773939d3d3b55a819cdfe1d9e9a60bc4e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>strings: Shorter name for the settings activity</title>
<updated>2025-04-14T20:39:42+00:00</updated>
<author>
<name>Jules Aguillon</name>
</author>
<published>2025-04-14T20:39:42+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=70fb1e8fc1069d072c59fc7db40d497bbd5ec324'/>
<id>70fb1e8fc1069d072c59fc7db40d497bbd5ec324</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Proper support for Android 15 edge-to-edge (#848)</title>
<updated>2024-12-26T17:29:19+00:00</updated>
<author>
<name>Jules Aguillon</name>
</author>
<published>2024-12-26T17:29:19+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=370f921bc367613164d93dc1ddbd28c57042e0a7'/>
<id>370f921bc367613164d93dc1ddbd28c57042e0a7</id>
<content type='text'>
The keyboard background now extends under the system bars and display
cutout on Android 15 but the keys do not.

The back and IME switching buttons that appear in the navigation bar require
special care to not overlap with the keyboard.

The launcher and settings activity are also fixed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The keyboard background now extends under the system bars and display
cutout on Android 15 but the keys do not.

The back and IME switching buttons that appear in the navigation bar require
special care to not overlap with the keyboard.

The launcher and settings activity are also fixed.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix various linter warnings</title>
<updated>2024-02-10T17:10:49+00:00</updated>
<author>
<name>Jules Aguillon</name>
</author>
<published>2024-02-10T17:03:09+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=f4d88cc0876ec29ff46dbda0159168ebee637afb'/>
<id>f4d88cc0876ec29ff46dbda0159168ebee637afb</id>
<content type='text'>
Among others:
- Use `apply` instead of `commit` when saving shared preferences.
- Avoid inlined Api
- Remove unused resources
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Among others:
- Use `apply` instead of `commit` when saving shared preferences.
- Avoid inlined Api
- Remove unused resources
</pre>
</div>
</content>
</entry>
<entry>
<title>Light and dark themes for the launcher and settings</title>
<updated>2024-01-20T21:37:51+00:00</updated>
<author>
<name>RetrogisusDEV</name>
</author>
<published>2024-01-17T13:18:10+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=a55506e6072aec69aaf5f380c42256ca108e139d'/>
<id>a55506e6072aec69aaf5f380c42256ca108e139d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add &lt;queries&gt; element for detecting IMEs (#526)</title>
<updated>2024-01-18T22:42:29+00:00</updated>
<author>
<name>abb128</name>
</author>
<published>2024-01-18T22:42:29+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=b3dcd61c2872085a790b5b063a3ec6d73f75e888'/>
<id>b3dcd61c2872085a790b5b063a3ec6d73f75e888</id>
<content type='text'>
To detect voice IMEs, Unexpected Keyboard calls InputMethodManager.getEnabledInputMethodList

Internally, this method eventually calls a method that returns a filtered list of packages that may not include the installed voice IME, and thus Unexpected Keyboard unexpectedly claims no voice input is installed because it can't see it.

The fix is to explicitly state in the manifest that we want to query for other IMEs, based on https://developer.android.com/training/package-visibility/declaring

This is not an issue with Google's voice input or other preinstalled voice inputs because they usually have android:forceQueryable=true, but this is an issue with third-party voice inputs such as FUTO Voice Input. Launching the voice input app after activating the keyboard also usually makes the package visible, so a consistent way to replicate this issue on modern Android is to reboot the device and try triggering voice input from the keyboard</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
To detect voice IMEs, Unexpected Keyboard calls InputMethodManager.getEnabledInputMethodList

Internally, this method eventually calls a method that returns a filtered list of packages that may not include the installed voice IME, and thus Unexpected Keyboard unexpectedly claims no voice input is installed because it can't see it.

The fix is to explicitly state in the manifest that we want to query for other IMEs, based on https://developer.android.com/training/package-visibility/declaring

This is not an issue with Google's voice input or other preinstalled voice inputs because they usually have android:forceQueryable=true, but this is an issue with third-party voice inputs such as FUTO Voice Input. Launching the voice input app after activating the keyboard also usually makes the package visible, so a consistent way to replicate this issue on modern Android is to reboot the device and try triggering voice input from the keyboard</pre>
</div>
</content>
</entry>
<entry>
<title>Release 1.25.0 (37)</title>
<updated>2024-01-03T00:07:22+00:00</updated>
<author>
<name>Jules Aguillon</name>
</author>
<published>2024-01-02T23:52:26+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=8b2c7d93371b3d14993a34aaf1d98de3fb8f812c'/>
<id>8b2c7d93371b3d14993a34aaf1d98de3fb8f812c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use Gradle (#452)</title>
<updated>2023-11-25T19:11:12+00:00</updated>
<author>
<name>deftkHD</name>
</author>
<published>2023-11-25T19:11:12+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=684d5c7b70536d7a36d80da659821a2e60d81841'/>
<id>684d5c7b70536d7a36d80da659821a2e60d81841</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Adaptive launcher icon</title>
<updated>2023-11-06T19:52:35+00:00</updated>
<author>
<name>RetrogisusDEV</name>
</author>
<published>2023-11-05T01:31:59+00:00</published>
<link rel='alternate' type='text/html' href='https://ps.run/git/unexpected-keyboard/commit/?id=73060bfc0059e2238897fb29ff9b24a53c5fa3fc'/>
<id>73060bfc0059e2238897fb29ff9b24a53c5fa3fc</id>
<content type='text'>
Existing icons are kept for API &lt; 26.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Existing icons are kept for API &lt; 26.
</pre>
</div>
</content>
</entry>
</feed>
