Compare commits

..

3 Commits

Author SHA1 Message Date
Jules Aguillon
757dff4583 Fix high keyboard height making it overflows
The calculation for the size of each rows now avoid making the keyboard
bigger than the screen if the Keyboard Height option is unusually high.

The height calculation with the default settings is changed slightly, it
is now assuming that a layout is 3.95 rows high instead of 4. This is
because the bottom row is usually 0.95% the size of other rows.
2025-05-30 00:08:59 +02:00
Jules Aguillon
8d69be7f23 Fix label size when the keyboard is unusually high
The label size is computed relatively to the width of the keyboard when
the height is larger than 3/2 of the width. This ensures that the labels
have a reasonable size when the keyboard height increases.
2025-05-29 23:41:21 +02:00
Jules Aguillon
3f8a0ffe1e Settings: Remove the upper limit in keyboard height
This can be used on phones that have several screens.
2025-05-29 17:46:01 +02:00
42 changed files with 205 additions and 401 deletions

View File

@@ -7,7 +7,6 @@ arab_pc_hindu: Layout includes some ASCII punctuation but not all, missing: !, '
arab_pc_ir: Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, } arab_pc_ir: Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, }
beng_national: Layout includes some ASCII punctuation but not all, missing: $ beng_national: Layout includes some ASCII punctuation but not all, missing: $
beng_provat: Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, } beng_provat: Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, }
cyrl_lynyertdz_mk: Layout includes some ASCII punctuation but not all, missing: "
cyrl_yaverti: Layout includes some ASCII punctuation but not all, missing: ~ cyrl_yaverti: Layout includes some ASCII punctuation but not all, missing: ~
cyrl_yxukeng_os: Layout includes some ASCII punctuation but not all, missing: ", #, $, &, ', @, [, ], ~ cyrl_yxukeng_os: Layout includes some ASCII punctuation but not all, missing: ", #, $, &, ', @, [, ], ~
deva_alt: Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), *, +, ., /, :, <, =, >, [, \, ], ^, _, `, {, |, }, ~ deva_alt: Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), *, +, ., /, :, <, =, >, [, \, ], ^, _, `, {, |, }, ~

View File

@@ -52,11 +52,9 @@ The `<keyboard>`...`</keyboard>` pair follows the declaration tag and encloses t
* `locale_extra_keys`: Whether Unexpected should add language-dependent extra keys from [method.xml](../res/xml/method.xml) to this layout. It accepts `true` or `false`, and defaults to `true`. To disable these automatic additions, specify `locale_extra_keys="false"`. * `locale_extra_keys`: Whether Unexpected should add language-dependent extra keys from [method.xml](../res/xml/method.xml) to this layout. It accepts `true` or `false`, and defaults to `true`. To disable these automatic additions, specify `locale_extra_keys="false"`.
## Row ## Row
The `<row>`...`</row>` pair encloses one row on the keyboard. It has the following optional property: The `<row>`...`</row>` pair encloses one row on the keyboard. It has only one optional property:
* `height`: The height of the row: a positive floating-point value. * `height`: The height of the row: a positive floating-point value.
* `scale`: A positive floating-point value. If present, scale the width of each key so that the total is equal to the specified value, in key width unit.
A row's default height is 1.0 (one quarter of the keyboard height specified on the Settings menu). The `height` property makes the row taller or shorter than this. For example, if you define a 5-row keyboard but one row has `height="0.7"`, then the keyboard's total height is 4.7 units. If the total is different from 4.0, the keyboard will be taller or shorter than that specified in Settings. A row's default height is 1.0 (one quarter of the keyboard height specified on the Settings menu). The `height` property makes the row taller or shorter than this. For example, if you define a 5-row keyboard but one row has `height="0.7"`, then the keyboard's total height is 4.7 units. If the total is different from 4.0, the keyboard will be taller or shorter than that specified in Settings.
## Key ## Key

View File

@@ -1,91 +0,0 @@
{
"version": "v1.0.0",
"entity": {
"type": "individual",
"role": "owner",
"name": "Julow",
"email": "jules@j3s.fr",
"description": "Open source developer and maintainer of Unexpected Keyboard.",
"webpageUrl": {
"url": "https://github.com/Julow"
}
},
"projects": [
{
"guid": "unexpected-keyboard",
"name": "Unexpected Keyboard",
"description": "Lightweight and privacy-conscious virtual keyboard for Android.",
"webpageUrl": {
"url": "https://github.com/Julow/Unexpected-Keyboard/"
},
"repositoryUrl": {
"url": "https://github.com/Julow/Unexpected-Keyboard/"
},
"licenses": [
"spdx:GPL-3.0",
"spdx:CC0-1.0"
],
"tags": [
"android",
"mobile",
"privacy",
"productivity",
"programming",
"user-experience"
]
}
],
"funding": {
"channels": [
{
"guid": "liberapay",
"type": "other",
"address": "https://liberapay.com/Julow/",
"description": "Recurring donations for funding Unexpected Keyboard."
},
{
"guid": "github-sponsors",
"type": "other",
"address": "https://github.com/sponsors/Julow",
"description": "Recurring donations for funding Unexpected Keyboard."
},
{
"guid": "paypal",
"type": "other",
"address": "https://paypal.me/JulesAguillon",
"description": "One-time donations for funding Unexpected-keyboard."
}
],
"plans": [
{
"guid": "fund-maintenance",
"status": "active",
"name": "Fund developer time",
"description": "Help the maintainers spend time on Unexpected Keyboard",
"amount": 0,
"currency": "EUR",
"frequency": "monthly",
"channels": [
"liberapay",
"github-sponsors",
"paypal"
]
},
{
"guid": "one-time-contribution",
"status": "active",
"name": "Fund developer time",
"description": "Help the maintainers spend time on Unexpected Keyboard",
"amount": 0,
"currency": "EUR",
"frequency": "one-time",
"channels": [
"liberapay",
"github-sponsors",
"paypal"
]
}
],
"history": []
}
}

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Jak bude klávesa pro přepnutí klávesnice reagovat</string> <string name="pref_switch_input_immediate_summary">Jak bude klávesa pro přepnutí klávesnice reagovat</string>
<string name="pref_vibrate_custom">Vlastní vibrace</string> <string name="pref_vibrate_custom">Vlastní vibrace</string>
<string name="pref_vibrate_duration_title">Síla vibrace</string> <string name="pref_vibrate_duration_title">Síla vibrace</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Rozvržení zadávání PIN kódu</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Automaticky při psaní čísel, datumů a telefonních čísel</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Styl</string> <string name="pref_category_style">Styl</string>
<string name="pref_margin_bottom_title">Spodní odsazení</string> <string name="pref_margin_bottom_title">Spodní odsazení</string>
<string name="pref_keyboard_height_title">Výška klávesnice</string> <string name="pref_keyboard_height_title">Výška klávesnice</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Verhalten der Tastaturumschalttaste</string> <string name="pref_switch_input_immediate_summary">Verhalten der Tastaturumschalttaste</string>
<string name="pref_vibrate_custom">Benutzerdefinierte Vibration</string> <string name="pref_vibrate_custom">Benutzerdefinierte Vibration</string>
<string name="pref_vibrate_duration_title">Vibrationsstärke</string> <string name="pref_vibrate_duration_title">Vibrationsstärke</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">PIN-Eingabe-Layout</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Für die Nummern-, Datums- und Telefonnummern-Eingabe</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Design</string> <string name="pref_category_style">Design</string>
<string name="pref_margin_bottom_title">Unterer Abstand</string> <string name="pref_margin_bottom_title">Unterer Abstand</string>
<string name="pref_keyboard_height_title">Höhe der Tastatur</string> <string name="pref_keyboard_height_title">Höhe der Tastatur</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Comportamiento de la tecla para cambiar diseño</string> <string name="pref_switch_input_immediate_summary">Comportamiento de la tecla para cambiar diseño</string>
<string name="pref_vibrate_custom">Vibración personalizada</string> <string name="pref_vibrate_custom">Vibración personalizada</string>
<string name="pref_vibrate_duration_title">Intensidad de vibración</string> <string name="pref_vibrate_duration_title">Intensidad de vibración</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Diseño de introducción de PIN</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Para escribir cifras, fechas y números telefónicos</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Estilo</string> <string name="pref_category_style">Estilo</string>
<string name="pref_margin_bottom_title">Margen inferior</string> <string name="pref_margin_bottom_title">Margen inferior</string>
<string name="pref_keyboard_height_title">Altura del teclado</string> <string name="pref_keyboard_height_title">Altura del teclado</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">رفتار کلید تغییردهنده صفحه کلید</string> <string name="pref_switch_input_immediate_summary">رفتار کلید تغییردهنده صفحه کلید</string>
<!-- <string name="pref_vibrate_custom">Custom vibration</string> --> <!-- <string name="pref_vibrate_custom">Custom vibration</string> -->
<!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> --> <!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> -->
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">سبک</string> <string name="pref_category_style">سبک</string>
<string name="pref_margin_bottom_title">حاشیه پایین</string> <string name="pref_margin_bottom_title">حاشیه پایین</string>
<string name="pref_keyboard_height_title">ارتفاع صفحه کلید</string> <string name="pref_keyboard_height_title">ارتفاع صفحه کلید</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string> <string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string>
<string name="pref_vibrate_custom">Vibrations personnalisées</string> <string name="pref_vibrate_custom">Vibrations personnalisées</string>
<string name="pref_vibrate_duration_title">Intensité des vibrations</string> <string name="pref_vibrate_duration_title">Intensité des vibrations</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Clavier PIN</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Lors de la saisie de nombres, de dates et de numéros de téléphone</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Style</string> <string name="pref_category_style">Style</string>
<string name="pref_margin_bottom_title">Marge du bas</string> <string name="pref_margin_bottom_title">Marge du bas</string>
<string name="pref_keyboard_height_title">Hauteur du clavier</string> <string name="pref_keyboard_height_title">Hauteur du clavier</string>

View File

@@ -49,10 +49,8 @@
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<!-- <string name="pref_vibrate_custom">Custom vibration</string> --> <!-- <string name="pref_vibrate_custom">Custom vibration</string> -->
<!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> --> <!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> -->
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Stile</string> <string name="pref_category_style">Stile</string>
<string name="pref_margin_bottom_title">Margine inferiore</string> <string name="pref_margin_bottom_title">Margine inferiore</string>
<string name="pref_keyboard_height_title">Altezza tastiera</string> <string name="pref_keyboard_height_title">Altezza tastiera</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">キーボード切替キーの挙動</string> <string name="pref_switch_input_immediate_summary">キーボード切替キーの挙動</string>
<string name="pref_vibrate_custom">キーボード独自の振動設定</string> <string name="pref_vibrate_custom">キーボード独自の振動設定</string>
<string name="pref_vibrate_duration_title">振動の時間</string> <string name="pref_vibrate_duration_title">振動の時間</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">PIN入力</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">数字・日付・電話番号入力時</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">表示</string> <string name="pref_category_style">表示</string>
<string name="pref_margin_bottom_title">下の余白</string> <string name="pref_margin_bottom_title">下の余白</string>
<string name="pref_keyboard_height_title">キーボードの高さ</string> <string name="pref_keyboard_height_title">キーボードの高さ</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">키보드 전환 키의 동작 방식입니다.</string> <string name="pref_switch_input_immediate_summary">키보드 전환 키의 동작 방식입니다.</string>
<string name="pref_vibrate_custom">사용자 정의 진동</string> <string name="pref_vibrate_custom">사용자 정의 진동</string>
<string name="pref_vibrate_duration_title">진동 강도</string> <string name="pref_vibrate_duration_title">진동 강도</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Pin 입력 레이아웃</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">숫자를 입력할 때, 날짜와 전화번호를 입력할 때 해당 레이아웃이 사용됩니다.</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">스타일</string> <string name="pref_category_style">스타일</string>
<string name="pref_margin_bottom_title">아래 넓이</string> <string name="pref_margin_bottom_title">아래 넓이</string>
<string name="pref_keyboard_height_title">키보드 높이</string> <string name="pref_keyboard_height_title">키보드 높이</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Tastatūras pārslēgšanas taustiņa uzvedība</string> <string name="pref_switch_input_immediate_summary">Tastatūras pārslēgšanas taustiņa uzvedība</string>
<string name="pref_vibrate_custom">Pielāgota trīcēšana</string> <string name="pref_vibrate_custom">Pielāgota trīcēšana</string>
<string name="pref_vibrate_duration_title">Trīcēšanas stiprums</string> <string name="pref_vibrate_duration_title">Trīcēšanas stiprums</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Piespraust ievadīšanas izkārtojumu</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Kad ievada skaitļus, datumus un tālruņa numurus</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Izskata pielāgojumi</string> <string name="pref_category_style">Izskata pielāgojumi</string>
<string name="pref_margin_bottom_title">Apakšējā apmale</string> <string name="pref_margin_bottom_title">Apakšējā apmale</string>
<string name="pref_keyboard_height_title">Tastatūras augstums</string> <string name="pref_keyboard_height_title">Tastatūras augstums</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Działanie klawisza przełączającego klawiaturę</string> <string name="pref_switch_input_immediate_summary">Działanie klawisza przełączającego klawiaturę</string>
<string name="pref_vibrate_custom">Własna wibracja</string> <string name="pref_vibrate_custom">Własna wibracja</string>
<string name="pref_vibrate_duration_title">Intensywność wibracji</string> <string name="pref_vibrate_duration_title">Intensywność wibracji</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Układ klawiatury PIN</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Podczas wpisywania liczb, dat i numerów telefonu</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Styl</string> <string name="pref_category_style">Styl</string>
<string name="pref_margin_bottom_title">Margines dolny</string> <string name="pref_margin_bottom_title">Margines dolny</string>
<string name="pref_keyboard_height_title">Wysokość klawiatury</string> <string name="pref_keyboard_height_title">Wysokość klawiatury</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Comportamento da tecla de troca de teclado</string> <string name="pref_switch_input_immediate_summary">Comportamento da tecla de troca de teclado</string>
<string name="pref_vibrate_custom">Vibração personalizada</string> <string name="pref_vibrate_custom">Vibração personalizada</string>
<string name="pref_vibrate_duration_title">Intensidade da vibração</string> <string name="pref_vibrate_duration_title">Intensidade da vibração</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Layout PIN</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Quando digitando números, datas ou números de telefone</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Estilo</string> <string name="pref_category_style">Estilo</string>
<string name="pref_margin_bottom_title">Margem inferior</string> <string name="pref_margin_bottom_title">Margem inferior</string>
<string name="pref_keyboard_height_title">Altura do teclado</string> <string name="pref_keyboard_height_title">Altura do teclado</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Comportamentul tastei pentru schimbarea tastaturii</string> <string name="pref_switch_input_immediate_summary">Comportamentul tastei pentru schimbarea tastaturii</string>
<!-- <string name="pref_vibrate_custom">Custom vibration</string> --> <!-- <string name="pref_vibrate_custom">Custom vibration</string> -->
<!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> --> <!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> -->
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Stil</string> <string name="pref_category_style">Stil</string>
<string name="pref_margin_bottom_title">Marginea de jos</string> <string name="pref_margin_bottom_title">Marginea de jos</string>
<string name="pref_keyboard_height_title">Înălțimea tastaturii</string> <string name="pref_keyboard_height_title">Înălțimea tastaturii</string>

View File

@@ -5,9 +5,9 @@
<string name="short_description">Легкая клавиатура для пользователей, заботящихся о конфиденциальности.</string> <string name="short_description">Легкая клавиатура для пользователей, заботящихся о конфиденциальности.</string>
<string name="store_description">Главная особенность клавиатуры — это возможность легко напечатать любой ASCII-символ жестами в углы клавиш.\n\nПриложение изначально было разработано для использования с Termux.\nНа данный момент оно также удобно в повседневном использовании.\n\nПриложение не содержит рекламы, не осуществляет никаких запросов в сеть и имеет открытый исходный код.</string> <string name="store_description">Главная особенность клавиатуры — это возможность легко напечатать любой ASCII-символ жестами в углы клавиш.\n\nПриложение изначально было разработано для использования с Termux.\nНа данный момент оно также удобно в повседневном использовании.\n\nПриложение не содержит рекламы, не осуществляет никаких запросов в сеть и имеет открытый исходный код.</string>
<string name="pref_portrait">В портретном режиме</string> <string name="pref_portrait">В портретном режиме</string>
<string name="pref_portrait_unfolded">В развернутом портретном режиме</string> <!-- <string name="pref_portrait_unfolded">In portrait mode unfolded</string> -->
<string name="pref_landscape">В ландшафтном режиме</string> <string name="pref_landscape">В ландшафтном режиме</string>
<string name="pref_landscape_unfolded">В развернутом ландшафтном режиме</string> <!-- <string name="pref_landscape_unfolded">In landscape mode unfolded</string> -->
<string name="pref_category_layout">Расположение</string> <string name="pref_category_layout">Расположение</string>
<string name="pref_label_brightness">Изменить яркость клавиатуры</string> <string name="pref_label_brightness">Изменить яркость клавиатуры</string>
<string name="pref_keyboard_opacity">Изменить прозрачность фона</string> <string name="pref_keyboard_opacity">Изменить прозрачность фона</string>
@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Поведение клавиши переключения клавиатуры</string> <string name="pref_switch_input_immediate_summary">Поведение клавиши переключения клавиатуры</string>
<string name="pref_vibrate_custom">Настройка вибрации</string> <string name="pref_vibrate_custom">Настройка вибрации</string>
<string name="pref_vibrate_duration_title">Интенсивность вибрации</string> <string name="pref_vibrate_duration_title">Интенсивность вибрации</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Закрепить раскладку</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">При вводе чисел, дат и телефонных номеров</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Стиль</string> <string name="pref_category_style">Стиль</string>
<string name="pref_margin_bottom_title">Нижняя граница поля</string> <string name="pref_margin_bottom_title">Нижняя граница поля</string>
<string name="pref_keyboard_height_title">Высота клавиатуры</string> <string name="pref_keyboard_height_title">Высота клавиатуры</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Klavye değistirme tuşunun davranışını belirler</string> <string name="pref_switch_input_immediate_summary">Klavye değistirme tuşunun davranışını belirler</string>
<string name="pref_vibrate_custom">Özel titreşim</string> <string name="pref_vibrate_custom">Özel titreşim</string>
<string name="pref_vibrate_duration_title">Titreşim yoğunluğu</string> <string name="pref_vibrate_duration_title">Titreşim yoğunluğu</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">NumPad</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">Sayıları, tarihleri ve telefon numaralarını yazarken</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Tarz</string> <string name="pref_category_style">Tarz</string>
<string name="pref_margin_bottom_title">Alt boşluk</string> <string name="pref_margin_bottom_title">Alt boşluk</string>
<string name="pref_keyboard_height_title">Klavye yüksekliği</string> <string name="pref_keyboard_height_title">Klavye yüksekliği</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Поведінка клавіші перемикання клавіатури</string> <string name="pref_switch_input_immediate_summary">Поведінка клавіші перемикання клавіатури</string>
<string name="pref_vibrate_custom">Спеціальна вібрація</string> <string name="pref_vibrate_custom">Спеціальна вібрація</string>
<string name="pref_vibrate_duration_title">Інтенсивність вібрації</string> <string name="pref_vibrate_duration_title">Інтенсивність вібрації</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">Макет введення PIN-коду</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">При наборі чисел, дат і номерів телефонів</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Стиль</string> <string name="pref_category_style">Стиль</string>
<string name="pref_margin_bottom_title">Поле знизу</string> <string name="pref_margin_bottom_title">Поле знизу</string>
<string name="pref_keyboard_height_title">Висота клавіатури</string> <string name="pref_keyboard_height_title">Висота клавіатури</string>

View File

@@ -49,10 +49,8 @@
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> --> <!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
<!-- <string name="pref_vibrate_custom">Custom vibration</string> --> <!-- <string name="pref_vibrate_custom">Custom vibration</string> -->
<!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> --> <!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> -->
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">Kiểu cách</string> <string name="pref_category_style">Kiểu cách</string>
<string name="pref_margin_bottom_title">Căn lề dưới</string> <string name="pref_margin_bottom_title">Căn lề dưới</string>
<string name="pref_keyboard_height_title">Chiều cao bàn phím</string> <string name="pref_keyboard_height_title">Chiều cao bàn phím</string>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">切换键盘按钮的行为</string> <string name="pref_switch_input_immediate_summary">切换键盘按钮的行为</string>
<string name="pref_vibrate_custom">自定义振动</string> <string name="pref_vibrate_custom">自定义振动</string>
<string name="pref_vibrate_duration_title">振动强度</string> <string name="pref_vibrate_duration_title">振动强度</string>
<!-- <string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> --> <string name="pref_pin_entry_enabled_title">数字输入布局</string>
<!-- <string name="pref_number_entry_layout_pin">PIN Entry</string> --> <string name="pref_pin_entry_enabled_summary">输入数字、日期与电话号码时</string>
<!-- <string name="pref_number_entry_layout_number">Number pane</string> -->
<!-- <string name="pref_number_entry_layout_normal">Use the main layout</string> -->
<string name="pref_category_style">样式</string> <string name="pref_category_style">样式</string>
<string name="pref_margin_bottom_title">键盘下边距</string> <string name="pref_margin_bottom_title">键盘下边距</string>
<string name="pref_keyboard_height_title">键盘高度</string> <string name="pref_keyboard_height_title">键盘高度</string>

View File

@@ -84,14 +84,4 @@
<item>4</item> <item>4</item>
<item>12</item> <item>12</item>
</string-array> </string-array>
<string-array name="pref_number_entry_entries">
<item>@string/pref_number_entry_layout_pin</item>
<item>@string/pref_number_entry_layout_number</item>
<item>@string/pref_number_entry_layout_normal</item>
</string-array>
<string-array name="pref_number_entry_values">
<item>pin</item>
<item>number</item>
<item>normal</item>
</string-array>
</resources> </resources>

View File

@@ -20,7 +20,6 @@
<item>cyrl_jcuken_kk</item> <item>cyrl_jcuken_kk</item>
<item>cyrl_jcuken_ru</item> <item>cyrl_jcuken_ru</item>
<item>cyrl_jcuken_uk</item> <item>cyrl_jcuken_uk</item>
<item>cyrl_lynyertdz_mk</item>
<item>cyrl_lynyertz_sr</item> <item>cyrl_lynyertz_sr</item>
<item>cyrl_ueishsht</item> <item>cyrl_ueishsht</item>
<item>cyrl_yaverti</item> <item>cyrl_yaverti</item>
@@ -106,7 +105,6 @@
<item>ЙЦУКЕН (Қазақша)</item> <item>ЙЦУКЕН (Қазақша)</item>
<item>ЙЦУКЕН (Русский)</item> <item>ЙЦУКЕН (Русский)</item>
<item>ЙЦУКЕН (Українська)</item> <item>ЙЦУКЕН (Українська)</item>
<item>ЉЊЕРТЅ (Македонски)</item>
<item>ЉЊЕРТЗ (Српски)</item> <item>ЉЊЕРТЗ (Српски)</item>
<item>УЕИШЩ (Български, БДС)</item> <item>УЕИШЩ (Български, БДС)</item>
<item>ЯВЕРТЪ</item> <item>ЯВЕРТЪ</item>
@@ -192,7 +190,6 @@
<item>@xml/cyrl_jcuken_kk</item> <item>@xml/cyrl_jcuken_kk</item>
<item>@xml/cyrl_jcuken_ru</item> <item>@xml/cyrl_jcuken_ru</item>
<item>@xml/cyrl_jcuken_uk</item> <item>@xml/cyrl_jcuken_uk</item>
<item>@xml/cyrl_lynyertdz_mk</item>
<item>@xml/cyrl_lynyertz_sr</item> <item>@xml/cyrl_lynyertz_sr</item>
<item>@xml/cyrl_ueishsht</item> <item>@xml/cyrl_ueishsht</item>
<item>@xml/cyrl_yaverti</item> <item>@xml/cyrl_yaverti</item>

View File

@@ -49,10 +49,8 @@
<string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string>
<string name="pref_vibrate_custom">Custom vibration</string> <string name="pref_vibrate_custom">Custom vibration</string>
<string name="pref_vibrate_duration_title">Vibration intensity</string> <string name="pref_vibrate_duration_title">Vibration intensity</string>
<string name="pref_number_entry_title">Layout when typing numbers, dates and phone numbers</string> <string name="pref_pin_entry_enabled_title">Pin entry layout</string>
<string name="pref_number_entry_layout_pin">PIN Entry</string> <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string>
<string name="pref_number_entry_layout_number">Number pane</string>
<string name="pref_number_entry_layout_normal">Use the main layout</string>
<string name="pref_category_style">Style</string> <string name="pref_category_style">Style</string>
<string name="pref_margin_bottom_title">Margin bottom</string> <string name="pref_margin_bottom_title">Margin bottom</string>
<string name="pref_keyboard_height_title">Keyboard height</string> <string name="pref_keyboard_height_title">Keyboard height</string>

View File

@@ -6,6 +6,9 @@
<dimen name="emoji_text_size">28dp</dimen> <dimen name="emoji_text_size">28dp</dimen>
<dimen name="clipboard_view_height">300dp</dimen> <dimen name="clipboard_view_height">300dp</dimen>
<dimen name="pref_button_size">28dp</dimen> <dimen name="pref_button_size">28dp</dimen>
<!-- Margin needed to accomodate the gesture nav bar on Android 15. Found in
[core/res/res/values/dimens.xml]. -->
<dimen name="bottom_inset_min">48dp</dimen>
<!-- Will be overwritten automatically by Gradle for the debug build variant --> <!-- Will be overwritten automatically by Gradle for the debug build variant -->
<bool name="debug_logs">false</bool> <bool name="debug_logs">false</bool>
</resources> </resources>

View File

@@ -41,7 +41,6 @@
<subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hangul,default_layout=latn_qwerty_us"/> <subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hangul,default_layout=latn_qwerty_us"/>
<subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lt,extra_keys=accent_ogonek:ą:ę:į:ų@s|accent_caron:č:š:ž@f|accent_dot_above:ė@s|accent_macron:ū@o|€"/> <subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lt,extra_keys=accent_ogonek:ą:ę:į:ų@s|accent_caron:č:š:ž@f|accent_dot_above:ė@s|accent_macron:ū@o|€"/>
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,extra_keys=accent_macron:ā:ē:ī:ū@o|accent_caron:č:š:ž@f|accent_ogonek:ķ:ļ:ņ@s|accent_cedille:ģ@c|€"/> <subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,extra_keys=accent_macron:ā:ē:ī:ū@o|accent_caron:č:š:ž@f|accent_ogonek:ķ:ļ:ņ@s|accent_cedille:ģ@c|€"/>
<subtype android:label="%s" android:languageTag="mk" android:imeSubtypeLocale="mk" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_lynyertdz_mk,extra_keys=ѕ|ѓ|ќ|ѝ|ѐ|љ|њ|џ|„|“|€"/>
<subtype android:label="%s" android:languageTag="mn" android:imeSubtypeLocale="mn_MN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_fcuzhen_mn,extra_keys=ү|ө"/> <subtype android:label="%s" android:languageTag="mn" android:imeSubtypeLocale="mn_MN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_fcuzhen_mn,extra_keys=ү|ө"/>
<subtype android:label="%s" android:languageTag="mr" android:imeSubtypeLocale="mr_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/> <subtype android:label="%s" android:languageTag="mr" android:imeSubtypeLocale="mr_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
<subtype android:label="%s" android:languageTag="mt" android:imeSubtypeLocale="mt_MT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_mt,extra_keys=accent_grave:à:è:ì:ò:ù|accent_dot_above:ċ:ż:ġ|ħ"/> <subtype android:label="%s" android:languageTag="mt" android:imeSubtypeLocale="mt_MT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_mt,extra_keys=accent_grave:à:è:ì:ò:ù|accent_dot_above:ċ:ż:ġ|ħ"/>

View File

@@ -25,7 +25,7 @@
<CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/> <CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/>
<CheckBoxPreference android:key="vibrate_custom" android:title="@string/pref_vibrate_custom" android:defaultValue="false"/> <CheckBoxPreference android:key="vibrate_custom" android:title="@string/pref_vibrate_custom" android:defaultValue="false"/>
<juloo.keyboard2.prefs.IntSlideBarPreference android:dependency="vibrate_custom" android:key="vibrate_duration" android:title="@string/pref_vibrate_duration_title" android:summary="%sms" android:defaultValue="20" min="0" max="100"/> <juloo.keyboard2.prefs.IntSlideBarPreference android:dependency="vibrate_custom" android:key="vibrate_duration" android:title="@string/pref_vibrate_duration_title" android:summary="%sms" android:defaultValue="20" min="0" max="100"/>
<ListPreference android:key="number_entry_layout" android:title="@string/pref_number_entry_title" android:summary="%s" android:defaultValue="pin" android:entries="@array/pref_number_entry_entries" android:entryValues="@array/pref_number_entry_values"/> <CheckBoxPreference android:key="pin_entry_enabled" android:title="@string/pref_pin_entry_enabled_title" android:summary="@string/pref_pin_entry_enabled_summary" android:defaultValue="true"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:title="@string/pref_category_style"> <PreferenceCategory android:title="@string/pref_category_style">
<ListPreference android:key="theme" android:title="@string/pref_theme" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_theme_entries" android:entryValues="@array/pref_theme_values"/> <ListPreference android:key="theme" android:title="@string/pref_theme" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_theme_entries" android:entryValues="@array/pref_theme_values"/>

View File

@@ -49,7 +49,7 @@ public final class ClipboardHistoryService
/** The maximum size limits the amount of user data stored in memory but also /** The maximum size limits the amount of user data stored in memory but also
gives a sense to the user that the history is not persisted and can be gives a sense to the user that the history is not persisted and can be
forgotten as soon as the app stops. */ forgotten as soon as the app stops. */
public static final int MAX_HISTORY_SIZE = 6; public static final int MAX_HISTORY_SIZE = 3;
/** Time in ms until history entries expire. */ /** Time in ms until history entries expire. */
public static final long HISTORY_TTL_MS = 5 * 60 * 1000; public static final long HISTORY_TTL_MS = 5 * 60 * 1000;

View File

@@ -58,7 +58,7 @@ public final class Config
public int theme; // Values are R.style.* public int theme; // Values are R.style.*
public boolean autocapitalisation; public boolean autocapitalisation;
public boolean switch_input_immediate; public boolean switch_input_immediate;
public NumberLayout selected_number_layout; public boolean pin_entry_enabled;
public boolean borderConfig; public boolean borderConfig;
public int circle_sensitivity; public int circle_sensitivity;
public boolean clipboard_history_enabled; public boolean clipboard_history_enabled;
@@ -81,6 +81,7 @@ public final class Config
int current_layout_landscape; int current_layout_landscape;
int current_layout_unfolded_portrait; int current_layout_unfolded_portrait;
int current_layout_unfolded_landscape; int current_layout_unfolded_landscape;
public int bottomInsetMin;
private Config(SharedPreferences prefs, Resources res, IKeyEventHandler h, Boolean foldableUnfolded) private Config(SharedPreferences prefs, Resources res, IKeyEventHandler h, Boolean foldableUnfolded)
{ {
@@ -168,13 +169,15 @@ public final class Config
switch_input_immediate = _prefs.getBoolean("switch_input_immediate", false); switch_input_immediate = _prefs.getBoolean("switch_input_immediate", false);
extra_keys_param = ExtraKeysPreference.get_extra_keys(_prefs); extra_keys_param = ExtraKeysPreference.get_extra_keys(_prefs);
extra_keys_custom = CustomExtraKeysPreference.get(_prefs); extra_keys_custom = CustomExtraKeysPreference.get(_prefs);
selected_number_layout = NumberLayout.valueOf(_prefs.getString("number_entry_layout", "pin").toUpperCase()); pin_entry_enabled = _prefs.getBoolean("pin_entry_enabled", true);
current_layout_portrait = _prefs.getInt("current_layout_portrait", 0); current_layout_portrait = _prefs.getInt("current_layout_portrait", 0);
current_layout_landscape = _prefs.getInt("current_layout_landscape", 0); current_layout_landscape = _prefs.getInt("current_layout_landscape", 0);
current_layout_unfolded_portrait = _prefs.getInt("current_layout_unfolded_portrait", 0); current_layout_unfolded_portrait = _prefs.getInt("current_layout_unfolded_portrait", 0);
current_layout_unfolded_landscape = _prefs.getInt("current_layout_unfolded_landscape", 0); current_layout_unfolded_landscape = _prefs.getInt("current_layout_unfolded_landscape", 0);
circle_sensitivity = Integer.valueOf(_prefs.getString("circle_sensitivity", "2")); circle_sensitivity = Integer.valueOf(_prefs.getString("circle_sensitivity", "2"));
clipboard_history_enabled = _prefs.getBoolean("clipboard_history_enabled", false); clipboard_history_enabled = _prefs.getBoolean("clipboard_history_enabled", false);
bottomInsetMin = Utils.is_navigation_bar_gestural(res) ?
(int)res.getDimension(R.dimen.bottom_inset_min) : 0;
} }
public int get_current_layout() public int get_current_layout()
@@ -297,7 +300,7 @@ public final class Config
/** Config migrations. */ /** Config migrations. */
private static int CONFIG_VERSION = 3; private static int CONFIG_VERSION = 2;
public static void migrate(SharedPreferences prefs) public static void migrate(SharedPreferences prefs)
{ {
@@ -329,11 +332,6 @@ public final class Config
e.putString("number_row", add_number_row ? "no_symbols" : "no_number_row"); e.putString("number_row", add_number_row ? "no_symbols" : "no_number_row");
// Fallthrough // Fallthrough
case 2: case 2:
if (!prefs.contains("number_entry_layout")) {
e.putString("number_entry_layout", prefs.getBoolean("pin_entry_enabled", true) ? "pin" : "number");
}
// Fallthrough
case 3:
default: break; default: break;
} }
e.apply(); e.apply();

View File

@@ -78,11 +78,6 @@ public final class KeyEventHandler
case Compose_pending: case Compose_pending:
_autocap.stop(); _autocap.stop();
break; break;
case Slider:
// Don't wait for the next key_up and move the cursor right away. This
// is called after the trigger distance have been travelled.
handle_slider(key.getSlider(), key.getSliderRepeat(), true);
break;
default: break; default: break;
} }
} }
@@ -104,7 +99,7 @@ public final class KeyEventHandler
case Modifier: break; case Modifier: break;
case Editing: handle_editing_key(key.getEditing()); break; case Editing: handle_editing_key(key.getEditing()); break;
case Compose_pending: _recv.set_compose_pending(true); break; case Compose_pending: _recv.set_compose_pending(true); break;
case Slider: handle_slider(key.getSlider(), key.getSliderRepeat(), false); break; case Slider: handle_slider(key.getSlider(), key.getSliderRepeat()); break;
case Macro: evaluate_macro(key.getMacro()); break; case Macro: evaluate_macro(key.getMacro()); break;
} }
update_meta_state(old_mods); update_meta_state(old_mods);
@@ -234,9 +229,9 @@ public final class KeyEventHandler
{ {
switch (ev) switch (ev)
{ {
case COPY: if(is_selection_not_empty()) send_context_menu_action(android.R.id.copy); break; case COPY: send_context_menu_action(android.R.id.copy); break;
case PASTE: send_context_menu_action(android.R.id.paste); break; case PASTE: send_context_menu_action(android.R.id.paste); break;
case CUT: if(is_selection_not_empty()) send_context_menu_action(android.R.id.cut); break; case CUT: send_context_menu_action(android.R.id.cut); break;
case SELECT_ALL: send_context_menu_action(android.R.id.selectAll); break; case SELECT_ALL: send_context_menu_action(android.R.id.selectAll); break;
case SHARE: send_context_menu_action(android.R.id.shareText); break; case SHARE: send_context_menu_action(android.R.id.shareText); break;
case PASTE_PLAIN: send_context_menu_action(android.R.id.pasteAsPlainText); break; case PASTE_PLAIN: send_context_menu_action(android.R.id.pasteAsPlainText); break;
@@ -266,7 +261,7 @@ public final class KeyEventHandler
} }
/** [r] might be negative, in which case the direction is reversed. */ /** [r] might be negative, in which case the direction is reversed. */
void handle_slider(KeyValue.Slider s, int r, boolean key_down) void handle_slider(KeyValue.Slider s, int r)
{ {
switch (s) switch (s)
{ {
@@ -274,8 +269,8 @@ public final class KeyEventHandler
case Cursor_right: move_cursor(r); break; case Cursor_right: move_cursor(r); break;
case Cursor_up: move_cursor_vertical(-r); break; case Cursor_up: move_cursor_vertical(-r); break;
case Cursor_down: move_cursor_vertical(r); break; case Cursor_down: move_cursor_vertical(r); break;
case Selection_cursor_left: move_cursor_sel(r, true, key_down); break; case Selection_cursor_left: move_cursor_sel(r, true); break;
case Selection_cursor_right: move_cursor_sel(r, false, key_down); break; case Selection_cursor_right: move_cursor_sel(r, false); break;
} }
} }
@@ -315,7 +310,7 @@ public final class KeyEventHandler
/** Move one of the two side of a selection. If [sel_left] is true, the left /** Move one of the two side of a selection. If [sel_left] is true, the left
position is moved, otherwise the right position is moved. */ position is moved, otherwise the right position is moved. */
void move_cursor_sel(int d, boolean sel_left, boolean key_down) void move_cursor_sel(int d, boolean sel_left)
{ {
InputConnection conn = _recv.getCurrentInputConnection(); InputConnection conn = _recv.getCurrentInputConnection();
if (conn == null) if (conn == null)
@@ -325,23 +320,10 @@ public final class KeyEventHandler
{ {
int sel_start = et.selectionStart; int sel_start = et.selectionStart;
int sel_end = et.selectionEnd; int sel_end = et.selectionEnd;
// Reorder the selection when the slider has just been pressed. The if (sel_left == (sel_start <= sel_end))
// selection might have been reversed if one end crossed the other end
// with a previous slider.
if (key_down && sel_start > sel_end)
{
sel_start = et.selectionEnd;
sel_end = et.selectionStart;
}
do
{
if (sel_left)
sel_start += d; sel_start += d;
else else
sel_end += d; sel_end += d;
// Move the cursor twice if moving it once would make the selection
// empty and stop selection mode.
} while (sel_start == sel_end);
if (conn.setSelection(sel_start, sel_end)) if (conn.setSelection(sel_start, sel_end))
return; // Fallback to sending key events if [setSelection] failed return; // Fallback to sending key events if [setSelection] failed
} }
@@ -466,13 +448,6 @@ public final class KeyEventHandler
_recv.selection_state_changed(false); _recv.selection_state_changed(false);
} }
boolean is_selection_not_empty()
{
InputConnection conn = _recv.getCurrentInputConnection();
if (conn == null) return false;
return (conn.getSelectedText(0) != null);
}
public static interface IReceiver public static interface IReceiver
{ {
public void handle_event_key(KeyValue.Event ev); public void handle_event_key(KeyValue.Event ev);

View File

@@ -265,9 +265,9 @@ public class Keyboard2 extends InputMethodService
case InputType.TYPE_CLASS_NUMBER: case InputType.TYPE_CLASS_NUMBER:
case InputType.TYPE_CLASS_PHONE: case InputType.TYPE_CLASS_PHONE:
case InputType.TYPE_CLASS_DATETIME: case InputType.TYPE_CLASS_DATETIME:
if (_config.selected_number_layout == NumberLayout.PIN) if (_config.pin_entry_enabled)
return loadPinentry(R.xml.pin); return loadPinentry(R.xml.pin);
else if (_config.selected_number_layout == NumberLayout.NUMBER) else
return loadNumpad(R.xml.numeric); return loadNumpad(R.xml.numeric);
default: default:
break; break;
@@ -315,7 +315,6 @@ public class Keyboard2 extends InputMethodService
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
// Allow to draw behind system bars // Allow to draw behind system bars
wattrs.setFitInsetsTypes(0); wattrs.setFitInsetsTypes(0);
window.setDecorFitsSystemWindows(false);
} }
updateLayoutHeightOf(window, ViewGroup.LayoutParams.MATCH_PARENT); updateLayoutHeightOf(window, ViewGroup.LayoutParams.MATCH_PARENT);
final View inputArea = window.findViewById(android.R.id.inputArea); final View inputArea = window.findViewById(android.R.id.inputArea);

View File

@@ -47,9 +47,6 @@ public class Keyboard2View extends View
private float _marginRight; private float _marginRight;
private float _marginLeft; private float _marginLeft;
private float _marginBottom; private float _marginBottom;
private int _insets_left = 0;
private int _insets_right = 0;
private int _insets_bottom = 0;
private Theme _theme; private Theme _theme;
private Theme.Computed _tc; private Theme.Computed _tc;
@@ -267,11 +264,50 @@ public class Keyboard2View extends View
public void onMeasure(int wSpec, int hSpec) public void onMeasure(int wSpec, int hSpec)
{ {
int width; int width;
int insets_left = 0;
int insets_right = 0;
int insets_bottom = 0;
// LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS is set in [Keyboard2#updateSoftInputWindowLayoutParams].
// and keyboard is allowed do draw behind status/navigation bars
if (VERSION.SDK_INT >= 35)
{
WindowMetrics metrics =
((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE))
.getCurrentWindowMetrics();
width = metrics.getBounds().width();
WindowInsets wi = metrics.getWindowInsets();
int insets_types =
WindowInsets.Type.statusBars()
| WindowInsets.Type.displayCutout()
| WindowInsets.Type.mandatorySystemGestures()
| WindowInsets.Type.navigationBars();
Insets insets = wi.getInsets(insets_types);
insets_left = insets.left;
insets_right = insets.right;
// On API 35, the keyboard is allowed to draw under the
// button-navigation bar but on lower APIs, it must be discounted from
// the width.
if (VERSION.SDK_INT < 35)
{
Insets nav_insets = wi.getInsets(WindowInsets.Type.navigationBars());
width -= nav_insets.left + nav_insets.right;
insets_left -= nav_insets.left;
insets_right -= nav_insets.right;
}
// [insets.bottom] doesn't take into account the buttons that appear in
// the gesture navigation bar when the IME is showing so ensure a minimum
// of margin is added.
if (VERSION.SDK_INT >= 35)
insets_bottom = Math.max(insets.bottom, _config.bottomInsetMin);
}
else
{
DisplayMetrics dm = getContext().getResources().getDisplayMetrics(); DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
width = dm.widthPixels; width = dm.widthPixels;
_marginLeft = Math.max(_config.horizontal_margin, _insets_left); }
_marginRight = Math.max(_config.horizontal_margin, _insets_right); _marginLeft = Math.max(_config.horizontal_margin, insets_left);
_marginBottom = _config.margin_bottom + _insets_bottom; _marginRight = Math.max(_config.horizontal_margin, insets_right);
_marginBottom = _config.margin_bottom + insets_bottom;
_keyWidth = (width - _marginLeft - _marginRight) / _keyboard.keysWidth; _keyWidth = (width - _marginLeft - _marginRight) / _keyboard.keysWidth;
_tc = new Theme.Computed(_theme, _config, _keyWidth, _keyboard); _tc = new Theme.Computed(_theme, _config, _keyWidth, _keyboard);
// Compute the size of labels based on the width or the height of keys. The // Compute the size of labels based on the width or the height of keys. The
@@ -307,22 +343,6 @@ public class Keyboard2View extends View
} }
} }
@Override
public WindowInsets onApplyWindowInsets(WindowInsets wi)
{
// LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS is set in [Keyboard2#updateSoftInputWindowLayoutParams] for SDK_INT >= 35.
if (VERSION.SDK_INT < 35)
return wi;
int insets_types =
WindowInsets.Type.systemBars()
| WindowInsets.Type.displayCutout();
Insets insets = wi.getInsets(insets_types);
_insets_left = insets.left;
_insets_right = insets.right;
_insets_bottom = insets.bottom;
return WindowInsets.CONSUMED;
}
/** Horizontal and vertical position of the 9 indexes. */ /** Horizontal and vertical position of the 9 indexes. */
static final Paint.Align[] LABEL_POSITION_H = new Paint.Align[]{ static final Paint.Align[] LABEL_POSITION_H = new Paint.Align[]{
Paint.Align.CENTER, Paint.Align.LEFT, Paint.Align.RIGHT, Paint.Align.LEFT, Paint.Align.CENTER, Paint.Align.LEFT, Paint.Align.RIGHT, Paint.Align.LEFT,

View File

@@ -336,13 +336,9 @@ public final class KeyboardData
int status; int status;
float h = attribute_float(parser, "height", 1f); float h = attribute_float(parser, "height", 1f);
float shift = attribute_float(parser, "shift", 0f); float shift = attribute_float(parser, "shift", 0f);
float scale = attribute_float(parser, "scale", 0f);
while (expect_tag(parser, "key")) while (expect_tag(parser, "key"))
keys.add(Key.parse(parser)); keys.add(Key.parse(parser));
Row row = new Row(keys, h, shift); return new Row(keys, h, shift);
if (scale > 0f)
row = row.updateWidth(scale);
return row;
} }
public Row copy() public Row copy()

View File

@@ -1,7 +0,0 @@
package juloo.keyboard2;
public enum NumberLayout {
PIN,
NUMBER,
NORMAL
}

View File

@@ -108,10 +108,7 @@ public final class Pointers implements Handler.Callback
{ {
// No existing pointer, latch the key. // No existing pointer, latch the key.
if (latched) if (latched)
{
add_fake_pointer(key, kv, lock); add_fake_pointer(key, kv, lock);
_handler.onPointerFlagsChanged(false);
}
} }
else if ((ptr.flags & FLAG_P_FAKE) == 0) else if ((ptr.flags & FLAG_P_FAKE) == 0)
{} // Key already latched but not by a fake ptr, do nothing. {} // Key already latched but not by a fake ptr, do nothing.
@@ -121,7 +118,6 @@ public final class Pointers implements Handler.Callback
removePtr(ptr); removePtr(ptr);
if (latched) if (latched)
add_fake_pointer(key, kv, lock); add_fake_pointer(key, kv, lock);
_handler.onPointerFlagsChanged(false);
} }
else if ((ptr.flags & FLAG_P_LOCKED) != 0) else if ((ptr.flags & FLAG_P_LOCKED) != 0)
{} // Existing ptr is locked but [lock] is false, do not continue. {} // Existing ptr is locked but [lock] is false, do not continue.
@@ -310,6 +306,7 @@ public final class Pointers implements Handler.Callback
// Start sliding mode // Start sliding mode
if (new_value.getKind() == KeyValue.Kind.Slider) if (new_value.getKind() == KeyValue.Kind.Slider)
startSliding(ptr, x, y, dx, dy, new_value); startSliding(ptr, x, y, dx, dy, new_value);
_handler.onPointerDown(new_value, true);
} }
} }
@@ -472,7 +469,7 @@ public final class Pointers implements Handler.Callback
stopLongPress(ptr); stopLongPress(ptr);
ptr.flags |= FLAG_P_SLIDING; ptr.flags |= FLAG_P_SLIDING;
ptr.sliding = new Sliding(x, y, dirx, diry, kv.getSlider()); ptr.sliding = new Sliding(x, y, dirx, diry, kv.getSlider());
_handler.onPointerDown(kv, true); _handler.onPointerHold(kv, ptr.modifiers);
} }
/** Return the [FLAG_P_*] flags that correspond to pressing [kv]. */ /** Return the [FLAG_P_*] flags that correspond to pressing [kv]. */

View File

@@ -49,4 +49,14 @@ public final class Utils
out.append(buff, 0, l); out.append(buff, 0, l);
return out.toString(); return out.toString();
} }
/** Whether the thin gesture-navigation bar is used.
https://stackoverflow.com/questions/36514167/how-to-really-get-the-navigation-bar-height-in-android
*/
public static boolean is_navigation_bar_gestural(Resources res)
{
// core/java/android/view/WindowManagerPolicyConstants.java
int res_id = res.getIdentifier("config_navBarInteractionMode", "integer", "android");
return (res_id > 0 && res.getInteger(res_id) == 2);
}
} }

View File

@@ -26,17 +26,17 @@
<key key0="ж" key2="=" key3="+"/> <key key0="ж" key2="=" key3="+"/>
<key key0="э" key2="|" key3="\\"/> <key key0="э" key2="|" key3="\\"/>
</row> </row>
<row scale="11"> <row>
<key width="1.22" key0="shift" key2="loc capslock"/> <key width="1.18" key0="shift" key2="loc capslock"/>
<key key0="я"/> <key width="0.96" key0="я"/>
<key key0="ч"/> <key width="0.96" key0="ч"/>
<key key0="с"/> <key width="0.96" key0="с"/>
<key key0="м"/> <key width="0.96" key0="м"/>
<key key0="и" key1="loc і" key2="&lt;" key3="."/> <key width="0.96" key0="и" key1="loc і" key2="&lt;" key3="."/>
<key key0="т" key2="&gt;" key3=","/> <key width="0.96" key0="т" key2="&gt;" key3=","/>
<key key0="ь" key1="ъ" key2="\?" key3="/"/> <key width="0.96" key0="ь" key1="ъ" key2="\?" key3="/"/>
<key key0="б" key2=":" key3=";"/> <key width="0.96" key0="б" key2=":" key3=";"/>
<key key0="ю" key2="&quot;" key3="'"/> <key width="0.96" key0="ю" key2="&quot;" key3="'"/>
<key width="1.22" key0="backspace" key2="delete"/> <key width="1.18" key0="backspace" key2="delete"/>
</row> </row>
</keyboard> </keyboard>

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<keyboard name="ЉЊЕРТЅ (Македонски)" script="cyrillic">
<row scale="11">
<key key0="љ" key2="1" key4="esc"/>
<key key0="њ" key1="~" key2="2" key3="\@"/>
<key key0="е" key1="!" key2="3" key3="\#" key4="ѐ"/>
<key key0="р" key2="4" key3="$"/>
<key key0="т" key2="5" key3="%"/>
<key key0="ѕ" key2="6" key3="^"/>
<key key0="у" key2="7" key3="&amp;"/>
<key key0="и" key2="8" key3="*" key4="ѝ"/>
<key key0="о" key2="9" key3="(" key4=")"/>
<key key0="п" key2="0" key3="[" key4="]"/>
<key key0="ш" key2="€" key3="{" key4="}"/>
</row>
<row scale="11">
<key key0="а" key1="tab"/>
<key key0="с"/>
<key key0="д"/>
<key key0="ф"/>
<key key0="г"/>
<key key0="х"/>
<key key0="ј"/>
<key key0="к"/>
<key key0="л" key2="|" key3="\\"/>
<key key0="ч" key2="-" key3="_"/>
<key key0="ќ" key2="=" key3="+"/>
</row>
<row scale="11">
<key width="1.5" key0="shift" key2="loc capslock"/>
<key key0="з"/>
<key key0="џ"/>
<key key0="ц"/>
<key key0="в" key2="&lt;" key3="."/>
<key key0="б" key2="&gt;" key3=","/>
<key key0="н" key2="\?" key3="/"/>
<key key0="м" key2=":" key3=";"/>
<key key0="ѓ" key2="`" key3="'"/>
<key key0="ж" key2="“" key3="„"/>
<key width="1.5" key0="backspace" key2="delete"/>
</row>
</keyboard>

View File

@@ -26,17 +26,17 @@
<key key0="ж" key7="0" /> <key key0="ж" key7="0" />
<key key0="э" key7="\?" key3="/" /> <key key0="э" key7="\?" key3="/" />
</row> </row>
<row scale="11"> <row>
<key width="1.22" key0="shift" key2="loc capslock" /> <key width="1.18" key0="shift" key2="loc capslock" />
<key key0="я" key7="`" key8=";" /> <key width="0.96" key0="я" key7="`" key8=";" />
<key key0="ч" key7="*" key8=":" /> <key width="0.96" key0="ч" key7="*" key8=":" />
<key key0="с" key7="&amp;" key8="\#" /> <key width="0.96" key0="с" key7="&amp;" key8="\#" />
<key key0="м" key7="|" key8="\\" /> <key width="0.96" key0="м" key7="|" key8="\\" />
<key key0="и" key7="~" /> <key width="0.96" key0="и" key7="~" />
<key key0="т" key7="ц" /> <key width="0.96" key0="т" key7="ц" />
<key key0="ӣ" key3="&lt;" key2="&gt;" /> <key width="0.96" key0="ӣ" key3="&lt;" key2="&gt;" />
<key key0="б" key7="ъ" key8="ы" /> <key width="0.96" key0="б" key7="ъ" key8="ы" />
<key key0="ю" key7="&quot;" key8="'"/> <key width="0.96" key0="ю" key7="&quot;" key8="'"/>
<key width="1.22" key0="." key7="," /> <key width="1.18" key0="." key7="," />
</row> </row>
</keyboard> </keyboard>

View File

@@ -26,17 +26,17 @@
<key key0="ж" key7="0" /> <key key0="ж" key7="0" />
<key key0="э" key7="/" key8="|" /> <key key0="э" key7="/" key8="|" />
</row> </row>
<row scale="11"> <row>
<key width="1.22" key0="shift" /> <key width="1.18" key0="shift" />
<key key0="ꙗ" key7="combining_breve" key8=";" /> <key width="0.96" key0="ꙗ" key7="combining_breve" key8=";" />
<key key0="ч" key7="combining_pokrytie" key8=":" /> <key width="0.96" key0="ч" key7="combining_pokrytie" key8=":" />
<key key0="с" key7="combining_inverted_breve" key8="`" /> <key width="0.96" key0="с" key7="combining_inverted_breve" key8="`" />
<key key0="м" key7="ѭ" /> <key width="0.96" key0="м" key7="ѭ" />
<key key0="и" key7="combining_vertical_tilde" key8="-" /> <key width="0.96" key0="и" key7="combining_vertical_tilde" key8="-" />
<key key0="т" key7="\?" key8="\\" /> <key width="0.96" key0="т" key7="\?" key8="\\" />
<key key0="ц" key3="&lt;" key2="&gt;" /> <key width="0.96" key0="ц" key3="&lt;" key2="&gt;" />
<key key0="б" key3="(" key2=")" /> <key width="0.96" key0="б" key3="(" key2=")" />
<key key0="ю" key3="{" key2="}" /> <key width="0.96" key0="ю" key3="{" key2="}" />
<key width="1.22" key0="." key7="," key8="_" /> <key width="1.18" key0="." key7="," key8="_" />
</row> </row>
</keyboard> </keyboard>

View File

@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<keyboard name="देवनागरी (हिंदी)-2" script="devanagari"> <keyboard name="देवनागरी (हिंदी)-2" script="devanagari">
<row scale="6.6"> <row>
<key shift="0.35" c="क" nw="ख" ne="घ" sw="ङ" se="ग"/> <key shift="0.35" width="0.9" c="क" nw="ख" ne="घ" sw="ङ" se="ग"/>
<key c="च" nw="छ" ne="झ" sw="ञ" se="ज"/> <key width="0.9" c="च" nw="छ" ne="झ" sw="ञ" se="ज"/>
<key c="ट" nw="ठ" ne="ढ" sw="ण" se="ड" anticircle="७" indication="७"/> <key width="0.9" c="ट" nw="ठ" ne="ढ" sw="ण" se="ड" anticircle="७" indication="७"/>
<key c="त" nw="थ" ne="ध" sw="न" se="द" anticircle="८" indication="८"/> <key width="0.9" c="त" nw="थ" ne="ध" sw="न" se="द" anticircle="८" indication="८"/>
<key c="प" nw="फ" ne="भ" sw="म" se="ब" anticircle="९" indication="९"/> <key width="0.9" c="प" nw="फ" ne="भ" sw="म" se="ब" anticircle="९" indication="९"/>
<key c="र" nw="ज्ञ" ne="ल" sw="य" se="व"/> <key width="0.9" c="र" nw="ज्ञ" ne="ल" sw="य" se="व"/>
<key c="ह" nw="श" ne="ळ" sw="स" se="ष"/> <key width="0.9" c="ह" nw="श" ne="ळ" sw="स" se="ष"/>
</row> </row>
<row scale="6.6"> <row>
<key shift="0.35" c="ा" nw="अ" ne="आ"/> <key shift="0.35" width="0.9" c="ा" nw="अ" ne="आ"/>
<key c="ि" nw="इ"/> <key width="0.9" c="ि" nw="इ"/>
<key c="ी" nw="ई" anticircle="४" indication="४"/> <key width="0.9" c="ी" nw="ई" anticircle="४" indication="४"/>
<key c="ु" nw="उ" ne="ऊ" se="ू" anticircle="५" indication="५"/> <key width="0.9" c="ु" nw="उ" ne="ऊ" se="ू" anticircle="५" indication="५"/>
<key c="े" nw="ए" ne="ऋ" se="ृ" anticircle="६" indication="६"/> <key width="0.9" c="े" nw="ए" ne="ऋ" se="ृ" anticircle="६" indication="६"/>
<key c="ै" nw="ऐ" ne="ऌ" se="ॢ"/> <key width="0.9" c="ै" nw="ऐ" ne="ऌ" se="ॢ"/>
<key c="ो" nw="ओ" ne="औ" se="ौ"/> <key width="0.9" c="ो" nw="ओ" ne="औ" se="ौ"/>
</row> </row>
<row> <row>
<key c="ऽ" se="\@"/> <key c="ऽ" se="\@"/>

View File

@@ -14,17 +14,17 @@
<key key0="פ" key2="0" key3="b)" key4="rlm"/> <key key0="פ" key2="0" key3="b)" key4="rlm"/>
<key key0="backspace" key2="delete"/> <key key0="backspace" key2="delete"/>
</row> </row>
<row scale="11"> <row>
<key key0="ש" key2="`" key1="loc tab" key3="sindot_placeholder" key4="shindot_placeholder" width="1.30"/> <key key0="ש" key2="`" key1="loc tab" key3="sindot_placeholder" key4="shindot_placeholder" width="1.333"/>
<key key0="ד" key1="~"/> <key key0="ד" key1="~" width="1.0333"/>
<key key0="ג" key1="geresh" key2="gershayim"/> <key key0="ג" key1="geresh" key2="gershayim" width="1.0333"/>
<key key0="כ"/> <key key0="כ" width="1.0333"/>
<key key0="ע"/> <key key0="ע" width="1.0333"/>
<key key0="י" key2="-" key3="_" key4="maqaf"/> <key key0="י" key2="-" key3="_" key4="maqaf" width="1.0333"/>
<key key0="ח" key2="=" key3="+"/> <key key0="ח" key2="=" key3="+" width="1.0333"/>
<key key0="ל" key2="b[" key3="b{"/> <key key0="ל" key2="b[" key3="b{" width="1.0333"/>
<key key0="ך" key2="b]" key3="b}"/> <key key0="ך" key2="b]" key3="b}" width="1.0333"/>
<key key0="ף" key2="," key3="&quot;" key1=":" width="1.35"/> <key key0="ף" key2="," key3="&quot;" key1=":" width="1.4006"/>
</row> </row>
<row> <row>
<key key0="\\" key1="|" key2="shift" key3="loc capslock"/> <key key0="\\" key1="|" key2="shift" key3="loc capslock"/>

View File

@@ -1,29 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Inspired by the bépo layout, but adapted to smartphone --> <!-- Inspired by the bépo layout, but adapted to smartphone -->
<keyboard name="BEPO (Français)" script="latin"> <keyboard name="BEPO (Français)" script="latin">
<row scale="11"> <row>
<key key0="b" key1="loc esc" key2="1" key4="|"/> <key width="1.1" key0="b" key1="loc esc" key2="1" key4="|"/>
<key key0="é" key2="2" key4="è"/> <key width="1.1" key0="é" key2="2" key4="è"/>
<key key0="p" key2="3"/> <key width="1.1" key0="p" key2="3"/>
<key key0="o" key2="4" key4="accent_circonflexe"/> <key width="1.1" key0="o" key2="4" key4="accent_circonflexe"/>
<key key0="v" key2="5" key4="{"/> <key width="1.1" key0="v" key2="5" key4="{"/>
<key key0="d" key2="6" key4="}"/> <key width="1.1" key0="d" key2="6" key4="}"/>
<key key0="l" key2="7" key4="("/> <key width="1.1" key0="l" key2="7" key4="("/>
<key key0="j" key2="8" key4=")"/> <key width="1.1" key0="j" key2="8" key4=")"/>
<key key0="z" key2="9" key4="["/> <key width="1.1" key0="z" key2="9" key4="["/>
<key key0="w" key2="0" key4="]"/> <key width="1.1" key0="w" key2="0" key4="]"/>
</row> </row>
<row scale="11"> <row>
<key key0="a" key1="loc tab" key4="à"/> <key width="1.1" key0="a" key1="loc tab" key4="à"/>
<key key0="u" key1="$" key4="ù"/> <key width="1.1" key0="u" key1="$" key4="ù"/>
<key key0="i" key4="&amp;"/> <key width="1.1" key0="i" key4="&amp;"/>
<key key0="e" key1="+" key2="accent_trema" key4="€"/> <key width="1.1" key0="e" key1="+" key2="accent_trema" key4="€"/>
<key key0="c" key1="=" key4="ç"/> <key width="1.1" key0="c" key1="=" key4="ç"/>
<key key0="t" key1="^" key4=";"/> <key width="1.1" key0="t" key1="^" key4=";"/>
<key key0="s" key4="!"/> <key width="1.1" key0="s" key4="!"/>
<key key0="r" key4="\?"/> <key width="1.1" key0="r" key4="\?"/>
<key key0="n" key1="`" key2="'" key4=":"/> <key width="1.1" key0="n" key1="`" key2="'" key4=":"/>
<key key0="m" key2="&quot;"/> <key width="1.1" key0="m" key2="&quot;"/>
</row> </row>
<row> <row>
<key width="1.5" key0="shift" key2="loc capslock" key3="&lt;"/> <key width="1.5" key0="shift" key2="loc capslock" key3="&lt;"/>