Skip to content

DISC-436: VideoFeed deeplink - #2558

Merged
tonyteate merged 3 commits into
masterfrom
imartin/DISC-436
Aug 10, 2026
Merged

DISC-436: VideoFeed deeplink#2558
tonyteate merged 3 commits into
masterfrom
imartin/DISC-436

Conversation

@Arkariang

@Arkariang Arkariang commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

📲 What

Adds a deeplink that opens the Video Feed (VideoFeedActivity). Tapping https://www.kickstarter.com/video-feed (or the ksr://www.kickstarter.com/video-feed scheme) now launches the video feed screen inside the app.

🤔 Why

We need an addressable entry point into the video feed so it can be reached from outside the app (marketing, notifications, internal links) rather than only through the in-app Discovery/Search banners. The path is app-internal and intentionally not matched as a feature on the website. Ignored any gating logic on this PR as currently the VideoFeed gate is rolled out to 100% of users.

🛠 How

Routed through the existing single deeplink entry point, SplashScreenActivity → SplashScreenViewModel.DeepLinkViewModel. Both URLs already resolve to the splash screen via its catch-all intent filters, and /video-feed doesn't collide with any existing matcher.

UriExt.kt: new Uri.isVideoFeedUri(webEndpoint) matcher (VIDEO_FEED_PATTERN = /video-feed) , following the same shape as the other matchers so it also works against staging endpoints.

SplashScreenViewModel.kt: new startVideoFeedActivity(): Observable<Unit> output that emits when the URI matches isVideoFeedUri, plus the corresponding !it.isVideoFeedUri(...) exclusion in the unsupportedDeepLink chain so the link doesn't also fall through to the browser.

SplashScreenActivity.kt: subscribes and launches via startNewDiscoveryActivity() → startVideoFeed(ScreenName.DEEPLINK.value) → finish(), so Discovery sits beneath the feed for a sane back stack and the entry surface is logged as "deeplink".

The android_video_feed Statsig gate is currently at 100%, so the route intentionally does not re-check the gate at the splash router.

👀 See

Deeplink.mp4

| --- | --- |
| | |

📋 QA

  • Send an email to yourself with the link https://www.kickstarter.com/video-feed
  • Using adb: adb shell am start -W -a android.intent.action.VIEW -d "ksr://www.kickstarter.com/video-feed"

Story 📖

DISC-436

@Arkariang Arkariang changed the title - VideoFeed deeplink DISC-436: VideoFeed deeplink Aug 7, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Adds support for a new /video-feed deep link by recognizing the URI, routing it through the splash/deeplink flow, and launching the in-app Video Feed screen instead of falling back to an external browser.

Changes:

  • Introduces Uri.isVideoFeedUri(...) and corresponding unit tests.
  • Adds a startVideoFeedActivity navigation output to SplashScreenViewModel.DeepLinkViewModel and wires it into SplashScreenActivity.
  • Adds deeplink test coverage for both https://.../video-feed and ksr://.../video-feed entry points.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
app/src/main/java/com/kickstarter/libs/utils/extensions/UriExt.kt Adds /video-feed URI detection via a new regex-backed helper.
app/src/test/java/com/kickstarter/services/UriExtTest.kt Adds unit tests validating isVideoFeedUri for web + ksr:// schemes.
app/src/main/java/com/kickstarter/viewmodels/SplashScreenViewModel.kt Adds a new navigation output and deeplink routing for Video Feed; excludes it from unsupported deeplink browser fallback.
app/src/main/java/com/kickstarter/ui/activities/SplashScreenActivity.kt Subscribes to the new output and launches Video Feed after resetting the task stack to Discovery.
app/src/test/java/com/kickstarter/viewmodels/DeepLinkViewModelTest.kt Adds deeplink tests ensuring Video Feed navigation is triggered.
Suppressed comments (1)

app/src/test/java/com/kickstarter/viewmodels/DeepLinkViewModelTest.kt:1144

  • Same as the non-KSR test: this case should also assert that the other navigation outputs (update/comment-to-update) and finishDeeplinkActivity are not emitted, to match the expectations enforced by the rest of the deeplink test suite.
        startProjectActivityForCheckout.assertNoValues()
        startProjectActivityForComment.assertNoValues()
        startProjectActivityToSave.assertNoValues()
        startPreLaunchProjectActivity.assertNoValues()
        startProjectSurveyActivity.assertNoValues()
        startPMOrderEditWebview.assertNoValues()

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codecov-commenter

codecov-commenter commented Aug 7, 2026

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 65.30%. Comparing base (fe1b8b2) to head (6e1fec6).
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #2558      +/-   ##
============================================
- Coverage     65.33%   65.30%   -0.04%     
- Complexity     2564     2566       +2     
============================================
  Files           405      405              
  Lines         32686    32698      +12     
  Branches       4630     4631       +1     
============================================
- Hits          21356    21352       -4     
- Misses         8898     8916      +18     
+ Partials       2432     2430       -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

Suppressed comments (1)

app/src/test/java/com/kickstarter/viewmodels/DeepLinkViewModelTest.kt:1131

  • Test name uses "schema" but the deep link uses a URI scheme (ksr://). Renaming improves clarity and avoids a minor spelling/terminology mistake.
    fun testVideoFeedDeeplink_startsVideoFeedActivity_KSR_schema() {

@Arkariang
Arkariang requested a review from tonyteate August 7, 2026 18:54
@Arkariang
Arkariang marked this pull request as ready for review August 7, 2026 18:54

@tonyteate tonyteate left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm! 💯

@tonyteate
tonyteate merged commit 9ed35b0 into master Aug 10, 2026
4 checks passed
@tonyteate
tonyteate deleted the imartin/DISC-436 branch August 10, 2026 16:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants