Skip to content

Commit 889668d

Browse files
authored
Support new "reader" deeplinks (#22369)
* Supporting new format * Proper logic handling * Moving manifest lines to avoid llint issue * Updating baseline for lint errors
1 parent c6a2293 commit 889668d

File tree

5 files changed

+52
-4
lines changed

5 files changed

+52
-4
lines changed

WordPress/src/main/AndroidManifest.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,18 @@
657657
android:scheme="http" >
658658
</data>
659659

660+
<data
661+
android:host="wordpress.com"
662+
android:pathPattern="/reader/feeds/.*/posts/.*"
663+
android:scheme="https" >
664+
</data>
665+
666+
<data
667+
android:host="wordpress.com"
668+
android:pathPattern="/reader/feeds/.*/posts/.*"
669+
android:scheme="http" >
670+
</data>
671+
660672
<action android:name="org.wordpress.android.action.VIEW_POST" />
661673
<action android:name="android.intent.action.VIEW" />
662674

WordPress/src/main/java/org/wordpress/android/ui/deeplinks/handlers/ReaderLinkHandler.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class ReaderLinkHandler
6666
* `wordpress://viewpost?blogId={blogId}&postId={postId}`
6767
* wordpress.com/read/feeds/feedId/posts/feedItemId
6868
* wordpress.com/read/blogs/feedId/posts/feedItemId
69+
* wordpress.com/reader/feeds/feedId/posts/feedItemId
6970
* domain.wordpress.com/2.../../../postId
7071
* domain.wordpress.com/19../../../postId
7172
*/
@@ -95,9 +96,11 @@ class ReaderLinkHandler
9596
buildString {
9697
val segments = uri.pathSegments
9798
// Handled URLs look like this: http[s]://wordpress.com/read/feeds/{feedId}/posts/{feedItemId}
98-
// with the first segment being 'read'.
99+
// or http[s]://wordpress.com/reader/feeds/{feedId}/posts/{feedItemId}
100+
// with the first segment being 'read' or 'reader'.
99101
append(stripHost(uri))
100-
if (segments.firstOrNull() == "read") {
102+
val firstSegment = segments.firstOrNull()
103+
if (firstSegment == "read" || firstSegment == "reader") {
101104
appendReadPath(segments)
102105
} else if (segments.size > DATE_URL_SEGMENTS) {
103106
append("/YYYY/MM/DD/$POST_ID")

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostPagerActivity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,11 +431,12 @@ class ReaderPostPagerActivity : BaseAppCompatActivity() {
431431
val segments = uri.pathSegments
432432

433433
// Handled URLs look like this: http[s]://wordpress.com/read/feeds/{feedId}/posts/{feedItemId}
434-
// with the first segment being 'read'.
434+
// or http[s]://wordpress.com/reader/feeds/{feedId}/posts/{feedItemId}
435+
// with the first segment being 'read' or 'reader'.
435436
if (segments != null) {
436437
// Builds stripped URI for tracking purposes
437438
val wrappedUri = UriWrapper(uri)
438-
if (segments[0] == "read") {
439+
if (segments[0] == "read" || segments[0] == "reader") {
439440
if (segments.size > 2) {
440441
blogIdentifier = segments[2]
441442

WordPress/src/test/java/org/wordpress/android/ui/deeplinks/handlers/ReaderLinkHandlerTest.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,16 @@ class ReaderLinkHandlerTest : BaseUnitTest() {
189189
assertThat(strippedUrl).isEqualTo("wordpress.com/read/blogs/feedId/posts/feedItemId")
190190
}
191191

192+
@Test
193+
fun `correctly strips reader feeds URI`() {
194+
val uri = buildUri("wordpress.com", "reader", "feeds", feedId.toString(), "posts", postId.toString())
195+
196+
val strippedUrl = readerLinkHandler.stripUrl(uri)
197+
198+
// Note: both 'reader' and 'read' paths are normalized to 'read' for analytics tracking
199+
assertThat(strippedUrl).isEqualTo("wordpress.com/read/feeds/feedId/posts/feedItemId")
200+
}
201+
192202
@Test
193203
fun `correctly strips 2xxx URI`() {
194204
val uri = buildUri("wordpress.com", "2020", "10", "1", postId.toString())

config/lint/baseline.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4918,6 +4918,28 @@
49184918
column="17"/>
49194919
</issue>
49204920

4921+
<issue
4922+
id="IntentFilterUniqueDataAttributes"
4923+
message="Consider splitting data tag into multiple tags with individual attributes to avoid confusion"
4924+
errorLine1=" &lt;data"
4925+
errorLine2=" ^">
4926+
<location
4927+
file="src/main/AndroidManifest.xml"
4928+
line="660"
4929+
column="17"/>
4930+
</issue>
4931+
4932+
<issue
4933+
id="IntentFilterUniqueDataAttributes"
4934+
message="Consider splitting data tag into multiple tags with individual attributes to avoid confusion"
4935+
errorLine1=" &lt;data"
4936+
errorLine2=" ^">
4937+
<location
4938+
file="src/main/AndroidManifest.xml"
4939+
line="666"
4940+
column="17"/>
4941+
</issue>
4942+
49214943
<issue
49224944
id="NonConstantResourceId"
49234945
message="Resource IDs will be non-final by default in Android Gradle Plugin version 8.0, avoid using them in switch case statements"

0 commit comments

Comments
 (0)