@@ -67,20 +67,29 @@ class ReaderLinkHandler
6767 */
6868 private fun buildReadNavigateAction (uri : UriWrapper ): NavigateAction {
6969 val segments = uri.pathSegments
70- // Check for path: /blogs/{blogId}/posts/{postId} or /feeds/{feedId}/posts/{feedItemId}
71- if (segments.size >= 4 &&
72- (segments[0 ] == BLOGS_PATH || segments[0 ] == FEEDS_PATH ) &&
73- segments[2 ] == POSTS_PATH
74- ) {
75- val blogId = segments[1 ].toLongOrNull()
76- val postId = segments[3 ].toLongOrNull()
77- val isFeed = segments[0 ] == FEEDS_PATH
78- if (blogId != null && postId != null ) {
79- analyticsUtilsWrapper.trackWithBlogPostDetails(READER_VIEWPOST_INTERCEPTED , blogId, postId)
80- return ViewPostInReader (blogId, postId, isFeed, uri)
81- }
70+ if (! isValidReadPath(segments)) {
71+ return OpenReader
72+ }
73+ val blogId = segments[BLOG_ID_PATH_POSITION ].toLongOrNull()
74+ val postId = segments[POST_ID_PATH_POSITION ].toLongOrNull()
75+ val isFeed = segments[0 ] == FEEDS_PATH
76+ return if (blogId != null && postId != null ) {
77+ analyticsUtilsWrapper.trackWithBlogPostDetails(READER_VIEWPOST_INTERCEPTED , blogId, postId)
78+ ViewPostInReader (blogId, postId, isFeed, uri)
79+ } else {
80+ OpenReader
8281 }
83- return OpenReader
82+ }
83+
84+ /* *
85+ * Checks if the path segments represent a valid read path.
86+ * Valid paths: /blogs/{blogId}/posts/{postId} or /feeds/{feedId}/posts/{feedItemId}
87+ */
88+ private fun isValidReadPath (segments : List <String >): Boolean {
89+ if (segments.size < MIN_READ_PATH_SEGMENTS ) return false
90+ val isBlogsOrFeeds = segments[0 ] == BLOGS_PATH || segments[0 ] == FEEDS_PATH
91+ val hasPostsSegment = segments[POSTS_SEGMENT_POSITION ] == POSTS_PATH
92+ return isBlogsOrFeeds && hasPostsSegment
8493 }
8594
8695 /* *
@@ -91,10 +100,7 @@ class ReaderLinkHandler
91100 val segments = uri.pathSegments
92101 return buildString {
93102 append(" $APPLINK_SCHEME$DEEP_LINK_HOST_READ " )
94- if (segments.size >= 4 &&
95- (segments[0 ] == BLOGS_PATH || segments[0 ] == FEEDS_PATH ) &&
96- segments[2 ] == POSTS_PATH
97- ) {
103+ if (isValidReadPath(segments)) {
98104 append(" /${segments[0 ]} /$BLOG_ID /$POSTS_PATH /$POST_ID " )
99105 }
100106 }
@@ -191,5 +197,10 @@ class ReaderLinkHandler
191197 private const val BLOGS_FEEDS_PATH_POSITION = 1
192198 private const val POSTS_PATH_POSITION = 3
193199 private const val DATE_URL_SEGMENTS = 3
200+ // Path segment positions for read deep links: /blogs/{blogId}/posts/{postId}
201+ private const val MIN_READ_PATH_SEGMENTS = 4
202+ private const val BLOG_ID_PATH_POSITION = 1
203+ private const val POSTS_SEGMENT_POSITION = 2
204+ private const val POST_ID_PATH_POSITION = 3
194205 }
195206}
0 commit comments