Commit Graph
23 Commits
Author SHA1 Message Date
Andrey Bocharnikov 85383de2ae feat(browser): platform download plumbing and the web view download seam
Extend the cross-platform web view seam with the download vocabulary the
Downloads feature builds on (ADR 0006):

- AbstractWebView: DownloadState gains DownloadPaused (WebEngine-shaped
  numbering, Paused = 5 matches MobileWebViewDownload), a host-side
  downloadUrl() re-issue used for Retry, a linkLongPressed(link, image,
  position) signal for mobile Backends, supportsPdfViewer, and a
  'retained' flag for Web Views kept alive after their tab closes.
  The downloadsStore / isDownloadView coupling is gone: adapters map
  Backend downloads into the seam and the UI never branches on Backend.
- WebViewAdapter / MobileWebViewAdapter / LazyWebViewAdapter implement
  the seam; the desktop path gains an injectable isBrowsableLocalUrlFn
  local-URL guard exception, and LazyWebViewAdapter forwards Retry
  through ensureLoaded().
- ProfileManager survives a WebEngine profile data-path collision.
- StatusQ C++: BrowserProfileUtils (QWebEnginePage::download re-issue,
  profile plumbing) and SystemUtilsInternal additions, iOS share-sheet
  support via NSItemProvider in ios_utils.mm, Android accept path in
  StatusQtActivity, mobilewebview pin bump, and Common.mk tracks
  CMakeLists.txt so the pin invalidates mobile builds.
2026-08-13 09:42:17 +04:00
Alex Jbanca 20c41f73d9 fix(ios): paste without triggering the system paste permission prompt (#21799)
* fix(ios): paste without triggering the system paste permission prompt

On iOS any programmatic read of UIPasteboard shows the "Allow Paste?"
alert. Our Paste buttons read the clipboard directly, so they prompted
every time. Replace them with UIPasteControl, where the system performs
the read and hands over the contents, making the tap itself the consent.

- add NativePasteButtonItem, hosting a native UIPasteControl, and the
  StatusPasteButton wrapper (native on iOS, StatusButton elsewhere)
- use it for every Paste button: sync code, WalletConnect URI,
  watch-only address, private key, chat key and both send recipient
  inputs
- disable AppMain's passive clipboard watcher on iOS: it read the
  clipboard with no user action at all, which is what prompted on launch
- drop the now-dead iOS guards left over from #21365

A native view composites above the whole Qt scene, so the control is
clipped to its visible viewport and hidden whenever something is stacked
above it - a popup over the page, or another popup over the one holding
it. That state is recomputed per frame from afterAnimating and pushed to
UIKit only when it changes; it must not call polish(), which requests a
new frame and would keep the window rendering forever.

The paste completion captures the target view rather than a raw C++
pointer, so a control destroyed while the item provider loads - closing
the modal it lives in - cannot deliver into freed memory.

Desktop keeps its existing Paste button styling: the wrapper forwards
size, border, font weight and focus policy, and each site passes what it
used before. Desktop buttons are now disabled rather than always enabled
when the clipboard has no text.

Also track *.mm in STATUS_Q_FILES: the mobile build only watched .cpp
and .h, so no Objective-C++ change in StatusQ ever triggered a rebuild
and stale binaries were shipped to the simulator.

Text editors are unaffected: StatusTextArea is a Controls TextArea, so
long-press gives the OS edit menu, whose Paste the system authorises.

Closes #21438

* fix(StatusPasteButton): apply review feedback

- base the wrapper on Control and forward the font group, so a site can
  set the label's family, weight or pixelSize. They are forwarded one by
  one on purpose: StatusBaseButton binds each of them itself, and a
  whole-group `font:` assignment is silently ignored - verified by
  checking that a bigger pixelSize actually widens the button.
- keep the wrapper out of the tab chain. Control brings its own
  focusPolicy, so the button's is `buttonFocusPolicy`; otherwise the
  composite would add a tab stop in front of the button.
- derive the Qt -> UIKit scale from the window's devicePixelRatio over
  the view's contentScaleFactor rather than parsing QT_SCALE_FACTOR. The
  ratio is exactly the extra Qt scaling, whatever asked for it.
- mark foregroundColor/backgroundColor REQUIRED: UIKit picks each tint's
  default on its own, so setting only one can leave the glyph unreadable
  against the fill.

* fix(NativePasteButtonItem): make the zero-scale guard obvious

contentScaleFactor was already checked before the division, but far
enough above it to read like an unguarded divide. Bail out on the null
view and window first, then guard the divisor right where it is used.
2026-08-12 17:29:55 +03:00
Alex Jbanca d3b8917a04 chore: Drop DOtherSide
+ Move monitoring to statusq
2026-07-07 10:44:53 +03:00
Alex Jbanca db4b5c5a46 feat(ios): wire-up push notifications (#20344)
* feat(ios): wire-up push notifications

- wire push notifications endpoints with qml access
- split NotificationsView.qml into 2 different components. The general component preserving the current behavior and a reduced functionality for centralized push notifications (similar to the Status legacy)
- wire bundle id from EnvVariables.mk to the push notifications status-go calls. We need the bundle id as topic.
- Tweak the Push permissions request flow to account for platform specifics

* fix: mobile-run doesn't work for all targets
2026-04-06 14:19:22 +03:00
Alex Jbanca 4fdcf9ec1d feat(android): status-go as a service
Add an option to run status-go as a service on android using Androdi Binder as a transport.

See ADR for more details docs/adr/0001-android-status-go-as-a-service.md
2026-03-20 09:22:26 +02:00
Siddarth Kumar 7afb60d1b9 init: fdroid setup
- `mobile/Makefile` -> Added `apk-fdroid` build target, used by
`fdroid/build-app.sh`. F-Droid requires an unsigned APK without Google
Play services.

  - `mobile/android/qt6/build.gradle` -> Added F-Droid gradle build
flavor, used during `apk-fdroid` target. Separates F-Droid builds from
Play Store builds and no signing configuration since it's supposed to be
unsigned.

  - `mobile/scripts/buildApp.sh` -> Updated to copy F-Droid APK instead
of usual locations from Jenkins build.

  - `mobile/scripts/buildOpenSSL.sh` -> Moved from iOS dir, shared
between iOS and F-Droid builds. Reusing the OpenSSL build logic that was
previously iOS-only but is now needed for F-Droid's from-source
requirement.

  - `mobile/scripts/Common.mk` -> Updated path to `buildOpenSSL.sh`
which is no longer inside iOS dir.

  - `mobile/scripts/openssl-patch.diff` -> Moved from iOS dir, applied
by `buildOpenSSL.sh`, so that the patch is co-located with the script
that uses it.

  - `ci/Jenkinsfile.fdroid` -> Had to make a new pipeline script because
integrating this into `ci/Jenkinsfile.android` was causing issues with
the generated `AppImage` and steps had to be fully sequential, so I
figured it's good to separate them out.

  - `fdroid/entrypoint-fdroid.sh` -> Docker entrypoint, used by
`fdroid/Dockerfile`. Sets up the container user/permissions before the
F-Droid build starts.

  - `fdroid/Dockerfile` -> A minimalistic Docker image for the F-Droid
Jenkins build environment, used by `ci/Jenkinsfile.fdroid`. I didn't add
to existing Qt Android `Dockerfile` because this one only needs a
minimal environment with Docker-in-Docker to run the `fdroidserver` VM.

  - `fdroid/build-app.sh` -> Called by `fdroiddata` metadata build step.
Sets up Qt and Android NDK environment, detects `JAVA_HOME`, configures
`Go`/`Nim` env vars, and runs the `make` targets for the F-Droid APK.

  - `fdroid/build-openssl.sh` -> F-Droid requires OpenSSL to be built
from source rather than using prebuilt binaries.

  - `fdroid/build-qt-android.sh` -> F-Droid requires Qt to be built from
source; this handles the Android cross-compilation.

  - `fdroid/build-qt-host.sh` -> Qt's cross-compilation requires host
tools (`moc`, `rcc`, etc.) to be built first.

  - `fdroid/cleanup-binaries.sh` -> Removes binaries flagged by `fdroid`
scanner, called by `fdroiddata` metadata `prebuild` step. F-Droid's
scanner rejects repos containing prebuilt binaries in test/vendor
directories.

  - `fdroid/cleanup-fdroiddata.sh` -> Removes stale `fdroiddata` clones,
called by `ci/Jenkinsfile.fdroid`. Prevents disk space issues from
accumulating `fdroiddata` clones across builds.

  - `fdroid/fdroid-container-build.sh` -> Runs `fdroid build` inside
Docker container, called by `scripts/fdroid-local-build.sh`. Isolates
the build in a container to match F-Droid's official build environment.

  - `scripts/fdroid-local-build.sh` -> A handy script to build F-Droid
locally, also called by `ci/Jenkinsfile.fdroid`. Manages the full
lifecycle of cloning `fdroiddata`, launching the `fdroidserver`, and
extracting the output APK.

  - `fdroid/generate-keystore.sh` -> Generates a single-use keystore for
signing the F-Droid APK. Sourced by `buildApp.sh` to export signing
credentials into the build environment.

fixes: https://github.com/status-im/status-app/issues/19741
2026-03-14 20:54:15 +05:30
Alex Jbanca 7fc5283251 fix: MacOS build - missing libZXing
Compile zxing and scodes as static libs
2026-02-20 12:52:10 +02:00
Jonathan Rainville ebb9c2f9c6 chore(qzxing): remove old QR code library 2026-02-13 13:05:32 -05:00
Jonathan Rainville cec140de2b feat(qr): add new QR library SCodes to scan qr codes (#19811) 2026-02-13 09:21:18 -05:00
Alex Jbanca e95901281c feat: Add status-keycard-qt lib
This commit adds the status-keycard-qt submodule and updates the build configuration to support it.

In this initial version the `status-keycard-qt` option can be enabled by using the `USE_STATUS_KEYCARD_QT` flag.
- desktop: `USE_STATUS_KEYCARD_QT` will enable/disable the qt implementation. By default the go version is used
- ios: `USE_STATUS_KEYCARD_QT` will enable/disable the qt implementation
- android: the qt implementation is enabled by default

to squash - first commit
2026-01-14 14:37:35 +02:00
Siddarth Kumar 0fdd9fda2d ci: fix android signing
- brings in status-jenkins-lib@v1.9.36
- use gradle build types for PR and Release.
- signing config moved to gradle
- simplify build App script
2026-01-12 19:27:43 +04:00
Siddarth Kumar dee268e221 mobile: build a signed android app
- generate signed APK for PRs
- generate signed AAB for PRs targeting release branches
- updates status-jenkins-lib to v1.9.29 which provides keystore and
credentials for signing
- rename bundle id app.status.mobile
- nuke FOREGROUND_SERVICE permission
- automatically generate versionCode based on minutes since epoch
- nuke unused mobile/android/qt5 dir
- fix path to SecureAndroidAuthentication.java
- bump nim to 2.2.4
2025-10-26 12:36:27 +04:00
Alex Jbanca b2d4eddc77 chore: Update app name to Status and align app package id with the bundle id
App name: Status
App package/bundle: im.status.app
2025-10-16 12:32:51 +03:00
Lukáš Tinkl 75e867b7de fix(i18n): bundle the translations into resources
- simplify the process or deploying the translations by treating the QM
files just like any other resource, and compile/bundle them with the
binary
- remove manual copying of the QM files in Makefile and other scripts
- greatly simplify the LanguageService discovery, as the QM files are
now in a uniform prefix (`:/i18n`) on any platform
- because of the uniform prefix/location, the retranslation now happens
automatically by `QQmlApplicationEngine`, by just setting/getting the
`Qt.uiLanguage` property

Fixes #18914
2025-10-15 15:15:41 +02:00
Alex Jbanca fe36d7423c fix: QML server
- Use local network IP address for the host, instead of localhost
- Use the default install folder for the app whenever it's not built using the qml local server. Previously it was installed in `default` folder
- Simplify the `APP_VARIANT`
2025-09-09 13:13:11 +03:00
Michał Cieślak 1f1b653257 Mobile: separate build dirs for regular and qml-server builds
Closes: #18466
2025-08-28 10:04:09 +02:00
Alex Jbanca 1c2643aed3 chore(pcre): Remove pcre dependency for mobile builds 2025-08-01 17:09:59 +03:00
Alex Jbanca b5043f1134 chore: Use openssl3
- Replace the openssl vendors and use the official repo for both IOS and Android
- Update the build scripts to compile openssl using the official repo
2025-06-10 14:26:36 +03:00
Alex Jbanca ba8494182e chore: Fixing mobile builds
- Adding a config option for the GH action to compile with different qt versions
- Updating build scripts to use standard android env variables
- Fixing mobile targets
2025-06-10 11:28:12 +03:00
Alex Jbanca 532e7ea989 chore: integrate the mobile build system in the main makefile
- Creating new targets to build, run and clean mobile builds
- Updating the builds to support qt 6.9.0 (and NDK 27.2.12479018)
- Move the GH actions to the main gh folder
- Update the main Makefile to allow cross-compilation. `detected_os` becomes `mkspecs`
2025-06-10 11:28:12 +03:00
Alex Jbanca 31d8834c87 chore: use bash 2025-06-03 16:44:03 +03:00
Alex Jbanca df49900b03 chore: Remove debugging logs 2025-06-03 16:44:03 +03:00
Alex Jbanca ad2adea549 chore: Android GH actions build + various fixes (#5)
* chore: Android GH actions build + various fixes

* chore: Update qt6 android manifest

* chore: Simplify run setup for new environments

* chore: Update android tools dependencies
2025-06-03 16:44:03 +03:00