Skip to content

feat(android): implement deep link support for Android#19581

Open
jrainville wants to merge 1 commit intomasterfrom
feat/android-deep-links
Open

feat(android): implement deep link support for Android#19581
jrainville wants to merge 1 commit intomasterfrom
feat/android-deep-links

Conversation

@jrainville
Copy link
Member

What does the PR do

Fixes #19562

Adds the needed manifest info to tell Android which links we supports.
Then adds the Java code necessary to handle it. In this case, we listen to the Intent and if there is a URL, we emit an event that can be listened to in C++, which gets sent to the url_manager in Nim. Then we reuse the same code we already had.

Affected areas

Architecture compliance

Screencapture of the functionality

andrdoid-deep-links.webm

Impact on end user

Makes deep linking to the Status app work.

Reading the docs, if two apps support the same scheme, a drawer will be shown asking which app they choose to open, so all good.

How to test

  • Get a status link like a community
  • Paste it in the browser
  • click on Open in Status
  • Use the link in another chat app, click it

Risk

Low

@jrainville jrainville requested a review from a team as a code owner December 12, 2025 15:55
@jrainville jrainville requested review from a team, caybro, glitchminer, micieslak and osmaczko and removed request for a team December 12, 2025 15:55
@status-im-auto
Copy link
Member

status-im-auto commented Dec 12, 2025

Jenkins Builds

Click to see older builds (42)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 5bd1cf30 28 2026-01-20 05:31:40 ~12 min android/arm64 🤖apk 📲
✔️ e8eaab15 29 2026-01-21 05:41:28 ~22 min android/arm64 🤖apk 📲
✔️ bcfb8112 30 2026-01-22 05:40:46 ~21 min android/arm64 🤖apk 📲
✔️ 54afeefc 31 2026-01-23 05:38:27 ~19 min android/arm64 🤖apk 📲
✔️ c29ab5c8 32 2026-01-24 05:31:36 ~12 min android/arm64 🤖apk 📲
✔️ a660e69d 33 2026-01-27 05:39:19 ~20 min android/arm64 🤖apk 📲
✔️ c7bd720d 34 2026-01-28 05:39:34 ~20 min android/arm64 🤖apk 📲
✔️ d65a1c58 35 2026-01-29 05:41:48 ~22 min android/arm64 🤖apk 📲
✔️ b49203c5 36 2026-01-30 05:42:43 ~23 min android/arm64 🤖apk 📲
✔️ c0c00660 37 2026-01-31 05:51:25 ~32 min android/arm64 🤖apk 📲
✔️ c1adbbd7 38 2026-02-02 06:01:00 ~42 min android/arm64 🤖apk 📲
✔️ 9590a8a3 39 2026-02-03 05:52:44 ~33 min android/arm64 🤖apk 📲
✔️ 6f28d2d5 40 2026-02-04 05:42:07 ~23 min android/arm64 🤖apk 📲
✔️ 4cfac95d 41 2026-02-06 05:41:04 ~22 min android/arm64 🤖apk 📲
✔️ 60cc79d4 42 2026-02-07 05:40:36 ~21 min android/arm64 🤖apk 📲
✔️ b5c60fe1 43 2026-02-09 05:40:23 ~21 min android/arm64 🤖apk 📲
157cd47 #1 2025-12-12 16:18:14 ~22 min windows/x86_64 📄log
c5603fa #2 2025-12-15 18:15:29 ~23 min windows/x86_64 📄log
af91799 #3 2026-01-06 16:19:07 ~23 min windows/x86_64 📄log
✔️ af91799 #17 2026-01-06 16:06:18 ~10 min android/arm64 🤖apk 📲
4e80a08 #4 2026-01-06 16:56:45 ~22 min windows/x86_64 📄log
✔️ 4e80a08 #18 2026-01-06 16:43:06 ~9 min android/arm64 🤖apk 📲
✔️ 4f8fac9 #5 2026-01-06 18:26:38 ~34 min windows/x86_64 💿exe
✔️ 4f8fac9 #19 2026-01-06 18:00:58 ~9 min android/arm64 🤖apk 📲
✔️ 50dce40 #6 2026-01-14 16:50:14 ~37 min windows/x86_64 💿exe
✔️ 50dce40 #25 2026-01-14 16:24:06 ~11 min android/arm64 🤖apk 📲
✖️ 50dce40 PR19581 2026-01-14 17:11:42 ~21 min tests/e2e-windows 📊rpt
50dce40 pr19581 2026-01-14 17:09:27 ~35 min tests/e2e 📄log
✔️ 85c0b153 #7 2025-12-20 05:30:03 ~11 min android/arm64 🤖apk 📲
✔️ 490e6f23 #8 2025-12-22 05:29:49 ~11 min android/arm64 🤖apk 📲
✔️ e4a0a423 #9 2025-12-23 05:30:56 ~12 min android/arm64 🤖apk 📲
703050eb #10 2025-12-24 05:28:16 ~9 min android/arm64 📄log
✔️ 7cb2a1f4 #11 2025-12-25 05:32:31 ~13 min android/arm64 🤖apk 📲
✔️ abcfdaba #12 2025-12-26 05:31:26 ~12 min android/arm64 🤖apk 📲
✔️ 594a0058 #13 2025-12-27 05:31:36 ~12 min android/arm64 🤖apk 📲
✔️ d601ecdc #14 2025-12-30 05:30:49 ~12 min android/arm64 🤖apk 📲
✔️ 73f02e78 #15 2025-12-31 05:31:44 ~12 min android/arm64 🤖apk 📲
✔️ 14365c69 #16 2026-01-01 05:43:19 ~24 min android/arm64 🤖apk 📲
✔️ d645b16a #20 2026-01-08 05:43:01 ~24 min android/arm64 🤖apk 📲
✔️ 53a12ce4 #21 2026-01-09 05:42:13 ~23 min android/arm64 🤖apk 📲
✔️ 7f29c77a #22 2026-01-10 05:42:22 ~23 min android/arm64 🤖apk 📲
✔️ 551a7496 #23 2026-01-11 05:43:24 ~24 min android/arm64 🤖apk 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 1c640382 #26 2026-01-16 05:42:48 ~23 min android/arm64 🤖apk 📲
✔️ 9118a9d3 #27 2026-01-17 05:31:21 ~12 min android/arm64 🤖apk 📲

Copy link
Member

@caybro caybro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good in general

@jrainville jrainville force-pushed the feat/android-deep-links branch from 157cd47 to c5603fa Compare December 15, 2025 17:51
Copy link
Member

@caybro caybro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

@jrainville jrainville force-pushed the feat/android-deep-links branch from c5603fa to af91799 Compare January 6, 2026 15:55
@jrainville jrainville requested a review from alexjba January 6, 2026 15:55
@caybro
Copy link
Member

caybro commented Jan 6, 2026

Fails to build DOtherside with:

[2026-01-06T16:08:00.340Z] /home/jenkins/workspace/rs_linux_x86_64_package_PR-19581/vendor/DOtherSide/lib/src/Status/UrlSchemeEvent.cpp:6:10: fatal error: jni.h: No such file or directory
[2026-01-06T16:08:00.340Z]     6 | #include <jni.h>
[2026-01-06T16:08:00.340Z]       |          ^~~~~~~
[2026-01-06T16:08:00.340Z] compilation terminated.

@jrainville jrainville force-pushed the feat/android-deep-links branch 2 times, most recently from 4e80a08 to 4f8fac9 Compare January 6, 2026 17:51
Fixes #19562

Adds the needed manifest info to tell Android which links we supports.
Then adds the Java code necessary to handle it. In this case, we listen to the Intent and if there is a URL, we emit an event that can be listened to in C++, which gets sent to the url_manager in Nim. Then we reuse the same code we already had.
@jrainville jrainville force-pushed the feat/android-deep-links branch from 4f8fac9 to 50dce40 Compare January 14, 2026 16:12
Copy link
Member

@micieslak micieslak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we could do that without altering StatusQActivity, in a bit more separated way. Ideally also without DOtherSide. We have https://github.com/status-im/MobileUI that I added some time ago to handle interoperability with native mobile APIs. Not sure if applicable here but probably worth checking.

// Called from Qt via JNI when main window is visible
public static void hideSplashScreen() {
splashShouldHide.set(true);
userLoggedIn.set(true);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we need to track the logged in state it's probably not the best to do it here when the splash screen gets hidden, right? We could add a flag in the activity that's driven by qml/c++ to save the login state.

Copy link
Contributor

@alexjba alexjba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't involve DOtherSide at all. I still hope we'll drop it in favor of seaqt and it would be nice to keep it clean.

An alternative would be to move the c++ implementation in StatusQ - for status specific, or MobileUI for generic android stuff.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DeepLinks] Support Deep links on Android

5 participants