Skip to content

Commit e8c7782

Browse files
committed
feat: Add Home deep link intent
Support deep linking to the default tab of the application, which is useful for generic promotions found on web pages.
1 parent 05ce9dc commit e8c7782

7 files changed

Lines changed: 79 additions & 4 deletions

File tree

WordPress/src/jetpack/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
<data
3838
android:host="notifications"
3939
android:scheme="jetpack" />
40+
<data
41+
android:host="home"
42+
android:scheme="jetpack" />
4043
</intent-filter>
4144
</activity>
4245

WordPress/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,9 @@
400400
<data
401401
android:host="notifications"
402402
android:scheme="wordpress" />
403+
<data
404+
android:host="home"
405+
android:scheme="wordpress" />
403406
</intent-filter>
404407

405408
<intent-filter android:autoVerify="true">

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.Login
88
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenEditor
99
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenEditorForPost
1010
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenEditorForSite
11+
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenHome
1112
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenInBrowser
1213
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenInReader
1314
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenNotifications
@@ -74,6 +75,7 @@ class DeepLinkNavigator
7475
is OpenPagesForSite -> ActivityLauncher.viewPagesInNewStack(activity, navigateAction.site)
7576
OpenPages -> ActivityLauncher.viewPagesInNewStack(activity)
7677
is OpenQRCodeAuthFlow -> ActivityLauncher.startQRCodeAuthFlowInNewStack(activity, navigateAction.uri)
78+
OpenHome -> ActivityLauncher.viewMySiteInNewStack(activity)
7779
}
7880
if (navigateAction != LoginForResult) {
7981
activity.finish()
@@ -101,5 +103,6 @@ class DeepLinkNavigator
101103
data class OpenPagesForSite(val site: SiteModel) : NavigateAction()
102104
object OpenPages : NavigateAction()
103105
data class OpenQRCodeAuthFlow(val uri: String) : NavigateAction()
106+
object OpenHome : NavigateAction()
104107
}
105108
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ class DeepLinkHandlers
1515
readerLinkHandler: ReaderLinkHandler,
1616
pagesLinkHandler: PagesLinkHandler,
1717
notificationsLinkHandler: NotificationsLinkHandler,
18-
qrCodeAuthLinkHandler: QRCodeAuthLinkHandler
18+
qrCodeAuthLinkHandler: QRCodeAuthLinkHandler,
19+
homeLinkHandler: HomeLinkHandler
1920
) {
2021
private val handlers = listOf(
2122
editorLinkHandler,
@@ -24,7 +25,8 @@ class DeepLinkHandlers
2425
readerLinkHandler,
2526
pagesLinkHandler,
2627
notificationsLinkHandler,
27-
qrCodeAuthLinkHandler
28+
qrCodeAuthLinkHandler,
29+
homeLinkHandler
2830
)
2931

3032
private val _toast by lazy {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.wordpress.android.ui.deeplinks.handlers
2+
3+
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction
4+
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction.OpenHome
5+
import org.wordpress.android.util.UriWrapper
6+
import javax.inject.Inject
7+
8+
class HomeLinkHandler
9+
@Inject constructor() : DeepLinkHandler {
10+
/**
11+
* Returns true if the URI looks like `wordpress://home`
12+
*/
13+
override fun shouldHandleUrl(uri: UriWrapper): Boolean {
14+
return uri.host == HOME_PATH
15+
}
16+
17+
override fun buildNavigateAction(uri: UriWrapper): NavigateAction {
18+
return OpenHome
19+
}
20+
21+
override fun stripUrl(uri: UriWrapper): String {
22+
return buildString {
23+
append(HOME_PATH)
24+
}
25+
}
26+
27+
companion object {
28+
private const val HOME_PATH = "home"
29+
}
30+
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class DeepLinkHandlersTest : BaseUnitTest() {
2020
@Mock lateinit var pagesLinkHandler: PagesLinkHandler
2121
@Mock lateinit var notificationsLinkHandler: NotificationsLinkHandler
2222
@Mock lateinit var qrCodeAuthLinkHandler: QRCodeAuthLinkHandler
23+
@Mock lateinit var homeLinkHandler: HomeLinkHandler
2324
@Mock lateinit var uri: UriWrapper
2425
private lateinit var deepLinkHandlers: DeepLinkHandlers
2526
private lateinit var handlers: List<DeepLinkHandler>
@@ -33,7 +34,8 @@ class DeepLinkHandlersTest : BaseUnitTest() {
3334
readerLinkHandler,
3435
pagesLinkHandler,
3536
notificationsLinkHandler,
36-
qrCodeAuthLinkHandler
37+
qrCodeAuthLinkHandler,
38+
homeLinkHandler
3739
)
3840
initDeepLinkHandlers()
3941
}
@@ -46,7 +48,8 @@ class DeepLinkHandlersTest : BaseUnitTest() {
4648
readerLinkHandler,
4749
pagesLinkHandler,
4850
notificationsLinkHandler,
49-
qrCodeAuthLinkHandler
51+
qrCodeAuthLinkHandler,
52+
homeLinkHandler
5053
)
5154
}
5255

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.wordpress.android.ui.deeplinks.handlers
2+
3+
import org.assertj.core.api.Assertions.assertThat
4+
import org.junit.Before
5+
import org.junit.Test
6+
import org.junit.runner.RunWith
7+
import org.mockito.Mock
8+
import org.mockito.junit.MockitoJUnitRunner
9+
import org.wordpress.android.fluxc.model.SiteModel
10+
import org.wordpress.android.ui.deeplinks.DeepLinkNavigator.NavigateAction
11+
import org.wordpress.android.ui.deeplinks.buildUri
12+
13+
@RunWith(MockitoJUnitRunner::class)
14+
class HomeLinkHandlerTest {
15+
@Mock lateinit var site: SiteModel
16+
private lateinit var homeLinkHandler: HomeLinkHandler
17+
18+
@Before
19+
fun setUp() {
20+
homeLinkHandler = HomeLinkHandler()
21+
}
22+
23+
@Test
24+
fun `opens home screen from app link`() {
25+
val uri = buildUri(host = "home")
26+
27+
val navigateAction = homeLinkHandler.buildNavigateAction(uri)
28+
29+
assertThat(navigateAction).isEqualTo(NavigateAction.OpenHome)
30+
}
31+
}

0 commit comments

Comments
 (0)