Open goffi-contrib opened 3 years ago
Regarding the OS keyboard on input, Kivy needs to support text-input-v3
or text-input-v2
from wayland protocol
cf. https://social.tchncs.de/@Jbb/105680940679299415
small update: even with the following in KV:
<VKeyboard>:
size_hint_y: 0.5
font_size: 40
The VKeyboard is unusable. Keys are appearing twice, trying to backspace will remove the keyboard.
One more nice thing to have: Add arm64 wheels to the distribution so installing kivy directly on those phones via pip/pipenv will not require the build step which takes forever on those lower powered devices.
It is possible to write Kivy apps to run on Phosh, but you may need to add some workarounds to your code.
Touches are registered as two touches on the touch screens of both the PinePhone running Phosh and the Librem 5. You can workaround that behavior with a tiny bit of code that can protect against double presses like this:
import time
from kivy.app import App
class MainApp(App):
over_press_timer = 0
def some_touch_event_processor_like_a_button_or_vkey_press(self, *kwargs):
if (time.time() - self.over_press_timer) > 0.3:
self.over_press_timer = time.time()
# put your touch processing logic here
You cannot use Phosh's native Squeekboard as a soft keyboard as it is VERY incompatible with Kivy. You need to use managed keyboard_mode for InputText widgets. You can use vkeyboard, but the default layouts are unusable on the small Librem 5 and PinePhone screens. Instead you will need to create your own custom layouts. I have an app that has 7 different keyboard layouts that my soft keyboard management code will swap among. Last but not least you need to fix Kivy's vkeyboard key_background_disabled_normal/key_disabled_background_normal bug or typo so your app will not randomly crash (not technically a Phosh issue but important when using vkeyboard on a Phosh device).
from kivy.uix.vkeyboard import VKeyboard
soft_keyboard = VKeyboard()
soft_keyboard.key_background_disabled_normal = soft_keyboard.key_disabled_background_normal
There is also a touchscreen calibration issue on Phosh. Kivy registers touches at the relative touch location of the touchscreen device rather than the widget render location on the screen. This is because Kivy doesn't know about the 36 pixels Phosh uses at the top and bottom of the screen for its own icons and controls. It doesn't make the app unusable, but it does mean that you have to reach a little higher and lower on the screen to activate a widget when the widget is near the top or bottom of the screen. This can be fixed to some extent by intercepting collide_point calls and calibrating the y position parameter. I am still looking for a more elegant solution to this issue. If I come up with a better workaround I might post it to this issue thread.
Hello,
I have a working Kivy based app which I would like to run on FOSS mobiles OSes like Plasma Mobile and Phosh (here on Pinephone with Manjaro and Mobian). But there are 2 issues so far which make Kivy unusable on those platforms:
both OSes use Wayland, and I've tried to build Kivy with Wayland support (using various compilation option combination), and each time I have a black screen. The only way I could make it run is using the X11 backend (XWayland is running on those OSes), but this is not ideal.
the virtual keyboard is not usable. By default it is not activated and the OS virtual keyboard does not detect the input field (tested on Phosh). In addition it is way too small (can be of course mitigated by customizing
VKeyboard
kv, but it would be good to have sane defaults). If I activate the virtual keyboard manually, the behaviour is funny with focus lost, and random touch events.It would be great to have native Kivy support for those platforms, or at least some documentation on how to compile in way similar to what is done for Raspbery Pi. Input field should activate the OS virtual keyboard, and focus should not be lost, touching the OS keyboard should not raise touch events in Kivy.
Thanks