For #24618 - Add WebNotificationIntentProcessor to IntentReceiverActivity

The processor from Android-Components will know how to handle the intent
specific to web notifications clicks.
pull/543/head
Mugurell 2 years ago committed by mergify[bot]
parent 5383d3ed63
commit e006538c63

@ -71,7 +71,8 @@ class IntentReceiverActivity : Activity() {
launch(intent, intentProcessorType)
}
private fun launch(intent: Intent, intentProcessorType: IntentProcessorType) {
@VisibleForTesting
internal fun launch(intent: Intent, intentProcessorType: IntentProcessorType) {
intent.setClassName(applicationContext, intentProcessorType.activityClassName)
if (!intent.hasExtra(HomeActivity.OPEN_TO_BROWSER)) {
@ -104,6 +105,7 @@ class IntentReceiverActivity : Activity() {
return components.intentProcessors.externalAppIntentProcessors +
components.intentProcessors.fennecPageShortcutIntentProcessor +
components.intentProcessors.externalDeepLinkIntentProcessor +
components.intentProcessors.webNotificationsIntentProcessor +
modeDependentProcessors +
NewTabShortcutIntentProcessor()
}

@ -98,7 +98,8 @@ class Components(private val context: Context) {
useCases.searchUseCases,
core.relationChecker,
core.customTabsStore,
core.webAppManifestStorage
core.webAppManifestStorage,
core.engine,
)
}

@ -70,7 +70,7 @@ import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.AppRequestInterceptor
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.IntentReceiverActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.components.search.SearchMigration
import org.mozilla.fenix.downloads.DownloadService
@ -243,7 +243,7 @@ class Core(
WebNotificationFeature(
context, engine, icons, R.drawable.ic_status_logo,
permissionStorage.permissionsStorage, HomeActivity::class.java
permissionStorage.permissionsStorage, IntentReceiverActivity::class.java
)
MediaSessionFeature(context, MediaSessionService::class.java, this).start()

@ -40,7 +40,8 @@ fun IntentProcessors.getType(processor: IntentProcessor?) = when {
privateCustomTabIntentProcessor == processor -> IntentProcessorType.EXTERNAL_APP
intentProcessor == processor ||
privateIntentProcessor == processor ||
fennecPageShortcutIntentProcessor == processor -> IntentProcessorType.NEW_TAB
fennecPageShortcutIntentProcessor == processor ||
webNotificationsIntentProcessor == processor -> IntentProcessorType.NEW_TAB
externalDeepLinkIntentProcessor == processor -> IntentProcessorType.EXTERNAL_DEEPLINK
else -> IntentProcessorType.OTHER
}

@ -6,6 +6,7 @@ package org.mozilla.fenix.components
import android.content.Context
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.Engine
import mozilla.components.feature.customtabs.CustomTabIntentProcessor
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
import mozilla.components.feature.intent.processing.TabIntentProcessor
@ -16,6 +17,7 @@ import mozilla.components.feature.search.SearchUseCases
import mozilla.components.feature.session.SessionUseCases
import mozilla.components.feature.tabs.CustomTabsUseCases
import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.feature.webnotifications.WebNotificationIntentProcessor
import mozilla.components.service.digitalassetlinks.RelationChecker
import org.mozilla.fenix.customtabs.FennecWebAppIntentProcessor
import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor
@ -35,7 +37,8 @@ class IntentProcessors(
private val searchUseCases: SearchUseCases,
private val relationChecker: RelationChecker,
private val customTabsStore: CustomTabsServiceStore,
private val manifestStorage: ManifestStorage
private val manifestStorage: ManifestStorage,
private val engine: Engine,
) {
/**
* Provides intent processing functionality for ACTION_VIEW and ACTION_SEND intents.
@ -79,4 +82,8 @@ class IntentProcessors(
val fennecPageShortcutIntentProcessor by lazyMonitored {
FennecBookmarkShortcutsIntentProcessor(tabsUseCases.addTab)
}
val webNotificationsIntentProcessor by lazyMonitored {
WebNotificationIntentProcessor(engine)
}
}

@ -8,11 +8,14 @@ import android.app.Activity
import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
import android.net.Uri
import io.mockk.Runs
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.spyk
import io.mockk.unmockkStatic
import io.mockk.verify
import kotlinx.coroutines.test.runBlockingTest
@ -27,6 +30,7 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.components.IntentProcessorType
import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.components.IntentProcessors
import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity
@ -62,6 +66,7 @@ class IntentReceiverActivityTest {
every { intentProcessors.externalAppIntentProcessors } returns emptyList()
every { intentProcessors.fennecPageShortcutIntentProcessor } returns mockIntentProcessor()
every { intentProcessors.externalDeepLinkIntentProcessor } returns mockIntentProcessor()
every { intentProcessors.webNotificationsIntentProcessor } returns mockIntentProcessor()
coEvery { intentProcessors.intentProcessor.process(any()) } returns true
}
@ -246,6 +251,19 @@ class IntentReceiverActivityTest {
assertTrue(Events.openedLink.testHasValue())
}
@Test
fun `process web notifications click intent`() {
val intent = Intent()
every { intentProcessors.webNotificationsIntentProcessor.process(intent) } returns true
val activity = spyk(Robolectric.buildActivity(IntentReceiverActivity::class.java, intent).get())
attachMocks(activity)
every { activity.launch(any(), any()) } just Runs
activity.processIntent(intent)
verify { intentProcessors.webNotificationsIntentProcessor.process(intent) }
verify { activity.launch(intent, IntentProcessorType.NEW_TAB) }
}
private fun attachMocks(activity: Activity) {
every { activity.settings() } returns settings
every { activity.components.analytics } returns mockk(relaxed = true)

@ -66,6 +66,15 @@ class IntentProcessorTypeTest {
assertEquals(HomeActivity::class.java.name, type.activityClassName)
}
@Test
fun `get type for web notifications intent processor`() {
val processor = testContext.components.intentProcessors.webNotificationsIntentProcessor
val type = testContext.components.intentProcessors.getType(processor)
assertEquals(IntentProcessorType.NEW_TAB, type)
assertEquals(HomeActivity::class.java.name, type.activityClassName)
}
@Test
fun `get type for custom tab intent processor`() {
val processor = testContext.components.intentProcessors.customTabIntentProcessor

Loading…
Cancel
Save