LIBGDX softKeyboard on GWT module - java

In a nutchell my question is:
How can I show a soft-keyboard when accessing a LibGDX HTML (GWT) app via a mobile phone?
Details
In LibGDX, to bring up the soft-keyboard we can call this method:
Gdx.input.setOnscreenKeyboardVisible(true);
However, according to the documentation (https://github.com/libgdx/libgdx/wiki/On-screen-keyboard):
"On-screen keyboard functionality is only available the Android and iOS
platforms"
i.e.: not for HTML (GWT)
Problem:
If you access your HTML (GWT) application through a mobile or tablet, you have no way to show the soft-keyboard and therefore no way of typing anything in your texfield.
Given that most people are now accessing web sites using mobiles and/or tablets I assume many would haved face the same issue.

I'm pretty sure that it is not about LibGDX but about mobile browser itself - think about it like about handling input from some device (like keyboard) which actually should work both on PC and mobile devices - the keyboard is just not visible.
Then you should rather look for a solution of showing keyboard in mobile browser no matter if it is LibGDX application or not.
Here are some examples:
Show android keyboard from javascript
Can I trigger Android soft keyboard to open via javascript ( without phonegap )?
jQuery Mobile Show Keyboard on Input Focus
Show virtual keyboard on mobile phones in javascript
The general thing (and what also my small tests showed) is that you generally not allowed to open keyboard from script context. Maybe there is a hack for this but I'm pretty sure that at least it won't be working on every browser.
Since that I would rather recommend to use some input or to just implement your own "input layer" - user interface by using some kind of buttons.

For the GWT application I ended up creating a softkeyboard with:
A Keyboard image
An actor per letter with an action listener
Then an Action resolver for showKeyboard. If GWT show the soft keyboard.

Related

Is there a way to detect when a popup window appears in Android

I started a project of a windows program that connects to an android phone and gives the user information
about it, so I want to display all of the popups that appere on the phone. to do this I need the app version of the program to catch them somehow and give me the name of the app that sent the popup and the popup's contant. is it possible?
it would be kind of security issue if any app could do that... you can try with AccessibilityService with some permissions for reading screen/running Activities and checking style of every Activity is this "popup", but note that some of them are just DialogFragments. So I doubt you can recognize "popups" this way in a reliable way. Look for AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED for more info

Codenameone Facebook share through the Simulator

Helle everyone,
I'm wondering if there is a possible way to share a text On my Facebook profile, even while using the codenameone simulator.
I did my researchs but all what I find is the share using the "ShareButton" component which only works when you launch the app with an actual device.
Greetings.
The share button doesn't really know about facebook. It places the text into a special OS hook which offers you venues where to share that data. That's great because that means it can work for other social networks seamlessly and it uses the native OS to do the posting. Zero setup.
Desktops don't have an API like that. If you want to explicitly share to facebook you can just do something like this which will launch the browser:
Display.getInstance().execute("https://www.facebook.com/sharer/sharer.php?u=" + Util.encodeUrl(textToShare));

Is it possible to prevent Google Assistant from taking over RCU mic button signal in an Android TV app?

The Android TV (ATV) app I'm working on has voice control capabilities. Basically, when the user presses the microphone button on a remote controller, the key event (identified by KeyEvent.KEYCODE_SEARCH) is handled by the app, speech recognition starts (using android.speech.SpeechRecognizer), the results (parsed speech) are obtained and parsed further by the app logic (e.g. showing the user search results or performing some in-app action).
Everything has been working as intended and described above, until, quite recently, Google Assistant (GA) was introduced to ATV platforms (the first one being Nvidia Shield box). Now, when the RCU mic button is pressed, the GA overlay appears and the mic key event doesn't even reach the app.
For the last few days I've done some extensive research (documentation, internet, forums, stackoverflow etc.) and experimented with some potential workarounds, but nothing's worked so far and I haven't been able to find any definite information on the topic (probably due to the ATV+GA combination being rather new on the scene, and the ATV ecosystem not being as large as the Android one).
The best hint I got so far is what's been done with the Spotify app for Android TV. When it's run on an ATV device with no GA, it basically behaves as I described above; but when GA is present, the GA overlay appears, receives the parsed speech and shows the search results, with results from Spotify in the first line - so, the Spotify app is integrated with GA, and this integration replaces the in-app voice control mechanism. This suggests that either there is no way to ignore/disable GA inside your app in order to receive the mic key event and proceed with voice control as usual, or at least this is the preferred way of handling voice commands now. It also shows that there are apps for ATV that approach voice control the way I described, so maybe someone here has already encountered similar problem.
My question(s):
is it possible to prevent Google Assistant from taking over RCU mic button signal?
is it ok to do so? (by "not ok" I would mean - are there any official guidelines that discourage such behavior - or at least are there valid reasons not to do so?)
if so, can it be done?
if not, is there a resource documenting how to integrate with GA (the way Spotify for ATV app does)?
Starting with your last question:
if not, is there a resource documenting how to integrate with GA (the way Spotify for ATV app does)?
I wrote about how to integrate on the Android Developer's Blog. Spotify has onboarded their content catalog to Google's services which is why the Google Assistant is able to work so well. You can achieve similar results if you make your app searchable (covered in the blog).
is it possible to prevent Google Assistant from taking over RCU mic button signal?
No, not at this time. The Google Assistant is a system app that takes control over the mic to give a uniform experience across all apps.
is it ok to do so? (by "not ok" I would mean - are there any official guidelines that discourage such behavior - or at least are there valid reasons not to do so?)
if so, can it be done?
You can still have an in-app search experience. There is an example in the leanback sample. You will need to set a listener on a BrowseFragment and implement a SearchFragment. We know this can be confusing, have in-app search and Google Assistant search competing, but we are working on how to improve this.

libGDX as a "launcher" app

I have made a light weight java web-server serving html files and static content (made with pure java library nanohttpd), i have successfully made a javaFX launcher window that has a single button, clicking button simply runs the server in the background and opens the localhost URL in Android/PC browser (I was unsuccessful in making an IOS version using javaFX)
I am thinking of using libGDX as "launcher window" because of IOS support and access to mobile specific hardware like SMS/GPS which javaFX don't have.
I am targeting IOS/Android/PC, I'd like to ask libGDX developers how possible is this given my target platforms?
Yes you can
There's a catch though, you may have to build the UI the game dev way
I've made a game or two using it and had rather steep learning curve in the beginning to get a hold on to how it worked. For example you'll have to provide the images for button, background and also, the pressed view of the button... like that. But your app is not a game. So you won't have to worry that much.
Once you learned how to place them in the screen successfully, there is not much to worry about because the API provides everything you need to carry on from there.
Also I found enough resources/tutorials online enough to make a game from ground up. So you'll definitely can.
And there's very little to worry about your multi-platform problem.

Embed android application into other android application (Overlay + Events)

I was wondering if it's possible in android to embed an application into in another application. In this way you can have control of the embed application and you can add some other functionalities thanks to the parent application.
EDIT :
To be more accurate, I would like to have an application (parent application ) which can overlay the content of another application (embed application) without losing control of the parent application.
Thank you,
You can not specifically embed one app in another. And unless there is a specific inter-application API you have available to you, you cannot control the one app from your parent app either.
However if you just want to be able to view your parent app as some kind of overlay over another app, there are techniques that you might find useful.
It is possible to create an overlay view that can be seen when other apps are in the foreground. This is used by some chat clients, video playback, and task launchers. You can find some info on this method by looking at my answer here:
Background app to listen to Drag gestures
It is important to realise that in "the old days", a technique like this could be used to steal data from someone's phone. It was possible to receive taps & drags, and then pass them on to the other app.
This was a security hole, and has been fixed. So these days, you can choose if your overlay view should receive the taps or not i.e. if it is interactive, or just shows info.
Because of this, you will not want to cover up any of the "embedded" app with your own UI.
It is not possible any more to receive taps in your app, and pass them through to the other app.
This is not possible in general. The only thing that comes close is "embedding" an app widget in a home screen.

Categories