Commit Graph

615 Commits (e86c24c20cbb38dd811397db87366f661abdfd1d)

Author SHA1 Message Date
Bartlomiej Moskal abe3bc1c43 Android: Do not close the keyboard for NO_ENTER_ACTION
After commit cc9144b4f3, virtual keyboard
is hiding after clicking the done button. This is expected behavior,
but not in case when imOption is set to IME_FLAG_NO_ENTER_ACTION[0]

This commit removes hiding keyboard in mentioned case.

[0]https://developer.android.com/reference/android/view/inputmethod/EditorInfo#IME_FLAG_NO_ENTER_ACTION

Pick-to: 6.5 6.4 6.2
Fixes: QTBUG-107662
Change-Id: Id280c4a67e3940fce5045724f77284a77c886f06
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-12-21 18:56:28 +00:00
Assam Boudjelthia 31a0d99fa5 Android: fix deprecations for getDrawable() on QtMessageDialogHelper
Pick-to: 6.5 6.4 6.2 5.15
Change-Id: Icd359663af11f44b4bcf0cd4e4f1f7f5a51242e4
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-12-21 02:28:56 +02:00
Assam Boudjelthia 40b42ac517 Android: Fix deprecations AlertDialog.setButton()
https://developer.android.com/reference/android/app/
AlertDialog#setButton(java.lang.CharSequence,
%20android.content.DialogInterface.OnClickListener)

Pick-to: 6.5 6.4 6.2 5.15
Change-Id: I470acba581b7226b2d4a56754cf6372baa167eb4
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-12-21 02:28:56 +02:00
Bartlomiej Moskal eda4049a01 Android: Fix for low contrast status bar
After we start to use THEME: Theme_DeviceDefault_DayNight, status bar
icons have low contrasts on some devices.

That is why we need to set APPEARANCE_LIGHT_STATUS_BARS[0] in case when
Status bar color is too bright.

[0]https://developer.android.com/reference/android/view/WindowInsetsController#APPEARANCE_LIGHT_STATUS_BARS

Fixes: QTBUG-108365
Pick-to: 6.5 6.4 6.2
Change-Id: I38a31cfb0a3a1b912b86ed1b302c567e14a7ffcc
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-12-20 13:42:31 +01:00
Bartlomiej Moskal cc9144b4f3 Android: Close the keyboard after clicking Done
The keyboard was not hiding after clicking the done button.
This commit changes this behavior. If KeyCode is other than
IME_ACTION_PREVIOUS/IME_ACTION_NEXT the keyboard closes automatically.

Fixes: QTBUG-107662
Pick-to: 6.2 6.4
Change-Id: I3449aa6898b826bfa03104275c7224329f24ed9a
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-12-14 15:28:27 +01:00
Assam Boudjelthia e5d591a0d0 Android: Add facilities to handle more content URIs operations
Use DocumentFile and DocumentsContract to support more operations
on content URIs, such as:
* listing files and subdirectories with usable content uris
* mkdir, rmdir
* creating non-existing files under a tree uri
* remove

And since dealing with content URIs require some level of user
interation, manual tests were added to cover what's been implemented.

Note: parts of the code were from from BogDan Vatra <bogdan@kdab.com>.

Pick-to: 6.4 6.2
Task-number: QTBUG-98974
Task-number: QTBUG-104776
Change-Id: I3d64958ef26d0155210905b65daae2efa3db31c1
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-12-14 12:15:38 +02:00
Tor Arne Vestbø 53b413f1c5 Rename QMessageDialogOptions::Icon to StandardIcon
To clarify its use as a pre-defined standard icon, which is a separate
use-case from providing a user-defined QIcon.

Change-Id: I187ce2e5f125a7392b1279c9bd1e871790c8065f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-12-13 13:41:28 +01:00
Piotr Mikolajczyk 9ce8d4890f Add handling of screen hotplug
When a display is connected to an Android device
a notification is sent to the platform layer of the
application. The QAndroidPlatformIntegration will create
a platform screen and add it to QWindowSystem.

Task-number: QAA-1257
Change-Id: Id2cf6b47363630c3b5c93c0bc778e2058d8372b3
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-12-13 07:49:22 +00:00
Assam Boudjelthia 633ab16bc8 CMake:Android: copy templates, bindings and gradle files pre_build
At the moment when doing a non-prefix build and changing some of those
files, CMake will not update the changes to the build folder unless
done manually or a re-configure is done manually.

qt_copy_or_install() only does copy those files at configure time once,
and using CMAKE_CONFIGURE_DEPENDS would be an overkill here and even
a bit of an extra annoyance, so in this case having a custom command
seem to be suitable.

Done-with: Alexey Edelev <alexey.edelev@qt.io>
Change-Id: I55aa9e9d3eea32a4bb54c64abd4cbdcb891c44b6
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
2022-12-09 15:25:02 +02:00
Assam Boudjelthia 80fbabad8a CMake:Android: add Android templates, bindings and gradle files to tree
Add Android templates, bindings and gradle wrapper files to custom
targets so they can be easily tracked by the project tree when using
Qt Creator for example.

Change-Id: I4144b9ee461139a9f768c57b14139e0fc21d4c28
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-12-02 10:29:24 +00:00
Samuel Mira bb629a2e29 Android: Fix incorrect dimensions - part 2
The previous fix worked for lower API levels but failed to
work properly on some devices (Devices with > 29 API levels). This
patch fixes that issue.

Task-number: QTBUG-107604
Task-number: QTBUG-107923
Pick-to: 6.2 6.4 5.15
Change-Id: I8fd3601225026ea5c370a8a1a1aab317558432b5
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-11-25 15:35:17 +02:00
Rami Potinkara 01780d753e Update Gradle to 7.5.1 and Android Gradle Plug-in (AGP) to 7.3.1
Gradle 7.5.1 and AGP 7.3.1 versions are the latest at the moment.

Fixes: QTBUG-105510
Change-Id: Ie2229e8929a82d60836a5fe7b3a879459995f63e
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-11-25 12:11:47 +02:00
Samuel Mira d53ea82950 Android: Fix incorrect fullscreen dimensions
The insets used to calculate the correct height were not the best
choice. It used display cutout insets which would work correctly on
most devices, but in the case of an emulator or a device without a
camera, it could fail to calculate correctly.

Task-number: QTBUG-107604
Task-number: QTBUG-107709
Task-number: QTBUG-107523
Pick-to: 6.4 6.4.1 6.2 5.15
Change-Id: I8c4da83ae7359a0c133dbeb02dbd2cd260565f78
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-11-07 09:06:34 +00:00
Bartlomiej Moskal b4a9bb1f6a Android: Handle light/dark mode changes
Update Theme's style according to current UiMode.

New style.json file for dark mode was added (stored in separate
subdirectory 'darkUiMode/'). Theme_DeviceDefault_DayNight[0] is used for
extraction for API 29 or higher. Style is updated each time when UiMode
is changed.

[0]https://developer.android.com/reference/android/R.style#Theme_DeviceDefault_DayNight

Task-number: QTBUG-83185
Pick-to: 6.4 6.2
Change-Id: Id26059231f41761d822d494ac6c641bf3cba3322
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-26 17:13:44 +02:00
Wojciech Błaszak fbf586db2c QGuiApplication on Android can now detect multiple displays
- Extending QtNative.java with access to DisplayManager and get
  details about available displays
- Extending Android Platform Integration with display's list
  handling
- Change QAndroidPlatformScreen to initialize itself from QJniObject
  representation of an android Display object
- Move initialization of Primary display from QAndroidPlatformScreen
  to QAndroidPlatformIntegration

Change-Id: I3d8f97f5cf9f81bbecc8716c25ff323097e57a15
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-26 15:32:52 +03:00
Samuel Mira 98a9c38437 Fix crash on access clipboard on Android
A case where the accessing the clipboard is done when the application
does not have the input focus. Android does not allow access in this
case and returns null on the getPrimaryClip. This happens on some
examples like Analog Clock. Does not happen on autotests.
Fix was adding a test for null.

Fixes: QTBUG-107926
Change-Id: I685594545e5ae8102c257c033fffbcc4f20cef9a
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-26 09:27:42 +03:00
Ville Voutilainen e7553adf16 Android: Add a way to disable accessibility via an environment var
Pick-to: 6.4 6.3 6.2 5.15
Task-number: QTBUG-102168
Change-Id: I38956c1798b8874b3c5bc5b19c8cb09380e76cc3
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-20 14:47:49 +03:00
Samuel Mira 2937cf91c7 Android: Stop using getPrimaryClipDescription
The function getPrimaryClipDescription was used to establish if the
clipboard data had text, html and/or uris. Analysing QTBUG-106646 and
tst_qquicktextedit showed inconsistent results, namely the description
hasMimeType failed to find html mimetype on copy&paste.
This patch changes it for searching it by hand instead of using
hasMimeType function.

Task-number: QTBUG-106646
Change-Id: I8918938e7a3fa6953eac95b72959fca85050e52f
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-10-18 07:29:51 +00:00
Thibaut Cuvelier bc1e0e92aa Fix a typo in Android docs
One cell spans 7 rows, while it indicated 8 rows. This typo implied that
one row had four columns, unlike all the others.

Change-Id: I6ae6f5b08fa5183228d1fb878d821a22bc2a1d39
Reviewed-by: Luca Di Sera <luca.disera@qt.io>
2022-10-05 20:13:57 +02:00
Assam Boudjelthia 2a47bb221d Use SPDX license identifiers lefovers for some Java files
Replace the current license disclaimer in files by
a SPDX-License-Identifier.

This amends 05fc3aef53.

Pick-to: 6.4
Change-Id: Ie6bbdcd0d764ce1295f45f2d41d7c1c1ab47d9a8
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-10-04 19:18:22 +03:00
Samuel Mira 413593183b Android: Fix Display.getRealMetrics deprecation
In latest Android versions some functions related with Display metrics
were deprecated. This patch changes some instances of that code to use
the Resources.getDisplayMetrics or WindowManager.getMaximumWindowMetrics
depending on the situation.

Fixes: QTBUG-99543
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Id9846efa877f704ef7f58c1b0820ad1527b53f09
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-09-27 14:12:11 +03:00
Samuel Mira 072387edec Android: Fix flickering on window resize and show keyboard
Changed to use display getMetrics which will return the size of the
application window, and use getRealMetrics to obtain the size of the
largest region accessible to the app.
I updated the fullscreen mode to use the new sizes.

Task-number: QTBUG-41170
Task-number: QTBUG-66727
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ic25555ed2e1b910b3fdbc0f3a31e3a19763a04eb
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2022-09-17 08:42:48 +00:00
Bartlomiej Moskal 76abdaafb5 Android: Light/dark modes detection
After commit: 2248487c6c light/dark mode
detection is supported by Windows and macOS. This commit add similar
implementation on the Android side.

Task-number: QTBUG-83185
Pick-to: 6.4 6.3 6.2
Change-Id: Id1ece98e91a31759b58d651ef62b3715ea25d85f
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-09-05 18:29:09 +02:00
Jens Trillmann b8a9527544 Android A11Y: Check for active surface before calling into native code
This fixes a deadlock. The deadlock occurs on an application state
change. During this state change the QML plugin requests Android to
create a new surface for drawing and waits on the Android thread to
complete the request (QAndroidPlatformOpenGLWindow::eglSurface()).

In the meantime the android a11y delegate gets requests from the
android a11y interface. The delegate tries to access the a11y
information through the native interface, where it has to wait for the
main loop thread to get the a11y information from the QtQuick objects.

This leads to a deadlock in which the main loop thread waits on the
quick rendering thread, the rendering thread waits on the android thread
and the android thread waits on the main loop thread.

This workaround avoids this issue by not calling into native code until
a rendering surface has been created.

Task-number: QTBUG-105958
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ib99145aa689d1d62e25d25e1f4f8598d53eee3a9
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-09-02 17:00:23 +02:00
Jens Trillmann 56c4d183ec Android A11Y: Fix TalkBack scrolling behavior
* Add CollectionInfo to scrollable nodes.
  Every scrollable node will get a CollectionInfo attached to signal
  the number of (possibly invisible) children.
  This is necessary as TalkBack on Android doesn't scroll to items not
  visible on screen if the number of further child nodes is not
  communicated to TalkBack.
* Return success of scroll to TalkBack.
  TalkBack needs the result of the scroll to decide if it should leave
  the current element or stay after a scroll was successful.
  Success of a scroll action is measured as the successful movement
  of the children of the scrolled element. This is a workaround for
  the Qt Accessibility API not returning the success of failure of a
  performed action.

Task-number: QTBUG-103499
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ie2c51d0b77fb5030973a0f93c42e0db3082be45e
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-08-29 12:31:23 +02:00
Jens Trillmann 3c70919883 Android A11Y: Notify android about scroll events
QtQuick Flickable has an issue that after a scroll the previously
hidden items are not added to the A11Y hierarchy. That happens because
Android has no ways to detect that something has changed.

This patch uses the ScrollingEnd event to notify Android A11Y backend
that the Flickable was scrolled, so that it could update the A11Y
hierarchy and add the previously hidden nodes.

The ScrollingEnd event generation is added to QQuickFlickable in a
separate commit.

Task-number: QTBUG-103513
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ie6cd688d56343bcfe7ce9580c0b9244dd6d6c068
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Samuel Mira <samuel.mira@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-08-29 12:26:43 +02:00
Lucie Gérard 32df595275 Change the license of all CMakeLists.txt and *.cmake files to BSD
Task-number: QTBUG-105718
Change-Id: I5d3ef70a31235868b9be6cb479b7621bf2a8ba39
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-08-23 23:58:42 +02:00
Assam Boudjelthia edc024e826 Android: handle quoted args passed to an app
Currently, arguments passed to the app through applicationArguments
extra bundle treat every space as an argument separator. This then
doesn't handle the case where an argument is a space separated quoted
multi-word. This is more apparent when androidtestrunner is passing
test arguments to the app where an argument can be a test case with
a data tag that contains a space, which then is treated as two separate
tag names.

This change makes sure that androidtestrunner quotes each argument,
and the app doesn't split the arguments list by spaces, but rather
passed the argument string directly to c++ where
QProcess::splitCommand() is used to get the correct set of arguments
that will be passed to main().

Pick-to: 6.4 6.3 6.2
Task-number: QTBUG-104730
Change-Id: I45d8ca979d90f2a383c84623f0eb2eec29bba727
Reviewed-by: Dimitrios Apostolou <jimis@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-08-11 13:21:44 +00:00
Lucie Gérard fb1b20eab3 Add license headers to cmake files
CMakeLists.txt and .cmake files of significant size
(more than 2 lines according to our check in tst_license.pl)
now have the copyright and license header.

Existing copyright statements remain intact

Task-number: QTBUG-88621
Change-Id: I3b98cdc55ead806ec81ce09af9271f9b95af97fa
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-08-03 17:14:55 +02:00
Rami Potinkara 8bf9769d54 Update Gradle to 7.4.2 and Android Gradle Plug-in (AGP) to 7.2.1
Gradle 7.4.2 and AGP 7.2.1 versions are the latest at the moment.

Fixes: QTBUG-103711
Pick-to: 6.4
Change-Id: I871d1331e0340e1cda7dbbc0799bb2c20aed6146
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-07-06 11:43:56 +03:00
Mike Achtelik d48ebb02fb Android A11Y: Add content change type to content change event
This fixes a problem where the accessibility tree is not correctly
updated, when using e.g. a StackView. The problem was, that sometimes
when pushing items of the previous view where still selectable via
TalkBack. When popping this sometimes lead to some views not being
selectable because the subtree wasn't updated. To solve this, lets tell
android directly that the subtree changed when invalidating a view.

Fixes: QTBUG-102825
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ifbf8da1b95f02935b9bcffabfe821547b1128103
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-07-05 22:08:21 +02:00
Pekka Gehör c27cca5c34 Android: fix wrong position of cursor handle and editpopup menu in split screen
Use activity location in the Window to handling a cursor handle and editpopup menu
in Multi-Window mode. No effect when using full screen.

Fixes: QTBUG-58503
Pick-to: 5.15 6.2 6.3 6.4
Change-Id: I17f3119be4c3dda2fca50156bf62c1260c2ea1f6
Reviewed-by: Samuel Mira <samuel.mira@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-06-29 16:02:55 +03:00
Kai Köhne 9d2cc4dd76 Fix typos in docs and comments
Found by codespell

Pick-to: 6.4
Change-Id: Ie3e301a23830c773a2e9aff487c702a223d246eb
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-06-15 21:31:02 +02:00
Samuel Mira e07fea6fb4 Android 13: Fix warnings on starting an application
On Android 13, currently in beta, android triggers a warning because it
is using a deprecated getDrawable function.
The patch changes it to use the non-deprecated alternative as suggested
in the warning.

Fixes: QTBUG-103568
Pick-to: 5.15 6.2 6.3
Change-Id: I3e629e7b75044bfb51874256895be0ec7e1088f8
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-06-13 13:37:36 +00:00
Tinja Paavoseppä 9af1f3557a Add option to not include native libraries in APK
Sometimes it is not desirable to include the libraries in the APK,
e.g. system and vendor apps could prefer having one set of libraries
installed on the device. If unbundled deployment is specified,
native libraries will not be included in the APK.

With unbundled deployment, optional arguments can be passed to
set the path to load the libraries on the device.

[ChangeLog][Android][Deployment Changes] Adds option for Unbundled
deployment, where native libraries are not packaged in the APK.

Task-number: QAA-771
Change-Id: Ica51ef83a24dad58c7586bf610a58abe21fc1100
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-05-20 08:08:02 +03:00
Lucie Gérard 05fc3aef53 Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Task-number: QTBUG-67283
Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-05-16 16:37:38 +02:00
Ivan Solovev 0613146d21 Android A11Y: handle LocationChanged event only for focused element
LocationChanged event unconditionally triggered invalidateVirtualViewId
call. That call results in TYPE_WINDOW_CONTENT_CHANGED Android event,
which causes a lot of background processing.
That is not correct, because LocationChanged event is generated by
every accessible element, not only the one that has A11Y focus.

This patch checks event->uniqueId(), and processes only events that
come from the focused accessible element.

Done-with: Mike Achtelik <mike.achtelik@gmail.com>
Task-number: QTBUG-102594
Pick-to: 6.3 6.2 5.15
Change-Id: I6b941733c9d215fed5ee5a7aeeb5be234add9ebe
Reviewed-by: Mike Achtelik <mike.achtelik@gmail.com>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2022-05-16 15:16:35 +02:00
Samuel Mira 08a4fd3570 Android: Fix ANR when QtService and QtActivity load in same process
This patch is a fix to prevent the ANR. In this patch, the QtService
queries QtNative if there is a QtActivity or QtService started and,
in case there is, it does not begin the loading process. When that
happens, the QtService will be a regular android Service.

Fixes: QTBUG-99691
Pick-to: 5.15 6.2 6.3
Change-Id: Ibd8aa8554107a9744b53cca4e0dd7e6f9b25baea
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
2022-04-28 22:14:00 +00:00
Samuel Mira 5fd6704091 Fix restart QtActivity
Previously, a restart of QtActivity on Android would make the
application fail with a blank screen. That happened because the
QtActivity tried to reload the whole application and failed.
With this patch, the QtActivity detects if the application is restarting
by checking if QtNative and QtActivityDelegate are live and updates the
connections on those objects accordingly. It allows the application to
continue as before. In case that is not possible, the QtActivity will
restart the application.

Fixes: QTBUG-38971
Fixes: QTBUG-102298
Pick-to: 5.15 6.2 6.3
Change-Id: Id500d20b185d57b39d45d34eeaa99745a3c2b95b
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-04-27 19:55:33 +00:00
Assam Boudjelthia 3a9aba287c Android: set useLegacyPackaging to true in build.gradle
Since we set android:extractNativeLibs to "true" in AndroidManifest.xml,
a warning is thrown by the gradle build, which needs the property
packagingOptions.jniLibs.useLegacyPackaging to be set to true.

Pick-to: 6.2 6.3 5.15
Change-Id: I725d2663d68ab88abfda630f8a61666510043967
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Ramon Sadornil <ramon.sadornil@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2022-04-26 11:18:35 +00:00
Assam Boudjelthia 56dee3de5e Android: add missing properties in AndroidManifest.xml
Some missing values has to be defined in AndroidManifest.xml, otherwise,
warnings might be thrown.

* android:exported="true": because the manifest sets an intent-filter,
and it then has to explicitly to avoid the warning [1].
* android:allowBackup="true": this has to be explicitly set, we set it
to the default value here [2].
* android:fullBackupOnly="false": SDK 23+ use this to deteremine to
user auto backup or not, we set it to the default value here [3].

[1] https://developer.android.com/guide/topics/manifest/activity-
element#exported
[2] https://developer.android.com/guide/topics/manifest/application-
element#allowbackup
[3] https://developer.android.com/guide/topics/manifest/application-
element#fullBackupOnly

Pick-to: 6.2 6.3 5.15
Fixes: QTBUG-101320
Change-Id: I0872dc00e48a867154ec9ded26620383fb747918
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
2022-04-26 11:18:35 +00:00
Ivan Solovev d85c6527b5 Android: fix fullscreen handling
Commit a35a7fcb5a introduced the usage
of insets to correctly take into account the default Android status bars
and other reserved regions.

However in practice that does not work as expected - the bottom inset
is always reported to be non-zero, even when fullscreen mode is enabled.
To fix the issue, FLAG_FULLSCREEN is explicitly checked before applying
the insets.

Fixes: QTBUG-99624
Pick-to: 6.3 6.2
Change-Id: I8b25f0b06447cd452c42ef072493e3137e25f38b
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-03-29 13:56:14 +01:00
Ivan Solovev 30830e0cba Android: use empty Intent to clear clipboard data on API < 28
ClipboardManager didn't have any APIs to clear clipboard data before
API level 28.
As a workaround an empty Intent with MIMETYPE_UNKNOWN is created and
inserted into the clipboard for lower API levels.
This makes the QApplication::clipboard()->clear() method work more or
less as expected.
This allows to unblacklist tst_QPlainTextEdit::copyAvailable().

Task-number: QTBUG-87423
Task-number: QTBUG-89402
Pick-to: 6.3 6.2
Change-Id: I454376199cf3b8eed0fa2ecf2f85b87f40892280
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-03-18 18:35:03 +01:00
Assam Boudjelthia 7d77deb281 Android: rephrase default value statement use in manifest doc page
Use "The default value is \c xxx" instead of "Default \c xxx".

Pick-to: 6.2 6.3
Change-Id: Id75b45499c7fc0e9d42e66fa2b8b3515c863c61c
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
2022-03-11 05:25:46 +02:00
Assam Boudjelthia 1956ca7d70 Document use of android:allowNativeHeapPointerTagging in the manifest
Document the tag for more clarity on why it's needed, and for what
platforms.

Pick-to: 6.2 6.3
Task-number: QTBUG-97009
Task-number: QTBUG-91150
Change-Id: Ie4522fb582583be07270d3cdbf83992897b51669
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
2022-03-05 17:37:33 +02:00
Ivan Solovev 79fb80152f Android: make sure that orientationChange is reported after resize
On Android orientation changes are reported from the
DisplayListener.onDisplayChanged() method, while the screen size
changes are reported from QtLayout.onSizeChanged().
In practice these callbacks come in random order, so rotating the
screen multiple times might result in inconsistent order of signals
and events.

This patch makes sure that size change events always happen before
orientation changes. This is done by caching the new orientation
values and reporting them only when needed. At this point we also
need to use QMetaObject::invokeMethod() for orientation change,
like it is done for geometry change. Otherwise the orientation
update can still be processed earlier than the geometry change.

Also note that at some point we might get an orientation change
without a size change (for example Qt::LandscapeOrientation ->
Qt::InvertedLandscapeOrientation). That is the reason for
isSimilarRotation() helper function.

As a drive-by: ignore size changes with inconsistent values when window
size is reported to have old orientation, while the screen has already
been rotated. In such cases a new size change will be triggered shortly
with normal value.

Task-number: QTBUG-94459
Pick-to: 6.3 6.2 5.15
Change-Id: I5c98e526d0370d380344b2297169d5e0c0ee8ea7
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-03-04 02:37:11 +01:00
Samuel Mira fef455999a Android: Fix issue in loading multimedia Android plugin
Qt projects on Android were failing to correctly load the plugin lib.
The main reason is missing environment variables when the media
integration starts. To make sure that the variables are loaded, I have
change the setenv to be done in the java side instead of c++ side.

Fixes: QTBUG-100299
Pick-to: 6.3
Change-Id: Iba0b6af40574be2d88824ebdcfb1626335cecf09
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-03-02 11:23:54 +02:00
Ivan Solovev b238f83380 Android A11Y: handle valueChanged events
Before this patch Android A11Y implementation was missing
ValueChanged event handling. As a result, no update was given
when the element's value was changed.

Handling these events allows us to announce value changes on such
objects like Slider, SpinBox, etc...
This is a universal method of value-change announcement, so it
supports all sorts of A11Y gestures.

On the Java side a new function was introduced to announce the
values, because we need to use the actual element's *value*,
not its accessible name or description.

Task-number: QTBUG-93396
Pick-to: 6.3 6.2 5.15
Change-Id: Ic44abd5f01b9b6f5468962131466edaf6a49d498
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
2022-02-15 17:51:33 +01:00
Ivan Solovev b99fdae5f5 Android A11Y: populate child elements when constructing node info
This commit partly reverts 020a6f0daec2e36866888b23c8b3a65bfb366146.
It restores the code that is responsible for filling the children
for individual elements. Without this code, we have only top-level
element and its children in our accessibility hierarchy.

Fixes: QTBUG-100545
Pick-to: 6.3 6.2 5.15
Change-Id: I0604bbf5f1bdb0b3998a25fec7ed0a1fe554da8d
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-02-14 09:34:36 +01:00
Ivan Solovev 7c00ad4e9a Android: Re-focus focused accessibility node after orientation change
Before this patch the accessibility focus on a selected element could
be drawn incorrectly after the screen orientation has changed.
The reason for that is that wrong X and Y offsets were used for it.
The offsets are used to take the sizes of different panels (like
buttons and notifications bar) into account.
Normally they are updated only when getNodeForView() is called and the
whole accessibility info is reconstructed.
However, when the screen orientation changes, we get some
getNodeForVirtualViewId(selectedId) calls before the whole accessibility
tree is recreated. This is when redrawing happens, and as I understand,
this is an internal Android event, so we can't do much about it.

The most straightforward fix for the problem would be to query the
offsets also in each getNodeForVirtualViewId() call. However, offset
calculation seems to be quite heavy operation, and
getNodeForVirtualViewId can be called very often (esp. if we have a lot
of UI elements). As a result, this fix can't be implemented.

In this patch I came up with the second approach - once getNodeForView()
is called, and it detects that the offsets have changed, we force
re-focus of the currently selected element. This allows us to retain the
offsets-caching mechanism.

Fixes: QTBUG-93402
Pick-to: 6.3 6.2 5.15
Change-Id: Ic420afe1fe5e80fbdf91b2b2651f2daa71c6e44d
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-02-09 21:46:25 +01:00
Ivan Solovev 6d00aac109 Android: extract parentId for hidden object in advance
This commit amends 850a7f1238.
We can't extract the parentId for the hidden object on Java side,
because the Java call is executed in a separate thread, so the
original hidden object can be destroyed somewhere in the middle of
parentId() call.
As a workaround, we get the parentId in advance, on C++ side, and pass
it as a parameter to JNI function.

Task-number: QTBUG-95764
Pick-to: 6.3 6.2 5.15
Change-Id: Ied2ab4ab39b947f3f582575cf77cc76fbac9e274
Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-02-09 16:48:26 +01:00
Ivan Solovev 850a7f1238 Android A11Y: fix content update notification when object is hidden
When the object is hidden, we should not use its viewId to notify
content changed. Instead, we need to use its parent id.

Task-number: QTBUG-95764
Pick-to: 6.3 6.2 5.15
Change-Id: I608658e21c401d76459a09e4b274c60b849ace86
Reviewed-by: Jarkko Koivikko <jarkko.koivikko@code-q.fi>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-01-28 00:22:41 +01:00
Ivan Solovev f6ddb3e921 Android: explicitly remove accessibility focus when element is hidden
Before this patch when an element that had an Accessibility focus was
hidden (for example, a button because of Accessibility.onPressAction),
the focus was still remaining on that hidden element. So the next
doubletaps on the screen caused the Accessibility.onPressAction() of the
hidden element to be executed again and again.

To fix this, we have to explicitly send a FOCUS_CLEARED event to the
Android OS, when the object is hidden.
Another needed fix is to set the m_focusedVirtualViewId in
notifyObjectFocus() properly.

Fixes: QTBUG-93393
Pick-to: 6.3 6.2 5.15
Change-Id: I6ff8a19868b96842719924037545c4ecc91e0dad
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-01-28 00:22:41 +01:00
BogDan Vatra c1a93b20ff [Android]: Handle the screen name, modes and refreshRate properly
Fixes: QTBUG-87136
Fixes: QTBUG-93823
Fixes: QTBUG-94959
Pick-to: 6.3 6.2 5.15
Change-Id: Id480e22611ec949b5e3ee780fc695fb502a5950c
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-01-28 00:22:41 +01:00
Tinja Paavoseppä 1e64b58c35 Recognize system apps also when apk has parent directory
When checking if the apk is being deployed from system partition,
account for possibility of the apk not being installed directly under
/system/app or /system/priv-app, but in a directory of its own.
Otherwise, system applications that are not directly under system app/
priv-app directories will not be recognized as system apps, meaning
they will not use the system library path to load their libraries.

Pick-to: 6.2
Change-Id: I1e778b18cae3c0406e087b8c78fd31d521f7be73
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-12-08 19:22:36 +02:00
Assam Boudjelthia f1c2b6f5f9 Android: add methods to get the FileDescriptor for a Uri
This can be useful for some cases when the Android APIs have calls
that expects a FileDescriptor instead of a Uri or an int file
descriptor (like a case in Qt Multimedia with MediaRecorder).

Pick-to: 6.2
Task-number: QTBUG-96081
Task-number: QTBUG-96957
Change-Id: I0ab8d37a43b7cb94f6ebb5d48014e5a7903aadc7
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
2021-12-03 14:19:21 +02:00
Assam Boudjelthia be55118bd3 Android: simplifications to exception messages for content file handling
The method getUriWithValidPermission() now returns null only if the
Uri couldn't be parsed, otherwise, returns the parsed Uri and fail later
when used if it doesn't have permissions for example.

Also, Don't use use hardcoded strings for method names, and print the
exception message instead of the whole stack.

Pick-to: 6.2
Task-number: QTBUG-96081
Task-number: QTBUG-96957
Change-Id: If7ba88265c9683e6660cb483cfee6c22016f2976
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
2021-12-03 12:19:21 +00:00
Nicholas Bennett a4dca9936d Docs: Move manifest and androiddeployqt docs to where code lives
Removed content describing androiddeployqt from deployment-android.html
to androiddeployqt.html,the qdoc source now living in qtbase.
Docs src locations added to the qtcore.qdocconf.

Task-number: QTBUG-97842
Pick-to: 6.2
Change-Id: I94783520280098ce1ab35f335a644bea70b8131a
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-11-19 12:18:50 +00:00
Mike Achtelik d6da61f3b9 Android: Treat ACTION_CANCEL as TouchCancelEvent
Change 64d62c53c1 started treating an
ACTION_CANCEL as a TouchPointReleased. This leads to unintentional
presses, if e.g. an edge swipe for the android back gesture starts on a
MouseArea.

When Android takes possession of the motion, an ACTION_CANCEL is
delivered, which needs to be handled as such. It should not be treated
as a normal up event that triggers a press. Otherwise, we get the
above-mentioned issue, where an unintentional action is performed.
So let's use QWindowSystemInterface::handleTouchCancelEvent to treat it
as a canceled touch in Qt.

Task-number: QTBUG-72110
Pick-to: 6.2 5.15
Change-Id: I68650a180130501568e5a1e9a7f20ea469461e97
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-10-29 08:39:55 +02:00
Rami Potinkara b1820295e1 Revert "Android: Place cursor correctly on screen when editing"
This reverts commit 5c6b10c3ce.
It caused a regression such that the main window no longer resized or
panned when the VKB is shown, in spite of android:windowSoftInputMode
being set.

Pick-to: 6.2 5.15
Task-number: QTBUG-95300
Task-number: QTBUG-96117
Task-number: QTBUG-97503
Change-Id: If56e1113eea69a940f6760bdb2ad06a93a0759c1
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-10-26 20:46:24 +00:00
Mårten Nordheim 5ea712987b Update Gradle to 7.2.0 and Android Gradle Plugin to 7.0.2
The latest build-tools 31.0.0 requires AGP version 7.0+, and that
requires Gradle version 7.0+, so use the latest stable release for both.

[1] https://developer.android.com/studio/releases/gradle-plugin?
buildsystem=ndk-build#updating-gradle

Fixes: QTBUG-97002
Pick-to: 6.2
Change-Id: I8ff26819bdf1a00f484ecc194c4d4e7bca2b598a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-10-22 19:54:45 +02:00
Assam Boudjelthia 54576b3dd9 Android: set allowNativeHeapPointerTagging to false in the manifest
Android 11 enables pointer tagging by default on arm64 systems [1],
which can cause QML to get invalid data, which caused the color
issue (and most likely other issues).

[1] https://source.android.com/devices/tech/debug/tagged-pointers

Fixes: QTBUG-97009
Task-number: QTBUG-91150
Change-Id: Ic4f145bba3345b3bee5445685f03269e3785f514
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
(cherry picked from commit 9fa805f7f8dfe96d561e9ed3170770ad768baf93)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2021-10-21 11:39:53 +00:00
Andy Shaw d0d29a944a Android: Hide the keyboard when the height is less than 0
When swiping on a device to do the back gesture then there is no back
key pressed sent so we still need to catch when the keyboard is hidden.
So we can listen for the geometry change and if the height is less than
0 then it is safe to say it is hidden so we update the internal setting
on this.

Fixes: QTBUG-96560
Pick-to: 6.2 5.15
Change-Id: Iec0560935ef914d2cebcb7641a72ab4f71877d23
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-10-14 17:20:58 +02:00
Assam Boudjelthia 7235eeab19 Android: replace ndk.dir with android.ndkVersion in build.gradle
The use of ndk.dir in local.properties is deprecated in favor of
android.ndkVersion in build.gradle, and will be totatlly removed in
the future, so we need to adapt to that.

Fixes: QTBUG-91391
Pick-to: 6.2
Change-Id: I54c57113a759d43c3685c9cdf2b9dcc5c948c0fd
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
2021-10-13 18:33:32 +03:00
Assam Boudjelthia b02d88e416 Android: Update and add missing gradle files for jar folders
Update the build.gradle for main Qt jar code, and add same files for
network and network information backend, so the code can be managed
from Android Studio.

This also adds .gitignore to ignore Android Studio build artefacts.

Pick-to: 6.2
Change-Id: Ic06e9d12708070fad112f17e58b8754608d184f3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-10-06 16:05:19 +03:00
Assam Boudjelthia 3dbca82f86 Android: use gradle repo mavenCentral() instead of jcenter()
jcenter() is deprecated and will be shutdown by next year [1], thus
the replacement mavenCentral() could be used instead.

[1] https://blog.gradle.org/jcenter-shutdown

Pick-to: 6.2
Change-Id: Ic9d1c15d657f23712ee4c866d5c1a45706353429
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-10-06 16:05:18 +03:00
Assam Boudjelthia a1e7c441de Android: remove comments from the manifest file
The comments are not needed, since we're adding a docs page
for the manifest, which include the information from these
comments and more. Keep the manifest clean.

Pick-to: 6.2
Task-number: QTBUG-95285
Change-Id: I1fd8bc695f5aab1bcc69f549cb3ddeeaac168b98
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-10-02 12:11:23 +00:00
Andreas Buhr 07cfab07a2 Specify Android architecture in gradle files
When building for armeabi-v7a, building and APK using
"ninja foo_make_apk" works. Building it by calling
"gradlew assembleDebug" works. Opening the "android-build" folder
in Android Studio and clicking the "Build" button works.
But clicking the "Run" or "Debug" button in Android Studio does not
work when the attached phone is arm64-v8a. Then Android Studio
automatically selects the v8 architecture which does not find the Qt
libraries. This patch adds explicit ABI selection to the gradle
configuration files. With explicit ABI selection, Android Studio does
not try to outsmart you.

Pick-to: 6.2
Fixes: QTBUG-96701
Task-number: QTBUG-87022
Change-Id: I4ad6356c38b7eca004c0e0dbbb357cab7de84c0f
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-09-30 17:27:16 +02:00
Andreas Buhr 95ef193715 Rename variable to not reference Qt5
In the Android gradle files, the variable qt5AndroidDir refers to Qt5
and might confuse users. This patch renames to qtAndroidDir.

Pick-to: 6.2
Change-Id: Ib18a3cd2c38646e4c6c0435dae9234f0f7887eb5
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-09-30 13:58:34 +02:00
Andreas Buhr 44c8ae5543 Add error messages in case system library directory does not exist
On Android, when the system library directory does not exist,
no error message was given. This led in turn to error messages like
Can't find 'nulllibQt6Core_armeabi-v7a.so'
which are not very helpful.

Pick-to: 6.2
Task-number: QTBUG-80766
Task-number: QTBUG-96701
Change-Id: I4187e4a68d9e78e198152306a3e664c30c51ab18
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-09-30 12:27:59 +02:00
Lars Schmertmann 0755eba5e8 Android: Add information about who launched this activity to intents
* With this change, applications can easily determine the source
  of an intent without creating an own extension of QtActivity.
* https://developer.android.com/reference/android/app/Activity#getReferrer()

Task-number: QTBUG-84382
Pick-to: 6.2
Change-Id: I6a5200af1d997640f02e2b934343914fb5f32ccc
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-08-26 15:44:12 +00:00
Volker Krause ec497d5e65 Fix access to content: URLs with transient read/write permissions
The current code assumed that the lack of persistent permissions means
we cannot access the file at all. That however isn't the case for
content: URLs we get e.g. via Intents, those are accessible perfectly
fine via QFile, we just don't have (and can't obtain) persistent
permissions for them.

This is done by continuing in the case of not having persistent
permissions and checking for SecurityExceptions that are thrown when
accessing content: URLs we really have no permission for.

Pick-to: 6.2 5.15
Change-Id: I39115a7730d717eb9517e4f1c1a57e40988001a5
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-08-23 15:36:03 +02:00
Assam Boudjelthia 760e24e867 Android: guard getStateCount() with correct VERSION.SDK_INT
The call getStateCount() was introduced in 29, so cases for
lower API should be handled.

Pick-to: 6.2 6.1
Change-Id: I7f58541c0b16fed91835e6f390afa89378a7af3e
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-08-23 15:39:44 +03:00
Assam Boudjelthia dc90755541 Fix Style java code format and warnings
The code had many bad formating and syntax or API usage warnings,
as well as some unused methods or classes which are fixed with this
patch.

Pick-to: 6.2 5.15 6.1
Task-number: QTBUG-71590
Change-Id: Ib113a0dc05703afb5190ec880b27daf75274cb1e
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-08-15 14:02:41 +03:00
Assam Boudjelthia b5b9c264dd Fix hidden API access for Android style
Use public API and attributes to retrieve part of the Android
style values instead of using reflection to access hidden or
private fields. This latter method, was throwing lots of warnings
or exceptions at the start of apps making it big annoyance to deal
with.

This patch doesn't handle drawables though, so the "full" and
"default" Android style will be somehow broken still for now.
For that reason, the default style extraction method is set to
minimal to avoid getting warnings about it, and Fusion style
could be used for Widgets apps, and for QML apps, it's recommended
to use the Material style from Quick Controls 2.

Pick-to: 6.2 5.15 6.1
Task-number: QTBUG-71590
Change-Id: If87895dc66751e23c9f4ea840e9f3e611aaa8833
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-08-12 09:46:34 +03:00
Fabio Falsini 7d7f09d556 Add Android service check on quit app
When quitApp() delegates the quit action to runAction(), this
function only checks if an activity exists. If the process is
a service, rather than an activity, it has no activity, so the
action is skipped and the service is not exited.

Check in runAction() for a service as well as an activity.

Pick-to: 6.2
Change-Id: Iec6f0550064506a780892d3d840f7488fc894569
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-07-27 22:45:57 +02:00
Mike Achtelik 5a7f4c1f49 Android: Fix unnecessary clipboard data access
Android 12 introduced a notification which is shown to the user each
time the app accesses the clipboard via getPrimaryClip.
Currently this notification is triggered, even if we just want to check,
if some clipboard data exists.
So lets not get the actual data and instead use getPrimaryClipDescription
to check for the existence of the correct mime type in the clipboard.

Pick-to: 6.2 6.1 5.15 5.12
Change-Id: I4800f5545ab46b7f6cade0ce9d78c04b50ae96cf
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-07-14 17:56:01 +02:00
Assam Boudjelthia 963a31c0f4 Android: Make the manifest less to scary to read and edit
Remove unnecessary elements from the manifest file, making it
easier to manage and read. Mostly, the removed elements are
more internal data that is populated by the build system
and the user shouldn't have to worry or confront that.

Also, use the same formatting used by Android Studio.

[ChangeLog][Android] Remove some elements from the manifest
file that are internal, to make it easier to deal with the
manifest.

Pick-to: 6.2
Change-Id: I6a1f275b579370972c0bf022502a8fbfe7d0bfd1
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2021-07-01 23:54:15 +03:00
Assam Boudjelthia af6bc5a21b Remove ministro code
Since Ministro no longer work on recent Android versions (Android 8+),
and it hasn't been maintained and the repos are not updated, the
existing code is practically a dead code.

[ChangeLog][Android] Remove ministro code since it's been unmaintained
and not working with recent Android versions.

Task-number: QTBUG-85201
Pick-to: 6.2
Change-Id: I18d7b1e209cba3cfd04674060e9bf39aa5a5510f
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2021-07-01 23:54:14 +03:00
Assam Boudjelthia 6d72896d0c Remove unnecessary = signs from build.gradle
Change-Id: Ic7090ec2003b20a809f8920bae28bc9b88733cb8
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-06-02 11:20:08 +03:00
Assam Boudjelthia eaac5bae98 Silence misleading exception print in setQtContextDelegate
As I understand it, the call to getDeclaredMethod seems to be just there
to check if a given method is declared under before adding it to the
delegates list, and that's why the getDeclaredMethod is not returning
anything, so we could treat it as a failed check and not print anything.

This is an amendment to 80f7494e8a which
added this print.

Pick-to: 6.1 5.15
Change-Id: I5f69ed5b4fa655da53ac7fba20d4e07acc75607a
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-06-02 11:20:02 +03:00
Pekka Gehör 32cdf0ce0f Android: Fix select handles misplacement on QDialog
Get select handles {Left, Right}Point from a mapToGlobal with a cursorRectangleof anchorRectangle
of the selected word/text.

Task-number: QTBUG-90799
Change-Id: I4fed19a1d3bb2247656b052306307e6980074405
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-05-25 08:45:39 +03:00
Andy Shaw 96982bab0c Android: Reset m_usePrimaryClip when clearing the clip data
The variable needs to be set to false when we clear the clip data as
there is no primary clip anymore so we should not try to access it when
setting new data.

Fixes: QTBUG-93831
Pick-to: 6.1 5.15
Change-Id: I309270dc075fcb0457607561ee23e12f7eb6397f
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-05-19 16:27:52 +02:00
Pekka Gehör 37d6fd60a8 Android: Fix position issue of the EditPopupMenu
Set y for the EditPopupMenu from the previous correct value if select handles values are zero.
The SelectionHandle.bottom() is zero if selection handles have not yet been displayed on the screen.

Task-number: QTBUG-71900
Change-Id: I3694a8edd4f0d8f8799dbac1217a75c375038e66
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-05-12 12:49:46 +00:00
Assam Boudjelthia f379446230 Handle checkPermission() below api 23
Although Qt 6 supports API 23+, it's still not bad to do this fix, it
achieves two things:
* Avoid the use of reflection when checking for permission state
* It works for all api versions

With this we would be sure we don't need to do a check in c++

if (androidSdkVersion < 23)
    return true;

The platform api checks if permission is granted or not, irrelevant of
the api version.

Change-Id: I9766dc35bbc8347ad0d60fde54b95710c8866736
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2021-05-11 12:35:30 +00:00
Pekka Gehör 066a1de8e7 Android: Remove NoSuchMethodException error
CleanUp NoSuchMethodException error(QtActivity.notifyQtAndroidPluginRunning)
appears on application start up.

Fixes: QTBUG-93620
Pick-to: 5.15 6.1
Change-Id: Ic835e00d02af17e1b48c0ff66d82e5957c635deb
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-05-10 17:43:40 +00:00
Assam Boudjelthia ee05af296f Move Android Extras as private APIs under qtbase
To the option to users to use some needed APIs until we make them
ready as proper cross-platform public APIs.

Change-Id: I53006397463331ebae8314bf8a3a019474aec617
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-05-10 10:40:40 +03:00
Assam Boudjelthia fcbba3c622 Remove unused functions in qjnihelpers
* Remove setNative{Activity,Service} and runOnUiThread functions
which are not used anywhere, probably left overs.

Change-Id: Ic7502dfd50d8eb4a9fa7abbe540a594a3614f14b
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2021-05-08 16:04:04 +03:00
Bartlomiej Moskal e5686b35f0 Android: handle ImEnterKeyType flag
Replace KEYCODE_ENTER to KEYCODE_TAB if IME_ACTION_NEXT or
IME_ACTION_PREVIOUS flag is set.

Before this change any of imKeyEntryType [1] was handled as default
return key. After the fix, event is changed to Tab or Backtab (if any of
mentioned flag is set)

[1] https://doc.qt.io/qt-5/qt.html#EnterKeyType-enum

Fixes: QTBUG-61652
Pick-to: 5.15
Change-Id: Ia27aa308fdae75bc17d1e892d17048c5afa3e2cb
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-05-05 07:43:10 +00:00
Pekka Gehör 2262a9cd2d Android: Fix Application becomes unresponsive issue
Block key events until the plugin is running.

Fixes: QTBUG-67944
Pick-to: 5.15 6.1
Change-Id: Iea47f2e94d850141834a7e8fc26218be2cacf660
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-05-03 08:48:57 +03:00
Bartlomiej Moskal 96a1bfd06a Android: Remove NoSuchMethodException error
CleanUp NoSuchMethodException error appears on application start up.

Error appears after commit:
e402e1103b

Fixes: QTBUG-92885
Change-Id: Idd4d09e51c8c721ad18f9bd396c990b51cd730e7
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-04-27 12:12:34 +00:00
Mike Achtelik 67c3f3f4ff Android: Bump gradle (plugin) versions
Android Gradle plugin 4.1.3 is compatible with the new <queries>
declaration for package visibility on Android 11. If someone adds the
<queries> element or starts relying on a library or SDK that supports
targeting Android 11, they might encounter manifest merging errors when
building the app.

This is important since starting August 2021 the PlayStore requires new
apps from targeting Android 11. So lets update to the newest
Android Gradle plugin version.

This also reverts 1e4dec12d5 as AGP 4.1
requires at least buildToolsVersion 29.0.2.

Change-Id: Id8ce5dadeb8a325dc9f901503946f325f3fd18a0
Reviewed-by: Lars Schmertmann <lars.schmertmann@governikus.de>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2021-04-10 14:08:07 +02:00
Fabio Falsini ea4868c49d Add legacy external storage access flag
Since latest version of Qt need Android
target sdk 29 the qt direct storage access
doesn't work because a new scoped storage
access way has been introduced. This flag
allow to have current storage access
way to work again (but is limited to
target sdk 29 only)

Pick-to: 5.15 6.1
Fixes: QTBUG-92239
Change-Id: If0d0af7c171de4b3e8bb8dd9a88fd61b65d1c839
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-04-07 23:01:59 +02:00
Qt CI Bot 5ce367a552 Merge integration refs/builds/qtci/dev/1617105725 2021-03-30 14:36:19 +00:00
Bartlomiej Moskal 06b0b2be16 Android: Fix Touch event position depending on Surface
Touch event position is counted from begin of Surface. Later method
QAndroidPlatformScreen::topLevelAt(..) is trying to return the top level
window at the touch event position.

In case when Surface is moved, we should also add this move to event
position. If it is not happening, touch event will not be assigned to
correct window.

Fixes: QTBUG-65927
Pick-to: 5.15
Change-Id: I549b9ec964cb09607153c60b9d9f6e0068a04cc2
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-03-30 12:01:02 +00:00
Piotr Mikolajczyk c80f262258 Android: Add select and copy capability to read-only text widgets
In case of a read-only text editing widget it was imposibble to copy text
from it. In QtWidgets you could not even see the selection handless.
Text selection in QtWidgets module was filtered depending on readOnly
property of the widget. Additionally, in InputMethod the read-only state
was translated into disabled.

Patch also makes the edit menu to be aware of the read-only status of
the control - the menu items are different for rw and ro controls.

Task-number: QTBUG-91417
Change-Id: Ic7b27f78678eeaa87a38607af787f254db1383b8
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-03-30 10:35:59 +02:00
Bartlomiej Moskal 547228bf86 Android: fix wrong position of cursor hander in split screen
Use activity window position to fix position of cursor hander. In case
without splti sceen, position of activity window is equal (0, 0), so it
does not have any effect.

Fixes: QTBUG-91362
Pick-to: 5.15
Change-Id: Icae9f19308112a78bdddf168abe81ffe7b6e4fae
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-03-26 08:05:13 +00:00
Bartlomiej Moskal e402e1103b Android: fix for isSoftwareKeyboard method
isSoftwareKeyboard() method will rely on visibility flag from
activityDelegate. In such case it also need to consider that keyboard is
during the hiding.

Fix the regression related with commit:
e6ca200a3a

Before this change Software Keyboard is not showing after changing the
focus. It is happening when Keyboard is already visible and focus is
changed to widget that also need the keyboard. In such case keyboard is
hiding (and NOT showing again).

Pick-to: 5.15
Fixes: QTBUG-92051
Change-Id: I6a5d07b25442429fda6e715d09ea104432c5ef50
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-03-26 09:05:04 +01:00
Piotr Mikolajczyk e6ca200a3a Android: Fix constant resize of a large TextEdit on click
If there is a large (3/5 of the screen in portrait or 2/3
in landscape) TextEdit on the screen, and it gets focus
on click, it will be shrank to fit the screen. Next click on this
TextEdit will restore its normal height, the next will shrink.

Pick-to: 5.15
Fixes: QTBUG-91056
Change-Id: I3dbf085cbfdc2739d537a304c16e28c58a6e01ce
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-03-10 13:11:33 +01:00
Piotr Mikolajczyk 5c6b10c3ce Android: Place cursor correctly on screen when editing
When editing text the cursor is not placed correctly. So this
has been achieved by tricking Android into thinking that the
input area is only the line where the cursor is, so it is
forced to keep it on screen.

Fixes: QTBUG-91073
Pick-to: 5.15
Change-Id: Icc2e8315deb76ca1a84819d3fdceaa7b027b1174
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-03-05 07:57:14 +00:00
Lars Schmertmann 3466fc5b76 [Android]: Fix exception when using Qt to create a service on Android
Fixes: QTBUG-91194
Pick-to: 5.15 6.0 6.1
Change-Id: Idd243c17bf82150fe2ea8b0100f8c432d75ef249
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-02-19 09:46:12 +01:00
Lars Schmertmann 15572f9efe Android: replace stacktrace with debug message in search for setService
Don't print stacktrace when setService is not found but only print a
debug message, QtServiceDelegate will continue to look for setContext
which might actually be a problem if not implemented.

950e628fd8
did this change for QtActivityDelegate.

Fixes: QTBUG-86733
Pick-to: 5.15 6.0 6.1
Change-Id: I8f2c6494da9133a3e9dedaabbe5fc931732d0d72
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-02-18 13:08:47 +01:00
Assam Boudjelthia 886a2d4511 Add build.gradle to easily modifying Java project with Android Studio
Pick-to: 6.0 6.1
Change-Id: Ie030ff0a3569caa0eacfa331d21f59e5455c90ed
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-02-12 08:12:19 +00:00
Christian Strømme 86e10e1acd Android: Fix the input type for date/time
The default variation of the DATETIME class is to show the layout for
date and time. If either date or time is requested, then only set one
of them.

Pick-to: 6.1 6.0 5.15
Change-Id: I5178f5f80490b7b0d7e7011d11da402a316d164a
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-02-08 18:31:25 +00:00
Christian Strømme 8ad66a1488 Android: Replace magic number for TYPE_NUMBER_VARIATION_PASSWORD
This field has been defined since API level 11, so no reason why we
shouldn't just use that instead.

Pick-to: 6.0
Change-Id: I8e3ffde3680e41f26d776e1f0474f632186a6b27
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-02-02 09:17:22 +00:00
Christian Strømme 5e95fab53f Android: Fix input method hints for ImhHiddenText
If ImhHiddenText is set then that should take precedence over the
other input method hints. Also, certain combinations aren't really
possible. E.g., ImhEmailCharactersOnly and ImhHiddenText doesn't have
its own specific variation on Android.
ImhSensitiveData and ImhNoPredictiveText are also likely to not work
as TYPE_TEXT_FLAG_NO_SUGGESTIONS is normally ignored by Android
keyboards. A common workaround is to use the visible password variation
but since this will force the layout to use latin characters it's not
something we can use as an universal workaround, so users will need to
manually enable it through the environment variable
QT_ANDROID_ENABLE_WORKAROUND_TO_DISABLE_PREDICTIVE_TEXT

Fixes: QTBUG-85787
Pick-to: 6.0 5.15
Change-Id: I0ff591ec9acf8dd556c7987e6d997cff3ddfe38e
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-02-02 11:17:07 +02:00
Bartlomiej Moskal 0d5b43bed4 Android: Finish composing text before Key handling
If the sendKeyEvent was invoked, it means that the button not related
with composing text was used. In such case composing text (if it exists)
should be immediately finished.

Fixes: QTBUG-85715
Pick-to: 5.15 6.0
Change-Id: Ifbca067805b8d20f6a90f95b27210595abed964a
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2021-01-19 19:37:02 +01:00
Joerg Bornemann 04f11f9935 Remove .prev_CMakeLists.txt files
Those serve no purpose anymore, now that the .pro files are gone.

Task-number: QTBUG-88742
Change-Id: I39943327b8c9871785b58e9973e4e7602371793e
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2021-01-12 20:59:13 +01:00
Joerg Bornemann ad2da2d27a Remove the qmake project files
Remove the qmake project files for most of Qt.

Leave the qmake project files for examples, because we still test those
in the CI to ensure qmake does not regress.

Also leave the qmake project files for utils and other minor parts that
lack CMake project files.

Task-number: QTBUG-88742
Change-Id: I6cdf059e6204816f617f9624f3ea9822703f73cc
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2021-01-07 15:32:28 +01:00
Piotr Mikolajczyk fe51137f85 Android: Fix for accessibility potential crash
When accessibility was not active it was possible to force its
update, causing a null pointer exception in java.

Pick-to: 6.0 5.15
Change-Id: I60f65612d6e9f712ba3c591ffcc6803f06f09efb
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-12-18 07:51:40 +01:00
Piotr Mikolajczyk fd20bc2277 Android: Qml accessibility fixes
- Accessibility focus can follow the position of the widget
  (for example when swiping on a scrollview)

- controls are clickable directly after appearing on the screen after
  scroll (previously you had to click somewhere else on the screen,
  and after that you could focus the newly appeared control)

- checkbox and switch react correctly on click action

- fixed combobox behavior with accessibility enabled

Task-number: QTBUG-79611
Pick-to: 6.0 5.15
Change-Id: If36914ab0165f33593e68fd7ecf168693f8538a7
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-12-08 10:02:34 +01:00
Assam Boudjelthia 27dbb3ee54 Android: avoid reflection with ClipData addItem
Task-number: QTBUG-81687
Pick-to: 6.0 5.15
Change-Id: If07fff6f371d2c05cb61a1a7695c96219d0260d2
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-12-01 13:13:10 +00:00
Bartlomiej Moskal 64d62c53c1 Android: Treat ACTION_CANCEL as TouchPointReleased
If TouchPointPressed was previously send and there is no
TouchPointReleased, we are exposed to uncorrectly handled touches
by application.

Some Android devices can recognize hand gestures. In some case the
gesture may be handled by Android System. In this situation
ACTION_CANCEL MotionEvent is delivered

ACTION_CANCEL - from Android specification:
-"Occurs when the parent takes possession of the motion, for example
when the user has dragged enough across a list view that it will start
scrolling instead of letting you press the buttons inside of it"
-"The current gesture has been aborted. You will not receive any more
points in it. You should treat this as an up event, but not perform
any action that you normally would"

If ACTION_CANCEL appears it means that ACTION_UP will not be delivered
to application. That is why ACTION_CANCEL need to be treat as
TouchPointReleased event.

Fixes: QTBUG-72110
Pick-to: 5.15
Change-Id: I8f32930cdb424b7530adc87b8334ac48a3bb9d57
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-11-13 21:00:44 +01:00
Assam Boudjelthia 73e64a98c6 Android: fix android java and templates targets with -developer-build
On Windows with -developer-build java and templates files are not copied
properly, this makes sure to copy the files and dir for both targets.

Also, avoid creating a a deployment-settings.json file by adding
"TEMPLATE = aux".

Fixes: QTBUG-87627
Pick-to: 5.15
Change-Id: Iae269c3180a7b6d904fdba2e69fb3f815bbb1211
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-11-10 17:53:31 +02:00
Andy Shaw 2b4a581f34 Android: Don't use putIfAbsent as that is not available in older APIs
Fixes: QTBUG-88076
Change-Id: I1ab12c574be036babfd0e4aacb44d1f75c66f4ad
Pick-to: 5.15
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-11-02 13:06:22 +01:00
Assam Boudjelthia 950e628fd8 Android: replace stacktrace with debug message in search for setActivity
Don't print stacktrace when setActivity is not found but only print a
debug message, QtActivityDelegate will continue to look for setContext
which might actually be a problem if not implemented.

Fixes: QTBUG-86733
Pick-to: 5.15.2
Change-Id: Iaf7f347ae04605a1f616f24d25cac4938c1640a4
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
2020-10-29 08:00:05 +00:00
Volker Krause d53bbecf4c Fix QSaveFile always failing on content: URLs
QSaveFile needs QFileInfo::isWritable() to work, which 7e5f38aec6 caused
to always return false for content: URLs.

Change-Id: If839331e4bd176765ed242791cb253c2064f5f6d
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-10-23 16:37:14 +02:00
Assam Boudjelthia 1907599bfd Android: rename Android's package name for Qt 6
Rename Android package name org.qtproject.qt5.android to
org.qtproject.qt.android to avoid inconsistency with Qt 6 name.
Also, we include the major version number in the jar target.

Task-number: QTBUG-86969
Change-Id: Ibb68947289be1079911b34ea157bf089cc52c47f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-10-03 11:22:35 +03:00
Assam Boudjelthia 5a158a9512 Android: allow Android app building to use java 8 features
Enable Gradle builds to use Java 8 features like lambda expression by
default.

Task-number: QTBUG-86282
Pick-to: 5.15
Change-Id: Ib497b8a789690fcca6e13ea4995e5966331c6c0d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-09-26 19:43:00 +03:00
Assam Boudjelthia 615b92008a Android: remove --no-daemon arg for Gradle
Allow Gradle builds to run using JVM daemon, this will improve the
current build time noticeably for clean builds and hugely for
incremental builds.

This will bring the Gradle build to comparable speed with a normal
Gradle build in Android Studio.

Task-number: QTBUG-86674
Pick-to: 5.15
Change-Id: Icc4267223802e4c9350b48099236650c023f868d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-09-17 10:29:16 +03:00
Assam Boudjelthia b9c85d6b0e CMake: build add flags for building QtAndroid.jar
Adds -source, -target, -Xlint:unchecked, -bootclasspath flags.

Setting default javac build source and target versions to 8.

Allow setting custom values for javac build versions via
-DQT_ANDROID_JAVAC_SOURCE, and -DQT_ANDROID_JAVAC_TARGET.

Task-number: QTBUG-86282
Change-Id: I98f4f193ac96016dc722d178594d7fd401202f68
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-09-16 20:55:16 +03:00
Andy Shaw 37f4c6fbc2 Android: Pass the parsed URI if it fails to get permission on 23 or less
In Android API level 23 or lower it will still be able to open the file
even if the permissions are not provided. If the system is not going to
allow it then it will prevent it later on. So we trust the system to
block access if need be.

Pick-to: 5.15
Change-Id: If663e3cf0a10818931577988abdc0fb8ec2650db
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-09-11 05:32:28 +00:00
Tor Arne Vestbø 233b6534a7 High-DPI: Remove legacy environment variables
QT_DEVICE_PIXEL_RATIO is replaced by QT_SCALE_FACTOR, while
QT_AUTO_SCREEN_SCALE_FACTOR is replaced by QT_ENABLE_HIGHDPI_SCALING.

Since High-DPI is now always enabled, there's no reason to keep the
code path for android.app.auto_screen_scale_factor. Also, based on
the original commit message that introduced this code, the value of
the property should have been true.

Change-Id: Ib34b1deeab46c488c67c4d64f087599b4a54dc55
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2020-09-02 19:00:18 +02:00
Mike Achtelik 6e7b750791 Use ApplicationInfo to get metaData
Since the load*Libraries functions might also be invoked when using an android service,
where no activity is present, we can't rely on the activity to get the metaData.

Pick-to: 5.15
Change-Id: I493c68591dbcfbe3063971cfd9ab384df71d03d7
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-08-28 20:37:22 +02:00
Assam Boudjelthia 00a1e5da7e Android: add option to get app arguments with AndroidManifest.xml
AndroidManifest.xml file and the Android plugin already has a way
to provide commandline-arguments to app with the tag
"android.app.arguments". This change allow to set it from qmake/cmake
and allow Qt Creator to use that.

Task-number: QTCREATORBUG-23712
Change-Id: I3e680f40fd36ba6aaac7f344fb9509d2c3360e74
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2020-08-28 10:23:18 +03:00
Andy Shaw ac17e62f65 Android: Add support for travesing directories and accessing files
This enables QDir and QFileInfo/QFile to work with entries found from
a entryList() as it will obtain the permission for these files correctly
when it is encountered.

Due to what seems to be a quirk in the Android API, we cache whenever we
come across a known directory to save time later on for checking if it
is a directory. All uris accessed where we get permissions for are
cached so we get the right URI for that given content url as some are
granted via the Intent.

Fixes: QTBUG-85538
Fixes: QTBUG-83041
Fixes: QTBUG-76886
Pick-to: 5.15
Change-Id: I685b3c60804812a0e4b85fbdbb4ec5efaa09420c
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-08-07 12:04:57 +02:00
Assam Boudjelthia 5735a14c2b Android: fix NoSuchMethodException exception in QtActivity.java
This amends the parent change but intended only for dev and not
to be picked for 5.15.

Change-Id: If7a2d81045c0625f19554eaf6b5cf69e72d42384
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-08-07 10:01:21 +00:00
Assam Boudjelthia a310307ae3 Android: fix NoSuchMethodException exception in QtActivity.java
Adding these method definitions because QtApplication might fail
to find them.

Change 80f7494e8a added few exceptions
printStackTace(), the line
src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java#106
prints error of java.lang.NoSuchMethodException for these methods.

Pick-to: 5.15
Change-Id: I63b1f0d3abd5a7fe7d9e87bbff252c437300722f
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-08-05 07:47:34 +00:00
Assam Boudjelthia 80f7494e8a Android: add missing printStackTrace() in catch statements
Pick-to: 5.15
Change-Id: Id50743113fcdd450932111cfe1a563276f152bb1
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-07-14 11:25:47 +03:00
Alexandru Croitor b1f8ca8032 CMake: Fix various issues with the Android build
Certain resources and compiled jar files have to be copied into the
non-prefix build dir location. They were previously only installed,
which doesn't do anything in a non-prefix build.

Change pro2cmake to generate code that places the compiled java
jars into QT_BUILD_DIR, so that non-prefix builds work.

Place the module dependencies xml files into lib folder in non-prefix
builds.

Don't special case the output and install location of the Android QPA
plugin.

Task-number: QTBUG-85399
Change-Id: I4ac9d3929ea8ecc95ec99a77e621ad2121b68832
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-07-09 11:56:31 +02:00
Assam Boudjelthia eacf83594a Android: check for debug mode before fetching extraappparams
In pre Qt 5.14, the assets folder used to have the file
"--Added-by-androiddeployqt--/debugger.command", that indicate debug
mode, however, in Qt 5.14+ the assets are compressed into one file, so
this current check is obsolete. Qt Creator uses extraappparams to pass
QML debugger args, without it the debugger won't start.

Pick-to: 5.15
Task-number: QTCREATORBUG-24155
Change-Id: Ib3037f4dc8c55af6932d598c6491a046efe13033
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
2020-07-08 07:07:15 +00:00
Assam Boudjelthia 6f837d6f07 Android: fix QDesktopServices::openUrl() error for file scheme path
If the url is a "file:" scheme url don't check for permissions
which the file won't have, and then disable StrictMode for API >= 24
to be able to pass the "file:" path to the openUrl intent.

Pick-to: 5.15
Fixes: QTBUG-67877
Change-Id: Ia3fecc24a67069dc76f866455277bf8b929e7697
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-06-26 12:41:42 +00:00
Andy Shaw 33c24b9b9d Android: Don't pause when in multi window mode
When the application is in multi window mode then when pausing it should
not suspend the application as it can still be visible in the
background.

Change-Id: I03a561459b2aa04c808b7d4220cd3e558671dd17
Pick-to: 5.15
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-06-25 07:32:04 +02:00
Andy Shaw 3ce2fab0a6 Android: Pass a null Bundle when calling QtActivityDelegate.onCreate
The onCreate function expects a Bundle variable to be passed in so it
needs to get a null Bundle in this aspect to prevent it from crashing
due to the lack of parameters.

Change-Id: I8cc4b62d9e8db170b957f7574360033e91ca3493
Pick-to: 5.15 5.12
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-06-18 14:28:58 +02:00
Assam Boudjelthia 7ede57f937 Make sure the default AndroidManifest is compatible with Qt Creator
When adding the default AndroidManifest.xml to a project, Qt Creator
edits some pieces because of autoformat and shows that something is
changed, but the user changed nothing, and this can be confusing. Let's
make them on the same page.

Pick-to: 5.15
Task-number: QTCREATORBUG-23768
Change-Id: I76088358dc31be45adb766bed29e2c9d889a8f09
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
2020-06-03 10:26:01 +03:00
Andy Shaw f71a400bf6 Android: Clear the clipboard when getting a null mimedata
From API 28 it is possible to clear the clipboard so we should ensure
that this is done if API 28 or later is being used. Otherwise it is not
removed, but that is due to limitations on the Android side.

Pick-to: 5.15
Change-Id: I1fe504d0e566c6923b39b2adf4540619c6b1daf7
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-05-30 12:49:42 +00:00
Qt Forward Merge Bot 025e88bfe5 Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: I003c0d6271c6444748bf30b4331eca3fb2410f44
2020-05-05 19:51:50 +02:00
Assam Boudjelthia dbaf62033a Android: fix mimeTypes handling for file dialog
Since Android native file manager supports mimeTypes, I use
QMimeDatabase to get the correct mime type for the nameFilter
used with the file dialog.

[ChangeLog][Android] Support setting mimetypes and and namefilters for
Android native file dialog.

Task-number: QTBUG-83089
Change-Id: I46545576dc9b51aa872bb37dbf4fe12b2533bdd9
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2020-05-05 10:29:15 +03:00
Kai Koehne 0303d8ddfa Android: Rename rs locale to se
rs is the country code for Republic of Serbia, but se is the Serbian
Language.

According to the  IANA  subtag registry that is referenced in the error
message, the language subtag for Serbian is se.

  https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry

This fixes an error when uploading some apps to the Google Play Store.

Fixes: QTBUG-83780
Pick-to: 5.15
Change-Id: I532a3082ca954a78343c873246b09a14d7a80a0e
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2020-04-28 13:34:36 +02:00
Qt Forward Merge Bot efd7757154 Merge remote-tracking branch 'origin/5.15' into dev
Conflicts:
	src/widgets/widgets/qabstractbutton.cpp
	src/widgets/widgets/qbuttongroup.cpp
	src/widgets/widgets/qbuttongroup.h
	src/widgets/widgets/qsplashscreen.cpp
	tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
        tests/benchmarks/opengl/main.cpp

  Needed update:
	src/plugins/platforms/cocoa/CMakeLists.txt

Change-Id: I7be4baebb63844ec2b3e0de859ca9de1bc730bb5
2020-04-22 15:28:01 +02:00
Andy Shaw e7eff98401 Android: Only check for uri permissions when it is a file or content
This amends f36b042e2b to only check
permissions for uris that are going to be local to the device itself.
Other uris, such as http, https etc, should go through fine without a
check.

Change-Id: If05caadb6e0712d9db8f57185ef017d724d9e172
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-04-14 14:51:17 +01:00
Eskil Abrahamsen Blomfeldt a35a7fcb5a Android: Implement MaximizeUsingFullscreenGeometryHint
(This reintroduces c17a5cec19,
which was reverted in Qt 5 because it requires API level 23.)

This flag tells the app to use as much of the screen as possible
while still keeping system UI visible, and can be supported on Android
by using translucent system UI, similar to iOS.

What this does:
1. It changes the current fullscreen/not-fullscreen logic to
allow three states: fullscreen, fullscreen with translucent
decorations and not-fullscreen.

2. In order for it to work, we have to send the actual
screen geometry and available geometry, at least in the case
where the user needs to know the available geometry to
know the safe area of the window. So we get the real screen
metrics and pass these to the QPA plugin (API level 17, so
we can do that now that the minimum version is 21.)

3. Note that getting the insets and calculating the useable
area does not work for non-fullscreen windows, since Android
is quite inconsistent in this respect. So in this case we
just use the window size and origin of 0,0 for the available
geometry.

4. Since we are touching this code anyway, this patch also tries to use
more consistent wording (calling it "available geometry" everywhere
instead of desktop geometry in some places and just geometry in
others, etc.)

[ChangeLog][Android] Qt::MaximizeUsingFullscreenGeometryHint window
flag is now supported, and will make the window fullscreen, but keep
the system UI on-screen, with a translucent background color.

Fixes: QTBUG-74202
Change-Id: I4cc5ef9cc2a3bd22d4d8d2bb767c6ff8a3aa75c0
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2020-03-30 13:03:49 +01:00
Qt Forward Merge Bot 865afac250 Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: Ibee5acec72a1a1769d4bc5f23f56c7dc8d4cf3cb
2020-03-11 15:34:21 +01:00
BogDan Vatra 519ea72108 Android: Bump gradle (plugin) versions
Move min & target sdk from AndroidManifest.xml to build.gradle

Fixes: QTBUG-70817
Change-Id: Id9bb9825a3232587e0255b2d3d6f0273c5f9b66a
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-03-04 18:02:35 +00:00
Lars Schmertmann 5ee1dac8d6 Finally remove splash.xml to fix a lint warning
Unused resources
----------------
src/android/java/res/layout/splash.xml:2:
The resource R.layout.splash appears to be unused

Fixes: QTBUG-72976
Change-Id: I8f23438503d21f3279e0577a9caac745810fffc3
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2020-03-04 16:31:13 +01:00
Eskil Abrahamsen Blomfeldt 5f1afeacf6 Android: Increase minimum API level to Android-23 / Android 6
There are certain APIs we need which cannot be used without this,
and in general it simplifies some code.

[ChangeLog][Android] Minimum Android version is now Android 6.0,
API level 23.

Change-Id: I72ca3b429bf48969e16e2bc6b99d9c4af993ea77
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2020-03-04 08:28:04 +01:00
Qt Forward Merge Bot 63312fe2ec Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: If36d96c0fef3de5ab6503977501c55c62a2ecc97
2020-03-03 14:13:02 +01:00
Andy Shaw 7e5f38aec6 Android: Add support for getting information about content uris
This enables things like size(), exists() to work with Android content
uris with the provided uri given from a filedialog. It is expected that
it is always a full path due to the nature of content uris, so relative
paths will not work.

Change-Id: I9c9ea42833677eb9d937b33e9dd42ee2a7d9c7c5
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2020-02-28 16:37:34 +02:00
Qt Forward Merge Bot 75c0ffaf6d Merge remote-tracking branch 'origin/5.15' into dev
Conflicts:
	examples/network/bearermonitor/CMakeLists.txt
	examples/network/CMakeLists.txt
	src/corelib/tools/qlinkedlist.h
	src/sql/kernel/qsqldriver_p.h
	src/sql/kernel/qsqlresult_p.h
	src/widgets/kernel/qwidget.cpp
	src/widgets/kernel/qwidget_p.h
	tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
	tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
	tests/auto/tools/moc/allmocs_baseline_in.json

Change-Id: I21a3c34570ae79ea9d30107fae71759d7eac17d9
2020-02-26 18:39:21 +01:00
Assam Boudjelthia f36b042e2b Android: handle check permissions before any file operations
This is required because opening a Uri with no permissions can cause
crashes.
Some exceptions were not handled at all.

Change-Id: I2e8f9505879b9fc4c1c47bdfa1bf173b39ada3ea
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2020-02-17 19:05:20 +02:00